I have sometimes problems to create windows applications which support XP themes. Somehow controls disappear if I select "Support Windows XP Themes" from the project options.
For example, if I compile the code below with XP themes, the control called "button" is not visible and I don't know why. Does anyone else know?
/ Make the class name into a global variable /
char szClassName[ ] = "WindowsApp";
HWND button;
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd; / This is the handle for our window /
MSG messages; / Here messages to the application are saved /
WNDCLASSEX wincl; / Data structure for the windowclass /
/*TheWindowstructure*/wincl.hInstance=hThisInstance;wincl.lpszClassName=szClassName;wincl.lpfnWndProc=WindowProcedure;/*Thisfunctioniscalledbywindows*/wincl.style=CS_DBLCLKS;/*Catchdouble-clicks*/wincl.cbSize=sizeof(WNDCLASSEX);/*Usedefaulticonandmouse-pointer*/wincl.hIcon=LoadIcon(NULL,IDI_APPLICATION);wincl.hIconSm=LoadIcon(NULL,IDI_APPLICATION);wincl.hCursor=LoadCursor(NULL,IDC_ARROW);wincl.lpszMenuName=NULL;/*Nomenu*/wincl.cbClsExtra=0;/*Noextrabytesafterthewindowclass*/wincl.cbWndExtra=0;/*structureorthewindowinstance*//*UseWindows's default color as the background of the window */wincl.hbrBackground=(HBRUSH)COLOR_BACKGROUND;/*Registerthewindowclass,andifitfailsquittheprogram*/if(!RegisterClassEx(&wincl))return0;/*Theclassisregistered,let's create the program*/hwnd=CreateWindowEx(0,/*Extendedpossibilitesforvariation*/szClassName,/*Classname*/"WindowsApp",/*TitleText*/WS_OVERLAPPEDWINDOW,/*defaultwindow*/CW_USEDEFAULT,/*Windowsdecidestheposition*/CW_USEDEFAULT,/*wherethewindowendsuponthescreen*/544,/*Theprogramswidth*/375,/*andheightinpixels*/HWND_DESKTOP,/*Thewindowisachild-windowtodesktop*/NULL,/*Nomenu*/hThisInstance,/*ProgramInstancehandler*/NULL/*NoWindowCreationdata*/);button=CreateWindowEx(WS_EX_TOPMOST,"BUTTON","OK",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,65,65,127,95,hwnd,0,hThisInstance,0);/*Makethewindowvisibleonthescreen*/ShowWindow(hwnd,nFunsterStil);/*Runthemessageloop.ItwillrununtilGetMessage()returns0*/while(GetMessage(&messages,NULL,0,0)){/*Translatevirtual-keymessagesintocharactermessages*/TranslateMessage(&messages);/*SendmessagetoWindowProcedure*/DispatchMessage(&messages);}/*Theprogramreturn-valueis0-ThevaluethatPostQuitMessage()gave*/returnmessages.wParam;
}
/ This function is called by the Windows function DispatchMessage() /
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) / handle the messages /
{
case WM_DESTROY:
PostQuitMessage (0); / send a WM_QUIT to the message queue /
break;
default: / for messages that we don't deal with /
return DefWindowProc (hwnd, message, wParam, lParam);
}
return0;
}
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi!
I have sometimes problems to create windows applications which support XP themes. Somehow controls disappear if I select "Support Windows XP Themes" from the project options.
For example, if I compile the code below with XP themes, the control called "button" is not visible and I don't know why. Does anyone else know?
include <windows.h>
using namespace std;
/ Declare Windows procedure /
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/ Make the class name into a global variable /
char szClassName[ ] = "WindowsApp";
HWND button;
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd; / This is the handle for our window /
MSG messages; / Here messages to the application are saved /
WNDCLASSEX wincl; / Data structure for the windowclass /
}
/ This function is called by the Windows function DispatchMessage() /
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) / handle the messages /
{
case WM_DESTROY:
PostQuitMessage (0); / send a WM_QUIT to the message queue /
break;
default: / for messages that we don't deal with /
return DefWindowProc (hwnd, message, wParam, lParam);
}
}
You can try initializing common controls, see this post:
https://sourceforge.net/forum/message.php?msg_id=2486139
I remember someone having similar problems before, I don't recall if we ever got a solution, so let us know if this helps.