Within Visual Studio 2017 I created an MFC dialog-based application from scratch. In the dialog editor I dropped a Tab Control on then used Add Variable... to create a data member of type CTabCtrl and added a couple of lines in OnInitDialog() to create some empty tabs. The result is here:
When I add content (dialogs) to the tabs, and the dialogs are smaller than the tab control, the white background looks especially ugly.
If I do the same in Visual Studio 2008 the background is grey, like the dialog.
My questions are:
Why did this change from VS2008 to VS2017?
What can I do simply to make the background the same as the dialog? My current fix is to derive from CTabCtrl, and handle WM_ERASEBKGND and WM_PAINT (as mentioned here) which is much more code than I want to support.
I have an OCX (DLL) developed in Visual Basic 6.0. This OCX has several controls within the project, and I
am converting or translating that OCX to Visual C++ 2012.
So far I can create a MFC ActiveX project with the
wizard and it works, but I have not found a way to add a different controls to the same OCX ,
so I do not know if that is even possible in Visual C++ 2012, because I want to have a single ActiveX OCX / DLL
with all the controls inside as the OCX is to maintain compatibility cause I want to replace the
OCX with a new version.
You will find what you are looking for in the Project menu -> Add Class...
You can create a dialog in your ActiveX control and put multiple controls on the dialog, just like any other dialog. If you don't want it to look like a dialog then turn off the titlebar and border styles on the dialog template. This will give you a child window that the user cannot move and it should blend in visually with the parent window.
I want one code window to have two duplicates. I want to place one code window on one monitor, and second code window on the second, extended monitor.
As I Go on typing, I want second window to display the code that I type on the first monitor. Is it possible in visual studio 2012?
It would be very helpful for me while teaching the trainees.
I haven't got a copy installed here to test but I believe the answer you're looking for lies hidden under the Window menu..
Activate the window you wish to duplicate and under Window on the toolbar choose New Window. This will create a duplicate of the active document. Under the Window menu again you should find the option to make the window Floating
Update for Visual Studio 2013: Vertical split of cshtml window in VS2013
In VS2012, the feature closest to what you are after is called "Split" and its under the Window menu when you have a code file selected. This creates a split view of the selected code file within the original window.
I don't know of any way to seperate the copies from each other and float them on different screens.
I'm trying to understand InstallShield (2009)/InstallScript on the fly, because I'm modifying someone else's installation script.
One of the dialogs during the installation procedure previously had one textbox on it, asking for a SQL Server instance, assuming a certain database name. Now I've just completed an enhancement enabling you to choose any database name, not just the default, and I need to add a field to this dialog so the user can input the chosen DB name. Monkey see, monkey do, just make a new control and duplicate and adapt whatever functionality the form had for the first textbox - easy enough, right?
Umm... problem here. It seems that the "SdShowDlgEdit1" form is a generic thing that gets shipped with InstallShield, and is used all over, wherever you have a dialog that needs one textbox. Change that form, and it changes everywhere that it's called... so now I have a spurious 2nd textbox appearing all over my installation wherever there was a single text box before.
Oops. Undo changes, and change the reference to "SdShowDlgEdit2", which is - you guessed it - InstallShield's standard form for dialogs needing 2 textboxes. Now that would be great.... excepting that the previous developer got there before me and added a "browse" button to that form for a place where he needed the 2nd text box to contain a folder path. I don't want that "browse" button, and I can't delete it.
So I think, why don't I create a custom form of my own, and not get under anyone else's toes? So I clone the form, rename the new instance to "EnterDbDetails", delete the "Browse" button and make the form look just right.
Then I go back into the InstallScript to redirect to "EnterDbDetails" and discover that the EzDefineDialog function requires me to pass in the "Resource ID" of the form. Now what was it again... 12018... great... fill in all necessary details, compile, build, and give it a whirl. Looks lovely, all the right default values are filled into the two text boxes - but hey! Why is the browse button there? And why is the text on the labels not what I set?
Back to InstallScript, check the Resource ID - turns out that the original "SdShowDlgEdit2" also has a Resource ID of 12018. Well, that explains that nicely. Silly that InstallShield allows you to have two forms with the same ID, but whatever... So let's go back to my "EnterDbDetails" form and change the ID...
... but the Resource Identifier property is read-only! WTF?
So now I can't use any of the standard forms, and I can't use a custom form because it won't let me change the resource ID.
I am stumped. Can anyone please explain how you are supposed to do something like this, which really ought to be the simplest thing in the world?
Creating New Custom Dialogs in InstallScript and InstallScript MSI Projects
Quote from the site (2015 edition) :
To create a custom dialog, you need to perform the following general steps:
Use the New Dialog Wizard to add a new custom dialog to your project. For more information, see Using the New Dialog Wizard to Add a New Custom Dialog to an InstallScript or InstallScript MSI Project.
Add controls to the dialog. For more information, see Adding a Control to a Dialog in an InstallScript or InstallScript MSI Project.
Create a script function that loads the dialog into memory, displays it on the screen, handles the end user’s interaction with the dialog’s controls, and closes the dialog when the user is finished with it. For more information, see Using InstallScript to Implement Custom Dialogs.
To create a new dialog:
Open the Dialogs view. The Dialogs view is located in the User Interface section of the View List.
Right-click the All Dialogs explorer and then click New Dialog. The Dialog Wizard opens. Click Next to dismiss the Welcome panel.
In the Dialog Template panel, click Interior Wizard Panel, and select the Let me insert this dialog in a User Interface sequence check box.
In the User Interface panel, select Installation in the User Interface Sequence list. In the list of dialogs, select InstallWelcome. Based on these selections, InstallShield will insert your new dialog in sequence immediately following the InstallWelcome dialog.
In the Dialog Position and Condition panel, leave the default settings, and click Finish. Your new dialog appears in the Dialogs list.
Right-click the dialog and select Rename. Rename the dialog WelcomeBitmap.
Using the same technique, you can insert additional dialogs in your installation’s user interface.
In this step, you will modify the WelcomeBitmap dialog that you just created:
First, create a bitmap (using a program like Microsoft Paint) that measures 300 by 150.
Open the Dialogs view.
Expand the WelcomeBitmap dialog’s node. Click English (United States) to open the Dialog Editor.
Click the Dialog Bold Title text box at the top of the dialog. In the Text field, type Welcome Bitmap. This changes the dialog’s main title.
Click the Dialog Normal Description text box at the top of the dialog. In the Text field, type Displays my welcome bitmap. This changes the dialog’s description.
Click the Bitmap button on the Dialog Control toolbar and use the cursor to drag a box on the dialog. Set the Height to 150 and the Width to 300.
In the File field browse to the bitmap file that you created in step 1.
After rebuilding the project (by pressing F7) and running it (by pressing CTRL+F5), the Welcome Bitmap dialog will appear after the Install Welcome dialog.
You need to edit the ResourceID (to something unique) in the Dialog table which is found in the Direct Editor under Additional Tools section in the Installation Designer.
By custimizing standard InstallShield dialogs, like sdWelcome, sdFinish and sdFinishReboot you will be able to use the dialogs default script APIs with the performed customization's
i want indentify all mouse click event like WM_LBUTTONDOWN and WM_LBUTTONUP, on picture control in vc++,
but i am not able to do this
please tell me how can i identifies all events separately.
thanks in advance.
You should enable property "Notify" of PictureControl to get the event.
You can add an event handler to the picture control using Visual Studio IDE and modify the code for handler function. That should be easy.
I'm guessing you're using MFC. In that case you have to add an activex control to your dialog.
i. Adding the control: To add such a control to your dialog box right click your dialog box and click the option called "Insert ActiveX Control". A modal dialog box appears. You have to select "Microsoft Forms 2.0 Image". Click OK. Control is added.
ii. Select an image: Right click your newly added control and select "Properties". Select your desired image clicking the picture attribute. Also there are other properties to customize the picture i.e, stretching, clipping image etc. You'll see your image is loaded into the control.
iii. Adding the handler function: Right click the control and select "Add Event handler". From the new modal dialog box select "MouseDown" or "MouseUp" as message type and click "add and edit". Add your code to achieve desired behavior.
N.B: MFC is not available with Visual C Express. You need a professional version of VS to compile MFC code.