Forum
Please
Log In
to post a new message or reply to an existing one. If you are not registered, please
register.
NOTE: Some forums may be read-only if you are not currently subscribed to
our technical support services.
Subject |
Author |
Date |
|
Offer Har
|
Apr 8, 2008 - 9:25 AM
|
Dear Support, I have a combo grid cell with a list of items that are changing all the time. I would like to update the drop list only when the user presses the drop list button, so I won’t need to keep on tracking the changes (complexity and performance issues). Is it possible to get to change the list’s items before the list is being displayed? Thanks, Ron.
|
|
Technical Support
|
Apr 8, 2008 - 12:53 PM
|
You can use a combo box grid cell or even a simple string cell based class. You should implement the CExtGridCell::OnPopupListBoxInitContent() virtual method.
|
|
Offer Har
|
Apr 8, 2008 - 2:36 PM
|
Dear Support, I think that a better solution (which I use now) is to derive from CExtGridCellComboBox and implement OnPopupListBoxMeasureTrackSize like this:
CSize CGridCellMyInstantCombo::OnPopupListBoxMeasureTrackSize(
CExtGridCell::TrackCellStateInfo_t & _tcsi,
CExtPopupListBoxMenuWnd * pPopup)
{
// Remove all items from the combo:
ResetContent();
// Add the itmes needed to be displayed in the drop-list
AddString("Item 1", 1);
AddString("Item 2", 2);
// Call the base to resize, and later will also show all items added right now:
return CExtGridCellComboBox::OnPopupListBoxMeasureTrackSize(_tcsi, pPopup);
} The reason is that by doing this, the combo-box cell will do the resizing of the drop list, and the outcome looks exactly like a normal combo-box cell, including all the even firing etc. FYI.
|
|
Technical Support
|
Apr 10, 2008 - 10:47 AM
|
Your code is OK because both OnPopupListBoxInitContent() and OnPopupListBoxMeasureTrackSize() virtual methods are invoked only one time during initialization of the popup list box menu window displayed by grid cell’s built-in drop-down button.
|
|
Offer Har
|
Apr 10, 2008 - 11:06 AM
|
|
|
Offer Har
|
Apr 8, 2008 - 1:06 PM
|
Is this function called each time the drop list button is pressed?
|
|
Technical Support
|
Apr 9, 2008 - 7:48 AM
|
|
|
Offer Har
|
Apr 8, 2008 - 6:47 AM
|
Hi, I reported a bug in this function a while ago, was completly ignored, which is not something new... However, I did fix it, and would like to share it with the community, so that if somebody have this problem it might be of help. This is the bug description: If you try to paint a button inside a grid cell using direct call to PaintPushButton and using the CExtPaintManagerOffice2007_R2_Obsidian , with a specific color for the text, to color is inverted to white. The reason is because this theme is dark, so the library inverts the default text color to white, so that it will be readable. However, it does so even if you give it a color you explicitly want. The solution is to not invert the text color if a specific color is passed in. These are the last lines of the function, and my addition is highlighted:
if( bInvertNormalTextColor && _ppbd.m_clrForceTextNormal == COLORREF(-1L))
_ppbd.m_clrForceTextNormal = RGB(255,255,255);
if( _ppbd.m_clrForceTextDisabled == COLORREF(-1L) )
_ppbd.m_clrForceTextDisabled = RGB(141,141,141);
CExtPaintManagerOffice2007_Impl::PaintPushButton( dc, _ppbd );
}
|
|
Technical Support
|
Apr 9, 2008 - 12:43 PM
|
Please open the CExtPaintManagerOffice2007_R2_Obsidian::PaintPushButton() method and replace the following lines if( bInvertNormalTextColor )
_ppbd.m_clrForceTextNormal = RGB(255,255,255); with these if( bInvertNormalTextColor
&& _ppbd.m_clrForceTextNormal == COLORREF(-1L)
)
_ppbd.m_clrForceTextNormal = RGB(255,255,255); The problem should be gone.
|
|
Offer Har
|
Apr 9, 2008 - 12:46 PM
|
This is exactly what I wrote...
|
|
Nigel Channon
|
Apr 8, 2008 - 2:39 AM
|
What message CExtGroupBox use for notify parent about mouse click or double-click?
|
|
Technical Support
|
Apr 10, 2008 - 7:19 AM
|
Why do you need to handle mouse clicks over a group box? Actually the group box is a special type of controls which is transparent for messages. Their window procedure returns HTTRANSPARENT when receives a WM_NCHITTEST message so any other messages are not processed by the group box. You can try to create your own CExtGroupBox -derived class and in the overridden WindowProc method manually handle the WM_NCHITTEST and WM_GETDLGCODE messages in order to allow message handling.
|
|
tera t
|
Apr 8, 2008 - 2:01 AM
|
|
|
Technical Support
|
Apr 10, 2008 - 7:21 AM
|
You can override the OnSwHasScrollBar() virtual method in your CExtScrollContainerWnd class. The method returns true if the scroll bar is visible and enabled.
|
|
tera t
|
Apr 9, 2008 - 8:14 PM
|
Hello. If it seems to be difficult.
The answer will be good later for the time being. Thanks
|
|
Ulrich Heinicke
|
Apr 7, 2008 - 2:15 PM
|
Hi, i want to use the SkinRadioButton from the example ProfUIS_Control in my project. I copy the code for the class CSkinRadioButton from the file PageButtons.h into my source and add the bitmaps radiobox_xp_blue into the resource file. But every time i change the ID from 0 to IDB_RADIOBOX_IMAGES_XP_BLUE the program crash. Do you have an idea what happens? Thanks Ulrich
|
|
Ulrich Heinicke
|
Apr 11, 2008 - 2:26 PM
|
Hi, i solve the problem. I used the code into an extension dll, but the undocumented class CExtImageList call the function AfxGetInstanceHandle which want to load the bitmap from the main program. The solution is to make a special header and resource file for the bitmaps and include the special header file into the dll source. Then the skin radio button will be display. It would be very nice to have a documention from the CExtImageList and all the other classes from the ExtPaintManager file. Ulrich
|
|
Technical Support
|
Apr 10, 2008 - 11:45 AM
|
It is hard to say what has happened without seeing the call stack. Would you send it to us? Of course, if you send us a test project that would certainly help us quickly find out what’s wrong.
|
|
tera t
|
Apr 6, 2008 - 11:10 PM
|
Hello I do not want to display the thing of this point.
Please teach a method. Thanks,
|
|
Technical Support
|
Apr 7, 2008 - 9:14 AM
|
You can remove the [-][o][x] buttons by overriding the following method of the CExtRibbonBar class virtual bool IsDisplayMdiDocumentButtons() const; Your method should simply return false .
|
|
tera t
|
Apr 6, 2008 - 11:00 PM
|
Hello. I click scroll bar of ListBox.
(the point of the light blue arrow) Then the screen scrolls.
The selection line is drawn toward the bottom from the upper part.
In this case,
The selection line should be drawn toward the upper part from the bottom.
There is a phenomenon similar even as for the custom screen of RibbonBar.
Will not there be any good method?
|
|
Technical Support
|
Apr 7, 2008 - 9:32 AM
|
This behavior is provided by default by the list box common control. We have implemented skinned scroll bars for common controls in v.2.83 (coming soon) and this problem will be gone with Prof-UIS scroll bars embedded into the list box.
|
|
tera t
|
Apr 6, 2008 - 10:17 PM
|
Hello. When I clicked CellCombo and CellString.
If it is specific Cell, I do not want to react.
When there is a Virtual function in this point.
Convenience should be good.
Please examine.
bool CExtGridWnd::OnGbwAnalyzeCellMouseClickEvent(
UINT nChar, // VK_LBUTTON, VK_RBUTTON or VK_MBUTTON only
UINT nRepCnt, // 0 - button up, 1 - single click, 2 - double click, 3 - post single click & begin editing
UINT nFlags, // mouse event flags
CPoint point // mouse pointer in client coordinates
)
{
ASSERT_VALID( this );
ASSERT( 0 <= nRepCnt && nRepCnt <= 3 );
:
:
:
: CExtGridCell * pCell =
GridCellGet(
htInfo.m_nColNo,
htInfo.m_nRowNo,
nColType,
nRowType
); *************************************************************
if ( OnEditItemStatus( pCell , htInfo ) == false ){
return false;
}
************************************************************* :
:
:
:
|
|
Technical Support
|
Apr 10, 2008 - 7:28 AM
|
What is the purpose of this method? If you want to prevent the cell’s in-place editor from being activated, there is another way. You can achieve this either with the __EGCS_NO_INPLACE_CONTROL style or with the __EGCS_READ_ONLY style. If you set __EGCS_READ_ONLY , the user will be able to activate the in-place editor, but it will be read-only. If you set __EGCS_NO_INPLACE_CONTROL , the in-place will not be activated at all.
|
|
Offer Har
|
Apr 4, 2008 - 6:03 AM
|
I have a lot of cells, and some of them may or may not have buttons, some of these buttons may or may not be enabled. I want to do all this in the grid level, because the type of the cells is not important, and I don’t want to override all cell types, more then this, I don’t know what the cell type is going to be - this is a generic mechanism. I saw OnQueryButtonInfo for this, but this is a function at the cell level. I think there should be a style like __EGCS_BUTTON_ELLIPSIS_DISABLED which one could set to a cell, and will disable the ellipsis button. Thanks.
|
|
Technical Support
|
Apr 8, 2008 - 12:58 PM
|
Why don’t you create a template with an overridden OnQueryButtonInfo method? Such a template can be applied to any cell class. template < class _BC >
class TEllipsisButtonGridCell : public _BC
{
public:
TEllipsisButtonGridCell(
CExtGridDataProvider * pDataProvider = NULL
)
: _BC( pDataProvider )
{
ASSERT_VALID( this );
}
TEllipsisButtonGridCell( const CExtGridCell & other )
{
}
virtual bool OnQueryButtonInfo(
INT nButtonType,
bool * p_bEnabled,
bool * p_bPressed = NULL,
bool * p_bStayPressed = NULL,
UINT * p_nTimerElapseValue = NULL
) const
{
...
...
...
}
virtual CExtGridCell * Clone(
IMalloc * pMalloc = NULL
) const
{
ASSERT_VALID( this );
if( pMalloc == NULL )
{
try
{
CExtGridCell * pOther =
new TEllipsisButtonGridCell < _BC >
( ( const_cast
< TEllipsisButtonGridCell < _BC > * >
( this )
)
-> DataProviderGet()
);
ASSERT( pOther != NULL );
if( pOther != NULL )
{
ASSERT_VALID( pOther );
pOther->Assign( *this );
ASSERT( pOther->DataProviderGet() == DataProviderGet() );
} // if( pOther != NULL )
return pOther;
} // try
catch( CException * pException )
{
ASSERT( FALSE );
pException->Delete();
} // catch( CException * pException )
catch( ... )
{
ASSERT( FALSE );
} // catch( ... )
return NULL;
} // if( pMalloc == NULL )
CExtGridCell * pOther =
new (pMalloc, false) TEllipsisButtonGridCell < _BC >
( ( const_cast
< TEllipsisButtonGridCell < _BC > * >
( this )
)
-> DataProviderGet()
);
ASSERT( pOther != NULL );
if( pOther != NULL )
{
ASSERT_VALID( pOther );
pOther->Assign( *this );
ASSERT( pOther->DataProviderGet() == DataProviderGet() );
} // if( pOther != NULL )
return pOther;
}
}; // class TEllipsisButtonGridCell Then you will be able to decorate any class: TEllipsisButtonGridCell < CExtGridCell > * pCell
|
|
Offer Har
|
Apr 8, 2008 - 1:03 PM
|
Dear Support, Why can’t you add this to the base cell class? I think that if you add the functionality of buttons by using a style to all cells, you should add the enable/disable style in the same place fro that button. I think it will benefit all your users. Using too much template decorations for such simple tasks makes to code even more complex. Ron.
|
|
Technical Support
|
Apr 11, 2008 - 7:10 AM
|
We added the following cell extended styles: // disable ellipsis button
#define __EGCS_EX_BUTTON_ELLIPSIS_DISABLED 0x00010000L
// disable dropdown button
#define __EGCS_EX_BUTTON_DROPDOWN_DISABLED 0x00020000L
// disable up button
#define __EGCS_EX_BUTTON_UPDOWN_UP_DISABLED 0x00040000L
// disable down button
#define __EGCS_EX_BUTTON_UPDOWN_DOWN_DISABLED 0x00080000L You can apply such a style in the following way: pCell->ModifyStyleEx( __EGCS_EX_BUTTON_UPDOWN_UP_DISABLED );
|
|
Offer Har
|
Apr 11, 2008 - 7:16 AM
|
Thank you very much When is 2.83 estimated to be released?
|
|
Technical Support
|
Apr 11, 2008 - 9:53 AM
|
We still have not passed cannot path the pre-release testing/debugging stage, which is the reason for this delay.
|
|
Offer Har
|
Apr 4, 2008 - 5:50 AM
|
I have a cell of type CExtGridCellDropListComboBox with ellipsis I set using ModifyStyle(__EGCS_BUTTON_ELLIPSIS) I override OnGridCellButtonPressed , and wait for the ellipsis to be pressed. NO mater where I press in the cell, nButtonType is always __EBTT_DROPDOWN , and never __EBTT_ELLIPSIS . It seems that this cell type eats all its areas and makes it into one big drop down, but this should not be including the ellipsis button. If I change the cell type to a CExtGridCellComboBox, then everything is good. Ron.
|
|
Technical Support
|
Apr 8, 2008 - 1:06 PM
|
Thank you for reporting the problem. We have just fixed it. Please update the following method: bool CExtGridCellDropListComboBox::OnClick(
CExtGridWnd & wndGrid,
const CExtGridHitTestInfo & htInfo,
UINT nChar, // VK_LBUTTON, VK_RBUTTON or VK_MBUTTON only
UINT nRepCnt, // 0 - button up, 1 - single click, 2 - double click, 3 - post single click & begin editing
UINT nFlags // mouse event flags
)
{
ASSERT_VALID( this );
ASSERT_VALID( (&wndGrid) );
ASSERT( ! htInfo.IsHoverEmpty() );
ASSERT( htInfo.IsValidRect() );
ASSERT( nChar == VK_LBUTTON || nChar == VK_RBUTTON || nChar == VK_MBUTTON );
ASSERT( 0 <= nRepCnt && nRepCnt <= 3 );
bool bRetVal =
CExtGridCellString::OnClick(
wndGrid,
htInfo,
nChar,
nRepCnt,
nFlags
);
DWORD dwCellStyle = GetStyle();
if( (dwCellStyle&__EGCS_READ_ONLY) != 0 )
return bRetVal;
if( nChar == VK_LBUTTON && (nRepCnt == 1 || nRepCnt == 2) )
{
// if single left button click
if( (htInfo.m_dwAreaFlags&__EGBWA_CELL_BUTTON) == 0
&& (htInfo.m_dwAreaFlags&__EGBWA_CELL_CHECKBOX) == 0
&& (nFlags&(MK_SHIFT|MK_CONTROL)) == 0
)
{
CExtGridHitTestInfo htInfoTrack( htInfo );
htInfoTrack.m_dwAreaFlags |= __EGBWA_CELL_BUTTON;
htInfoTrack.m_nButtonType = (int)__EBTT_DROPDOWN;
return
wndGrid.OnGridTrackCellButton(
this,
htInfoTrack
);
}
}
return bRetVal;
}
|
|
Scott Moore
|
Apr 3, 2008 - 12:18 PM
|
I generated a basic SDI Prof UI wizard application, using 3 control bars (empty, dialog and edit). The view class was derived from CHtmlView. The initial theme was CExtPaintManagerXP. Everything works fine in that configuration. But if I change to any CExtPaintManagerOffice2007* theme, the application asserts on exit with the following callstack. I’ve tried deleting all saved registry settings, but that didn’t help. Is there a fix for this? > mfc80ud.dll!CObject::IsKindOf(const CRuntimeClass * pClass=0x782e6760) Line 45 + 0x8 bytes C++
mfc80ud.dll!CFrameWnd::GetActiveView() Line 1180 + 0x20 bytes C++
ProfUIS282ud.dll!CExtControlBar::FindPrintPreviewMode(CFrameWnd * pFrame=0x02039c70) Line 20837 + 0x8 bytes C++
ProfUIS282ud.dll!CExtControlBar::IsOleIpObjActive(CFrameWnd * pFrameSearch=0x02039c70) Line 11516 + 0x9 bytes C++
ProfUIS282ud.dll!CExtNcFrameImpl::NcFrameImpl_IsSupported() Line 1386 + 0xf bytes C++
NwInvestigatorD.exe!CExtNCW<CFrameWnd>::WindowProc(unsigned int message=130, unsigned int wParam=0, long lParam=0) Line 401 + 0x19 bytes C++
mfc80ud.dll!AfxCallWndProc(CWnd * pWnd=0x02039c70, HWND__ * hWnd=0x001b1208, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 240 + 0x1c bytes C++
mfc80ud.dll!AfxWndProc(HWND__ * hWnd=0x001b1208, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 389 C++
mfc80ud.dll!AfxWndProcBase(HWND__ * hWnd=0x001b1208, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 411 + 0x15 bytes C++
user32.dll!7e418734()
[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]
user32.dll!7e41d05b()
user32.dll!7e41b4c0()
user32.dll!7e41dabd()
ntdll.dll!7c90eae3()
user32.dll!7e41daf6()
mfc80ud.dll!CWnd::DestroyWindow() Line 993 + 0xd bytes C++
NwInvestigatorD.exe!CMainFrame::DestroyWindow() Line 368 C++
mfc80ud.dll!CDocument::OnCloseDocument() Line 749 C++
mfc80ud.dll!CDocTemplate::CloseAllDocuments(int __formal=0) Line 355 C++
mfc80ud.dll!CDocManager::CloseAllDocuments(int bEndSession=0) Line 588 C++
mfc80ud.dll!CWinApp::CloseAllDocuments(int bEndSession=0) Line 90 C++
mfc80ud.dll!CFrameWnd::OnClose() Line 802 C++
mfc80ud.dll!CWnd::OnWndMsg(unsigned int message=16, unsigned int wParam=0, long lParam=0, long * pResult=0x0012e3b4) Line 2028 C++
mfc80ud.dll!CWnd::WindowProc(unsigned int message=16, unsigned int wParam=0, long lParam=0) Line 1741 + 0x20 bytes C++
NwInvestigatorD.exe!CExtNCW<CFrameWnd>::WindowProc(unsigned int message=16, unsigned int wParam=0, long lParam=0) Line 407 + 0x14 bytes C++
mfc80ud.dll!AfxCallWndProc(CWnd * pWnd=0x02039c70, HWND__ * hWnd=0x001b1208, unsigned int nMsg=16, unsigned int wParam=0, long lParam=0) Line 240 + 0x1c bytes C++
mfc80ud.dll!AfxWndProc(HWND__ * hWnd=0x001b1208, unsigned int nMsg=16, unsigned int wParam=0, long lParam=0) Line 389 C++
mfc80ud.dll!AfxWndProcBase(HWND__ * hWnd=0x001b1208, unsigned int nMsg=16, unsigned int wParam=0, long lParam=0) Line 411 + 0x15 bytes C++
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e41c63f()
user32.dll!7e41c665()
ProfUIS282ud.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=16, unsigned int & wParam=0, long & lParam=0) Line 236 + 0x20 bytes C++
ProfUIS282ud.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x001b1208, unsigned int nMessage=16, unsigned int wParam=0, long lParam=0) Line 300 + 0x14 bytes C++
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e41b4c0()
user32.dll!7e41b50c()
ntdll.dll!7c90eae3()
user32.dll!7e4194be()
user32.dll!7e41b42d()
user32.dll!7e4184fc()
user32.dll!7e41ba0e()
user32.dll!7e4184fc()
user32.dll!7e4185a4()
user32.dll!7e41b3f9()
uxtheme.dll!5ad73c20()
uxtheme.dll!5ad8e300()
uxtheme.dll!5ad71ac7()
uxtheme.dll!5ad71b3d()
uxtheme.dll!5ad8e2d5()
user32.dll!7e41bb15()
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e41c63f()
user32.dll!7e41c665()
mfc80ud.dll!CWnd::DefWindowProcW(unsigned int nMsg=274, unsigned int wParam=61536, long lParam=0) Line 1029 + 0x20 bytes C++
mfc80ud.dll!CWnd::Default() Line 274 C++
mfc80ud.dll!CWnd::OnSysCommand(unsigned int __formal=61536, unsigned int __formal=61536) Line 460 + 0xf bytes C++
mfc80ud.dll!CFrameWnd::OnSysCommand(unsigned int nID=61536, long lParam=0) Line 1046 C++
mfc80ud.dll!CWnd::OnWndMsg(unsigned int message=274, unsigned int wParam=61536, long lParam=0, long * pResult=0x0012ec7c) Line 2056 C++
mfc80ud.dll!CWnd::WindowProc(unsigned int message=274, unsigned int wParam=61536, long lParam=0) Line 1741 + 0x20 bytes C++
NwInvestigatorD.exe!CExtNCW<CFrameWnd>::WindowProc(unsigned int message=274, unsigned int wParam=61536, long lParam=0) Line 407 + 0x14 bytes C++
mfc80ud.dll!AfxCallWndProc(CWnd * pWnd=0x02039c70, HWND__ * hWnd=0x001b1208, unsigned int nMsg=274, unsigned int wParam=61536, long lParam=0) Line 240 + 0x1c bytes C++
mfc80ud.dll!AfxWndProc(HWND__ * hWnd=0x001b1208, unsigned int nMsg=274, unsigned int wParam=61536, long lParam=0) Line 389 C++
mfc80ud.dll!AfxWndProcBase(HWND__ * hWnd=0x001b1208, unsigned int nMsg=274, unsigned int wParam=61536, long lParam=0) Line 411 + 0x15 bytes C++
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e41c63f()
user32.dll!7e41c665()
ProfUIS282ud.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=274, unsigned int & wParam=61536, long & lParam=0) Line 236 + 0x20 bytes C++
ProfUIS282ud.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x001b1208, unsigned int nMessage=274, unsigned int wParam=61536, long lParam=0) Line 300 + 0x14 bytes C++
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e41b89b()
user32.dll!7e41b903()
mfc80ud.dll!CWnd::SendMessageW(unsigned int message=274, unsigned int wParam=61536, long lParam=0) Line 42 + 0x42 bytes C++
ProfUIS282ud.dll!CExtNcFrameImpl::NcFrameImpl_PreWindowProc(long & lResult=0, unsigned int message=514, unsigned int wParam=0, long lParam=-850788) Line 2928 C++
NwInvestigatorD.exe!CExtNCW<CFrameWnd>::WindowProc(unsigned int message=514, unsigned int wParam=0, long lParam=-850788) Line 405 + 0x29 bytes C++
mfc80ud.dll!AfxCallWndProc(CWnd * pWnd=0x02039c70, HWND__ * hWnd=0x001b1208, unsigned int nMsg=514, unsigned int wParam=0, long lParam=-850788) Line 240 + 0x1c bytes C++
mfc80ud.dll!AfxWndProc(HWND__ * hWnd=0x001b1208, unsigned int nMsg=514, unsigned int wParam=0, long lParam=-850788) Line 389 C++
mfc80ud.dll!AfxWndProcBase(HWND__ * hWnd=0x001b1208, unsigned int nMsg=514, unsigned int wParam=0, long lParam=-850788) Line 411 + 0x15 bytes C++
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e41c63f()
user32.dll!7e41c665()
ProfUIS282ud.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=514, unsigned int & wParam=0, long & lParam=-850788) Line 236 + 0x20 bytes C++
ProfUIS282ud.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x001b1208, unsigned int nMessage=514, unsigned int wParam=0, long lParam=-850788) Line 300 + 0x14 bytes C++
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e4189cd()
user32.dll!7e418a10()
mfc80ud.dll!AfxInternalPumpMessage() Line 183 C++
mfc80ud.dll!CWinThread::PumpMessage() Line 896 C++
mfc80ud.dll!CWinThread::Run() Line 625 + 0xd bytes C++
mfc80ud.dll!CWinApp::Run() Line 894 C++
mfc80ud.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x00020806, int nCmdShow=1) Line 47 + 0xd bytes C++
NwInvestigatorD.exe!wWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x00020806, int nCmdShow=1) Line 33 C++
NwInvestigatorD.exe!__tmainCRTStartup() Line 589 + 0x35 bytes C
NwInvestigatorD.exe!wWinMainCRTStartup() Line 414 C
kernel32.dll!7c816fd7()
ProfUIS282ud.dll!CExtGridCellUpDownColorPart::OnPopupListBoxItemDraw(CExtPopupInplaceListBox & wndListBox={...}, CExtGridCell::TrackCellStateInfo_t & _tcsi={...}, tagDRAWITEMSTRUCT * pDIS=0x00650076) Line 40866 + 0x2d bytes C++
ProfUIS282ud.dll!CExtGridCellUpDownColorPart::OnPopupListBoxItemDraw(CExtPopupInplaceListBox & wndListBox={...}, CExtGridCell::TrackCellStateInfo_t & _tcsi={...}, tagDRAWITEMSTRUCT * pDIS=0x0061004d) Line 40866 + 0x2d bytes C++
ProfUIS282ud.dll!CExtGridCellUpDownColorPart::OnPopupListBoxItemDraw(CExtPopupInplaceListBox & wndListBox={...}, CExtGridCell::TrackCellStateInfo_t & _tcsi={...}, tagDRAWITEMSTRUCT * pDIS=0xe8ffffff) Line 40866 + 0x2d bytes C++
|
|
Technical Support
|
Apr 9, 2008 - 12:39 PM
|
If you have view windows inside control bars and they are attached to some frame windows, then you may need to reset the active view window by invoking SetActiveView( NULL ) at the beginning of the CMainFrame::DestroyWindow() method.
|
|
Chun Pong Lau
|
Apr 2, 2008 - 10:36 PM
|
In my ribbonbar sdi ( version 2.82) application when we right click on ribbon bar one context menu appear having option 1) customize quick access toolbar 2) reset quick tool bar 3) place quick access toolbar below the ribbon 4) minize the ribbon bar
How can I disable this context menu completely?
Thanks a lot.
|
|
Chun Pong Lau
|
Apr 3, 2008 - 8:42 PM
|
|
|
Technical Support
|
Apr 3, 2008 - 11:43 AM
|
There are two virtual methods in the CExtRibbonBar class for tracking context menus over the are taken up by controls bares and over ribbon buttons: virtual bool OnRibbonTrackButtonContextMenu(
CExtBarButton * pTBB,
UINT nFlags,
CPoint point
);
virtual bool OnRibbonTrackBarContextMenu(
UINT nFlags,
CPoint point
); You should override these methods and simply return true without invoking the parent class method.
|
|
Chun Pong Lau
|
Apr 3, 2008 - 8:42 PM
|
|
|
Offer Har
|
Apr 2, 2008 - 5:55 PM
|
Dear Support, I would like to hide a cell, something like a normal control ShowWindow(..) function with SW_SHOW and SW_HIDE . I don’t want to destroy the cell by calling GridCellSet(nCol,nRow,NULL) because then I lose the data in the cell, and have to do a lot of work fro maintaining the state. Any ideas? Thanks, Ron.
|
|
Technical Support
|
Apr 15, 2008 - 5:08 AM
|
We added support for invisible cells. You can turn on this feature by applying a new extended cell style __EGCS_EX_INVISIBLE to a cell whose content you would like to hide. Please request the updated code by email.
|
|
Technical Support
|
Apr 8, 2008 - 12:56 PM
|
In this case you can override the CExtGridCell::OnPaintForeground() virtual method. Just don’t call the parent class’s method when the cell should be empty.
|
|
Offer Har
|
Apr 8, 2008 - 12:59 PM
|
This is a problem. I have many type of cells, and I want a generic mechanism to show hide them - I cannot create derived to all cells types. Maybe tomorrow I will have a new cell type? This should be built in into the base cell class, and accompanied by a style setting or ShowCell/HideCell function. This is the same conceptual problem of disabling buttons in cells that I have reported before.
|
|
Technical Support
|
Apr 10, 2008 - 10:46 AM
|
You can override GridCellGet() in a CExtGridWnd -derived class. Your method should invoke the parent class method to extract a CExtGridCell pointer from the grid’s data provider. Then your method should decide somehow whether to return this pointer or return NULL instead of what is assumed as a hidden grid cell. You can use some extended user defined grid cell style for marking grid cells of any type as hidden and using it in your GridCellGet() method.
|
|
Offer Har
|
Apr 10, 2008 - 10:54 AM
|
This cannot work. I need the CExtGridCell for showing the cell back... This function is used for accessing the cell, not only for painting it. I think there should be a style called __EGCS_HIDDEN or something like this, that when set, the cell should not be painted or accessible. Please consider adding this functionality - it seems to be a very powerful feature. What do you think?
|
|
Technical Support
|
Apr 5, 2008 - 9:51 AM
|
All the grid cells support the undefined style. This style is widely used in the property grid control. Any grid cell with this style looks as it is empty. The property grid control applies this style to the grid cells representing combined property values which have different initial values. Just apply the __EGCS_EX_UNDEFINED_ROLE extended cell style and see if it what you are looking for. When you need to show cell’s content, just remove this style.
|
|
Offer Har
|
Apr 5, 2008 - 10:11 AM
|
Dear Support, As far as I know, the __EGCS_EX_UNDEFINED_ROLE does not clear the cell completely, but put it into in undefined state - for example in a color cell it will draw a ’?’ in the cell’s color square. I want the cell to be completely empty, and completly not-accessible, like a hidden control.
|
|
RICHARD ALTON
|
Apr 2, 2008 - 10:19 AM
|
We have just noticed a very strange issue regarding dialogs containing a CExtPropertyGridCtrl. It only seems to be an issue when using a machine with 2 different sized monitors, in this case 1x19" and 1x17". My machine has 2x19" and it works. Steps to recreate are: 1) Run Prof-UIS app on 2nd (17") monitor 2) Bring up a modal dialog in the app that contains a property grid 3) Run another app in the 1st monitor and click so it has focus 4) Click on any part of the scroll bar on the property grid 5) The dialog disappears! It seems to be placed underneath the main app (z-order). Clicking on the Prof-UIS app title bar shows it on top again. This also occurs when you have a property grid on a dialog within a dock bar. If the dockbar is docked then this does not occur, however if the dockbar is floating, then the bar is hidden. Any ideas? I am actually using a pre-release version 2.83 in case this has been fixed. I must also point out it only occurs with the property grid. Clicking on scrollbars on other controls does not cause this to happen. Thanks
|
|
Technical Support
|
Apr 16, 2008 - 4:54 AM
|
We failed to reproduce this problem. If you are using some notebook and touchpad, this problem may be related to particular drivers of a particular manufacturer. Could you let us know more details about that?
|
|
Pierre MEDART
|
Apr 2, 2008 - 9:43 AM
|
We host views in a TabControl that is itself in an object derived from CExtControlBar. CExtControlBar is floating we get an assert (in dbg) if we try to activate the view
in WinFrm.cpp
void
{ CFrameWnd::SetActiveView(CView* pViewNew, BOOL bNotify) line 1184 to 1213 (MFC8.0)
#ifdef
{
ASSERT(IsChild(pViewNew)); <------ we get the assert here
ASSERT_KINDOF(CView, pViewNew);
} _DEBUGif (pViewNew != NULL)
#endif //_DEBUG
CView* pViewOld = m_pViewActive;
if (pViewNew == pViewOld)return; // do not re-activate if SetActiveView called more than once
m_pViewActive = NULL; // no active for the following processing
// deactivate the old one
pViewOld->OnActivateView(FALSE, pViewNew, pViewOld);
if (pViewOld != NULL)// if the OnActivateView moves the active window,
// that will veto this change
if (m_pViewActive != NULL)return; // already set
m_pViewActive = pViewNew;
// activate
pViewNew->OnActivateView(TRUE, pViewNew, pViewOld);
}
Is there a way to create a CExtControlBar that can not be floating ? if (pViewNew != NULL && bNotify)
|
|
Technical Support
|
Apr 2, 2008 - 1:02 PM
|
This assertion is a "feature" of the CFrameWnd class. You can implement a similar SetActiveView() method in your frame class but without unwanted assertions.
You can override the CExtControlBar::FloatControlBar() and CExtControlBar::ToggleDocking() virtual methods in your CExtControlBar -derived class and make the bodies of these methods empty. I.e. do not invoke the parent class methods. The user will not be able to switch such resizable control bar into the floating state. This approach is acceptable if your control bars are based on the Visual Studio .NET like drag-n-drop based re-docking algorithm for resizable bars. This way is not good if you are using Visual Studio 2005/2008 like algorithm with docking markers also known as guide diamonds.
|
|
Adam Keadey
|
Apr 2, 2008 - 4:39 AM
|
The report grid will allow you to remove all the columns from the grid. With the columns removed there is no way to add any columns back since the right click on the columns is how you get the contect menu for add, revmove, ... First of all this seems like an oversight in Prof-uis and should be addressed if not already. Second is there a way to stop the last column from being hidden or a way to stop s specific column from being hidden. I have tried to disable drop/drag and when you use the group by box it you can no longer drop/drag into and out of this box so this really is not an option.
|
|
Technical Support
|
Apr 3, 2008 - 12:43 PM
|
The following method of the CExtReportGridWnd class is invoked to activate or deactivate a column: virtual bool ReportColumnActivate( // default parameters will activate/deactivate all the columns
__EXT_MFC_SAFE_LPCTSTR strColumnName = NULL,
__EXT_MFC_SAFE_LPCTSTR strCategoryName = NULL,
bool bActivate = true,
LONG nColNo = -1L, // -1L - activate last
bool bRedraw = true
); You can override it in your CExtReportGridWnd -derived class and check whether the deactivated column is the last active column. If it’s the last, then your method should simply return false . If not, then it should invoke the parent class method. The CExtReportGridWnd::ReportColumnGetCount() method returns the number of active and/or inactive columns.
|
|
Adam Keadey
|
Apr 2, 2008 - 4:33 AM
|
I have gotten no response on previous posting: Is there a way to always check the docking window while floating to make sure it on the screen. With two monitors displaying. I move the docking window to the secondary monitor. Close the application to save the profile state. Turn off the secondary monitor in display settings ie changin the overall screen resolution. Open the application and docking window is now on the other monitor that is no longer active. The real problem here occurs with people with laptops that have multiple monitors, which is a norm for our products. If they have a docking window floating on the second monitor, they shutdown, undock, bootup, and start application. The docking windows are positioned off the screen, ie on the second monitor that is not there. Question: 1. Do you have a way to ensure that the restored position of a control bar is on the screen? 2. Is there a simple override that you would suggest where I could check if the floating control bar is off the screen, then reposition it?
|
|
Malcolm D
|
Apr 1, 2008 - 6:44 PM
|
Is the customised menu / toolbar info flexible enough to cope with changes in the application and the version of ProfUIS library?
E.G. will using a new version of teh profUIS library cause problems that will mean the previously stored customisation will not be able to be used.
E.G. 2 : If menus or toolbars are added ( by use the developers) to the application, will the previously stored archive be able to be read. I understand loading the customisation might mean they might not get menu modifications, but can the state stil be loaded? Thanks
|
|
Technical Support
|
Apr 3, 2008 - 12:47 PM
|
The serialized data format for all the Prof-UIS components does not depend on a Prof-UIS version. So, the same project with customizable toolbars and menus can be compiled with different Prof-UIS versions using 32-bit or 64-bit target. A state saved by a 32-bit application can be loaded by a 64-bit version of the same application and vice versa. But customization subsystem by default requires matching between commands and basic toolbars created in the main frame window and state data. It’s possible to allocate and use dynamic commands as it is demonstrated in the Pluggable sample. This application scans for plugin DLLs and allocates commands for each of them. The number of available DLLs can be different during each next start of the Pluggable sample because it tracks the dynamic plugin commands. It’s also possible to let the ProfAuto library do hard work relating to dynamic command support. This library provides a set of COM wrapper objects for customizable toolbars and menus. This is convenient if you are going to create extensible applications and code plugins using some scripting language which supports COM objects (OLE automation). There is a ActiveScripts sample that demonstrates how to use the active scripting library for running Java Script or VB Script code which modifies customizable toolbars and menus and handles command events. This approach is similar to VBA (Visual Basic for Applications) integration inside MS Office programs.
|
|
Malcolm D
|
Apr 3, 2008 - 5:09 PM
|
I presume when you same "not dependant on a Prof-UIS version" you mean say between 2.7 and 2.8 and 2.8.2 for exmaple - this is what I am interested in.
I think you are also saying that if a menu is modified ( in code) then previously saved states can’t be loaded or used. Or does it just require the same toolbars (but not the same items on it), and just the same commands, but the positions in the menu don’t matter? Thanks
|
|
Technical Support
|
Apr 9, 2008 - 7:51 AM
|
There is no data format dependency between different versions of Prof-UIS. We solved this issue many releases ago.
The same number of toolbars/menus is restored by the code that loads the customization subsystem’s state before you load the state of control bars.
|
|
Offer Har
|
Apr 1, 2008 - 8:22 AM
|
Dear Support, I see that the class CExtGridCellInplaceSlider does not have a min & max setting line a normal scroll-bar class. instead it has only a max setting by calling ScrollTotalRangeSet . Am I wrong? If not, then why is it so? can this be fixed? Regards, Ron.
|
|
Rado Manzela
|
Apr 1, 2008 - 2:31 AM
|
It would be great if you would implement "quick find" feature for grid control. If control has focus and user starts typing, it would be fucusing item which starts by text which user has typed (like searching in contact list of trillian or maybe also icq). Thank you.
|
|
Technical Support
|
Apr 16, 2008 - 4:52 AM
|
We just meant we already have implemented APIs for walking through grid window in both vertical and horizontal dimensions and find filtered values which correspond to appropriate filtering conditions. This subsystems can be used as is for new feature proposed by you. But implementation of this feature can be really different. At least two basic ways are acceptable:
1) We will implement some floating/popup window with editor and next/previous buttons inside. User starts to type something in the editor. Some grid cell becomes focused automatically in some row/column. This cell is somehow similar or exactly equal to the text typed in the editor. Clicking on the next/previous button focuses next grid cell in some next row/column.
2) The same as first item. But the grid windows in Prof-UIS can act as the MFC frame windows. It’s possible to inject other windows inside Prof-UIS grid windows and make guest windows occupying some side of inner grid window area like MFC status bar occupies bottom side of its parent frame window. This means we can inject some search window directly to the bottom side of the grid window and this search window will not intersect with correctly organized layout of grid cells inside the grid control. This solution is similar to the search window at the bottom of the Firefox web browser.
3) We can avoid creation of any search window and implement feature similar to the incremental search feature of code editor window in Visual C++. User will start typing something. Some grid cell in some row/column becomes focused because it matches to typed text due to some conditions. The Alt+Down-Arrow and Alt+Up-Arrow key allow to jump to next/previous grid cell which match to the typed text. Continuing typing will cause searching next grid cell which will match more detailed text in the input. This design is similar to first two input, but user cannot undo typing with the BackSpace key.
There are additional questions in all three cases displayed above. For instance, both the designs described above and grid filtering feature currently implemented in Prof-UIS are based on text analysis when universal the filtering and searching of each particular grid cell types requires different filtering/searching subsystems for each cell type independently from other cell types. There are no reasons to search some text like "345" in the middle of the text representation of the numeric cells or date/time cells.
|
|
Rado Manzela
|
Apr 19, 2008 - 12:57 PM
|
Design #3 would be great, without popup edit box. Currently I need only text search. Thank you
|
|
Technical Support
|
Apr 2, 2008 - 8:31 AM
|
This feature sounds like the grid filtering feature which is already implemented (grid rows/columns can be filtered when typing in the edit control). But it will conflict with automatic editing feature when the grid cell’s inplace editor control is displayed automatically when you start typing in the focused grid cell.
|
|
Rado Manzela
|
Apr 3, 2008 - 9:16 AM
|
Do you mean "CExtGridCellHeaderFilter " feature? (I’ve just checked screenshot in documentation for this class). It seems to be used for hiding some records.
I need something like typing in the standard combobox’s active dropdown list. It moves you through available options while typing. It does not "filter out" unmatched records. Items are not editable of course.
|
|