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 Matten
|
May 11, 2007 - 12:48 PM
|
for reasons that aren’t worth explaining, I came across the following "inline" member functions defined in ExtColorCtrl.h
struct cell_t::CRect GetRect() const: >10 lines, has loop, even if it gets unrolled
struct cell_t::void OnDraw(CDC & dc,CPalette * pPalette,bool bFocused) >40 lines, with multiple funtion calls, etc
It is debatable that even an extremely aggressive compiler will inline GetRect, but OnDraw has no chance of being inlined by a compiler. It is far too big. All that will be accomplished is that there will be local static copies in every object file that includes the file. I’m not exactly sure how this is managed with if <Prof-UIS.h> is in the precompiled header, but still, it can’t help.
Is it still like this in later versions of the lib?
|
|
David Matten
|
May 14, 2007 - 8:35 AM
|
>We agree with you. The CExtColorCtrl::cell_t::OnDraw() method is moved into the CPP file.
In the current release, or an upcoming one?
Had you made some determination (through profiling or assembler examination) that cell_t::CRect GetRect() actually benefits from being inlined, or was it never looked at? I’d leave well enough alone, but we are #defining NOMINMAX globally, and it’s code won’t compile as part of the header file without annoying workarounds involving undesireable namespace usage (std::) in stdafx.h, so if it makes no difference, it’s better for me if the definition is not in the header, and just part of the compiled lib.
I’m wondering whether you already know whether or not there is a performance hit for making it a non-inlined member function (i.e, it was tried and rejected for the current way). If you have, it would save me the trouble of trying; if you don’t know, I’ll find out for myself.
|
|
Technical Support
|
May 15, 2007 - 12:01 PM
|
We have already moved the OnDraw() into the CPP file (for the next release). We can also move any other files. The performance of any of Prof-UIS controls does not visually depend on if all functions are inline or non-inline.
|
|
Technical Support
|
May 14, 2007 - 2:49 AM
|
We agree with you. The CExtColorCtrl::cell_t::OnDraw() method is moved into the CPP file.
|
|
tera t
|
May 11, 2007 - 8:22 AM
|
Hi
I do not understand a setting method of a style value of CExtToolControlBar custom control well.
ttp://profuis0.tripod.com/20070511/WS000001_.jpg
When I make a certain program. If I do not set 0x50002034 in control bar Buttons were not displayed.
I ask for detailed explanation.
Thanks,
|
|
Technical Support
|
May 13, 2007 - 1:33 PM
|
The window style for a custom control is a 32-bit value, which contains a set of WS_*** standard window styles and can contain a set of control specific styles. For MFC/Prof_UIS control bars, you can set CBRS_*** MFC styles. Of course, this is not convenient, but you have to compose custom control styles from several WS_*** and CBRS_*** values using Windows Calculator (calc.exe) and looking at definitions of these styles in Win32 SDK and MFC source code.
|
|
tera t
|
May 14, 2007 - 12:02 AM
|
Hi
I am saved in various meanings.
Thanks,
|
|
tera t
|
May 10, 2007 - 6:01 PM
|
Hi
When I am for "Debug", this Assert occurs. Please move to a print preview screen. With a mouse, please click a preview screen Assert occurs.
ttp://profuis0.tripod.com/20070509/image01.jpg ttp://profuis0.tripod.com/20070509/pptest3.lzh
[ A cause of an error ] In SDI Frame, I make a dialog. It seems to be not good when I set up a preview in the dialog.
|
|
Technical Support
|
May 11, 2007 - 7:26 AM
|
Thank you for reporting the problem. You can fix it by updating the source code of the CExtPPVW_HostWnd::OnMouseActivate() method: int CExtPPVW_HostWnd::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
ASSERT_VALID( this );
int nResult = CWnd::OnMouseActivate( pDesktopWnd, nHitTest, message );
if( nResult == MA_NOACTIVATE || nResult == MA_NOACTIVATEANDEAT )
return nResult;
CFrameWnd * pParentFrame = NULL;
CWnd * pParentWnd = GetParent();
for( ; pParentWnd != NULL; pParentWnd = pParentWnd->GetParent() )
{
if( pParentWnd->IsFrameWnd() )
{
pParentFrame = STATIC_DOWNCAST( CFrameWnd, pParentWnd );
break;
}
if( ( pParentWnd->GetStyle() & WS_CHILD ) == 0 )
break;
}
if( pParentFrame != NULL )
{
CView * pView = pParentFrame->GetActiveView();
HWND hWndFocus = ::GetFocus();
if( pView == this
&& m_hWnd != hWndFocus
&& ( ! ::IsChild( m_hWnd, hWndFocus ) )
)
OnActivateView( TRUE, this, this );
else
pParentFrame->SetActiveView( this );
}
return nResult;
}
|
|
Chris Anderson
|
May 10, 2007 - 2:52 PM
|
Our application allows to create regular Push Button (CExtButton::SetFlat(TRUE)) and flat button (CExtButton::SetFlat(FALSE)/BS_FLAT). In prof-ui Button control I am not seeing any difference!. Do I have to do set some other style to get the flat look?
Thanks
|
|
Chris Anderson
|
May 15, 2007 - 4:07 PM
|
|
|
Chris Anderson
|
May 14, 2007 - 10:14 AM
|
I am using XP and did not see any difference. If I have a SDK app, then I could see the difference but not with prof-ui button control.
|
|
Technical Support
|
May 15, 2007 - 7:57 AM
|
Are you using Office XP or Native XP theme? In the latter theme, the flat mode is also useless. Please look at the Buttons page in the ProfUIS_Controls sample. There you can set the flat mode yourself and see how it works.
|
|
Technical Support
|
May 14, 2007 - 8:27 AM
|
The SetFlat() method works only with the Office 2000/XP/2003 and Visual Studio 2005 themes. Otherwise it is useless because the buttons are based on bitmaps.
|
|
Offer Har
|
May 10, 2007 - 7:43 AM
|
Dear Support,
I have an icon resource that i display in a grid cell. I use the AssignFromHICON to load the icon.
What i see is that the edges of the icon in the icon file are not smoothen in the grid cell as they are in the icon file itself. This is the code i use: CExtCmdIcon icon1.AssignFromHICON( (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(nMyReousreID),IMAGE_ICON,16,16,0), false); GridIconInsert(&icon1);
I see that you convert the icon into a bitmap - does it mean that the attributes of the icon are lost (transparency etc.)?
Regards, Ron.
|
|
Technical Support
|
May 10, 2007 - 11:11 AM
|
In the latest Prof-UIS versions, you can display images using the CExtBitmap class, which has many features including that it does not consume GDI handles. Besides the icon data cannot be lost because these images have a 32-bit format with alpha chanel. You could load some larger icon size and then manually resize it to 16x16 using an appropriate scaling algorithm: HICON hIcon32x32 = . . .
CExtCmdIcon _icon;
_icon.AssignFromHICON( hIcon32x32 . . .
CExtBitmap::Filter _f( CExtBitmap::Filter::lanczos );
_icon.m_bmpNormal.Scale( 16, 16, _f );
|
|
pere montana
|
May 10, 2007 - 5:21 AM
|
Dear Support,
MFCs CScrollView is handy and allows different mapping modes besides MM_TEXT. I’d like to use it with a themed scroll bars. in a previous thread you advised a way to replace usual scrollbars with CExtScrollBar. the code you provided does not work. scroll bars do not show up. (DRAWCLI sample has this portions of code commented) I made scroll bars child of mainframe. ==> m_wndScrollBarV.Create( WS_CHILD | WS_VISIBLE | SBS_VERT | SBS_RIGHTALIGN, CRect(0,0,0,0), /*this*/ GetParent(), 1); it works fine, but: * it leaves a small square not painted at bottom right, as noted on previous thread, and this portion of screen does not belong to the view but its mainframe’s * the scrollbars do not take into account dockable panels (it looks ugly) can it be fixed from mainframe ? * at least working with MM_LOMETRIC you can actually scroll twice the height of a window. first keepint pushed the top button and a second time dragging the scroller.
Thanks
|
|
pere montana
|
May 18, 2007 - 11:41 AM
|
hello support team, version 2.70 besides fixing some issues worsen some others. I might think some of you hate CScroolView :) with the new version freshly compiled librarys, somebody is trying to paint the view on its own, before the mfc framework does its job. it craks. I found an easy workaround setting up a flag (s_bImReady) which gets marked as soon as OnInitialUpdate is called and overrided OnPrepareDC:
if (s_bImReady) CScrollView::OnPrepareDC(pDC, pInfo); // else somebody is tryng to paint before OnInitialUpdate gets called: do nothing
this is a workaround, but I reckon you should fix it
|
|
pere montana
|
May 16, 2007 - 9:35 AM
|
dear Support: seemingly I do not express myself quite clear, for you are solving a problem nobody has, and not showing a way to fix a problem that CExtScrollBar do has. CScrollView works fine on its own. the class handles scrolling ok. when a replace CScrollBar with CExtScrollBar appears a problem. Only with the arrows: it performs pageup/down and thumbtracking as expected. but pushing one of the buttons generates lineup/down message and BOTH scrolls the window AND moves the bar. but, and this is the problem, not in the same amount. CScrollView has a func ’SetScrollSizes’ which has no effect on CExtScrollBar. A workaround can take two ways: 1 manually scroll the page the same amount the bar has moved. 2 manually move the bar the same amount the page has been / will be moved. (it is also possible apply both methods together an arbitray amount) as I noticed CExtScrollBar does NOT respond to SetScrollPos (it’s a CScrollBar derived is’nt it?) I adopted method 1: in OnVScroll (the bar it has already been moved -1pixel- and I found no way to move it further) as showed above.
so, if you have a better method it will be wellcome.
|
|
Technical Support
|
May 16, 2007 - 10:21 AM
|
Yes, the problem is exactly described in your messages. Simply saying: it is not always possible to redraw custom painted scroll bar when its position is changed programmatically.
|
|
pere montana
|
May 14, 2007 - 11:47 AM
|
dear Support I do not understand your advice. OnVScroll gets all scroll related messages; any scroll related message I send from within it will return to the very same place. what I do instead, is call the CScrollView method (OnScroll) that would be invoked if the original message was a THUMBTRACK notification, in order to control the amount of scrolling in the window. where’s the point ?
|
|
Technical Support
|
May 15, 2007 - 8:46 AM
|
The idea is simple: you have received the line up/down scrolling notification and invoking the OnScroll() method like the thumb position was changed. But the scrollbar windows does not know what you do. You should synchronize state of the scroll bar windows with the scrolling position which you are going to pass to the OnScroll() method. That is why we advise you to emulate the thumb button tracking via changing the scroll bar position value and re-sending appropriate SB_THUMBTRACK notification message.
|
|
pere montana
|
May 13, 2007 - 1:37 PM
|
dear Support I reckon it most be something related with mapping modes used with CScrollView. I converted line up and line down to exactly one pixel up/down and it works ok (too slow, but at leat synchronized)
void CMANT2View::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { int delta=0;
switch (nSBCode) { case SB_LINEUP: delta =-1; break; case SB_LINEDOWN: delta =+1; break; } if (delta !=0 && pScrollBar) { OnScroll(MAKEWORD(-1, SB_THUMBTRACK), pScrollBar->GetScrollPos()+delta); return; } CScrollView::OnVScroll(nSBCode, nPos, pScrollBar); } (ant the same for horizontal scroll) bye
|
|
Technical Support
|
May 14, 2007 - 9:00 AM
|
Your scroll position changing method is not correct. Please replace the OnScroll( . . . ) method invocation with SendMessage( . . . ) and synchronize the scroll bar positions manually.
|
|
pere montana
|
May 11, 2007 - 8:33 AM
|
thanks, it works fine. I simplified a bit: no need for a CWnd container inside a FrameWnd container, so I put the CExtScrollBar in the mainframe and create them in OnCreate (along with toolbars, etc.), provided a func to pass CExtScrollBar ptrs to the scrollview (needed some cast because of const) and use these ptrs in CScrollView::GetScrollBarCtrl. I put the code you gave for CwndContainer in CMainFrame:OnPaint to take care of the square bottom.right and let MFC to do the rest. allright. still an issue remaining: CExtScrollBar does not synchronize the bar with the scrolling done thru top and down buttons. is there a way to fix it ? (tha is move the bar in the same amount as line up and line down do scroll)
|
|
Technical Support
|
May 13, 2007 - 6:27 AM
|
It seems the synchronization problem is caused by something in your code that is handling scrolling notification events because the CExtSplitterWnd class used in the DRAWCLI sample does nothing except for redirecting WM_HSCROLL and WM_VSCROLL messages.
|
|
Technical Support
|
May 10, 2007 - 11:22 AM
|
In the DRAWCLI sample, the CExtSplitterWnd control automatically creates the CExtScrollBar windows and retranslates the WM_HSCROLL and WM_VSCROLL messages to view windows correctly. So this is not the same view scrolling as it should be implemented in your application. You need to create the following window structure:
1) Some CWnd -based container window as a child of main frame window.
2) Your CScrollView -based window and two CExtScrollBar windows as children of the container window.
Both container and scroll view should have the AFX_IDW_PANE_FIRST dialog control identifier. The container should invoke CWnd::RepositionBars(0, 0xFFFF, AFX_IDW_PANE_FIRST ); both after creating child windows and when handing the WM_SIZE message. The container window should implement the OnCmdMsg() and PreTranslateMessage() virtual methods and redirect their invocations to the scroll view window inside it. The container window should send the WM_HSCROLL and WM_VSCROLL messages to the scroll view window. The CScrollView -based class should implement the virtual CWnd::GetScrollBarCtrl() virtual method and return pointers to the CExtScrollBar windows created in its parent container window. The container window should eat up the WM_ERASEBKGND message and handle the WM_PAINT message for filling the corner area between scroll bar controls using the following code: if( ! g_PaintManager->PaintDockerBkgnd( true, dc, this ) )
{
CRect rcClient;
GetClientRect( &rcClient );
COLORREF clrBk = g_PaintManager->GetColor( CExtPaintManager::CLR_3DFACE_OUT, this );
dc.FillSolidRect(
&rcClient,
clrBk
);
} In this case you should not have any problems with the scroll bar windows and any other windows inside the main frame window.
|
|
Francesco Toscano
|
May 10, 2007 - 2:50 AM
|
I am new to Prof-Uis lib and I found a problem regarding localization resource. I am developing an application that have the user interface in two languages (English - Italian). The default language used by the application is italian, then optionally, there is a resource only DLL for the English interface. Because I do not handle the language swicth on the fly, in the InitInstance() of the App Class, I load if required, the resource DLL. When I don’t use the resouce DLL for English UI everything is ok. When I load the english resource DLL, the menu Titles as (File, edit, View etc..) are not translated to english but are displayed in Italian, then the menu items are correctly translated to the language based on DLL.
The same occurs for the strings resource used by the apllication for Tooltips, are still displayed in in italian. Of course all the resources, in the resource dll, are traslated to English and the language Id for each resource is English US.
this is the code I am using:
BOOL CBeutyPlannerApp::InitInstance() { // InitCommonControls() is required on Windows XP if an application // manifest specifies use of ComCtl32.dll version 6 or later to enable // visual styles. Otherwise, any window creation will fail. InitCommonControls();
CWinApp::InitInstance();
if(m_bEngres) { g_ResourceManager->AllowCustomLang(TRUE); g_ResourceManager->SetLangIdDesired(__EXT_MFC_LANG_ID_ENGLISH_US); //else if(!g_ResourceManager->RscInst_Insert("EngRes.dll")) { CString strErrorMessage; strErrorMessage.Format(_T("Failed to load resource DLL (%s)"), "EngRes.dll"); ::AfxMessageBox( LPCTSTR(strErrorMessage), MB_OK|MB_ICONERROR ); return FALSE; } } // // Prof-UIS advanced options // SetupUiAdvancedOptions();
...............continue............
}
What is Wrong???? Finally the function "CExtResourceManager::RscInst_Insert" is not documented????
Please someone can help me.
Francesco
|
|
Technical Support
|
May 10, 2007 - 11:26 AM
|
First of all the CExtResourceManager::RscInst_***() APIs are experimental and may be changed. That is why they are not documented. You don’t need these APIs if your resource DLLs are MFC extension DLLs loaded with the ::AfxLoadLibrary() function.
As for the menu items: their text strings are loaded by MFC when the frame window is created. You can set main frame’s menu to NULL and invoke the CExtMenuControlBar::LoadMenuBar() method to initialize the menu line.
The problem with non-localized tooltip is not clear. Would you send us a stripped version of your project with UI code only or any other test project so we can figure out what’s wrong?
|
|
Francesco Toscano
|
May 10, 2007 - 4:05 PM
|
First thanks for the reply,
First Question: As you suggested with the use of CExtMenuControlBar::LoadMenuBar(), it solves the problem I reported regarding the titles on the menu line. Probably I miss some points, but regarding this there is something that I don’t understand What is the reason of calling the CExtMenuControlBar::LoadMenuBar() method to initialize it during the CMainFrame::OnCreate() if the resouce Dll has been called during CWinApp::InitInstance()? So if the resource DLL has been called and Initialized before any menus creation, why to call after CExtMenuControlBar::LoadMenuBar()? Is this should be done been by the framework itself after the execution CWinApp::InitInstance()?
Second Question: Generally I used to store resource languages within DLLs build with the flag Resource only DLL (noentry point). Anyway I can easy change to MFC Extension DLL, but why if I use the following code to load a non extension dll the app doesn’t work?
HMODULE hModule = ::LoadLibrary("bplangeng.dll"); if(!hModule) ::AfxSetResourceHandle(hModule);
Third Question: Regarding the matter of non-localized tooltip I will try to be more clear. I am talking about those that are displayed on the left of the status bar, only those that are displayed when the user move the mouse over the menu bar titles are still displayed in Italian (if the English menu is loaded). Then The tooltips for the MAXIMIZE - MINIMIZE and CLOSE buttons on the right corner of the app window are displayed always in English.
Finally if you still want a test project, please tell me where I can send it. please apoligise for my written english.
Many thanks, Francesco.
|
|
Francesco Toscano
|
May 14, 2007 - 3:28 AM
|
Please this message replace my reply dated May 10, 2007 - 4:05 PM due some errors that I made at time was posted
First Question: I used to store resource languages within DLLs build with the flag Resource only DLL (noentry point), this because my project it is statically linked with MFC and I can’t change the project settings because all my libraries are static. In all my MFC project I always used the code reported below, but if I use this code with my project linked with Prof-UIs lib statically fails.
HMODULE hModule = ::LoadLibrary("lang.dll"); if(hModule) ::AfxSetResourceHandle(hModule);
For this reason How can I load a resource only library non MFC Extension DLL but regular DLL at application startup, if AfxSetResourceHandle() do not work?????
At the moment my project only works if I use the "g_ResourceManager->RscInst_Insert("lang.dll"))", that you told me that use is experimental. If I continue to use "g_ResourceManager->RscInst_Insert("lang.dll"))" (to load the resource language DLL) and, as you suggested, I Use of CExtMenuControlBar::LoadMenuBar(), it solves the problem I reported regarding the titles on the menu line. But, probably because "g_ResourceManager->RscInst_Insert" is experimental, some tooltips are not switched to the language of the resource DLL loaded. I am talking about those that are displayed on the left of the status bar, only those that are displayed when the user move the mouse over the menu bar titles. This are still displayed in Italian (if the English resources are loaded with dll). Then The tooltips for the MAXIMIZE - MINIMIZE and CLOSE buttons on the top right corner of the app window, are displayed always in English (Also when the only resource available for the application isin Italian and the resource DLL (in english) is not loaded).
About the of CExtMenuControlBar::LoadMenuBar(), probably I miss some points, but regarding this there is something that I don not understand. What is the reason of calling the CExtMenuControlBar::LoadMenuBar() method to initialize it during the CMainFrame::OnCreate(), if the resouce Dll has been called during CWinApp::InitInstance()? So if the resource DLL has been called and Initialized before any menus creation, why to call after CExtMenuControlBar::LoadMenuBar()? Is this should be done been by the framework itself after the execution CWinApp::InitInstance()?
if you still want a test project, please tell me where I can send it. please apoligise for my written english.
Many thanks, Francesco.
|
|
Technical Support
|
May 14, 2007 - 8:43 AM
|
We are sorry for the delay. Prof-UIS uses its own resource manager component for loading resources of any type. The CExtResourceManager::RscInst_***() methods are experimental but they are stable and you can use them. So to load the resources of any preferred language from any known module is absolutely not a problem. The MFC uses resource DLL substitution based on the ::AfxSetResourceHandle() function, but MFC searches all the available modules (EXE and MFC extension DLLs) for resources of the language which corresponds to the current system locale. So, if you want to use the pure MFC based resource localization, then your EXE should not contain neither English nor Italian nor any other resources. They should be moved into stand alone DLLs (one DLL per language). Only in this case the MFC will have change to load only the Italian resources on a Windows OS where current locale is English. This problem is absent in Prof-UIS where the resource manager implements its own resource searching and loading algorithm. In Prof-UIS based application you even can include both English and Italian resources into your EXE and set up the language preference in the resource manager. The preferred language resources will be loaded correctly, but this is related to Prof-UIS components only. This explains the menu localization problem in your application:
1) If your code invokes the CExtMenuControlBar::LoadMenuBar() method, then it re-loads the menu data of desired language and everything is OK.
2) If your code does not invoke this method, then the menu bar gets menu tree from the HMENU handle of the main frame window. This menu was loaded by MFC code during creation of the main frame window and the MFC resource loading algorithm was used. Nobody can guarantee the menu of desired language will be loaded by MFC until you will move all the resources into stand alone DLLs (one DLL for each language).
The tooltips over the minimize/maximize-restore/close buttons are displayed by Windows OS if you are using non-skinned window non client area. If the non client area is skinned by the currently installed paint manager, then the tooltip texts are taken from the window’s system menu. In both cases, Prof-UIS gets the tooltip texts for the window buttons not from its own localized resources - it gets its from Windows. This should not be a problem to see these tooltips displayed using the same language as they displayed for all the windows on the same desktop.
The status tips and all the strings displayed in the status bar’s panes are taken from the string table resource and should appear localized correctly independently on which localization way you will choose (of course, in case of MFC you should implement all resources in standalone DLLs).
|
|
Francesco Toscano
|
May 15, 2007 - 5:11 AM
|
Many Thanks, your explanation has been very clear. Now I understand.
Anyway I am also considering the opputunity to use Language switch on fly. But I encuntered some problems adapting your sample to my needs. I found problem using the capability in SDI project without using the CExtCustomizeSite class. I know that It is my problem because I am new to Prof-uis and at the moment, I have not exactly understood how the CExtCustomizeSite class works. This because adapting your example project LanguageSwitcher removing the CExtCustomizeSite class capabilities, in my application SDI do not work. But, I repeat, I know it is my problem, of course I have not developed the code in the right way. If you have the possibility to send me my an example that works in SDI context without the CExtCustomizeSite, thi will be well accepted.
Again thank for you professional support. Francesco.
|
|
Technical Support
|
May 15, 2007 - 9:09 AM
|
The CExtCustomizeSite controls both toolbars and menus in customizable applications. It implements customize mode and shows customize dialog in it. It handles drag-n-drop events from toolbars and menus. It synchronizes content of multiple copies of built-in combo fields and text fields. It does other tasks specific for customizable toolbars and menus only. You can read the Prof-UIS Customization Subsystem articl and decide whether you need customizable tool bars and menus in your projects.
It is possible to localize the non-customizable application in the same way like demonstrated in the LanguageSwitcher sample application. Unfortunately we have no ready test project, but we already assisted our customers on this question. The on-the-fly localization should be implemented as complete re-update of the command descriptions in the command manager. This means you should re-register the command profile and update it from all the toolbar and menu resources like you did at startup. The CExtCmdManager::ProfileDestroy() method should be used to remove the command profile. The further invocations are similar to typical command profile registration and updating it from resources.
|
|
Chris Anderson
|
May 9, 2007 - 4:23 PM
|
I have built Prof-ui sample with unicode configuration. When I type and copy arabic/japanese unicode characters from the charmap tool to edit control of prof-ui sample, it is not showing the language character. Do I have to do any other setup?
Thanks
|
|
Chris Anderson
|
May 10, 2007 - 2:51 PM
|
Thanks. This works fine. Is there anyway to do silent mode setup? Basically we want to make sure our customer do not want to go through these manual steps. In our installer we want to make these settings. Please provide me if you have any information in this regard.
Thanks
|
|
Technical Support
|
May 14, 2007 - 8:26 AM
|
Unfortunately we don’t know how to perform the silent setup.
|
|
Chris Anderson
|
May 10, 2007 - 10:05 AM
|
Can you please try Japanese? On our systems could not see "East Asian" laguage characters.
Thanks
|
|
Technical Support
|
May 10, 2007 - 11:17 AM
|
Please make sure that you have installed files for Eastern Asian Languages in the following way. - Open Control Panel - Select Regional and Language options - Under the Languages tab check Install files for East Asian languages - Under the Advanced tab select Japanese for non-Unicode programs
|
|
Technical Support
|
May 10, 2007 - 8:53 AM
|
Actually we did not modify this behavior of the edit common control in CExtEdit and failed to reproduce this (see the sceenshot below).

