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 |
|
Michael Valentine
|
Jul 14, 2006 - 2:21 PM
|
Hi,
One of our users has poor eyesight and has his Windows colour scheme set to display white text on a black background (set in Display Properties->Appearance->Advanced). However, with this set, several problems become apparent. The menus appear as white text on a light grey (depending on skin) and so are unusable. Also the tab page buttons appear as black and the text is not readable on them. Is there anyway of solving this? I have tried using the various different skins and they all have the same problem...
Thanks.
|
|
Technical Support
|
Jul 17, 2006 - 9:44 AM
|
We need to clarify the problem, i.e. whether the user set the color scheme to one of the High Contrast schemes or changed only some of the color parameters. In the latter case, please let us know what exactly the user changed. Please also compare this with how it looks in Microsoft products. Any screenshot demonstrating the problem is much appreciated. Anyway we confirm that there are some problems in Prof-UIS under High Contrast schemes and we need to fix this.
|
|
Michael Valentine
|
Jul 17, 2006 - 9:49 AM
|
I will send some screenshots....
|
|
Timothy Anderson
|
Jul 13, 2006 - 11:30 PM
|
Is there a way to get the toolbar button itself to display in the same color as the toolbar background? This problem seems to be fairly universal with using the toolbar resource itself. The MDI application exhibits this exact same behavior, with a small dark grey box with the bitmap in it, then a lighter button surround, then the toolbar border color.
|
|
Timothy Anderson
|
Jul 13, 2006 - 11:32 PM
|
This also seems to be computer dependant. Some have problems, some don’t. I’m using 2.52 with VS 2K3. As I mentioned this seems to be a fairly universal problem. Individual icons with known background color all obviously show up just fine.
|
|
Technical Support
|
Jul 14, 2006 - 12:15 PM
|
It seems we know what the problem is. In version 2.53 we fixed a bug with an invalid non-transparent background of toolbar icons when running the desktop in the 16-bit color mode. In a 32-bit color mode the icons are always drawn correctly. In fact we completely renewed the CExtCmdIcon and CExtBitmap classes, which are now based on a 32-bit bitmap with alpha channel. The icons, which are used everywhere in menus and toolbars, now have the Windows Vista/XP icon quality on any Windows OS starting from 95/NT4. The renewed icon class also features an enhanced algorithm for generating hovered, pressed, and disabled images. So we cannot send you a bug fix and you can only fix this problem by upgrading to a new version. Please carefully read the version history with this regard. We listed all the methods, whose declarations had been changed.
|
|
Timothy Anderson
|
Jul 14, 2006 - 3:23 PM
|
Thanks! We are in the throws of a release, but will be jumping to VS2K5 right after it’s out. I can jump to the latest profuis and deal with it then. I was just curious if there was something easy. I figured there probably wouldn’t be...
|
|
Andrew Cochran
|
Jul 13, 2006 - 8:55 AM
|
I need a specific sorting in a property category of a CExtPropertyGridCtrl. Now cells and subcategories are sorted in alphabetical order. I want subcategories to be sorted first and placed at the begining, and then all other cells the same. For example:
I have:
Category1 Category 2 Property1 SubCategory 1 subProperty1 subproperty2 ....... Property2 SubCategory 2 subProperty1 subProperrty2 .......... ...........
I need:
Category1 Category 2 SubCategory 1 subProperty1 subproperty2 ....... SubCategory 2 subProperty1 subProperrty2 .......... Property1 Property2 ...........
Please, can you explain me how to do that?
|
|
Technical Support
|
Jul 13, 2006 - 12:43 PM
|
The property item order like you need can be organized using the following two conditions: 1) You should invoke the following code before assigning the property store to the property grid control: CExtPropertyGridCtrl * pPGC = . . .
CExtPropertyGridWnd * pPGW =
STATIC_DOWNCAST( CExtPropertyGridWnd,
pPGC->GetChildByRTC( RUNTIME_CLASS( CExtPropertyGridWndCategorized ) ) );
pPGW->m_bSortedCategories = false; 2) You should insert your property values and property categories into each sublevel of the property tree using the same order which you want to see on the screen. The previous step turnes off any sorting in the property grid.
|
|
Andrew Cochran
|
Jul 19, 2006 - 2:45 AM
|
Thank you, very much.
It was helpfull!
Best regards!
|
|
Petr Maar
|
Jul 13, 2006 - 8:33 AM
|
Hello, I’m using Prof-UIS 2.54 and if WindowsXP taskbar is set to auto-hide and application is maximized, then taskbar is not accessible by mouse if using any of Office2007 themes, other themes work fine. Application window covers entire screen and no thin taskbar line can be seen and so it is inaccessible... It can be seen on your samples as well. Is it a bug or regular behavior of these themes?
Petr
|
|
Technical Support
|
Jul 13, 2006 - 12:41 PM
|
We are aware of this bug. It is not possible to create correctly working skinned window frames without removing the WS_BORDER window style. If this style is present, Windows often draws the standard Window caption over the skinned non-client area. But it seems that Windows cannot work correctly with maximized windows that have no WS_BORDER . We can see only one way to fix the problem your reported: to detect if the desktop area has the size of the monitor area and then reduce the size of the maximized window by one pixel. So to fix this bug, please update the source code for the following method: void CExtNcFrameImpl::NcFrameImpl_PostWindowProc(
LRESULT & lResult, UINT message, WPARAM wParam, LPARAM lParam )
{
lResult;
wParam;
lParam;
switch( message )
{
case WM_NCLBUTTONDBLCLK:
if( m_bNcFrameImpl_RestoreBorder )
{
m_bNcFrameImpl_RestoreBorder = false;
CWnd * pWndFrameImpl = NcFrameImpl_GetFrameWindow();
pWndFrameImpl->ModifyStyle( WS_BORDER, 0 );
}
break;
case WM_WINDOWPOSCHANGING:
{
LPWINDOWPOS lpWindowPos =
reinterpret_cast < LPWINDOWPOS > (lParam);
ASSERT( lpWindowPos != NULL );
m_bNcFrameImpl_DelatayedFrameRecalc =
( ( lpWindowPos->flags & SWP_FRAMECHANGED ) == 0 )
? true : false;
NcFrameImpl_SetupRgn( (WINDOWPOS *)lParam );
}
break;
case WM_WINDOWPOSCHANGED:
m_bNcFrameImpl_DelatayedFrameRecalc = false;
break;
case WM_GETMINMAXINFO:
if( NcFrameImpl_IsSupported() )
{
CWnd * pWndFrameImpl = (CWnd *)NcFrameImpl_GetFrameWindow();
ASSERT_VALID( pWndFrameImpl );
CExtPaintManager::monitor_parms_t _mp;
CExtPaintManager::stat_GetMonitorParms( _mp, pWndFrameImpl );
if( _mp.m_rcMonitor == _mp.m_rcWorkArea )
{
LPMINMAXINFO pMMI = (LPMINMAXINFO)lParam;
if( pMMI->ptMaxPosition.x < _mp.m_rcWorkArea.left )
pMMI->ptMaxPosition.x = _mp.m_rcWorkArea.left;
if( pMMI->ptMaxPosition.y < _mp.m_rcWorkArea.top )
pMMI->ptMaxPosition.y = _mp.m_rcWorkArea.top;
CSize _maxSize = _mp.m_rcWorkArea.Size();
_maxSize.cy -= 1;
if( pMMI->ptMaxSize.x > _maxSize.cx )
pMMI->ptMaxSize.x = _maxSize.cx;
if( pMMI->ptMaxSize.y > _maxSize.cy )
pMMI->ptMaxSize.y = _maxSize.cy;
}
}
break;
}
}
|
|
Andrew Cochran
|
Jul 13, 2006 - 2:29 AM
|
I need to delete or hide categories in ToolBox, would you suggest me how to do this?
For example I have such:
- Category 1 element 1 element 2 element 3 ......... element N
But want it to look like this: element 1 element 2 element 3 ....... element N
|
|
Andrew Cochran
|
Jul 13, 2006 - 4:42 AM
|
I have to do it dynamically in runtime. Is there any way to do it?
|
|
Technical Support
|
Jul 13, 2006 - 12:25 PM
|
You should use a CExtToolBoxWnd -derived class in which the OnToolBoxWndMasureItem() virtual method is overriden like as follows: CSize CYourToolBoxWithoutGroups::OnToolBoxWndMasureItem(
CExtToolBoxWnd::TOOLBOX_ITEM_DATA * pTBCI,
CDC & dc
)
{
ASSERT_VALID( this );
if( pTBCI->ItemGetNext( __TBCGN_PARENT ) == ItemGetRoot() )
return CSize( 0, 0 );
return CExtToolBoxWnd::OnToolBoxWndMasureItem( pTBCI, dc );
} This implementation of the OnToolBoxWndMeasureItem() virtual method simply makes all group items having a zero size and, as result, you do not see any groups at all. But you should not forget to expand programmatically all the "invisible" groups to make the bottom level toolbox items accessible for the user. To make toolbox layout modifications visible at run time, you should invoke the CExtToolBoxWnd::UpdateToolBoxWnd() method to apply the layout changes.
|
|
Andrew Cochran
|
Jul 19, 2006 - 2:47 AM
|
Thank you, very much.
It was helpfull!
Best regards!
|
|
Krustys Donuts
|
Jul 12, 2006 - 12:25 PM
|
Hello-
I’m using prof-uis 2.53 pretty extensively in my multithreaded application. Every now and then I get crashing in some function called HookChains_t. This happens quite often if I’m showing a modal dialog and then either close it or click off of it, but not every time. Seems like some kind of race condition?
I get a callstack like this....
ntdll.dll!7c901230() msvcr71d.dll!_CrtDbgBreak() Line 93 C msvcr71d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x7c144c68, int nLine=888, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Line 427 C mfc71d.dll!AfxAssertFailedLine(const char * lpszFileName=0x7c144c68, int nLine=888) Line 28 + 0x14 C++ mfc71d.dll!CWnd::AssertValid() Line 888 + 0x3f C++ mfc71d.dll!AfxAssertValidObject(const CObject * pOb=0x0381a404, const char * lpszFileName=0x10756098, int nLine=4511) Line 104 C++ ProfUIS253md.dll!CExtPageContainerWnd::OnHookWndMsg(long & lResult=0, HWND__ * hWndHooked=0x007017aa, unsigned int nMessage=15, unsigned int & wParam=0, long & lParam=0) Line 4513 C++ ProfUIS253md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=15, unsigned int & wParam=0, long & lParam=0) Line 181 + 0x24 C++ > ProfUIS253md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x007017aa, unsigned int nMessage=15, unsigned int wParam=0, long lParam=0) Line 247 + 0x14 C++ user32.dll!77d48734() user32.dll!77d48816() user32.dll!77d4b4c0() user32.dll!77d4b50c() ntdll.dll!7c90eae3() user32.dll!77d494d2() user32.dll!77d4b530() user32.dll!77d5e04a() user32.dll!77d48a10() user32.dll!77d5e2b9() user32.dll!77d561c6() user32.dll!77d6a92e() mfc71d.dll!AtlTraceVA(unsigned long dwModule=1287424, const char * pszFileName=0x003a8444, int nLine=73746, unsigned long dwCategory=3835096, unsigned int nLevel=3835096, const char * pszFormat=0x003a84c8, char * ptr=0x7c144c68) Line 315 + 0x19 C++ msvcr71d.dll!CrtMessageWindow(int nRptType=2, const char * szFile=0x7c144c68, const char * szLine=0x0013b544, const char * szModule=0x00000000, const char * szUserMessage=0x0013b564) Line 617 + 0x16 C msvcr71d.dll!_CrtDbgReport(int nRptType=2, const char * szFile=0x7c144c68, int nLine=888, const char * szModule=0x00000000, const char * szFormat=0x00000000, ...) Line 516 + 0x4c C mfc71d.dll!AfxAssertFailedLine(const char * lpszFileName=0x7c144c68, int nLine=888) Line 28 + 0x14 C++ mfc71d.dll!CWnd::AssertValid() Line 888 + 0x3f C++ mfc71d.dll!AfxAssertValidObject(const CObject * pOb=0x0381a404, const char * lpszFileName=0x10756098, int nLine=4511) Line 104 C++ ProfUIS253md.dll!CExtPageContainerWnd::OnHookWndMsg(long & lResult=0, HWND__ * hWndHooked=0x007017aa, unsigned int nMessage=15, unsigned int & wParam=0, long & lParam=0) Line 4513 C++ ProfUIS253md.dll!CExtHookSink::HookChains_t::HookChainsWindowProc(unsigned int nMessage=15, unsigned int & wParam=0, long & lParam=0) Line 181 + 0x24 C++ ProfUIS253md.dll!CExtHookSink::HookChains_t::g_HookWndProc(HWND__ * hWnd=0x007017aa, unsigned int nMessage=15, unsigned int wParam=0, long lParam=0) Line 247 + 0x14 C++ user32.dll!77d48734() user32.dll!77d48816() user32.dll!77d4b4c0() mfc71d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* pfnCreateObject=0x03051750) Line 414 + 0x11 C++ user32.dll!77d4b50c() ntdll.dll!7c90eae3() user32.dll!77d494d2() user32.dll!77d4b530() mfc71d.dll!CWnd::WalkPreTranslateTree(HWND__ * hWndStop=0x00163ed0, tagMSG * pMsg=0x00000001) Line 3123 + 0x14 C++ user32.dll!77d496c7() mfc71d.dll!AfxInternalPumpMessage() Line 188 C++ mfc71d.dll!AfxPumpMessage() Line 198 C++ mfc71d.dll!CWnd::RunModalLoop(unsigned long dwFlags=4) Line 4566 + 0x5 C++ mfc71d.dll!CPropertySheet::DoModal() Line 934 + 0xc C++
How can I avoid this?
Thanks.
|
|
Technical Support
|
Jul 13, 2006 - 6:05 AM
|
We are stick to the UI design used in all today’s Microsoft applications: the UI is implemented in one thread and all the other logic can be implemented in the same thread or in other threads. So first of all please check this. Of course, it would be helpful if you would reproduce the crash using any of our samples or your test project. The first assertion from the bottom looks like as a result of subclassing a window multiply times but un-subclassing during window destruction was performed in an invalid order. What this means is that some window was subclassed several times using a classic technique of changing the window procedure. Please note that un-subclassing and restoring the window procedure should be performed in the reverse order. If the un-subclassing is performed incorrectly, the restored window procedures may access invalid or de-allocated data.
|
|
delu qiu
|
Jul 12, 2006 - 11:45 AM
|
Hi,
My dialog window always use design-time size after I apply skin to it. skin works fine, but MoveWindow() not work.
class CBSEPTHRInstDlg:public CExtNCW < CExtResizableDialog> { .... }
CBSEPTHRInstDlg::CBSEPTHRInstDlg(CWnd* pParent /*=NULL*/) : CExtNCW < CExtResizableDialog > ( CBSEPTHRInstDlg::IDD,pParent ) { ... }
int CBSEPTHRInstDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; CString strPath = "C:\\Aqua.xml";
ASSERT( ! strPath.IsEmpty() ); CExtPaintManagerSkin * pPM = new CExtPaintManagerSkin; if( ! pPM->m_Skin.Load( LPCTSTR(strPath) ) ) { ::AfxMessageBox( _T("Failed to load initial skin.") ); delete pPM; } else g_PaintManager.InstallPaintManager( pPM ); return 0; }
|
|
Technical Support
|
Jul 13, 2006 - 12:21 PM
|
We cannot see where you invoke MoveWindow() . Would you send us more code or a test project that demonstrates the problem?
|
|
Andrew Cochran
|
Jul 12, 2006 - 3:47 AM
|
Hi. I have to know wether user has made double click on the grid cell in the property window. I tried to override OnClick method and determine the fact by nChar and nRepCnt. Here is my code of function.
virtual bool 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 ) { if (nChar == VK_LBUTTON && nRepCnt == 1) { AfxMessageBox(L"Single click"); } if (nChar == VK_LBUTTON && nRepCnt == 2) { AfxMessageBox(L"Double click"); } return CExtGridCellColor::OnClick(wndGrid, htInfo, nChar, nRepCnt, nFlags); }
But there is always "Single click" and "begin edit" happends, not "Double click". May be I’m doing thomething wrong? Is there any other way for me to know when the user double clicked on the cell? Please, help!
|
|
Technical Support
|
Jul 13, 2006 - 12:18 PM
|
Please update the source code of the CExtTreeGridWnd::OnGbwAnalyzeCellMouseClickEvent() method in the ExtTreeGridWnd.cpp file so you can catch double clicks in grid cells inside tree grid windows: bool CExtTreeGridWnd::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 );
if( nChar == VK_LBUTTON )
{
CExtGridHitTestInfo htInfo( point );
HitTest( htInfo, false, true );
if( htInfo.IsHoverEmpty()
|| (! htInfo.IsValidRect() )
)
return false;
INT nColType = htInfo.GetInnerOuterTypeOfColumn();
INT nRowType = htInfo.GetInnerOuterTypeOfRow();
if( nColType == 0
&& nRowType == 0
)
{
if( nRepCnt == 1 || nRepCnt == 2 )
{
if( ( ( nRepCnt == 1
&& OnTreeGridQueryColumnOutline( htInfo.m_nColNo )
&& (htInfo.m_dwAreaFlags&__EGBWA_TREE_OUTLINE_AREA) != 0
)
|| nRepCnt == 2
)
&& (htInfo.m_dwAreaFlags&(__EGBWA_CELL_BUTTON|__EGBWA_CELL_CHECKBOX)) == 0
)
{
HTREEITEM hTreeItem = ItemGetByVisibleRowIndex( htInfo.m_nRowNo );
if( ( nRepCnt == 2
&& hTreeItem != NULL
&& ItemGetChildCount( hTreeItem ) > 0
)
|| (htInfo.m_dwAreaFlags&__EGBWA_TREE_BOX) != 0
)
{
OnTreeGridToggleItemExpandedState(
htInfo.m_nRowNo,
&htInfo
);
return true;
}
}
} // if( nRepCnt == 1 || nRepCnt == 2 )
}
} // if( nChar == VK_LBUTTON && ( nRepCnt == 1 || nRepCnt == 2 ) )
if( CExtGridWnd::OnGbwAnalyzeCellMouseClickEvent(
nChar,
nRepCnt,
nFlags,
point
)
)
return true;
return false;
}
|
|
Andrew Cochran
|
Jul 19, 2006 - 2:49 AM
|
Big THANKS!
Now it sems to work correctly!
Best regards!
|
|
Andrew Nanopoulos
|
Jul 10, 2006 - 3:49 PM
|
What is the propper way to impliment a custom action (ie not just call default web browser with url) for the hyperlinkButton? I tried to overide OnHyperLinkOpen but it never gets called.
|
|
Technical Support
|
Jul 11, 2006 - 8:48 AM
|
The CExtHyperLinkButton class has a m_bUseStdCommandNotification property. If set to true, the control sends the standard WM_COMMAND message instead of opening the hyperlink. You can handle this command in the same way as you do with the standard button. The PageNavigator sample shows how to use such the hyperlink button.
|
|
Massimo Germi
|
Jul 10, 2006 - 10:25 AM
|
Hi, I’m starting using beta release of Ribbon Controls, very very good and beautifull Control.
Is there a way to use this control vertically (at left or right of the MainFrame)?
tx
|
|
Technical Support
|
Jul 10, 2006 - 12:42 PM
|
Some UI controls are designed to be only horizontal or only vertical. For instance, the CExtPageContainerWnd demonstrated in the PageContainer sample is designed to be vertical but you can show its horizontal version (select Horizontal page container in the View menu). However we have never heard that somebody uses its horizontal version. The ribbons are designed to be horizontal and top oriented. Many buttons on ribbon pages have horizontal text. One ribbon page is assumed to replace 3-5 toolbars or a menu tree of 1-2 buttons in the menu bar. If we make a ribbon vertical, all these text lines will also get vertical. This does not look user friendly. You can check how it would look with some customizable application like DRAWCLI. Just create several toolbars with 5-7 buttons in each, make buttons having text and dock all the toolbars vertically. Of course, we could make ribbon button groups oriented vertically independently when the ribbon is vertically docked, but the ribbon layout’s algorithm will be lost in this case.
|
|
Massimo Germi
|
Jul 10, 2006 - 3:43 PM
|
Yes I agree with you, but ... Please consider this: many new monitor are more wide than height, if you have an application, like a text editor or an image editor, you wish to use more screen space for display your document, text or image. In this case I prefer to have all my controls on the left or on the right, maybe this is only my preference.
|
|
Raffaele Cappelli
|
Jul 9, 2006 - 2:14 AM
|
Hello, I have found the following bug:
if you 1) show a popup menu wich has a submenu, 2) open the submenu, 3) click on a submenu item without releasing the mouse button, then 4) move the mouse outside the menu and release the mouse button, the submenu correctly disappears, but the main popup menu remains visible and "frozen". Please let me know if you can provide a fix.
|
|
Technical Support
|
Jul 10, 2006 - 9:19 AM
|
Thank you for reporting this bug. We fixed it and you can download the update from our ftp site.
|
|
Raffaele Cappelli
|
Jul 10, 2006 - 2:56 PM
|
May you please post here or send me only the portion of code modified to fix the bug? I am releasing and I do not want to use and test a whole new version of the library.
|
|
Technical Support
|
Jul 11, 2006 - 8:43 AM
|
Please update the following method: bool CExtPopupMenuWnd::_OnMouseClick(
UINT nFlags,
CPoint point,
bool & bNoEat
)
{
ASSERT_VALID( this );
if( GetSafeHwnd() == NULL )
return false;
CExtPopupMenuSite & _site = GetSite();
if( _site.IsShutdownMode()
|| _site.IsEmpty()
|| _site.GetAnimated() != NULL
)
return true;
TranslateMouseClickEventData_t _td( this, nFlags, point, bNoEat );
if( _td.Notify() )
{
bNoEat = _td.m_bNoEat;
return true;
}
CPoint ptScreenClick( point );
ClientToScreen( &ptScreenClick );
HWND hWndFromPoint = ::WindowFromPoint( ptScreenClick );
if( hWndFromPoint != NULL
&& (::GetWindowLong(hWndFromPoint,GWL_STYLE)&WS_CHILD) != 0
&& ::GetParent(hWndFromPoint) == m_hWnd
)
{
CWnd * pWnd = CWnd::FromHandlePermanent( hWndFromPoint );
if( pWnd != NULL )
{
int nCount = ItemGetCount();
for( int i = 0; i < nCount; i++ )
{
MENUITEMDATA & mi = ItemGetInfo( i );
if( !mi.IsInplaceEdit() )
continue;
if( ((LPVOID)mi.GetInplaceEditPtr()) != ((LPVOID)pWnd) )
continue;
if( m_nCurIndex == i )
break;
HWND hWndOwn = m_hWnd;
_ItemFocusSet( i, FALSE, TRUE, FALSE );
if( ! ::IsWindow( hWndOwn ) )
return true;
break;
}
}
bNoEat = true;
return false;
}
bool bLButtonUpCall =
(nFlags==WM_LBUTTONUP || nFlags==WM_NCLBUTTONUP)
? true : false;
if( bLButtonUpCall && (!_PtInWndArea(point)) )
{
CExtPopupMenuTipWnd & _tipWnd = GetTip();
if( _tipWnd.GetSafeHwnd() != NULL )
{
CPoint ptScreen( point );
ClientToScreen( &ptScreen );
if( _tipWnd.GetSafeHwnd() == ::WindowFromPoint(ptScreen) )
return true;
}
HWND hWndOwn = GetSafeHwnd();
ASSERT( hWndOwn != NULL );
ASSERT( ::IsWindow(hWndOwn) );
if( m_pWndParentMenu != NULL
&& m_pWndParentMenu->GetSafeHwnd() != NULL
)
{
ASSERT_VALID( m_pWndParentMenu );
ClientToScreen( &point );
m_pWndParentMenu->ScreenToClient( &point );
CExtPopupMenuWnd * pWndParentMenu = m_pWndParentMenu;
if( pWndParentMenu->_OnMouseClick(
nFlags,
point,
bNoEat
)
)
{
if( bNoEat )
return false;
if( ::IsWindow(hWndOwn) )
_OnCancelMode();
return true;
}
return false;
}
if( nFlags == WM_RBUTTONUP
|| nFlags == WM_LBUTTONUP
)
{
if( ::IsWindow(hWndOwn)
&& CExtToolControlBar::g_bMenuTracking
&& hWndFromPoint != NULL
)
{
CWnd * pWndCmp =
CWnd::FromHandlePermanent( hWndFromPoint );
if( pWndCmp != NULL )
{
CExtToolControlBar * pToolBar =
DYNAMIC_DOWNCAST( CExtToolControlBar, pWndCmp );
if( pToolBar != NULL )
{
ASSERT_VALID( pToolBar );
int nBtnIdx = pToolBar->GetMenuTrackingButton();
if( nBtnIdx >= 0 )
{
CExtBarButton * pTBB = pToolBar->GetButton( nBtnIdx );
if( pTBB != NULL )
{
ASSERT_VALID( pTBB );
CRect rcBtn = pTBB->Rect();
pToolBar->ClientToScreen( &rcBtn );
if( rcBtn.PtInRect(ptScreenClick) )
return true;
}
}
}
}
_OnCancelMode();
}
return true;
}
_OnCancelMode();
return false;
}
bool bInplaceControlArea = false, bInplaceDropDownArea = false;
int nHitTest =
_HitTest(
point,
&bInplaceControlArea,
&bInplaceDropDownArea
);
if( _IsTearOff() && nHitTest == IDX_TEAROFF )
{
bool bLButtonUpCall =
( nFlags==WM_LBUTTONUP || nFlags==WM_NCLBUTTONUP )
? true : false;
if( ! bLButtonUpCall )
_DoTearOff();
return true;
}
if( bLButtonUpCall )
{
HWND hWndOwn = m_hWnd;
if( _StartScrolling( nHitTest ) )
return true;
if( ! ::IsWindow( hWndOwn ) )
return true;
}
if( nHitTest < 0 )
{
if( bLButtonUpCall )
{
if( ( nHitTest == IDX_SCROLL_TOP
|| nHitTest == IDX_SCROLL_BOTTOM )
)
{
return true;
}
if( nHitTest == IDX_EXPAND )
{
if( ( ! m_bExpandWasPressed )
&& m_bExpandAvailable
)
_DoExpand();
return true;
}
if( nFlags != WM_RBUTTONUP
&& nFlags != WM_LBUTTONUP
)
{
_OnCancelMode();
return true;
}
}
if( m_eCombineAlign != __CMBA_NONE
&& m_bTopLevel
&& ( ! bLButtonUpCall )
)
{
CRect rcExcludeAreaTest( m_rcExcludeArea );
ScreenToClient( &rcExcludeAreaTest );
if( rcExcludeAreaTest.PtInRect( point ) )
{
_OnCancelMode();
return true;
}
}
if( nFlags != WM_LBUTTONUP
&& nFlags != WM_LBUTTONDOWN
&& nFlags != WM_NCLBUTTONUP
&& nFlags != WM_NCLBUTTONDOWN
&& nFlags != WM_RBUTTONDOWN
&& nFlags != WM_NCRBUTTONDOWN
&& nFlags != WM_MBUTTONDOWN
&& nFlags != WM_NCMBUTTONDOWN
)
{
bNoEat = false;
return true;
}
return false;
}
ASSERT( nHitTest < m_items_all.GetSize() );
if( !bLButtonUpCall )
return true;
MENUITEMDATA & mi = ItemGetInfo(nHitTest);
if( ( ! mi.IsEnabled() ) || mi.IsSeparator() )
{
_ItemFocusCancel( TRUE );
_SetCapture();
return true;
}
if( mi.IsInplaceEdit()
&& mi.IsPopup()
&& (! mi.IsAllowInplaceEditActivation() )
)
{
bInplaceControlArea = false;
bInplaceDropDownArea = true;
}
if( mi.IsInplaceEdit()
&& (! mi.IsPopup() )
&& (! bInplaceDropDownArea )
&& (! _FindHelpMode() )
)
{
_SetCapture();
HWND hWndOwn = m_hWnd;
_ItemFocusSet( nHitTest, FALSE, TRUE, FALSE );
if( ! ::IsWindow( hWndOwn ) )
return true;
CWnd * pWndInplace = mi.GetInplaceEditPtr();
if( pWndInplace != NULL )
{
ASSERT_VALID( pWndInplace );
ASSERT( pWndInplace->GetSafeHwnd() != NULL && (::IsWindow(pWndInplace->GetSafeHwnd())) );
if( mi.IsAllowInplaceEditActivation() )
{
if( (pWndInplace->GetStyle() & WS_VISIBLE) == 0 )
{
CRect rcInplaceEdit;
_GetItemRect( nHitTest, rcInplaceEdit );
rcInplaceEdit =
mi.AdjustInplaceEditRect(
rcInplaceEdit,
OnQueryLayoutRTL()
);
pWndInplace->SetWindowPos(
NULL,
rcInplaceEdit.left, rcInplaceEdit.top,
rcInplaceEdit.Width(), rcInplaceEdit.Height(),
SWP_NOZORDER|SWP_NOOWNERZORDER
|SWP_NOACTIVATE|SWP_SHOWWINDOW
);
}
pWndInplace->SetFocus();
}
}
return true;
}
if( mi.IsPopup() )
{
bool bPopupOpened = false;
if( mi.GetPopup()->GetSafeHwnd() != NULL )
bPopupOpened = true;
#if (!defined __EXT_MFC_NO_CUSTOMIZE)
if( (!bPopupOpened) && mi.IsInplaceEdit() && _FindHelpMode() )
{
CExtCustomizeCmdTreeNode * pNode = mi.GetCmdNode();
if( pNode != NULL )
_EndSequence(
pNode->GetCmdID( false ),
mi.GetCmdReceiver()
);
}
#endif
if( ( ! bPopupOpened ) && mi.IsInplaceEdit() && bInplaceDropDownArea )
{
HWND hWndOwn = m_hWnd;
_ItemFocusCancel( FALSE );
if( ! ::IsWindow( hWndOwn ) )
return true;
}
bool bContinueAsCommand = false;
{
#if (!defined __EXT_MFC_NO_CUSTOMIZE)
bool bSeparatedDropDown = false;
const CExtCustomizeCmdTreeNode * pNode = mi.GetCmdNode();
if( pNode != NULL )
{
ASSERT_VALID( pNode );
bSeparatedDropDown =
(pNode->GetFlags() & __ECTN_TBB_SEPARATED_DROPDOWN)
? true : false;
}
if( bSeparatedDropDown )
{
CRect rcItem;
_GetItemRect( nHitTest, rcItem );
CRect rcPopupArrow( rcItem );
rcPopupArrow.left =
rcPopupArrow.right - __EXT_MENU_POPUP_ARROW_AREA_DX;
ClientToScreen( &rcPopupArrow );
if( ! rcPopupArrow.PtInRect( ptScreenClick ) )
bContinueAsCommand = true;
}
else
#endif
if( ! bPopupOpened )
{
HWND hWndOwn = m_hWnd;
_ItemFocusSet(
nHitTest,
TRUE,
TRUE,
FALSE
);
if( ! ::IsWindow( hWndOwn ) )
return true;
}
else
return false;
}
if( ! bContinueAsCommand )
return true;
}
if( mi.IsExtraMark() && ( ! _FindHelpMode() ) )
{
ASSERT( mi.GetExtraMarkCallback() != NULL );
mi.GetExtraMarkCallback()( this, &mi );
CClientDC dc( this );
_DoPaint( dc );
}
else if(
mi.IsExecutableCmdID()
|| ( mi.IsPopup()
#if (!defined __EXT_MFC_NO_CUSTOMIZE)
&& mi.GetCmdNode() != NULL
&& (mi.GetCmdNode()->GetFlags()&__ECTN_TBB_SEPARATED_DROPDOWN) != 0
&& (mi.GetCmdNode()->GetFlags()&(__ECTN_TBB_COLOR|__ECTN_TBB_UNDO_REDO|__ECTN_TBB_DATE)) != 0
#else
&& ( mi.GetPopup()->IsKindOf( RUNTIME_CLASS( CExtPopupColorMenuWnd ) )
#if (!defined __EXT_MFC_NO_UNDO_REDO_POPUP)
|| mi.GetPopup()->IsKindOf( RUNTIME_CLASS( CExtPopupUndoRedoMenuWnd ) )
#endif
#if (!defined __EXT_MFC_NO_DATE_PICKER_POPUP)
|| mi.GetPopup()->IsKindOf( RUNTIME_CLASS( CExtPopupDatePickerMenuWnd ) )
#endif
)
#endif
)
)
{
if( ! ( mi.GetCmdDeliverCb() != NULL
&& mi.GetCmdDeliverCb()( this, &mi )
)
)
_EndSequenceEx( mi );
}
else
_OnCancelMode();
return true;
}
|
|
Raffaele Cappelli
|
Jul 11, 2006 - 2:26 PM
|
The above code does not fix the bug.
|
|
Raffaele Cappelli
|
Jul 11, 2006 - 2:36 PM
|
I think the problem is that m_pWndParentMenu->_SetCapture() needs to be called after canceling the submenu, or the parent menu will remain "frozen" until it is canceled too, for instance when you deactivate/activate the main window.
|
|
Technical Support
|
Jul 12, 2006 - 10:25 AM
|
Please let us know how to reproduce the bug with any of Prof-UIS samples. Of course, we assume you have updated the method’s source code we provided in our previous message.
|
|
Suhai Gyorgy
|
Jul 7, 2006 - 9:30 AM
|
Dear Support,
I have a ListCtrl that I want to fill with all the commands from the CmdManager and their icons. This has been working ok... But now I’m using your v.2.55 and with that icons in ListCtrl appear with black background. (I’m not sure if it was working with v.2.54, I know from that version on you have different CmdIcon handling)
Sample to demonstrate problem: BlackIcon.zip Could you please check if I have to modify my code with new CmdIcons.
Thank you: Chris.
|
|
Suhai Gyorgy
|
Jul 7, 2006 - 9:31 AM
|
Oh, I forgot to add: in sample you have to click "Fill list" command or "F" toolbar button to fill list.
|
|
Technical Support
|
Jul 7, 2006 - 11:02 AM
|
Please use the ILC_COLOR32 constant when creating the image list: imList.Create(16, 16, ILC_COLOR32|ILC_MASK, 2, 1);
|
|
Suhai Gyorgy
|
Jul 7, 2006 - 5:21 AM
|
Dear Support,
I have many control bars tabbed together in a floating MiniFrameWnd and I have the CExtControlBar::g_bCloseOnlyOneBarInTabGroup style set to true. I start closing the control bars with the ’x’ button on the MiniFrameWnd, I close them one by one until all of them disappeared. From menu I try to open up the controlbar that was the last to disappear, but I can’t. I can only make it appear if another one of the tabbed control bars is opened already. Could you please check this issue?
Thank you, Chris.
|
|
Technical Support
|
Jul 7, 2006 - 9:44 AM
|
We have already fixed this bug. Please contact us via e-mail so we can tell you how to download the update via ftp.
|
|
Suhai Gyorgy
|
Jul 12, 2006 - 2:00 AM
|
I have sent you an e-mail with subject "Support Forum: Floating MiniFrameWnd". Waiting for your reply.
Thank you: Chris
|
|
Technical Support
|
Jul 13, 2006 - 7:36 AM
|
We have still not received the e-mail from you. Please check that you sent it to support@prof-uis.com.
|
|
Suhai Gyorgy
|
Jul 14, 2006 - 2:16 AM
|
Updated code didn’t seem to solve the above mentioned bug, problem still exists. Please, advise.
Thank you, Chris.
|
|
Technical Support
|
Jul 17, 2006 - 11:47 AM
|
We reproduced the bug and fixed it. Please download the updated source code again.
|
|
Stephan Finkler
|
Jul 5, 2006 - 8:58 AM
|
Hi,
is auto completion in a inplace cmditem possible? I’ve got dropdown comboboxes like the StyleEditor sample.
Best regards Michael
|
|
Technical Support
|
Jul 6, 2006 - 6:27 AM
|
Unfortunately text fields do not support AutoComplete but you can try doing it yourself. You can use a CExtBarTextFieldButton -derived class and override the OnInplaceControlCreate() virtual method. This method is invoked to create a dynamic edit control that is used for inplace editing. So you can either create a CEdit -derived class with AutoComplete or use the SHAutoComplete method to make the edit control use the AutoComplete feature.
|
|
Adrian M
|
Jul 4, 2006 - 12:05 PM
|
My app used to work fine with 2.51. I upgraded to 2.54 and now when I try to move toolbars around I am getting an assert in debug mode. In release mode they can be moved, but not re-docked.
Here is part of the stack trace:
CExtPaintManager::DockMarkerBase::CreateFromBitmapResources(CRect rcScreen={...}, CExtPaintManager::eDockMarkerType_t eDockMarkerType=__EDMT_2005_TOP, unsigned long clrTransparentIn=65280, const char * strResourceBmpIn=0x000076b8, const char * strResourceBmpOut=0x000076b8, const char * strResourceTypeBmpIn=0x00000002, const char * strResourceTypeBmpOut=0x00000002, HINSTANCE__ * hInstBmpIn=0x00000000, HINSTANCE__ * hInstBmpOut=0x00000000) Line 29430 + 0x1c C++ CExtPaintManager::DockMarkerBeta2::Create(bool bCentralMode=false, CExtPaintManager::eDockMarkerType_t eDockMarkerType=__EDMT_2005_TOP, CRect rcScreen={...}) Line 30204 + 0x41 C++ CExtPaintManager::DockMarkerBase::Create(bool bCentralMode=false, CExtPaintManager::eDockMarkerType_t eDockMarkerType=__EDMT_2005_GROUP_SPARSED, CRect rcScreen={...}) Line 30028 + 0x2f C++ CExtPaintManager::DockMarker_CreateWnds(HWND__ * hWndLastDynamicTarget=0x00000000, CExtPaintManager::eDockMarkerType_t eDockMarkerType=__EDMT_2005_GROUP_SPARSED, CRect rcScreen={...}, CTypedPtrArray<CPtrArray,CExtDynDockMarkerWnd *> & arrDockMarkerWnds={...}) Line 30543 + 0x2a C++ CExtDynDockMarkerWnd::CreateOuterMarkers(CFrameWnd * pFrame=0x003fe458, bool bShow=false, CExtPaintManager * pPM=0x003fe160) Line 20977 + 0x41 C++ CExtControlBar::_DraggingStart(const CPoint & point={...}, const CPoint & pointOffset={...}, CSize sizeWaitMouseMove={...}) Line 10568 + 0x30 C++ CExtControlBar::OnLButtonDown(unsigned int nFlags=1, CPoint point={...}) Line 8398 + 0x2e C++ mfc71d.dll!CWnd::OnWndMsg(unsigned int message=513, unsigned int wParam=1, long lParam=-1048485, long * pResult=0x0012f60c) Line 2164 C++ mfc71d.dll!CWnd::WindowProc(unsigned int message=513, unsigned int wParam=1, long lParam=-1048485) Line 1745 + 0x1e C++ mfc71d.dll!CControlBar::WindowProc(unsigned int nMsg=513, unsigned int wParam=1, long lParam=-1048485) Line 503 + 0x14 C++
|
|
Suhai Gyorgy
|
Jul 5, 2006 - 1:52 AM
|
I had the same problem before. The support answered this:
The problem relates to failure of loading resources. Please check that you included the following line in your *.rc2 file:
#if ( !(defined _AFXDLL && !defined __STATPROFUIS_WITH_DLLMFC__) ) #include <Resources/Resource.rc> #endif
You can read more about this issue in the FAQ How to link statically with Prof-UIS?.
Chris
|
|
Adrian M
|
Jul 5, 2006 - 10:05 AM
|
Thanks! I’ll try this.
Adrian
|
|
Suhai Gyorgy
|
Jul 4, 2006 - 3:17 AM
|
Dear Support,
I’ve experienced some drawing problem when my list view is in report view ("Details") and I have gridlines on it. If I have a lot of items in list and I use the slider, the horizontal gridlines are not redrawn correctly. This only happens if I click the up/down arrows of the slider of if I click the part of the slider-control to make it go a whole page up or down. Everything works correctly if I drag the slider.
I’m writing to this forum because problem only happens when Prof-UIS is used. I made two small applications, they are all the same except that one is with Prof-UIS and the other without it. I’m using XP with SP2, VS 2003 and the last updated Prof-UIS v.2.55 (although I experienced the problem with previous versions as well). The sample projects are zipped in one compressed file: http://people.inf.elte.hu/puffy/ListLines.zip
Thank you, Chris
|
|
Technical Support
|
Jul 4, 2006 - 10:35 AM
|
|
|
Technical Support
|
Jul 4, 2006 - 10:46 AM
|
We suggest you fix this problem by handling the WM_VSCROLL message and invoking the Invalidate( TRUE ) method in the handler. We can also suggest you use Prof-UIS Grid which has a much richer feature set.
|
|
Suhai Gyorgy
|
Jul 4, 2006 - 11:30 AM
|
Thank you for the information!
|
|
Adrian M
|
Jul 3, 2006 - 6:21 PM
|
Hi,
I installed 2.54 and run the Integration Wizard for VS6, VS.net 2003 and VS 2005, and the build for 2005 failed. Also, it looks like the whole 2005 environment was corrupted as a result, as the build couldn’t find winafx.h, and then when I tried to build my own projects, I started getting error messages about not found files.
I will reinstall both now, VS 2005 and Prof-UIS 2.54. What can I do to run the Integration Wizard sucessfully?
Thanks,
Adrian
|
|
Technical Support
|
Jul 4, 2006 - 10:29 AM
|
We confirm that the reported problem caused by the Integration Wizard may occur on some machines when you integrate Prof-UIS with Visual Studio 2005. Unfortunately we failed to reproduce this bug on any of our machines. The Integration Wizard modifies the VCComponents.DAT file typically located in the C:\Documents and Settings\*** YOUR WINDOWS USER NAME ***\Local Settings\Application Data\Microsoft\VisualStudio\8.0\ folder. It is a Unicode text file of the standard INI format. The Integration Wizard modifies this file using the standard Win32 APIs GetPrivateProfileString() and WritePrivateProfileString(). We may guess these functions corrupt Unicode INI files on some machines under some conditions. The Visual Studio .NET (7.0) and Visual Studio .NET 2003 (7.1) also have their VCComponents.DAT files but they use ANSI and we have never had any problems with them.
You can easily repair the corrupted VCComponents.DAT file. The Integration Wizard makes a copy of this file and save it to the ..\Prof-UIS\Support\BACKUP\ folder each time when you perform integration. So you can get the oldest version of the VCComponents.DAT file from this folder and put it back into the original location. You can also find detailed instructions on how restore this file in the above specified backup folder.
|
|
Petr Maar
|
Jul 3, 2006 - 1:53 PM
|
Hello, everybody. I recompiled my application to use version 2.54 of Prof-UIS library (instead of 2.53), but in modal dialogs, group boxes (only!) have inconsistent background (they are assigned the highest tab order numbers). Other controls are painted correctly.
You can see my modal and modeless dialogs screenshot here> http://maarp.wz.cz/prof-uis254-group_box.gif
In version 2.53 everything was ok, so is there any special treatment necessary?
Petr
|
|
Technical Support
|
Jul 4, 2006 - 10:15 AM
|
Thank you for reporting the bug. We fixed it. Please open the ExtPaintManager.cpp file and update the CExtPaintManager::PaintGroupBoxFrame() method as follows: bool CExtPaintManager::PaintGroupBoxFrame(
CDC & dc,
const RECT & rcBorder,
CObject * pHelperSrc,
LPARAM lParam // = 0L
)
{
ASSERT_VALID( this );
ASSERT( dc.GetSafeHdc() != NULL );
CWnd * pWnd =
DYNAMIC_DOWNCAST(
CWnd,
pHelperSrc
);
ASSERT( pWnd != NULL );
ASSERT_VALID( pWnd );
if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
{
CRect rcClient( rcBorder );
dc.Draw3dRect(
&rcClient,
GetColor( COLOR_3DSHADOW, pHelperSrc, lParam ),
GetColor( COLOR_WINDOW, pHelperSrc, lParam )
);
rcClient.DeflateRect(1,1);
dc.Draw3dRect(
&rcClient,
GetColor( COLOR_WINDOW, pHelperSrc, lParam ),
GetColor( COLOR_3DSHADOW, pHelperSrc, lParam )
);
} // if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
else
{
if( g_PaintManager.m_UxTheme.OpenThemeData(
pWnd->GetSafeHwnd(),
L"BUTTON"
) != NULL
)
{
VERIFY(
g_PaintManager.m_UxTheme.DrawThemeBackground(
dc.GetSafeHdc(),
BP_GROUPBOX,
pWnd->IsWindowEnabled()
? GBS_NORMAL
: GBS_DISABLED,
&rcBorder,
&rcBorder
) == S_OK
);
g_PaintManager.m_UxTheme.CloseThemeData();
}
} // else from if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
return true;
}
|
|
Christophe Guibert
|
Jul 2, 2006 - 8:32 AM
|
Hello,
Your ReportGrid sample shows how to reset the current sort order with a ReportSortOrderSet( _rgsoNew, true ) instruction.
What about adding this feature to the default column header pop up menu, just after the "sort ascending" and "sort descending" entries ? Since this is persistent, it would be logical to be able to cancel the effects of these entries, directly from the menu.
Best Regards,
Christophe Guibert
|
|
Technical Support
|
Jul 3, 2006 - 10:05 AM
|
A simple scenario of using the report grid may be as follows: 1) Some dialog or frame window is created. It initializes all its child windows, including the report grid. 2) The data and sort order of the report grid window may be changed during the dialog/frame life time. 3) The dialog/frame is destroyed with saving states of its child components including the report grid. In this case, the feature sounds reasonable. But if the report grid is reused several times and with changing its data and column structure completely, the state re-setting can make the report grid more complicated. In any case, you can override the CExtReportGridWnd::OnReportGridColumnCtxMenuConstruct() virtual method and add the needed menu items into the popup menu which will be displayed over the header cell.
|
|
Christophe Guibert
|
Jul 3, 2006 - 3:46 AM
|
Hello,
I would add that when all columns have been hidden, it would be useful to be able to show the popup menu in the ReportGrid header. In the current ReportGrid, user can reach dead ends from where he can’t restore a default behavior (especially with state persistence). Best Regards,
C. Guibert
|
|
Technical Support
|
Jul 3, 2006 - 10:10 AM
|
There are three ways to do this: 1) As you suggested. 2) As it is done in the ReportGrid sample: add menu/toolbar commands for managing the report grid. 3) As it is done in the "super grid" window in MS Outlook: disable removing the last active column. All the ways are acceptable. You can simply handle the WM_RBUTTONDOWN message and track the context menu anywhere if the number of active columns is zero. You can override the CExtReportGridWnd::ReportColumnActivate() virtual method to prevent removing the last active column. The CExtReportGridWnd::ReportColumnGetCount() method allows you to get the number of active and/or inactive columns.
|
|
Christophe Guibert
|
Jul 4, 2006 - 2:45 PM
|
Thank you very much for your support. I chose the third method. Best Regards,
C. Guibert
|
|
Massimo Germi
|
Jul 1, 2006 - 2:45 AM
|
Hi to all,
I need to draw some lines, inside a dialog frame ( CDlgObjects : public CExtNCW < CExtResizableDialog > ), maintaining current skin and/or colours.
I tried to override OnPaint function as follow: void CDlgObjects::OnPaint() { CExtNCW<CExtResizableDialog>::OnPaint();
CClientDC dc(this); // My Drawing lines }
I tried to call CExtNCW<CExtResizableDialog>::OnPaint(); believing to mantain current skin, but it seems doesn’t correct.
Do you have any suggestions TX
|
|
Technical Support
|
Jul 3, 2006 - 10:48 AM
|
To invoke the OnPaint() method of the base class is not correct and it is unnecessary. The themed background is painted before the OnPaint handler is invoked. So your code should look like as follows: void CMainDlg::OnPaint()
{
CClientDC dc(this);
dc.LineTo( 100, 100 );
} Please note that CClientDC should be used instead of CPaintDC here.
|
|
Massimo Germi
|
Jul 4, 2006 - 6:31 AM
|
I’m sending you an email with attached an image that reproduce the problem
|
|
Technical Support
|
Jul 5, 2006 - 9:02 AM
|
Unfortunately we failed to reproduce this bug. You can open any Prof-UIS dialog-based sample and add the OnPaint() handler. You will not see any problems. Would you show us your OnPaint() code or send us the entire project?
|
|
Massimo Germi
|
Jul 6, 2006 - 4:47 AM
|
I’ve sent you a simple project that put in evidence my problem. TX
|
|