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 |
|
David Skok
|
Dec 13, 2006 - 1:01 PM
|
Is it possible to customize toolbars not associated with the mainframe? Toolbars that say might be located in a dialog or possibly in a controlbar. Are multiple command profiles for that purpose? If not what might be an application for multiple command profiles, I don’t understand the concept of multiple profiles.
Thanks,
Dave
|
|
Technical Support
|
Dec 15, 2006 - 4:23 AM
|
Multiple command profiles allow you to have more than one docking site in the applications. For example, you may want to have dockable control bars in the MDI child frame (see the InnerOuterBars sample). This feature also makes it possible to have more than one menu bar in the application (see the ProfUIS Controls sample).
It is not clear for what reason you decided to make local toolbars customizable but here are some details. The customize site detects all the toolbars in the frame window in the CExtCustomizeSite::EnableCustomization() and invokes the CExtCustomizeSite::OnRegisterToolBar() virtual method method for registering each toolbar. You could invoke this method to register your custom toolbars in the customize site.
|
|
David Skok
|
Dec 13, 2006 - 12:45 PM
|
I notice in DrawCLI sample toolbar resources are used to associate commands with Icons in CExtCommandManager then in code custom toolbars are created. I prefer to use this method exclusively as it is easier to create one or more large toolbar resources with commands and Icons then as I develop code I can easily change toolbar content and button order without editing bitmaps etc. Later on I can customize at runtime.
I have run into a problem. The custom toolbar names are included in the in the "Show or Hide Panels" toolbar drop down which is ok. I include the following code in the mainframe message map so that the menu items are active and work.
ON_COMMAND_EX(ID_CUSTOM_TOOLBAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(ID_CUSTOM_TOOLBAR, OnUpdateControlBarMenu)
I do NOT include the toolbar commands in any of my menus and as such they are not registered in Command manager. I may or may not in the future.
Assuming state info does not initially exist... the problem comes up when I start the app, close one of the buton bars, close the application then restart it. On restart I get an assert that the command for the toolbar show/hide is not present then the next instruction throws an exception. This occurs in:
bool CExtCmdProfile::SerializeState( CArchive & ar, bool bEnableThrowExceptions // = false ) ... ... ........ for( ; true; ) { UINT nCmdId, nUsageTickCount; ar >> dwTmp; nCmdId = UINT(dwTmp); if( nCmdId == 0 ) break; ar >> dwTmp; nUsageTickCount = UINT(dwTmp); CExtCmdItem * pCmdItem = CmdGetPtr(nCmdId); -->ASSERT here ASSERT( pCmdItem != NULL ); -->exception here trying to use NULL pCmdItem ASSERT( !(pCmdItem->StateIsBasic()) ); ASSERT( !(pCmdItem->StateIsForceRarely()) ); ASSERT( !(CExtCmdManager::IsSystemCommand(pCmdItem->m_nCmdID)) ); pCmdItem->m_nUsageTickCount = nUsageTickCount; }
May I suggest for robustness sake that you change the code so that if pCmdItem is null maybe still throw an assert but "continue;" from there so that NULL pCmdItem is not used and the app will continue. It appears that this will cause no other harm and reading the the archive will keep it’s integrity in case other data follows.
I am confused by why command statistic info is stored for a command that I didn’t register but yet the Prof-UIS "Show or Hide Panels" menu can display it. Is this a bug?
|
|
David Skok
|
Dec 13, 2006 - 12:52 PM
|
I should point out that when I say I do NOT include the toolbar commands in any of my menus I am referring to the toolbar show/hide commands, not the individual toolbar commands.
|
|
Technical Support
|
Dec 15, 2006 - 3:49 AM
|
Try updating the command manager using g_CmdManager->UpdateFromToolBar() method. This is enough to make the commands’ icons available in the command manager. So you do not need to create an additional toolbar.
|
|
Damien Castelltort
|
Dec 13, 2006 - 2:32 AM
|
Hi,
I noticed a problem in the CExtGridCellProgress class. If the SetRange method is done before the SetStep method, then the new range is not taking in account if upper - lower < 10 (10 is the default value of m_nStep).
Also, why the first test if "m_nRangeUpper < m_nRangeLower" and not "nUpper < nLower" ?
void CExtGridCellProgress::SetRange( INT nLower, INT nUpper ) { ASSERT_VALID( this ); if( m_nRangeUpper < m_nRangeLower ) { ASSERT( FALSE ); return; } if( m_nStep > (nUpper - nLower) ) { ASSERT( FALSE ); return; } m_nRangeLower = nLower; m_nRangeUpper = nUpper; m_nPos = m_nRangeLower; }
Thank you for the answers.
Aurelien Loizeau
|
|
Damien Castelltort
|
Dec 14, 2006 - 8:02 AM
|
Ok, so I will patch the method and wait for your update. For the m_nStep issue it is solved be doing it in the right order so no problem with that.
Thanks again for the quick answer.
Aurelien Loizeau.
|
|
Technical Support
|
Dec 13, 2006 - 9:29 AM
|
Thank you for your comments. You are right, the SetRange() method should look like: void CExtGridCellProgress::SetRange(
INT nLower,
INT nUpper
)
{
ASSERT_VALID( this );
if( nUpper < nLower )
{
ASSERT( FALSE );
return;
}
... As for the m_nStep value what it would be if the user sets a range that is less than m_nStep ? We think this is a user-side problem and we do not need to control this situation
|
|
Stan Miasnikov
|
Dec 12, 2006 - 10:19 AM
|
For some reason I could not find this in the documentation, so I am probably blind, but here is the question: all items in the Personalize Menus and Toolbars section of the Customize/Options dialog box are always disabled (grayed out). How to enable items in this section? We do not subclass this dialog box nor call it directly in the application.
|
|
Stan Miasnikov
|
Dec 13, 2006 - 11:49 PM
|
|
|
Suhai Gyorgy
|
Dec 13, 2006 - 1:51 AM
|
I checked BitmapEditor sample, and there I found this line:
CExtCustomizeSite::EnableCustomization( this, __ECSF_DEFAULT|__ECSF_PARMS_DISABLE_PERSONALIZED); In Help’s Reference section, if you click on CExtCustomizeSite page, it shows a table of flags that can be used in this method. For __ECSF_PARMS_DISABLE_PERSONALIZED flag Help says: "Personalized Menus and Toolbars controls group on the Toolbars page in the Customize dialog is disabled." So solution: make sure you call EnableCustomization with only __ECSF_DEFAULT flag as second parameter (Actually that is default parameter, so you can skip second paramter altogether and call only CExtCustomizeSite::EnableCustomization( this ); )
|
|
Stan Miasnikov
|
Dec 12, 2006 - 10:13 AM
|
We have received the following report from 2 of our customers regarding the application that uses the Prof-UIS lib.
Still having the issue with this version where the desktop of the computer continually "flickers" when the mouse is being moved within the PhatPad application window. Movement outside the window of the PhatPad application does not produce this "flicker", even while the PhatPad application is still running. I don’t know if this "flicker" is due to a screen refresh issue or not.
Actually, we recently switched from the Stingray framework to ProfUI for this app and this particular version uses the latest library 2.62, but originally it was reported when we’ve used 2.60. We have not seen this behavior, but it is definitely attributed to the UI lib. Is this a known issue? Are there any specific VGA adaptors/drivers that may experience this behavior?
Thanks.
|
|
Stan Miasnikov
|
Dec 13, 2006 - 11:48 PM
|
Thanks. Surly, weaĖā¢ve checked for all that already. As I mentioned, we could not reproduce this error and only one out of 500+ beta testers reported the this problem. Bu I decided to ask just in case.
|
|
Technical Support
|
Dec 14, 2006 - 12:31 PM
|
Did you try to analyze what is special with that computer where the problem occurs?
|
|
Stan Miasnikov
|
Dec 20, 2006 - 6:19 PM
|
Here are details of customer’s computer:
I went from 32 to 16 bit color, and the desktop as well as other picts in other apps, all still flicker. The drawing in Phatnotes now has been duplicated a little off center, as if having a shadowing effect. I put it back to 32 bit color, and the drawing returns to normal. The flickering persists. Here’s what I have on my machine: Video Card: Radeon X600 SE HyperMemory 256 MEG Processor: Pentium D 830 Dual Core 3GHz OS: XP Media Center 2005 Edition Hard Drive: 80 GB ATA 7200RPM with DataBurst Cache I also turned off my Firewall, Anti-spy, anti-virus, and anti-spyware in succession, and no change. But I’ll keep thinking about it as I work on the docs.
Also, could this relate to this:
Flashes of black
A related issue happens when applications do painting that’s not part of a WM_PAINT. USER detects the application is drawing and redraws the desktop, but the application may not have finished drawing the hwnd when that happens, and the result is the backing bitmap contains uninitialized pixels (black). Again, Microsoft is actively working in this area so please send in your feedback on where you think improvement is needed.
See: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/AppComp.asp
|
|
Technical Support
|
Dec 13, 2006 - 5:59 AM
|
You can make the desktop flicker by repainting the desktop window but we do not repaint the desktop and nobody reported a similar problem. Did you try to reproduce the problem using our samples? Do you use the PC desktop or some terminal desktop? Do you have any additional information about this problem?
To localize the source of problems of this kind, you should exclude the functionality in your project part by part until problem the disappears. We would also recommend you to start looking for the source of the problem by analyzing all invocations of the RedrawWindow() , DeferWindowPos() and SetWindowPos() APIs. If any receives NULL in the HWND parameter, this may cause desktop flickering.
|
|
Emmanuel Verguet
|
Dec 12, 2006 - 9:51 AM
|
Hi,
I have a resizable dialog based application (CExtWA< CExtNCW<CExtResizableDialog> >), and I want its size to be persistent when a user change size, close application and re-open it (and all its control too). Is it possible or is it only allowed for SDI/MDI applications ?
Thanks.
|
|
Suhai Gyorgy
|
Dec 12, 2006 - 12:54 PM
|
Check out EnableSaveRestore method in many of the samples, for example IconEditor’s MainDlg.cpp. Seems like that’s the only method you have to call in the CExtResizableDialog’s OnInitDialog. And one more thing: make sure you call SetRegistryKey in your main application class’ InitInstance method.
|
|
jb lee
|
Dec 12, 2006 - 5:49 AM
|
Hi, Is it possible to change the font of a CExtLabel on the CView derived class? At first, I made the control as CStatic, creating font and setfont, the label shown well. After change the control as CExtLabel, nothing is appeared on the control. If the font setting code is commented, the text appeared.
What’s wrong with me?
Regards, jb.
|
|
Technical Support
|
Dec 12, 2006 - 1:14 PM
|
We failed to reproduce this bug. We used the following code for testing: CExtLabel m_wndLabel;
...
m_wndLabel.Create(
_T("Some Text"),
WS_VISIBLE|WS_CHILD,
CRect(300,300,400,400),
this
);
m_wndLabel.SetFont( &g_PaintManager->m_FontBold ); Would you send us a test project that demonstrates the problem?
|
|
jb lee
|
Dec 14, 2006 - 6:54 AM
|
Your code works.
But, I wanna use custom font for the control. for example,
CFont font; VERIFY(font.CreateFont( theAppSetting->get_setting("View", "FontHeight", 13), // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut ANSI_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily theAppSetting->get_setting("View", "FontName", "굴림체").c_str())); // lpszFacename m_Title.SetFont(&font);
|
|
Technical Support
|
Dec 15, 2006 - 4:31 AM
|
You created the CFont object on the stack. The font variable is local in the scope of the method where you set the font. That means it will be destroyed after the method completes. You should create the CFont object dynamically or declare it in the class declaration section.
|
|
Alexander Kool
|
Dec 11, 2006 - 9:45 AM
|
Dear Sirs,
In my drawing program, I have upto a million objects for which properties must be set/handled. The CExtPropertyGridCtrl implementation requires a CExtPropertyStore for each object. This will exploded my memory allocation enormeously. Is it possible to work with 1 CExtPropertyStore per object type (line, arc, rect etc)? How would you go about to implement this?
Best regards, A.J. Kool
|
|
Alexander Kool
|
Dec 11, 2006 - 4:17 PM
|
1. But will it then still show the value if multiple objects properties have the same value? 2. Can I make a (static) store for lines, another for rectangles etc. ? 3. Do you have an example or code snippet? I cannot find much documentation on the actual function of the classes themselves.
Thanks. A.J. Kool
|
|
Technical Support
|
Dec 13, 2006 - 5:42 AM
|
Analyzing one million objects having only one propery each is not a good idea. It is hardly possible to code this using a for( i=0; i < 1000*1000; i++ ) loop. If the objects are stored in a database, you should build some specific queries which returns a temporary data table that can be used for initializing the grid. In any case, you will have to write a custom property grid with 50% functionality rewritten for your specific task. In other words, you will have to rewrite the code for mixing values and it will not be based on the code for mixing property stores provided in Prof-UIS. In fact, the property grid should not display property values of one million objects but rather some data which emulates a look of displaying the properties of one million objects.
|
|
Technical Support
|
Dec 11, 2006 - 12:19 PM
|
You can use one property store only. If you need to display some property values as having different actual values in different objects, then you should apply the __EGCS_EX_UNDEFINED_ROLE extended grid cell style to the active grid cell stored inside the CExtPropertyValue object. In the property grid, such a cell will contain an empty text area until the user edit it.
|
|
Suhai Gyorgy
|
Dec 11, 2006 - 9:07 AM
|
Dear Support, Is there an easy way to have Combine method generate the intersection of the given PropertyStores, not the union of them? Meaning, the resulting PropertyStore should contain only the categories and values that are present in all the given PropertyStores. Thank you, Chris.
|
|
Technical Support
|
Dec 12, 2006 - 12:00 PM
|
We have just added a CExtPropertyItem::AdjustIntersection() method which implements this feature. Here is how it works. For example, you have n objects and some properties are present in all n objects and some other properties are not. If you select these objects and want to display the combined properties in the property grid, then the new method allows you to exclude the properties that are not common to all objects and display only the common properties, i.e. the properties common to all objects. So if you have n objects with k properties and only 1 property is common, only this one property will be displayed in the grid. Please note that AdjustIntersection() takes a parameter (nIntersectionItemCount ) that in most cases should be set to the number of objects (combined property stores) and in this case the method will leave only the properties common to all objects (property stores). You can set some m less than <n in this parameter if you want to display properties that are common only to m objects but although it may be useful in some cases, it would implement the idea of non-strict intersection.
So it is really easy to use it. For example, you have three objects selected in the design area. First, create a combined property store which is merged from the three source property stores corresponding to the objects. Secondly, invoke pCombinedPropertyStore->AdjustIntersection( 3 ) for the combined property store to remove all the mixed property values which are absent in all the three source property stores. We tested the method using a modified version of the Compound Properties sample which shows property stores of three ellipse objects named "Object 1", "Object 2" and "Object 3". The CCanvasObject::GetPropertyStore() method was modified to make the number of properties of "Object 1" less than in other two objects. If you run the sample and change the selection in the combo box, you will see the difference. The changes were made only to ..\Prof-UIS\Samples\CompoundProperties\MainDlg.cpp (download it) and you can easily find them by doing a search for INTERSECTION TEST. You can download the updated library code from our ftp site.
|
|
Neville Franks
|
Dec 11, 2006 - 2:02 AM
|
If you close the "UI Theme" Toolbar the View|UI Theme menu does not ’check’ the current theme’s menu item. If you change the theme and then use View|UI Theme you will see the previous theme is checked, not the current one. Showing the UI Theme Toolbar resolves this.
The Drawcli sample demonstrates this. It also happens in my app.
Neville, http://www.surfulater.com
|
|
Neville Franks
|
Dec 12, 2006 - 5:34 PM
|
|
|
Technical Support
|
Dec 12, 2006 - 4:43 AM
|
Thank you for reporting the problem. To fix it, please update the source code of the CExtThemeSwitcherToolControlBar::PreTranslateMessage() method in the ..\Prof-UIS\Src\ExtControls.cpp file: BOOL CExtThemeSwitcherToolControlBar::PreTranslateMessage( MSG * pMsg )
{
if( m_bCommandProfileInitialized
&& GetSafeHwnd() != NULL
&& pMsg->message == CExtPopupMenuWnd::g_nMsgPrepareOneMenuLevel
)
{
CExtPopupMenuWnd::MsgPrepareMenuData_t * pData =
reinterpret_cast
< CExtPopupMenuWnd::MsgPrepareMenuData_t * >
( pMsg->wParam );
ASSERT( pData != NULL );
CExtPopupMenuWnd * pPopup = pData->m_pPopup;
ASSERT( pPopup != NULL );
#if (!defined __EXT_MFC_NO_CUSTOMIZE)
bool bCustomizeMode = false;
CExtPopupMenuWnd * pTestPopup = pPopup;
for( ; pTestPopup != NULL ; pTestPopup = pTestPopup->GetParentMenuWnd() )
{
if( (pPopup->TrackFlagsGet()&TPMX_CUSTOMIZE_MODE) != 0 )
{
bCustomizeMode = true;
break;
}
}
if( ! bCustomizeMode )
{
CExtCustomizeSite * pSite =
CExtCustomizeSite::GetCustomizeSite( m_hWnd );
if( pSite != NULL )
{
bCustomizeMode = pSite->IsCustomizeMode();
if( ! bCustomizeMode )
bCustomizeMode = ( pSite->DraggedNodeGet() != NULL ) ? true : false;
}
}
if( ! bCustomizeMode )
#endif
{
for( ; true; )
{
INT nReplacePos =
pPopup->ItemFindPosForCmdID( m_nMenuMarkerID );
if( nReplacePos < 0 )
break;
pData->m_bMenuChanged = true;
pPopup->ItemRemove( nReplacePos );
INT nIndex, nCount = GetButtonsCount();
for( nIndex = 0; nIndex < nCount; nIndex++ )
{
CExtBarButton * pQueueTBB = GetButton( nIndex );
ASSERT_VALID( pQueueTBB );
CExtThemeSwitcherToolButton * pTBB =
DYNAMIC_DOWNCAST(
CExtThemeSwitcherToolButton,
pQueueTBB
);
if( pTBB == NULL )
continue;
ThemeSwitcher_OnButtonUpdate( pTBB );
pTBB->PutToPopupMenu( pPopup );
}
}
}
}
return FALSE;
}
|
|
Neville Franks
|
Dec 11, 2006 - 1:55 AM
|
When I select a menu item and then release the left mouse button I’m getting an OnLButtonUp() sent to the window which is under the mouse cursor. It happens on the main menu as well as popup context menus. This is causing me problems as the underlying window is a tree control and the selection is changing.
I’ve checked a previous build of my app which used Prof-UIS 2.50 and this problem didn’t exist. I’m now using Prof-UIS V2.62
Here is a stack trace:
CSGTreeCtrl::OnLButtonUp(unsigned int 0x00000000, CPoint {x=0x000000ad y=0x000000a6}) line 2491 CWnd::OnWndMsg(unsigned int 0x00000202, unsigned int 0x00000000, long 0x00a600ad, long * 0x00ddf5d0) line 1964 CWnd::WindowProc(unsigned int 0x00000202, unsigned int 0x00000000, long 0x00a600ad) line 1585 + 30 bytes AfxCallWndProc(CWnd * 0x07cfcb8c {CSGTreeCtrl hWnd=???}, HWND__ * 0x001407dc, unsigned int 0x00000202, unsigned int 0x00000000, long 0x00a600ad) line 215 + 26 bytes AfxWndProc(HWND__ * 0x001407dc, unsigned int 0x00000202, unsigned int 0x00000000, long 0x00a600ad) line 368 AfxWndProcBase(HWND__ * 0x001407dc, unsigned int 0x00000202, unsigned int 0x00000000, long 0x00a600ad) line 220 + 21 bytes USER32! 77d48734() USER32! 77d48816() USER32! 77d489cd() USER32! 77d48a10() USER32! 77d5e097() USER32! 77d6c6ab() CWnd::IsDialogMessageA(tagMSG * 0x0080fb38 {msg=0x00000202 wp=0x00000000 lp=0x00a600ad}) line 182 CWnd::PreTranslateInput(tagMSG * 0x0080fb38 {msg=0x00000202 wp=0x00000000 lp=0x00a600ad}) line 3424 CDialog::PreTranslateMessage(tagMSG * 0x0080fb38 {msg=0x00000202 wp=0x00000000 lp=0x00a600ad}) line 92 CExtWS<CExtResDlg,301>::PreTranslateMessage(tagMSG * 0x0080fb38 {msg=0x00000202 wp=0x00000000 lp=0x00a600ad}) line 712 CExtResizableDialog::PreTranslateMessage(tagMSG * 0x0080fb38 {msg=0x00000202 wp=0x00000000 lp=0x00a600ad}) line 191 CWnd::WalkPreTranslateTree(HWND__ * 0x00200568, tagMSG * 0x0080fb38 {msg=0x00000202 wp=0x00000000 lp=0x00a600ad}) line 2667 + 18 bytes CWinThread::PreTranslateMessage(tagMSG * 0x0080fb38 {msg=0x00000202 wp=0x00000000 lp=0x00a600ad}) line 672 + 18 bytes CFMNApp::PreTranslateMessage(tagMSG * 0x0080fb38 {msg=0x00000202 wp=0x00000000 lp=0x00a600ad}) line 1231 + 12 bytes CWinThread::PumpMessage() line 848 + 30 bytes CExtPopupMenuWnd::PassMsgLoop(unsigned char 0x00) line 9047 + 21 bytes CExtPopupMenuSite::_Done() line 892 + 11 bytes CExtPopupMenuSite::DoneInstance() line 838 CExtPopupMenuWnd::_EndSequence(unsigned int 0x000000ee, HWND__ * 0x00200568) line 13032 CExtPopupMenuWnd::_EndSequenceEx(CExtPopupMenuWnd::MENUITEMDATA & {...}) line 12889 + 34 bytes CExtPopupMenuWnd::_OnMouseClick(unsigned int 0x00000202, CPoint {x=0x00000032 y=0x00000121}, unsigned char & 0x00) line 12801 CExtPopupMenuSite::_HookMouseProc(int 0x00000000, unsigned int 0x00000202, long 0x00ddfdfc) line 1099 + 32 bytes USER32! 77d618f4() USER32! 77d4ea9e() USER32! 77d61699() NTDLL! 7c90eae3() CWinThread::PumpMessage() line 821 + 19 bytes CWinThread::Run() line 487 + 11 bytes CWinApp::Run() line 400 AfxWinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00061f00, int 0x00000001) line 72 + 13 bytes WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00061f00, int 0x00000001) line 30 WinMainCRTStartup() line 330 + 54 bytes KERNEL32! 7c8
-------
How can I stop these OnLButtonUp() calls?
Neville, http://www.surfulater.com
|
|
Neville Franks
|
Dec 11, 2006 - 1:23 PM
|
|
|
Suhai Gyorgy
|
Dec 11, 2006 - 3:46 AM
|
Read the similar thread from Krzysztof Janik dated Dec 8, 2006 - 4:19 AM (just little below this thread). Support’s answer will resolve the problem.
|
|
Simon DESEE
|
Dec 10, 2006 - 11:37 AM
|
Hi,
How can I change the bitmap size of my toolbar’s buttons dynamically ?
I’ve already included all bitmaps needed (16x16 and 32x32) on my project.
And how can I resize all other controls (combobox, ...) placed on the toolbar to fit the new size of the buttons ?
Thanks
|
|
Technical Support
|
Dec 11, 2006 - 12:35 PM
|
There is a bReplaceOld parameter in the CExtCmdManager::UpdateFromToolBar() method, which updates the command manager with toolbar commands and their images. If bReplaceOld is set to true all the information about the commands, including their bitmaps, is completely updated: VERIFY(
g_CmdManager->UpdateFromToolBar(
pApp->m_pszProfileName,
IDR_MAINFRAME,
NULL,
NULL,
true
)
); Do not forget to invoke the CFrameWnd::RecalcLayout() and CExtControlBar::stat_RedrawFloatingFrames methods after replacing toolbar bitmaps.
|
|
Chun Pong Lau
|
Dec 10, 2006 - 9:25 AM
|
Dear support team,
I tried to add drag and drop function with COleDropTarget to a CHtmlView derived class which is used inside CExtTabPageContainerWhidbeyWnd. However, the overriden OnDrop function is never called when an object to drag and drop to the it. Please advice.
Due to a tight deadline, it is highly appreciated if a demo can be provided. Thanks for your kindness very much.
Best regards, Alan
|
|
Suhai Gyorgy
|
Dec 11, 2006 - 4:25 AM
|
To make a demo, some more information would be needed: a) Is it an MDI application, with CHtmlView being your document’s view? b) Does your CHtmlView derived class have a COleDropTarget member variable and did you call COleDropTarget::Register( this ) for this variable in the view’s OnCreate? c) Did you implement OnDragEnter, OnDragOver, OnDragLeave methods for your view? b) and OnDragOver from c) are essential for OnDrop to work. In FormEditor sample you can check how it is done (look in FormEditorView class)
|
|
Chun Pong Lau
|
Dec 15, 2006 - 2:10 PM
|
a) it is a SDI with a derived CHtmlView class b) yes. i’ve implemented COleDropTarget and register it in the view’s oncreate c) yes. i’ve implemented them all. d) I followed FormEditor sample but it doesn’t help.
What is more in my application is that I am using AExtTabPageContainerWhidbeyWnd.
I would appreciate your help very with a workable demo with drag and drop function meeting the above requirments.
Thanks a lot.
Alan
|
|
Technical Support
|
Dec 16, 2006 - 10:57 AM
|
First of all, please check the following issues: 1) You have initialized the OLE subsystem using ::AfxOleInit() (MFC API) or ::OleInitialize() (Win32 API). If you are using ::CoInitialize() , the OLE drag-and-drop will not work. 2) The CHtmlView class is a container window for the web browser ActiveX control. The later contains several child windows having the same size. We have no idea why several windows are used in the web browser but this means you should register the drop target only for the bottom window, which is typically has the Internet Explorer_Server window class name (we used SPY++ to determine this). So you should play with this and you may even need to unregister the drop target which was registered by the web browser control by default. 3) In any case described in (2), verify whether the COleDropTarget::Register() MFC’s API returns the successful result.
|
|
Chun Pong Lau
|
Dec 16, 2006 - 12:06 PM
|
Dear support team,
We’ve tried all of points you have raised but failed to get the OnDrop function called.
Would you please try if you can compile one successful application to demonstrate the result? We think it’s not a trivial task according to what we have tested and researched.
One additional information is that we are using Visual C++ 2005.
Best regards, Alan
|
|
Technical Support
|
Dec 17, 2006 - 8:02 AM
|
Non-triviality of this task is not a problem. The real problem is that the solution described in our previous message is applicable to IE6 and IE7 only. The later versions of IE may have an absolutely different internal structure. Why donāt you use some alternative solution? For instance, you could create a small pop-up window that can be used as the drop target basket.
|
|
Chun Pong Lau
|
Dec 17, 2006 - 3:46 PM
|
Thanks for your response but our target is aiming at IE6 and IE7 only and a pop-up window solution may not be suitable to us because we would need a direct drag and drog to the CHtmlView by requirement.
Best regards,
Alan
|
|
Suhai Gyorgy
|
Dec 18, 2006 - 8:55 AM
|
I did as Support suggested in their last post: Do a search on the Internet. I found this thread on CodeProject about this issue. Hope it can help you as well. Also check out CHtmlView::OnGetDropTarget method in MSDN Help.
|
|
Chun Pong Lau
|
Dec 18, 2006 - 5:55 PM
|
|
|
Suhai Gyorgy
|
Dec 19, 2006 - 2:39 AM
|
Dear Alan, It pretty much seems like it’s not the CExtTabPageContainerWhidbeyWnd to blame, but just to rule this out, have you tried to implement drag and drop without using CExtTabPageContainerWhidbeyWnd? This way or another, maybe we could spot something in your code if you upload a stripped version of your application, which represents the problem, so we can take a look. Best regards, Chris.
|
|
Technical Support
|
Dec 18, 2006 - 6:33 AM
|
Actually we don’t have a task to code such a sample in our to do-list because it’s quite specific. You could try making a search over the Internet or may be somebody agree to code such a sample.
|
|
Eric Houvenaghel
|
Dec 8, 2006 - 11:09 AM
|
Hello, I created a new single document view application using the Prof UIS AppWizzard. The application contains a CTreeCtrl inside a CExtControlBar inside the CFrameWnd. In the tree control I have the following:
ON_NOTIFY_REFLECT_EX(NM_CLICK, OnClick)
My problem is that both the CExtControlBar and the CFrameWnd are sending the NM_CLICK notification. I am therefore receiving two mouse click messages instead of one in my tree control. The only fix I’ve been able to find is blocking the NM_CLICK notification in CFrameWnd. Like this:
LRESULT MainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
if(message == WM_NOTIFY) {
LPNMHDR pnmh = (LPNMHDR)lParam; if(pnmh->code == NM_CLICK) {
return 0; } }
return CExtNCW< CFrameWnd >::WindowProc(message, wParam, lParam); }
I don’t really like this fix. Do you know if there’s a better way to stop the message from being sent twice? Thank you.
|
|
Technical Support
|
Dec 10, 2006 - 12:11 PM
|
There are no classes in Prof-UIS which send the WM_NOTIFY message including NM_CLICK sent implicitly via WM_NOTIFY. So we need more details about the UI design implemented in your project. We should know the exact window hierarchy in your application to come to any conclusion about message routes. Generally speaking, if you are facing any complexity in handling similar messages from several controls, then you can implement your own classes and handle standard Windows messages in them instead. You could use a CTreeCtrl -derived class, handle the WM_LBUTTONDOWN /WM_RBUTTONDOWN standard Windows messages in it, perform tree item hit testing and analyze which actions should be executed. If you have a CTreeCtrl window inside a CExtControlBar window, then all the NM_*** notifications will be sent to the CExtControlBar window. I.e. only the control bar will receive the WM_NOTIFY messages from the tree control and never from the frame window. Typically, there must always be some some middle window(s) between common controls and the main frame window. The main frame window should never receive the WM_NOTIFY messages. The only exception is the SDI application where a child view class is based on a common control like a tree view or a list view. In this case you could code a child view window based on the generic CWnd window or dialog and create a tree control inside it.
|
|
Suhai Gyorgy
|
Dec 8, 2006 - 9:12 AM
|
Dear Support, I’ve experienced 2 strange things with your CExtRadioButton class, which is different in pure MFC. - When the radiobutton has no text, it’s radio-circle is drawn in the top left corner of the given location, not vertically centered, as in MFC. - In MFC I had a group of radio buttons and all of them had the WS_TABSTOP style. When tabbing through all the controls in the program, the focus stopped only on the group’s selected radiobutton, none of the others, and user could change selection of group by pressing up-down arrows on the keyboard. When adapting the same in Prof-UIS, and then tabbing through controls, focus stops on every single radiobutton, not only on the selected one. Are these behaviours on purpose? Could I change them somehow? Thank you, Chris.
|
|
Technical Support
|
Dec 11, 2006 - 10:41 AM
|
Thank you for reporting the problem with aligning the check box. To fix it, please update the CExtPaintManager::PaintCheckOrRadioButtonText() method: void CExtPaintManager::PaintCheckOrRadioButtonText(
CDC & dc,
CExtPaintManager::PAINTCHECKRADIOBUTTONDATA & _pcrbd,
CSize _sizeBox,
CRect & rcBoxLocation
)
{
ASSERT_VALID( this );
ASSERT( dc.GetSafeHdc() != NULL );
if( _pcrbd.m_rcClient.IsRectEmpty() )
return;
if( !_pcrbd.m_bEnabled )
{
_pcrbd.m_bHover = false;
_pcrbd.m_bDrawFocusRect = false;
}
CRect rcTextArea( _pcrbd.m_rcClient );
CRect rcTextLocation( 0, 0, 0, 0);
rcBoxLocation.SetRect(
_pcrbd.m_rcClient.left,
_pcrbd.m_rcClient.top,
_pcrbd.m_rcClient.left + _sizeBox.cx,
_pcrbd.m_rcClient.top + _sizeBox.cy
);
if( (_pcrbd.m_eAlign&__ALIGN_VERT_MASK) == __ALIGN_VERT_BOTTOM )
rcBoxLocation.OffsetRect(
0,
( _pcrbd.m_rcClient.bottom - _sizeBox.cy ) - 2
);
else if( (_pcrbd.m_eAlign&__ALIGN_VERT_MASK) == __ALIGN_VERT_CENTER )
rcBoxLocation.OffsetRect(
0,
( _pcrbd.m_rcClient.Height() - rcBoxLocation.Height() ) / 2
);
else
rcBoxLocation.OffsetRect( 0, 1 );
// pre-calculate box coordinates
if( _pcrbd.m_bLeftText )
{
rcBoxLocation.OffsetRect(
_pcrbd.m_rcClient.Width() - rcBoxLocation.Width(),
0
);
rcTextArea.right = rcBoxLocation.left - 2;
rcTextArea.left += 1;
} // if( _pcrbd.m_bLeftText )
else
rcTextArea.left = rcBoxLocation.right + 4;
rcTextArea.DeflateRect( 1, 1 );
INT nOldBkMode = dc.SetBkMode( TRANSPARENT );
// draw text
INT nTextLength =
(_pcrbd.m_sText == NULL)
? INT(0)
: INT(_tcslen(_pcrbd.m_sText));
if( nTextLength > 0
&& rcTextArea.bottom > rcTextArea.top
&& rcTextArea.right > rcTextArea.left
)
{
// if have valid area, text & focus rect
ASSERT( _pcrbd.m_sText != NULL );
COLORREF clrText =
QueryObjectTextColor(
dc,
_pcrbd.m_bEnabled,
_pcrbd.m_bDrawFocusRect,
_pcrbd.m_bHover,
_pcrbd.m_bPushed,
_pcrbd.m_pHelperSrc
);
if( clrText == COLORREF(-1L) )
{
if( _pcrbd.m_bEnabled )
{
if( _pcrbd.m_bHover || _pcrbd.m_bPushed )
{
if( _pcrbd.m_bPushed
&& _pcrbd.m_clrForceTextPressed != ((COLORREF)-1L)
)
clrText = _pcrbd.m_clrForceTextPressed;
else if( _pcrbd.m_bHover
&& _pcrbd.m_clrForceTextHover != ((COLORREF)-1L)
)
clrText = _pcrbd.m_clrForceTextHover;
else if( _pcrbd.m_clrForceTextNormal != ((COLORREF)-1L) )
clrText = _pcrbd.m_clrForceTextNormal;
else
clrText = GetColor( COLOR_BTNTEXT, this );
} // if( _pcrbd.m_bHover || _pcrbd.m_bPushed )
else
clrText =
( _pcrbd.m_clrForceTextNormal == ((COLORREF)-1L) )
? GetColor( COLOR_BTNTEXT, this )
: _pcrbd.m_clrForceTextNormal;
} // if( _pcrbd.m_bEnabled )
else
{
clrText =
( _pcrbd.m_clrForceTextDisabled == ((COLORREF)-1L) )
? GetColor( COLOR_3DSHADOW, this )
: _pcrbd.m_clrForceTextDisabled;
} // else from if( _pcrbd.m_bEnabled )
} // if( clrText == COLORREF(-1L) )
COLORREF clrOldText = dc.SetTextColor( clrText );
CFont * pOldBtnFont = NULL;
CFont * pCurrFont = NULL;
if( _pcrbd.m_hFont != NULL )
pCurrFont = CFont::FromHandle( _pcrbd.m_hFont );
else
pCurrFont = &m_FontNormal;
ASSERT( pCurrFont != NULL );
pOldBtnFont = dc.SelectObject( pCurrFont );
UINT nDtMeasureFlags =
DT_LEFT|DT_TOP|DT_CALCRECT;
if( _pcrbd.m_bMultiline )
{
rcTextLocation = rcTextArea;
rcTextLocation.OffsetRect( -rcTextLocation.TopLeft() );
rcTextLocation.bottom = rcTextLocation.top;
nDtMeasureFlags |= DT_WORDBREAK;
}
else
nDtMeasureFlags |= DT_SINGLELINE;
dc.DrawText(
_pcrbd.m_sText,
nTextLength,
rcTextLocation,
nDtMeasureFlags
);
rcTextLocation.OffsetRect(
rcTextArea.TopLeft() - rcTextLocation.TopLeft()
);
UINT nDtDrawFlags = 0;
if( (_pcrbd.m_eAlign&__ALIGN_HORIZ_MASK) == __ALIGN_HORIZ_RIGHT )
{
nDtDrawFlags |= DT_RIGHT;
rcTextLocation.OffsetRect(
rcTextArea.Width() - rcTextLocation.Width(),
0
);
}
else if( (_pcrbd.m_eAlign&__ALIGN_HORIZ_MASK) == __ALIGN_HORIZ_CENTER )
{
nDtDrawFlags |= DT_CENTER;
rcTextLocation.OffsetRect(
( rcTextArea.Width() - rcTextLocation.Width() ) / 2,
0
);
}
else
nDtDrawFlags |= DT_LEFT;
if( (_pcrbd.m_eAlign&__ALIGN_VERT_MASK) == __ALIGN_VERT_BOTTOM )
{
nDtDrawFlags |= DT_BOTTOM;
rcTextLocation.OffsetRect(
0,
rcTextArea.Height() - rcTextLocation.Height()
);
}
else if( (_pcrbd.m_eAlign&__ALIGN_VERT_MASK) == __ALIGN_VERT_TOP )
{
nDtDrawFlags |= DT_TOP;
}
else
{
nDtDrawFlags |= DT_VCENTER;
rcTextLocation.OffsetRect(
0,
( rcTextArea.Height() - rcTextLocation.Height() ) / 2
);
}
if( _pcrbd.m_bMultiline )
nDtDrawFlags |= DT_WORDBREAK;
else
nDtDrawFlags |= DT_SINGLELINE;
dc.DrawText(
_pcrbd.m_sText,
nTextLength,
rcTextLocation,
nDtDrawFlags
);
dc.SelectObject( pOldBtnFont );
dc.SetTextColor( clrOldText );
if( _pcrbd.m_bDrawFocusRect )
{
CRect rcFocus( rcTextLocation );
rcFocus.InflateRect( 2, 2 );
rcFocus.left = max( rcFocus.left, rcTextArea.left );
rcFocus.top = max( rcFocus.top, rcTextArea.top );
rcFocus.right = min( rcFocus.right, rcTextArea.right );
rcFocus.bottom = min( rcFocus.bottom, rcTextArea.bottom );
rcFocus.InflateRect(
_pcrbd.m_bLeftText ? 0 : 1,
0,
_pcrbd.m_bLeftText ? 1 : 0,
0
);
dc.DrawFocusRect( &rcFocus );
} // if( _pcrbd.m_bDrawFocusRect )
} // if have valid area, text & focus rect
dc.SetBkMode( nOldBkMode );
} As for the second problem, we cannot confirm it yet. The Prof-UIS radio button group acts in the same way as the standard radio buttons. If the WS_TABSTOP style is set for all the radio buttons in the group, the focus will stop at every button both with the standard and Prof-UIS radio buttons. We made all the tests using the StatusPanes sample.
|
|
Suhai Gyorgy
|
Dec 11, 2006 - 12:41 PM
|
I made a small sample to reproduce the problem. You can download it from here. To reproduce, start the program, click on MFC Radio1 and Prof Radio1 to select them from their group. At that point focus is on Prof Radio1. Start tabbing through controls. You should see tab stopping on Prof Radio2, but not on MFC Radio2. If later on you select Prof Radio2, they start to behave as expected.
|
|
Technical Support
|
Dec 12, 2006 - 1:07 PM
|
Thank you for the test project. We found the bug and fixed it. You can download the updated source code via FTP.
|
|
Michael Valentine
|
Dec 8, 2006 - 6:39 AM
|
If you have a property grid that contains enough items for the grid to show a scrollbar, then if you select a cell (so the editable text part of the cell is highlighted in blue) and then use the mousewheel to scroll up/down, then the selected text is then displayed in the wrong cell. I suspect the selected cell is using an index (row number) to know which is the selected item, but then when you scroll with the mouse wheel, then this is not updated and the wrong text is shown.
|
|
Technical Support
|
Dec 9, 2006 - 12:15 PM
|
Thank you for reporting the problem. We fixed this. Please contact us for the update by e-mail.
|
|
Krzysztof Janik
|
Dec 8, 2006 - 4:19 AM
|
After update may ProfUis 2.5.3 to 2.6.2 unfortunately I have discovered that windows under popup menu is receiving OnLButtonUp message after item selection in this popup menu what does not happen in my older ProfUis version. It causes that window which is under this popup menu first perform OnLButtonUp message and after that is performed command message handling selected item in menu. What can completely change expected application reaction.
Please tell me what can I do to prevent this.
|
|
Technical Support
|
Dec 9, 2006 - 11:48 AM
|
Thank you for reporting this issue. Please update the source code for the CExtPopupMenuSite::_Done() method in the ..\Prof-UIS\Src\ExtPopupMenuWnd.cpp file to fix this: void CExtPopupMenuSite::_Done()
{
ASSERT( ! m_bShutdownMode );
if( m_pWndToolTip != NULL )
m_pWndToolTip->Hide();
m_bShutdownMode = true;
m_pWndCapture = NULL;
m_pWndAnimation = NULL;
m_lpnResultCmdID = NULL;
if( m_pTopMenu != NULL )
{
ASSERT( m_pTopMenu->m_bTopLevel );
if( ! m_pTopMenu->_IsFadeOutAnimation() )
{
VERIFY( m_pTopMenu->_BuildItems( NULL, true ) );
if( m_pTopMenu->GetSafeHwnd() != NULL
&& ::IsWindow( m_pTopMenu->GetSafeHwnd() )
)
{
CExtControlBar::stat_SetMessageString(
m_pTopMenu->GetOwner()
);
m_pTopMenu->DestroyWindow();
MSG msg;
while( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
{
if( WM_MOUSEFIRST <= msg.message && msg.message <= WM_MOUSELAST )
{
::PeekMessage( &msg, NULL, msg.message, msg.message, PM_REMOVE );
continue;
}
if( ! ::AfxGetThread()->PumpMessage() )
break;
}
}
ASSERT( m_pTopMenu->GetSafeHwnd() == NULL );
delete m_pTopMenu;
}
m_pTopMenu = NULL;
}
_Hook( false );
__VPC_VERIFY_0;
m_bShutdownMode = false;
}
|
|
Scott Moore
|
Dec 7, 2006 - 6:16 PM
|
I’ve seen your example code that calls:
m_wndMdiTabs.ModifyTabWndStyleEx( 0, __ETWS_EX_CLOSE_ON_TABS|__ETWS_EX_CLOSE_ON_SELECTED_ONLY );
But I cannot find a method that allows me to do the same thing with CExtTabPageContainerWnd.
Is this possible?
|
|
Scott Moore
|
Dec 12, 2006 - 12:26 PM
|
Thank you. For anybody reading this, you also need to override the virtual function void OnTabWndClickedItemCloseButton(LONG nItemIndex) to handle the close click. Otherwise the tab doesn’t close.
Is it possible to only display the close button for certain tabs? The main tab in my application cannot be closed and I would rather not display the close button for that tab, but for all others.
|
|
Technical Support
|
Dec 13, 2006 - 6:08 AM
|
You can get a pointer to the CExtTabWnd::TAB_ITEM_INFO object by its index using CExtTabWnd::ItemGet() and invoke its CExtTabWnd::TAB_ITEM_INFO::ModifyItemStyleEx() method to add or remove the __ETWI_EX_NO_CLOSE_ON_TAB extended tab item style. This allows you to disable/enable the close button for a particular tab item. Of course, it is supposed that the feature that makes the close button on each tab is turned on for the entire CExtTabWnd window.
|
|
Technical Support
|
Dec 9, 2006 - 11:46 AM
|
Here is the method you are looking for: pTabPageContainer->GetSafeTabWindow()->ModifyTabWndStyleEx( 0, __ETWS_EX_CLOSE_ON_TABS|__ETWS_EX_CLOSE_ON_SELECTED_ONLY );
|
|
Andrew Cochran
|
Dec 7, 2006 - 7:04 AM
|
Hi, I have a problem with context sensitive help.
MDI application with context - sensitive help. When pressing SHIFT + F1 and then on the element I need infomation about - the right page is opened in help. But when I choose the element mith mouse hover and press F1 - help is opened, but not on the right page. It always opens page titled ’Modifying the Document’.
I noticed it when tried to get infomation about the ’New’ element of menu ’File’. Then I turned off the CExtMenuControlBar and tried again. Menu bar became simple. Pressing F1 on the ’New’ element called the right page in help. The same problem is with the toolbar. :(
So, something is wrong. But I need it to work properly. Please, help. May be I need some code to insert somewhere? Or I haven’t done everything It needs to work...
|
|
Technical Support
|
Dec 9, 2006 - 11:44 AM
|
In Prof-UIS v.2.62 and earlier, only the Shift+F1 context help mode is supported. But we have just added support for F1 so please contact us for the update by e-mail.
|
|
Martin Hignett
|
Dec 7, 2006 - 6:03 AM
|
I’ve recently upgraded from Prof-UI 2.61 to 2.62 and I am now having link problems. It looks like the linker is finding a 2.61 version of the library but I’ve deleted all .lib and .obj files and built everything again from scratch.
We are building a Unicode debug build with VS 2005. I have included the output from the linker below
1>Linking... 1> Creating library ..\..\Projects\Unicode Debug/CC32.lib and object ..\..\Projects\Unicode Debug/CC32.exp 1>PROPEDIT.obj : error LNK2001: unresolved external symbol "protected: virtual int __thiscall CExtComboBoxBase::OnQueryMaxTipWidth(unsigned short const *)" (?OnQueryMaxTipWidth@CExtComboBoxBase@@MAEHPBG@Z) 1>BoxStyleCombo.obj : error LNK2001: unresolved external symbol "protected: virtual int __thiscall CExtComboBoxBase::OnQueryMaxTipWidth(unsigned short const *)" (?OnQueryMaxTipWidth@CExtComboBoxBase@@MAEHPBG@Z) 1>CHARTLIN.obj : error LNK2001: unresolved external symbol "protected: virtual int __thiscall CExtComboBoxBase::OnQueryMaxTipWidth(unsigned short const *)" (?OnQueryMaxTipWidth@CExtComboBoxBase@@MAEHPBG@Z) 1>LINETERM.obj : error LNK2001: unresolved external symbol "protected: virtual int __thiscall CExtComboBoxBase::OnQueryMaxTipWidth(unsigned short const *)" (?OnQueryMaxTipWidth@CExtComboBoxBase@@MAEHPBG@Z) 1>MoveLineCommand.obj : error LNK2001: unresolved external symbol "protected: virtual int __thiscall CExtComboBoxBase::OnQueryMaxTipWidth(unsigned short const *)" (?OnQueryMaxTipWidth@CExtComboBoxBase@@MAEHPBG@Z) 1>PROPEDIT.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CExtComboBoxBase::OnFilterPopupListSyncContents(class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > &)" (?OnFilterPopupListSyncContents@CExtComboBoxBase@@MAEXAAV?$CStringT@GV?$StrTraitMFC_DLL@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@@Z) 1>BoxStyleCombo.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CExtComboBoxBase::OnFilterPopupListSyncContents(class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > &)" (?OnFilterPopupListSyncContents@CExtComboBoxBase@@MAEXAAV?$CStringT@GV?$StrTraitMFC_DLL@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@@Z) 1>CHARTLIN.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CExtComboBoxBase::OnFilterPopupListSyncContents(class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > &)" (?OnFilterPopupListSyncContents@CExtComboBoxBase@@MAEXAAV?$CStringT@GV?$StrTraitMFC_DLL@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@@Z) 1>LINETERM.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CExtComboBoxBase::OnFilterPopupListSyncContents(class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > &)" (?OnFilterPopupListSyncContents@CExtComboBoxBase@@MAEXAAV?$CStringT@GV?$StrTraitMFC_DLL@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@@Z) 1>MoveLineCommand.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CExtComboBoxBase::OnFilterPopupListSyncContents(class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > &)" (?OnFilterPopupListSyncContents@CExtComboBoxBase@@MAEXAAV?$CStringT@GV?$StrTraitMFC_DLL@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@@Z) 1>CSTATBAR.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CExtStatusControlBar::OnAdvancedPopupMenuTipWndDisplay(class CExtPopupMenuTipWnd &,struct tagRECT const &,unsigned short const *)const " (?OnAdvancedPopupMenuTipWndDisplay@CExtStatusControlBar@@MBEXAAVCExtPopupMenuTipWnd@@ABUtagRECT@@PBG@Z) 1>CSTATBAR.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CExtStatusControlBar::OnPaintPane(class CDC &,int,class CRect const &,unsigned long,struct HICON__ *,unsigned short const *,unsigned int)" (?OnPaintPane@CExtStatusControlBar@@MAEXAAVCDC@@HABVCRect@@KPAUHICON__@@PBGI@Z) 1>..\..\Projects\Unicode Debug/CC32.dll : fatal error LNK1120: 4 unresolved externals 1>Build log was saved at "file://c:\Development\Trunk\Projects\Cc32\CCUnicodeDebug\BuildLog.htm"
Any ideas on what might be going wrong?
|
|
Martin Hignett
|
Dec 7, 2006 - 9:31 AM
|
Sorted! Turned out to be inconsistent use of the "Treat wchar_t as inbuilt type" option. I don’t understand how it was building with 2.61 now...
|
|