|
|
Adam Keadey
|
May 9, 2007 - 1:22 PM
|
If I have three rows selected in the report grid, after I call ReportSortOrderUpdate I have only the last item clicked on selected.
I’m selecting by ctrl+click
this is the style I have set the grid to
ReportGridModifyStyle(0, __ERGS_COLLAPSE_AFTER_REGROUPING, false ); ReportGridModifyStyle(__ERGS_BOLD_GROUPS, 0, false); ReportGridModifyStyle(__EGBS_MULTI_AREA_SELECTION, 0, false); SiwScrollTypeHSet(__ESIS_STH_PIXEL, false); MultiAreaSelectionSet(true);
|
|
Technical Support
|
May 10, 2007 - 3:25 AM
|
The CExtReportGridWnd control allows you to restore only one focused row and not multiple selected rows. We had to impose this limitation because of complexity and CPU overload issues that arise when you have a grid that is grouped by some columns with some groups selected and possibly expanded.
|
|
Adam Keadey
|
May 10, 2007 - 6:38 AM
|
This seems confusing since you allow multiple selection, yet if you sort the list the selections are not restored.
I would request that this feature be implemented in a future release.
|
|
Chris Anderson
|
May 9, 2007 - 10:15 AM
|
I have frame/form inherited from CExtNCW. All theme changes are taking palce correctly. Now I need to get the background color of the frame/form. Earlier we were using GetSysColor(COLOR_WINDOW). Now I have modified to g_PaintManager->GetColor(COLOR_WINDOW). With this change I am not getting the actual background color of the form painted using the g_PaintManager. Do I have to use COLOR_BTNFACE? Please provide me all the mapping of colors that needs to be used when Prof-UI paint manager has been installed.
Thanks
|
|
Chris Anderson
|
May 10, 2007 - 10:10 AM
|
Thanks. This is usefull information.
|
|
Technical Support
|
May 10, 2007 - 8:24 AM
|
The 2000/XP paint managers are based on the color indices defined in the CExtPaintManager::e_translated_colors_t enumeration. The 2003/2005 paint managers are based both on the same color indices but their specific indices are defined in the CExtPaintManagerOffice2003::e_2003_colors_t enumeration. You can see how all the color constants are initialized in the CExtPaintManager::InitTranslatedColors() method and it is overridden in other paint managers. The most of 2003/2005 color values are computed depending on two color values called an accent color and a background color in the Windows XP user interface theme API and the ThemeColorizer sample just substitutes these two root color values. The Office 2007 themes in fact is a colorized version of the Office 2003 theme plus a set of bitmap based painting algorithms for such UI items as push/check/radio buttons, combo boxes and non client window areas.
You can always get paint manager colors using the g_PaintManager->GetColor() method rather than ::GetSysColor() , but please note some UI parts are painted using a gradient. As for the background gradient colors, they are defined in InitTranslatedColors() as _2003CLR_GRADIENT_DARK and _2003CLR_GRADIENT_LIGHT constants.
|
|
pere montana
|
May 9, 2007 - 8:49 AM
|
a customer, for security reasons, does not allow his standard users to write registry can I easily tell Profuis to use a .ini file instead ?
|
|
Technical Support
|
May 10, 2007 - 3:14 AM
|
The .ini format is too simple to be used for saving the state of UI controls and elements, which is describe by complex tree-like structures. Because of that we provide two types of state persistence: registry-based and CArchive -based. The latter allows you to save the UI state to a file on disk. You can see how it works in the StateInFile sample that comes with Prof-UIS. If it is not what you are looking for, please let us know.
|
|
Suhai Gyorgy
|
May 9, 2007 - 2:11 AM
|
Dear Support,
I have to solve the following scenario: I have to create a sublevel popup menu in Menubar and the same menu as the popup menu of a toolbar button. No problem in this one, I create a helper menu item in the .rc file and use CExtPopupMenuWnd::g_nMsgPrepareOneMenuLevel to know when I have to replace it with many other menu items. But in my case, along with the new menu items, I have to fill a variable, a kind of map, that maps these items with items specific to my application. Later, this map is used when one of the commands is fired in the dynamically created menu.
My problem is that I need to erase this map if no menu item is selected. Is there any message or overridable method that could be used to find out if my menu disappeared but no command was fired from it? I saw there was a TPMX_NO_WM_COMMAND flag that can be used with TrackPopupMenu, but I doubt I can use TrackPopupMenu in this scenario.
Any help would be appreciated. Chris
|
|
Technical Support
|
May 10, 2007 - 9:24 AM
|
We are sorry for the delay with this reply. It seems the HelpNotes sample demonstrates what you need: the notification about complete menu selection through the CExtPopupMenuWnd::g_nMsgItemCoveringNotification , CExtPopupMenuWnd::g_nMsgNotifyMenuExpanded and CExtPopupMenuWnd::g_nMsgNotifyMenuClosed registered messages.
|
|
Suhai Gyorgy
|
May 11, 2007 - 2:14 AM
|
I’ve examined your HelpNotes sample, checking when exactly CExtPopupMenuWnd::g_nMsgNotifyMenuClosed is fired. I also checked some snippets of your code, where you send this message. What I found is that the message is sent both when the menu closes because of selecting a menu item or when the menu closes without selecting a menu item. In both cases wParam is 0, so I can’t distinguish them.
RUI is used neither in your sample, nor in my code, so CExtPopupMenuWnd::g_nMsgNotifyMenuExpanded message would never be fired.
I don’t have any idea how CExtPopupMenuWnd::g_nMsgItemCoveringNotification message could help solve my problem.
In your sample there is another message, CExtPopupMenuWnd::g_nMsgPrepareDesktopBk, but I couldn’t find out what triggers this message and how it could help me.
Could you please provide some more information about any of these messages that would help me solve my initial problem?
Thank you! Chris
|
|
Technical Support
|
May 14, 2007 - 11:23 AM
|
We are sorry for the delay with this reply. It is not a problem to implement any new messages which will fit your requirements but we would like to discuss your task in details first. What we currently have: the dynamic menu construction in your program occurs when the appropriate popup menu level is displayed first time during the life time of one menu tree. The menu will be constructed dynamically again only when the menu tree will be tracked again. This should not be a problem because menus are typically menus have no very long life time. You can bind your custom data to each dynamically inserted menu item using some external map or using the user defined LPARAM values attached to each menu item. The CExtPopupMenuWnd::g_nMsgNotifyMenuClosed method allows you to catch the menu closing event and clean up the external maps if they are used. The WPARAM parameter of this method is equal to the invoked command itemās identifier or zero of the menu is closed without invoking any command. So, we guess you have everything for your task.
If you need to re-build the dynamically constructed menu parts while opening one menu level several times while one menu tree is tracked, then you should code the CExtPopupMenuWnd::g_nMsgPrepareOneMenuLevel registered message handler method with care about the dynamic menu sublevel can be already constructed. The per-menu-item LPARAM user-defined values can be used for marking dynamic menu sub trees.
|
|
Suhai Gyorgy
|
May 15, 2007 - 1:44 AM
|
I have to disagree to this part: "The WPARAM parameter of this method is equal to the invoked command item’s identifier or zero if the menu is closed without invoking any command." I tried your HelpNotes sample as you suggested. In that, there is only one message handler for 3 messages originally So I made a message handler for CExtPopupMenuWnd::g_nMsgNotifyMenuClosed and put the same code in it as in the original message handler. This way, I could check the value of the WPARAM parameter of the CExtPopupMenuWnd::g_nMsgNotifyMenuClosed message. It is always zero! My problem would be solved if it worked as you wrote, but it doesn’t.
|
|
Technical Support
|
May 15, 2007 - 8:16 AM
|
The CExtPopupMenuWnd::g_nMsgNotifyMenuClosed is sent with non zero WPARAM only if the CExtPopupMenuWnd::m_hWndNotifyMenuClosed property is not NULL . You can initialize the CExtPopupMenuWnd::m_hWndNotifyMenuClosed property of each displayed CExtPopupMenuWnd object while handling the CExtPopupMenuWnd::g_nMsgPrepareOneMenuLevel message. But this may be not the easiest way. We recommend you to use the CExtPopupMenuWnd::g_nMsgNotifyMenuClosed message for handling the cancel menu tracking event only. If the command item is invoked, then you can catch this event using standard MFC’s command handling mechanism for single command identifiers and/or for command ranges. Please let us know whether this approach is acceptable for you?
|
|
Suhai Gyorgy
|
May 16, 2007 - 2:34 AM
|
I’m not sure if I understand the approach you suggest, but with this new information about CExtPopupMenuWnd::m_hWndNotifyMenuClosed I can make an acceptable solution.
Thank you very much for your help!
|
|
Technical Support
|
May 16, 2007 - 9:45 AM
|
We mean you have to use the CExtPopupMenuWnd::g_nMsgNotifyMenuClosed message to catch the menu closing event without invocation of any command. If a menu was closed as a result of invoking some command item, then you have two ways of handling this:
1) Use the CExtPopupMenuWnd::g_nMsgNotifyMenuClosed message, but the CExtPopupMenuWnd::m_hWndNotifyMenuClosed property should be initialized as we described in the previous answer.
2) Use the MFC way based on the OnCmdMsg() virtual method or on the ON_COMMAND_RANGE message map entry. Both MFC ways allow you to handle a range of command events in one method.
|
|
Andrew Banks
|
May 8, 2007 - 4:09 PM
|
Also, I see two different paths on the right click. One where the cell is focused and one where it is not and a right click occurs in the cell.
I see the path when the right click occurs and the cell is not focused. But, I dont want this.
So, how can I: 1) Right click on the cell and make it focused. 2) Then using one path of code, override the edit context menu for the cell when it is focused.
Thanks,
|
|
Technical Support
|
May 10, 2007 - 9:01 AM
|
If you want to implement custom context menus from scratch, you should override the following virtual method of the CExtPropertyGridCtrl class:
virtual void OnPgcContextMenuTrack(
CWnd * pWndHit,
CPoint ptScreen,
CExtGridHitTestInfo * pHtInfo, // can be NULL
CExtPropertyItem * pPropertyItem, // can be NULL
CExtPropertyGridWnd * pPGW // can be NULL
); Your method should construct and track your popup menu and not invoke parent class method. But if you want to reconstruct context menus created by default, you should override the following virtual method of the CExtPropertyGridCtrl class: virtual bool OnPgcContextMenuReconstruct(
CExtPopupMenuWnd * pPopup,
CWnd * pWndHit,
CPoint ptScreen,
CExtGridHitTestInfo * pHtInfo, // can be NULL
CExtPropertyItem * pPropertyItem, // can be NULL
CExtPropertyGridWnd * pPGW // can be NULL
); The pPopup menu is constructed and contains default context menu items. You should modify your menu and return true if the menu has been successfuly initialized. If your method returns false , the pPopup menu will not be displayed.
|
|
Wes Aday
|
May 8, 2007 - 1:55 PM
|
Are the files on the downloads page the same as the most recent versions on the ftp server? I know that you guys make minor fixes sometimes and include it with the most recent version so was just wondering if the installations are updated as well.
Thanks
|
|
Technical Support
|
May 8, 2007 - 2:08 PM
|
The last official version of Prof-UIS is 2.64 and you can download this version from our download page. If you have a valid subscription you can also download the latest stable source code from our ftp server. The latest code includes all the fixes and updates. Because we have not officially released any new version since 2.64, then there is no need for installers.
PS We plan to release the next version next week so the installer will be updated too.
|
|
Eli Kaczer
|
May 8, 2007 - 10:37 AM
|
Our application requires that the user can toggle displaying the titlebar/caption of windows. We do this by modifying the window style: WS_CAPTION
The aforementioned works fine with most of the themes, but not for the 2007 themes (e.g., obsidian). For the 2007 themes, the window style modification remove the title text and disables mouse activity in the caption area, but the caption area of the window is still there. I would appreciate any workarounds to fix this issue.
We are deriving our window class from CExtNCW<CFrameWnd>
Thanks, Eli
|
|
Technical Support
|
May 8, 2007 - 1:24 PM
|
We confirm this issue and will fix this in one of the following versions.
|
|
Burak Petekkaya
|
May 8, 2007 - 7:22 AM
|
Dear Tech Support, First of all I want to mention that I did not reply the message under the "asserts while changing theme" thread because my priorities had been changed. But I will write an example for that problem.
Now, Our program had two options. User can use the program with ribbon bar or without ribbonbar. If the second option had been chosen the program opens with mfc defaults(menus,etc.) When a child frame had been created in the main frame we can resize or close the childframe properly but when we maximize the childframe the 3 buttons on top(minimize,restore,close) does not work. We can not even catch On_Close message on the childframe? What can the problem be? Below the creation of the child frame is shown,
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { try { if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1) return -1; } catch(CHaspException ex) { if (ex.GetExceptionId() != -1) AfxMessageBox(ex.GetExceptionMessage()); return -1; } // TODO: Add your specialized creation code here CMainFrame* pParent = (CMainFrame*) GetMDIFrame(); if ( this->GetSafeHwnd() != pParent->GetSafeHwnd() && this->GetSafeHwnd() != pParent->m_pGustoPanel->GetSafeHwnd() && this->GetSafeHwnd() != pParent->m_pOpenWinChildFrame->GetSafeHwnd()) { pParent->m_titleList.AddTail(this); pParent->UpdateOpenWindowsList(); } return 0; }
|
|
Technical Support
|
May 8, 2007 - 12:06 PM
|
We need to more details about your project in the non-ribbon mode. Was the ribbon bar created but now it is hidden? What Prof-UIS controls were also created in the frame window? It would be very helpful to look at main frame’s source code or receive a test project from you.
|
|
Burak Petekkaya
|
May 9, 2007 - 1:53 AM
|
here is the main frame oncreate method of our program We do not create ribbon bar when non-ribbon mode had been chosen.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CExtNCW < CMDIFrameWnd >::OnCreate(lpCreateStruct) == -1) return -1;
HICON hIcon = (::AfxGetApp())->LoadIcon(IDB_STANDARDBAR_RIBBON); ASSERT( (::AfxGetApp())->m_pszProfileName != NULL ); g_CmdManager->ProfileSetup((::AfxGetApp())->m_pszProfileName,GetSafeHwnd()); if (m_bUseRibbonBar) VERIFY(g_CmdManager->UpdateFromToolBar((::AfxGetApp())->m_pszProfileName,IDB_STANDARDBAR_RIBBON));
CBitmap bm; bm.LoadBitmap(IDB_STANDARDBAR_RIBBON);
m_imageList.Create(16,16,ILC_COLOR24,4,4); m_imageList.Add(&bm,(CBitmap*)NULL); if (m_bUseRibbonBar) {
if(!g_PaintManager.PaintManagerStateLoad("HKEY_CURRENT_USER\\Software","HKEY_CURRENT_USER\\Software\\Liko
m","HKEY_CURRENT_USER\\Software\\Likom\\Anki")) { g_PaintManager.InstallPaintManager( RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_LunaBlue) ); } if( ! m_wndRibbonBar.Create(NULL, this)) { TRACE0("Failed to create the m_wndRibbonBar toolbar\n"); return -1; // fail to create } SetupUiAdvancedOptions(); m_wndRibbonBar.InitLikomRibbonBar(); // it is for adds three additional themes m_wndToolBarUiLook.m_bEnableOffice2007r3 = true; // if( (! m_wndToolBarUiLook.Create( NULL, this, ID_MENU_GUSTO_UI ) ) || (! m_wndToolBarUiLook.ThemeSwitcherInit() ) ) { TRACE0("Failed to create the m_wndToolBarUiLook toolbar\n"); return -1; // fail to create }
m_wndToolBarUiLook.EnableDocking( CBRS_ALIGN_ANY ); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBarUiLook,AFX_IDW_DOCKBAR_LEFT);
if( m_wndMdiTabs.Create( this ) ) m_wndMdiTabs.OrientationSet( __ETWS_ORIENT_BOTTOM );
if( ! m_wndExtToolbar.Create(NULL, this, ID_TOOLBAR2)) { TRACE0("Failed to create the m_wndRibbonToolBar toolbar\n"); return -1; // fail to create }
m_wndExtToolbar.LoadToolBar(IDB_STANDARDBAR_RIBBON);
m_wndExtToolbar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndExtToolbar,AFX_IDW_DOCKBAR_TOP); } else { if (!m_wndToolBar.Create(this, IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create }
if (!m_wndToolBar2.Create(this) || !m_wndToolBar2.LoadBitmap(IDB_STANDARDBAR)) { TRACE0("Failed to create toolbar2\n"); return -1; // fail to create } }
// Customize ToolBar create ( NOT WS_VISIBLE ) if ( !m_CustomToolBar.Create(this, WS_CHILD|CBRS_TOP) ) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } m_CustomToolBar.SetWindowText(LIK_IDS_WINDOWTEXT_KULLANICI_ARAC_CUBUGU); m_CustomToolBar.SetBarStyle(m_CustomToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_ALIGN_ANY);
m_CustomToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_CustomToolBar,AFX_IDW_DOCKBAR_LEFT);
if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } CDC * pDC = GetDC();
CFont *poldfont = (CFont*)pDC->SelectStockObject(ANSI_VAR_FONT); pDC->GetTextMetrics(&tm); if (poldfont) pDC->SelectObject(poldfont);
m_dXMultiplier = ((double)tm.tmAveCharWidth+1) / 4; m_dYMultiplier = ((double)tm.tmHeight) / 8; ReleaseDC (pDC);
return 0; }
and here is another important part of mainframe to create menus
BOOL CMainFrame::CreateLoginFirma() { BeginWaitCursor(); CMenuTanimi *pMenuTanimidb = new CMenuTanimi(&_CriticalSectionDB); pMenuTanimidb->m_nPrivateToModul = 1; pMenuTanimidb->m_pMenuKullanici = NULL_DBA; pMenuTanimidb->m_bSerbestOku = TRUE;
SetStatusBarText(LIK_IDS_UNKNOWN_41); pMenuTanimidb->FillToolBarListWithoutDB(m_ToolbarButtonList); pMenuTanimidb->m_nPrivateToModul = 1;
CProjectAnkiApp *pApp = (CProjectAnkiApp*) AfxGetApp();
SetStatusBarText(LIK_IDS_UNKNOWN_43); pMenuTanimidb->FillMenuList(m_MenuList); pMenuTanimidb->m_bSerbestOku = FALSE; pMenuTanimidb->m_nPrivateToModul = 0;
CProjectAnkiApp *app = (CProjectAnkiApp *) AfxGetApp(); BOOL bRet = TRUE; CList<LIKACCEL,LIKACCEL&> listNewAccels;
//We have our own class for menus because our menus are dynamic. User can add or remove them if (!m_bUseRibbonBar) { CMenu *pMnu = this->GetMenu(); while ( pMnu->GetMenuItemCount() > 0 ) if ( !pMnu->DeleteMenu(0,MF_BYPOSITION) ) AfxMessageBox("DeleteMenu Çalışmadı"); CGustoMenu GustoMenu; GustoMenu.Initialize(); GustoMenu.m_pMainWnd = this; GustoMenu.FillMenuler(pMnu->m_hMenu, m_hGustoMenu,m_hGorunumMenu,m_hSeceneklerMenu); LIKACCEL accel; POSITION pos = GustoMenu.m_listNewAccels.GetHeadPosition(); while (pos) { accel = GustoMenu.m_listNewAccels.GetAt(pos); listNewAccels.AddTail(accel); GustoMenu.m_listNewAccels.GetNext(pos); } this->DrawMenuBar(); ASSERT (pMnu->GetMenuItemCount() > 0 );
m_nAccelBeforeGusto =CopyAcceleratorTable(m_hAccelTable,NULL,0)+listNewAccels.GetCount(); m_nMenuBeforeGusto =m_listExternalPrograms.GetCount(); m_nAciklamalarBeforeGusto=m_listStdMenuAciklamaImage.GetCount();
GustoMenu.FillKullaniciTanimliMenuler(m_hGustoMenu,NULL,app->m_pKullanici,m_listExternalPrograms,listNewAccels,m_bUseRibbonBar); } else { CGustoMenu GustoMenu; GustoMenu.Initialize(); GustoMenu.m_pMainWnd = this; LIKACCEL accel; POSITION pos = GustoMenu.m_listNewAccels.GetHeadPosition(); while (pos) { accel = GustoMenu.m_listNewAccels.GetAt(pos); listNewAccels.AddTail(accel); GustoMenu.m_listNewAccels.GetNext(pos); }
m_nAccelBeforeGusto =CopyAcceleratorTable(m_hAccelTable,NULL,0)+listNewAccels.GetCount(); m_nMenuBeforeGusto =m_listExternalPrograms.GetCount(); m_nAciklamalarBeforeGusto=m_listStdMenuAciklamaImage.GetCount(); GustoMenu.FillKullaniciTanimliMenuler(m_hGustoMenu,NULL,app->m_pKullanici,m_listExternalPrograms,listNewAccels,m_bUseRibbonBar); } EndWaitCursor(); ...................................
return TRUE; }
|
|
Technical Support
|
May 10, 2007 - 9:21 AM
|
Unfortunately we cannot say what is wrong. Would you create a stripped version of your project with UI code only and send it to us?
|
|
tera t
|
May 7, 2007 - 10:54 PM
|
Hello
What kind of function is CExtHookSink?
Please teach it for your information.
|
|
Technical Support
|
May 8, 2007 - 11:58 AM
|
The CExtHookSink class allows the classes derived from it to watch for and/or intercept messages sent to some other windows before these messages are delivered to these windows. For instance, the CExtMenuControlBar class, which is derived from CExtHookSink , implements a menu bar. This allows the menu bar to hook the MDI client area and active MDI child frame window in MDI applications. This makes it possible to synchronize menu bar’s buttons when the active MDI child frame window is created and destroyed or when it changes . Besides in the menu bar the MDI document button and [_][o][x] button are displayed when the active MDI child frame becomes maximized. Otherwise these buttons get hidden.
Please note you don’t need to use the CExtHookSink class in your projects if you are not going to code your own controls.
|
|
tera t
|
May 9, 2007 - 2:27 AM
|
|
|
Chris Anderson
|
May 7, 2007 - 6:28 PM
|
I am using customization in my application. However, I would like the "Large icons in toolbar" setting to map to a smaller size than doubling the icon size. How would I change it to map to say 1 1/2 times the regular icon size?
|
|
Chris Anderson
|
May 10, 2007 - 9:30 AM
|
I have a set of small icons as well as a set of large icons with same identifiers. The large icons that I have are of size 24X24. With Prof UIS customization when I choose to display the toolbar icons in large size it displays them as 32X32. This makes the icons look ugly when scaled up from 16X16. How would I go about using my 24X24 large icons from the customize dialog box option to display as large icons on toolbar?
|
|
Technical Support
|
May 14, 2007 - 3:44 AM
|
As we mentioned above, we will add this functionality soon so you can use this feature in your project just like you described this.
|
|
Offer Har
|
May 14, 2007 - 8:51 AM
|
Dear Support,
This feature sound very useful - what version do you predict will include this feature?
Thanks, Ron.
|
|
Chris Anderson
|
May 8, 2007 - 2:10 PM
|
Where is this global variable declared?
|
|
Technical Support
|
May 10, 2007 - 7:54 AM
|
We are sorry for this inaccuracy. In fact, this feature is not yet implemented but we can regard this as a feature request and implement it soon. We could implement this in the following way. There could be a global variable (e.g., of the float type ) that specifies the factor by which small icons will be scaled up. We could also add one more icon for each command. Such an icon could be then used in the big icon mode. Such approach makes this more flexible. If you do not have the second set of large icons, then small icons will just be scaled up by the above mentioned factor. If you set large icons, then they will be used instead and the toolbar height will be determined by the height of large icons. Please let us know if this could be suitable for you.
|
|
Technical Support
|
May 8, 2007 - 1:01 PM
|
At the moment this works exactly as in Microsoft applications. You can however use another ratio by changing the properties of the CSize g_bigIconSize global variable, which is by default set to 32x32, for example: g_bigIconSize.cx = 24;
g_bigIconSize.cy = 24;
|
|
Vrinda Savargaonkar
|
May 7, 2007 - 8:45 AM
|
Dear Sir / Madam
I am using prof uis v-2.64. I am using MDI Ribbonbar in my application . Now I want to know how to apply short cut keys to each Ribbonbar & ribbon page . Also how to apply tooltip to each node of Ribbon Bar application .
Please give me a solution. Thanks
|
|
Vrinda Savargaonkar
|
May 9, 2007 - 7:50 AM
|
Dear Sir
I am still unable to download .
Please resend it .
Thanks.
|
|
Vrinda Savargaonkar
|
May 8, 2007 - 6:53 AM
|
Dear Sir /Madam
I am unable to download . Please mail me ftp url & which password & username i use for ftp site.
Thanks
|
|
Technical Support
|
May 10, 2007 - 8:01 AM
|
We sent the download information again, this time via gmail. Please let us know if you received it.
|
|
Technical Support
|
May 8, 2007 - 12:10 PM
|
We sent you this info via email.
|
|
Technical Support
|
May 7, 2007 - 11:53 AM
|
Please download the latest source code from our ftp server (profuis2641(2007-05-07).zip). This code update includes support for both ribbon screen tips and ribbon key tips. Now both key tips and screen tips are initialized in the updated ribbon samples. For example, here is the code for the Paste command: CExtRibbonNode * pNodePaste =
new CExtRibbonNode( ID_EDIT_PASTE, 0, NULL, 0, _T("Paste") );
pNodePaste->CmdKeyTipSet( new CExtCustomizeCmdKeyTip( _T(’V’) ), false );
pNodePaste->RibbonILE_RuleArrayGet().RemoveAll();
VERIFY( pNodePaste->m_iconBig.m_bmpNormal.LoadBMP_Resource( MAKEINTRESOURCE(ID_EDIT_PASTE_BIG) ) );
pNodePaste->m_iconBig.m_bmpNormal.Make32();
pNodePaste->m_iconBig.m_bmpNormal.AlphaColor( RGB(255,0,255), RGB(0,0,0), 0 );
pCmdScreenTip = new CExtCustomizeCmdScreenTip;
pCmdScreenTip->CaptionMainSet( _T("Paste") );
pCmdScreenTip->TextMainSet( _T("Paste the contents\nof the Clipboard.") );
pCmdScreenTip->BmpMainGet().LoadBMP_Resource( MAKEINTRESOURCE(ID_EDIT_PASTE_BIG) );
pCmdScreenTip->BmpMainGet().Make32();
pCmdScreenTip->BmpMainGet().AlphaColor( RGB(255,0,255), RGB(0,0,0), 0 );
pCmdScreenTip->CaptionSecondarySet( _T("Press F1 for more help.") );
pCmdScreenTip->BmpSecondaryGet().LoadBMP_Resource( MAKEINTRESOURCE(ID_APP_ABOUT_16x16) );
pCmdScreenTip->BmpSecondaryGet().PreMultiplyRGBChannels( false );
pNodePaste->CmdScreenTipAttach( pCmdScreenTip );
pCmdScreenTip = new CExtCustomizeCmdScreenTip;
pCmdScreenTip->CaptionMainSet( _T("Paste") );
pCmdScreenTip->TextMainSet( _T("Click here for more options such as\npasting only the values or\nformatting.") );
pCmdScreenTip->BmpMainGet().LoadBMP_Resource( MAKEINTRESOURCE(ID_EDIT_PASTE_BIG) );
pCmdScreenTip->BmpMainGet().Make32();
pCmdScreenTip->BmpMainGet().AlphaColor( RGB(255,0,255), RGB(0,0,0), 0 );
pCmdScreenTip->CaptionSecondarySet( _T("Press F1 for more help.") );
pCmdScreenTip->BmpSecondaryGet().LoadBMP_Resource( MAKEINTRESOURCE(ID_APP_ABOUT_16x16) );
pCmdScreenTip->BmpSecondaryGet().PreMultiplyRGBChannels( false );
pNodePaste->CmdScreenTipAttach( pCmdScreenTip, false );
pRibbonGroup->InsertNode(
NULL,
pNodePaste
); You can assign a key tip using one line of code (the CmdKeyTipSet() method call). A screen tip consists of two parts: main and secondary. Each part consists of the caption, bitmap and multiline text. All the parts are optional. The main part is located at the top of screen tip when the secondary part is at the bottom. If both parts are initialized, then the horizontal separator is displayed between them.
|
|
tera t
|
May 7, 2007 - 2:15 AM
|
Hello.
I start programs such as AfxBeginThread in CExtButton. When AfxBeginThread is finished
It is terminated abnormally at the following place.
----------------------------------------------------------------- LRESULT lResult = ::CallWindowProc( pWNDPROC, hWndHooked, nMessage, wParam, lParam ); if( ::IsWindow( hWndHooked ) ) { nSinkCount = (int)m_HookSinkArray.GetSize(); for( nSinkIdx = 0; nSinkIdx < nSinkCount; nSinkIdx++ ) { CExtHookSink * pHookSink = terminated abnormally -----> m_HookSinkArray[ nSinkIdx ];
if( pHookSink == NULL ) continue; pHookSink->OnPostHookWndMsg( lResult, m_hWndHooked, nMessage, wParam, lParam ); } // for( nSinkIdx = 0; nSinkIdx < nSinkCount; nSinkIdx++ ) } // if( ::IsWindow( hWndHooked ) ) return lResult; };
}; // struct CExtHookSink::HookChains_t
----------------------------------------------------------------- Call Func
File=[ExtToolControlBar.cpp],Func=[UINT CExtBarButton::GetStyle() const] File=[ExtToolControlBar.cpp],Func=[void CExtToolControlBar::SetButtonStyle(int nIndex, UINT nStyle)] File=[ExtToolControlBar.cpp],Func=[CExtBarButton * CExtToolControlBar::_GetButtonPtr(int nIndex) const] File=[ExtToolControlBar.cpp],Func=[UINT CExtBarButton::GetStyle() const] File=[ExtToolControlBar.cpp],Func=[UINT CExtToolControlBar::GetButtonID(int nIndex) const] File=[ExtToolControlBar.cpp],Func=[CExtBarButton * CExtToolControlBar::_GetButtonPtr(int nIndex) const] File=[ExtToolControlBar.cpp],Func=[UINT CExtBarButton::GetCmdID(] File=[ExtCmdManager.cpp],Func=[CExtCmdManager * CExtCmdManager::CExtCmdManagerAutoPtr::operator -> ()] File=[ExtCmdManager.cpp],Func=[__EXT_MFC_SAFE_LPCTSTR CExtCmdManager::ProfileNameFromWnd(] File=[ExtCmdManager.cpp],Func=[CExtCmdManager * CExtCmdManager::CExtCmdManagerAutoPtr::operator -> ()] File=[ExtCmdManager.cpp],Func=[CExtCmdItem * CExtCmdManager::CmdGetPtr(] File=[ExtCmdManager.cpp],Func=[CExtCmdProfile * CExtCmdManager::ProfileGetPtr(] File=[ExtCmdManager.cpp],Func=[CExtCmdItem * CExtCmdProfile::CmdGetPtr(] File=[ExtToolControlBar.cpp],Func=[CExtBarButton * CExtToolControlBar::_GetButtonPtr(int nIndex) const] File=[ExtToolControlBar.cpp],Func=[void CExtBarButton::OnUpdateCmdUI(] File=[ExtToolControlBar.cpp],Func=[CExtToolControlBar * CExtBarButton::GetBar()] File=[ExtToolControlBar.cpp],Func=[bool CExtBarButton::IsSeparator() const] File=[ExtToolControlBar.cpp],Func=[UINT CExtBarButton::GetStyle() const] File=[ExtHook.cpp],Func=[LRESULT CALLBACK CExtHookSink::HookChains_t::g_HookWndProc(] File=[ExtTabPageContainerWnd.cpp],Func=[bool CExtTabPageContainerWnd::OnHookWndMsg(] File=[ExtHook.cpp],Func=[bool CExtHookSink::OnHookWndMsg(] File=[ExtComboBox.cpp],Func=[LRESULT CExtComboBox::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ] File=[ExtComboBox.cpp],Func=[LRESULT CExtComboBoxBase::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ] File=[ExtHook.cpp],Func=[void CExtHookSink::OnPostHookWndMsg(] File=[ExtHook.cpp],Func=[LRESULT CALLBACK CExtHookSink::HookChains_t::g_HookWndProc(] File=[ExtTabPageContainerWnd.cpp],Func=[bool CExtTabPageContainerWnd::OnHookWndMsg(] File=[ExtHook.cpp],Func=[bool CExtHookSink::OnHookWndMsg(] File=[ExtButton.cpp],Func=[LRESULT CExtButton::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ] File=[ExtButton.cpp],Func=[CExtPopupMenuTipWnd * CExtButton::OnAdvancedPopupMenuTipWndGet() const] File=[ExtHook.cpp],Func=[void CExtHookSink::OnPostHookWndMsg(] File=[ExtHook.cpp],Func=[LRESULT CALLBACK CExtHookSink::HookChains_t::g_HookWndProc(] File=[ExtTabPageContainerWnd.cpp],Func=[bool CExtTabPageContainerWnd::OnHookWndMsg(] File=[ExtHook.cpp],Func=[bool CExtHookSink::OnHookWndMsg(] File=[ExtButton.cpp],Func=[LRESULT CExtButton::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ] File=[ExtButton.cpp],Func=[CExtPopupMenuTipWnd * CExtButton::OnAdvancedPopupMenuTipWndGet() const] File=[ExtHook.cpp],Func=[void CExtHookSink::OnPostHookWndMsg(] -----------------------------------------------------------------
This malfunction is for release and always occurs.
Had better I prepare for a sample program?
|
|
tera t
|
May 7, 2007 - 3:16 AM
|
Hello.
I was recovered in prof-uis2.64-[0426] when I confirmed it. When is this Version uploaded?
|
|
tera t
|
May 7, 2007 - 3:23 AM
|
Hello.
Are prof-uis 2.64-[0426] announced as Prof-uis2.65?
|
|
Technical Support
|
May 7, 2007 - 11:29 AM
|
We will announce a new release soon. At the moment Prof-UIS 2.64 is an officially released version. The source code in profuis264(2007-04-26).zip is the latest source code we put out on our ftp server.
|
|
tera t
|
May 7, 2007 - 6:15 PM
|
Hello.
>We will announce a new release soon.
Will it be announced in one or two weeks? Please answer if it seems to be answered.
|
|
Technical Support
|
May 8, 2007 - 11:47 AM
|
Most probably the new version will be released next week.
|
|