MFC - How can I add a spin control to a ribbonbar - mfc

I'm using a ribbon style application and I can't seem to find a way to add a spin control to my ribbonbar. In the list of controls of my toolbox there seems to be a spinEdit control but when I add it to the ribbon bar it looks like a ribbonEdit control without showing the up and down buttons that are supposed to be embedded with it. It's there a way to enable this control to behave like a spinEdit or does this control not work at all? Thanks in advance.

Call EnableSpinButtons() on the edit control - http://msdn.microsoft.com/en-us/library/vstudio/bb982261.aspx . Instantiate it like this:
CMFCRibbonEdit* edit = new CMFCRibbonEdit(ID_SOME_ID, 75);
edit->EnableSpinButtons(10, 20);
pPanel->Add(edit);

Related

How to make customized widgets take keyboard events like textctrls

Platform Windows
Created a control using windows API: CreateWindowExW and set it's parent to a panel hwnd
But it seems the control does not handle arrow keys, enter keys and tab keys properly.
Is there any flag on wxwidgets give any control created by CreateWindowExW the same ability like edit controls to capture arrow keys, enter keys and tab keys?
The problem might be due to not using WS_EX_CONTROLPARENT for your control when creating it, this style is needed for the built-in tab navigation to work.
And while I don't think it's going to help with your particular problem, I'd still like to say that embedding a native control in an application using wxWidgets is not quite as simple as just giving it the HWND of an existing control as parent, you may want to look at wxNativeWindow (new in wxWidgets 3.1.0) for how to do it correctly.

NSIS - Default Installer Width/Height

i have several setups created with nsis (modernui).
Is there any possibility to change the default width/height of the installer?
Regards and thanks,
Dennis
The NSIS UI is actually a main dialog window with a inner dialog where the page content is displayed:
If you want to display multiple pages then you pretty much have to accept this design and use a 3rd-party tool like Resource Hacker to redesign the dialogs. If you want to do this then you should create a copy of "NSIS\Contrib\UIs\modern.exe" and edit it, then use the ChangeUI instruction to select the new UI file (!define MUI_UI yourfile.exe (and possibly the other MUI_UI_* defines) when using the MUI).
On the other hand, if you are developing a autorun splash screen or something like that then you could resize the inner dialog so it covers the whole outer dialog area.
There is no simple attribute that just sets the desired width and height because all controls on all pages also need to be resized and moved...
Have a look at this tool: Graphical Installer for NSIS (a little self promo :)
This tool is capable of changing dimensions of installer + has a lot of other features like installer skinning and many more.

Embedding dialogs in main dialog and switching them with button click in MFC

I have a design like below:
So basically, I want to embed three dialogs in the application main dialog and switch between them, for each button click i.e., button 1 will show dialog one , button 2 will hide dialog 1 and show dialog 2 .. and so on.
Each dialog will be having a different design and functions.
I tried using CPropertySheet class to Add pages but its GUI is different. It has either option for navigating the dialogs using next / back button , or from a tab control.
None of which is as per my requirement.
So I want to know is it possible to have a design like this in MFC ? If yes how? Which Class/ control should I use.
Any help will be appreciated.
What you can do is use a normal CDialog class, add your buttons to it and also create a frame/rect as a placeholder for where your embedded dialogs are to appear. The following piece of code will create and position your embedded dialog.
CRect rect;
CWnd *pHost = GetDlgItem(ID_OF_YOUR_FRAME_RECT);
pHost->GetWindowRect(&rect);
ScreenToClient(&rect);
pDialog->Create(ID_OF_YOUR_DIALOG, this);
pDialog->MoveWindow(&rect);
pDialog->ShowWindow(SW_SHOW);
On button clicks, you hide the previously shown dialog (SW_HIDE) and show your selected dialog(SW_SHOW) with ShowWindow(...).
If you create your embedded dialogs with IDD_FORMVIEW style in the add resource editor it'll have the proper styles for embedding.
Another option is probably to use an embedded PropertySheet and hide the tab row and programatically change the tabs on the button clicks. I just find it to be too much fuzz with borders, positioning, validation and such for my liking.
If you have the MFC Feature Pack, that first came with VS2008 SP1 and is in all later versions, you might like to consider CMFCPropertySheet. There are a number of examples on the linked page, that are very similar to your design.
For example, this:
What worked for me just using dialog based application is SetParent() method. Dont know why nobody mentioned it. It seems to work fine.
I am doing like below:
VERIFY(pDlg1.Create(PanelDlg::IDD, this));
VERIFY(pDlg2.Create(PanelDlg2::IDD, this));
VERIFY(pDlg3.Create(PanelDlg2::IDD, this));
::SetParent(pDlg1.GetSafeHwnd(), this->m_hWnd);
::SetParent(pDlg2.GetSafeHwnd(), this->m_hWnd);
::SetParent(pDlg3.GetSafeHwnd(), this->m_hWnd);
Now I can show or hide a child dialog at will (button clicks) as below:
pDlg1.ShowWindow(SW_SHOW);
pDlg2.ShowWindow(SW_HIDE);
pDlg3.ShowWindow(SW_HIDE);

using SHAutoComplete with CEdit control

I am developing an MFC application, can i use SHAutoComplete with a CEdit control? Also is there any ready made auto complete controls are available? or i need to use write all the code for creating the list box below the edit control as user types in edit control?
Just pass CEdit's m_hwnd member to SHAutoComplete. I don't think that extension warrant another class. The listbox is created by the AutoComplete object created by SHAutoComplete.
SHAutoComplete helps to autocomplete paths (system or URL).
If this is a combo box and you want to use autocomplete for suggesting string contained in the combo, you have to write a code to handle it.
There are samples you can find. One I found (working):
http://www.ucancode.net/Visual_C_MFC_COM_faq/Visual-C-Auto-completion-ComboBox-CComboBox.htm

How to hide/collapse main menu in a win32/mfc application

I always been interested on how we can accomplish this (hide/show the main menu using the alt key), and now some applications do this very often. One that really please me is the visual studio 2010 with this plugin:
http://visualstudiogallery.msdn.microsoft.com/bdbcffca-32a6-4034-8e89-c31b86ad4813?SRC=VSIDE
(firefox also do this, but i think that is in a different way)
Can anyone explain me how this can be achieved or if you known of any sample project that demonstrate this please tell me.
(what i can see in some replies here in stack is that we have to destroy the menu when is to hide and create it when is to show?! but this seems a bit bad solution...)
Thanks
The SetMenu function lets you add/remove the menu from the window. It does not destroy the menu.
Note that most applications which have the dynamic menu hide/show behavior are not really showing a menu. They're showing a custom control that looks like a menu.
You might also take a look at MFC support for auto hiding menus. I used this technique and it worked really well.
in CMainFrame::OnCreate I did
m_wndMenuBar.ShowWindow(SW_HIDE);
which actually works fine in our project
I stumbled across a related pit fall that will show a hidden main frame without your consent:
Whenever the focus for a child window in an MDI application changes (e.g. due to right clicking in it), the function CMDIChildWnd::OnMDIActivate will be called, which in turn shows the main menu (even if it was removed or destroyed previously) of the MDI application.
This works basically by adding the saved main manu from the underlying's CMDIChildWnd m_hMenuShared variable.
A quick&dirty hack to prevent this, is setting m_hMenuShared to NULL (it's protected in CMDIChildWnd so this needs a custom derived child class of CMDIChildWnd) for all child frames.