Thread overview | ||||||
---|---|---|---|---|---|---|
|
March 11, 2003 Background color problem | ||||
---|---|---|---|---|
| ||||
I'm having a problem with the background color of STATIC, GROUPBOX, CHECKBOX, and RADIOBUTTON controls using the DMC v8.32. Possibly other controls as well, but these are the only ones I've tried. When I compile the program with the Borland C/C++ 5.5 commandline compiler, all controls show the same background as the main window, as set in the WNDCLASSEX structure. Using the LCCWin32 C compiler, I have the same results. But with the DMC compiler, these controls always have a white background, no matter what I do. I also had the same problen with the OpenWatcom 1.0 compiler, but that problem was solved by adding a "system win95" directive to the linker command line. Is there a similar option for DMC? I'm using "dmc -mn win.cpp gdi32.lib" to compile the program and a win.def file containing "EXETYPE NT" and "SUBSYSTEM WINDOWS". I must be missing something. Also, I can't keep the console window from showing. The test program follows: #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam); HINSTANCE g_hInst; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { HWND hwnd; MSG Msg; HICON hIcon; HCURSOR hCursor; TCHAR chClassName[]=TEXT("SIMPLEWND"); WNDCLASSEX wcx; g_hInst=hInstance; hIcon=(HICON)LoadImage(0,IDI_APPLICATION,IMAGE_ICON,0,0,LR_SHARED); hCursor=(HCURSOR)LoadImage(0,IDC_ARROW,IMAGE_CURSOR,0,0,LR_SHARED); wcx.cbSize = sizeof(WNDCLASSEX); wcx.style = CS_HREDRAW|CS_VREDRAW; wcx.lpfnWndProc = (WNDPROC)WndProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hInstance; wcx.hIcon = hIcon; wcx.hCursor = hCursor; wcx.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); wcx.lpszMenuName = NULL; wcx.lpszClassName = chClassName; wcx.hIconSm = NULL; if (!RegisterClassEx(&wcx)) { MessageBox( NULL, TEXT("Failed to register wnd class"), TEXT("ERROR"), MB_OK|MB_ICONERROR); return FALSE; } hwnd=CreateWindowEx(0, chClassName, TEXT("Static Controls"), WS_OVERLAPPEDWINDOW, GetSystemMetrics(SM_CXSCREEN)/4, GetSystemMetrics(SM_CYSCREEN)/4, GetSystemMetrics(SM_CXSCREEN)/2, GetSystemMetrics(SM_CYSCREEN)/2, NULL, NULL, hInstance, NULL); if (!hwnd) { MessageBox( NULL, TEXT("Failed to create wnd"), TEXT("ERROR"), MB_OK|MB_ICONERROR); return FALSE; } ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); while (GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam) { static HWND hCntrl; switch (Message) { case WM_CREATE: CreateWindowEx(0, TEXT("STATIC"), NULL, WS_CHILD|WS_VISIBLE|SS_WHITERECT, 10, 10, 160, 30, hwnd, NULL, g_hInst, NULL); CreateWindowEx(0, TEXT("STATIC"), TEXT("TEXT STATIC CONTROL"), WS_CHILD|WS_VISIBLE|SS_SIMPLE, 10, 50, 160, 30, hwnd, NULL, g_hInst, NULL); hCntrl=CreateWindowEx(0, TEXT("STATIC"), NULL, WS_CHILD|WS_VISIBLE|SS_ICON, 10, 80, 40, 40, hwnd, NULL, g_hInst, NULL); SendMessage(hCntrl,STM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadImage(0, IDI_APPLICATION, IMAGE_ICON, 0,0,LR_SHARED)); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd,Message,wParam,lParam); } } Any ideas? Gary. |
March 11, 2003 Re: Background color problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Gary | I think you have to add
EXETYPE NT
SUBSYSTEM WINDOWS,4.0
to the .def file.
Jan
Gary wrote:
> I'm having a problem with the background color of STATIC, GROUPBOX, CHECKBOX, and RADIOBUTTON controls using the DMC v8.32. Possibly other controls as well, but these are the only ones I've tried. When I compile the program with the Borland C/C++ 5.5 commandline compiler, all controls show the same background as the main window, as set in the WNDCLASSEX structure. Using the LCCWin32 C compiler, I have the same results. But with the DMC compiler, these controls always have a white background, no matter what I do. I also had the same problen with the OpenWatcom 1.0 compiler, but that problem was solved by adding a "system win95" directive to the linker command line. Is there a similar option for DMC? I'm using "dmc -mn win.cpp gdi32.lib" to compile the program and a win.def file containing "EXETYPE NT" and "SUBSYSTEM WINDOWS". I must be missing something. Also, I can't keep the console window from showing. The test program follows:
>
> #include <windows.h>
>
> LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM
> lParam);
> HINSTANCE g_hInst;
> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR
> lpCmdLine,int nCmdShow)
> {
> HWND hwnd;
> MSG Msg;
> HICON hIcon;
> HCURSOR hCursor;
> TCHAR chClassName[]=TEXT("SIMPLEWND");
> WNDCLASSEX wcx;
> g_hInst=hInstance;
> hIcon=(HICON)LoadImage(0,IDI_APPLICATION,IMAGE_ICON,0,0,LR_SHARED);
> hCursor=(HCURSOR)LoadImage(0,IDC_ARROW,IMAGE_CURSOR,0,0,LR_SHARED);
> wcx.cbSize = sizeof(WNDCLASSEX);
> wcx.style = CS_HREDRAW|CS_VREDRAW;
> wcx.lpfnWndProc = (WNDPROC)WndProc;
> wcx.cbClsExtra = 0;
> wcx.cbWndExtra = 0;
> wcx.hInstance = hInstance;
> wcx.hIcon = hIcon;
> wcx.hCursor = hCursor;
> wcx.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
> wcx.lpszMenuName = NULL;
> wcx.lpszClassName = chClassName;
> wcx.hIconSm = NULL;
> if (!RegisterClassEx(&wcx))
> {
> MessageBox( NULL,
> TEXT("Failed to register wnd class"),
> TEXT("ERROR"),
> MB_OK|MB_ICONERROR);
> return FALSE;
> }
> hwnd=CreateWindowEx(0,
> chClassName,
> TEXT("Static Controls"),
> WS_OVERLAPPEDWINDOW,
> GetSystemMetrics(SM_CXSCREEN)/4,
> GetSystemMetrics(SM_CYSCREEN)/4,
> GetSystemMetrics(SM_CXSCREEN)/2,
> GetSystemMetrics(SM_CYSCREEN)/2,
> NULL,
> NULL,
> hInstance,
> NULL);
> if (!hwnd)
> {
> MessageBox( NULL,
> TEXT("Failed to create wnd"),
> TEXT("ERROR"),
> MB_OK|MB_ICONERROR);
> return FALSE;
> }
> ShowWindow(hwnd,nCmdShow);
> UpdateWindow(hwnd);
> while (GetMessage(&Msg,NULL,0,0))
> {
> TranslateMessage(&Msg);
> DispatchMessage(&Msg);
> }
> return Msg.wParam;
> }
> LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam)
> {
> static HWND hCntrl;
> switch (Message)
> {
> case WM_CREATE:
> CreateWindowEx(0,
> TEXT("STATIC"),
> NULL,
> WS_CHILD|WS_VISIBLE|SS_WHITERECT,
> 10,
> 10,
> 160,
> 30,
> hwnd,
> NULL,
> g_hInst,
> NULL);
> CreateWindowEx(0,
> TEXT("STATIC"),
> TEXT("TEXT STATIC CONTROL"),
> WS_CHILD|WS_VISIBLE|SS_SIMPLE,
> 10,
> 50,
> 160,
> 30,
> hwnd,
> NULL,
> g_hInst,
> NULL);
> hCntrl=CreateWindowEx(0,
> TEXT("STATIC"),
> NULL,
> WS_CHILD|WS_VISIBLE|SS_ICON,
> 10,
> 80,
> 40,
> 40,
> hwnd,
> NULL,
> g_hInst,
> NULL);
> SendMessage(hCntrl,STM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadImage(0,
>
> IDI_APPLICATION,
>
> IMAGE_ICON,
>
> 0,0,LR_SHARED));
> return 0;
> case WM_DESTROY:
> PostQuitMessage(0);
> return 0;
> default:
> return DefWindowProc(hwnd,Message,wParam,lParam);
> }
> }
>
> Any ideas?
>
> Gary.
|
March 11, 2003 Re: Background color problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jan Knepper | I've tried that, but it doesn't work either. Gary "Jan Knepper" <jan@smartsoft.us> wrote in message news:3E6D6FAF.A9D2D2DB@smartsoft.us... > I think you have to add > EXETYPE NT > SUBSYSTEM WINDOWS,4.0 > to the .def file. > > Jan > > > > Gary wrote: > > > I'm having a problem with the background color of STATIC, GROUPBOX, CHECKBOX, and RADIOBUTTON controls using the DMC v8.32. Possibly other controls as well, but these are the only ones I've tried. When I compile the > > program with the Borland C/C++ 5.5 commandline compiler, all controls show > > the same background as the main window, as set in the WNDCLASSEX structure. > > Using the LCCWin32 C compiler, I have the same results. But with the DMC compiler, these controls always have a white background, no matter what I > > do. I also had the same problen with the OpenWatcom 1.0 compiler, but that > > problem was solved by adding a "system win95" directive to the linker command line. Is there a similar option for DMC? I'm using "dmc -mn win.cpp > > gdi32.lib" to compile the program and a win.def file containing "EXETYPE NT" > > and "SUBSYSTEM WINDOWS". I must be missing something. Also, I can't keep the > > console window from showing. The test program follows: > > > > #include <windows.h> > > > > LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM > > lParam); > > HINSTANCE g_hInst; > > int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR > > lpCmdLine,int nCmdShow) > > { > > HWND hwnd; > > MSG Msg; > > HICON hIcon; > > HCURSOR hCursor; > > TCHAR chClassName[]=TEXT("SIMPLEWND"); > > WNDCLASSEX wcx; > > g_hInst=hInstance; > > hIcon=(HICON)LoadImage(0,IDI_APPLICATION,IMAGE_ICON,0,0,LR_SHARED); > > hCursor=(HCURSOR)LoadImage(0,IDC_ARROW,IMAGE_CURSOR,0,0,LR_SHARED); > > wcx.cbSize = sizeof(WNDCLASSEX); > > wcx.style = CS_HREDRAW|CS_VREDRAW; > > wcx.lpfnWndProc = (WNDPROC)WndProc; > > wcx.cbClsExtra = 0; > > wcx.cbWndExtra = 0; > > wcx.hInstance = hInstance; > > wcx.hIcon = hIcon; > > wcx.hCursor = hCursor; > > wcx.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); > > wcx.lpszMenuName = NULL; > > wcx.lpszClassName = chClassName; > > wcx.hIconSm = NULL; > > if (!RegisterClassEx(&wcx)) > > { > > MessageBox( NULL, > > TEXT("Failed to register wnd class"), > > TEXT("ERROR"), > > MB_OK|MB_ICONERROR); > > return FALSE; > > } > > hwnd=CreateWindowEx(0, > > chClassName, > > TEXT("Static Controls"), > > WS_OVERLAPPEDWINDOW, > > GetSystemMetrics(SM_CXSCREEN)/4, > > GetSystemMetrics(SM_CYSCREEN)/4, > > GetSystemMetrics(SM_CXSCREEN)/2, > > GetSystemMetrics(SM_CYSCREEN)/2, > > NULL, > > NULL, > > hInstance, > > NULL); > > if (!hwnd) > > { > > MessageBox( NULL, > > TEXT("Failed to create wnd"), > > TEXT("ERROR"), > > MB_OK|MB_ICONERROR); > > return FALSE; > > } > > ShowWindow(hwnd,nCmdShow); > > UpdateWindow(hwnd); > > while (GetMessage(&Msg,NULL,0,0)) > > { > > TranslateMessage(&Msg); > > DispatchMessage(&Msg); > > } > > return Msg.wParam; > > } > > LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam) > > { > > static HWND hCntrl; > > switch (Message) > > { > > case WM_CREATE: > > CreateWindowEx(0, > > TEXT("STATIC"), > > NULL, > > WS_CHILD|WS_VISIBLE|SS_WHITERECT, > > 10, > > 10, > > 160, > > 30, > > hwnd, > > NULL, > > g_hInst, > > NULL); > > CreateWindowEx(0, > > TEXT("STATIC"), > > TEXT("TEXT STATIC CONTROL"), > > WS_CHILD|WS_VISIBLE|SS_SIMPLE, > > 10, > > 50, > > 160, > > 30, > > hwnd, > > NULL, > > g_hInst, > > NULL); > > hCntrl=CreateWindowEx(0, > > TEXT("STATIC"), > > NULL, > > WS_CHILD|WS_VISIBLE|SS_ICON, > > 10, > > 80, > > 40, > > 40, > > hwnd, > > NULL, > > g_hInst, > > NULL); > > SendMessage(hCntrl,STM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadImage(0, > > > > IDI_APPLICATION, > > > > IMAGE_ICON, > > > > 0,0,LR_SHARED)); > > return 0; > > case WM_DESTROY: > > PostQuitMessage(0); > > return 0; > > default: > > return DefWindowProc(hwnd,Message,wParam,lParam); > > } > > } > > > > Any ideas? > > > > Gary. > |
March 11, 2003 Re: Background color problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jan Knepper | It's working now... not sure why, but I rebooted and now it works??? Gary "Jan Knepper" <jan@smartsoft.us> wrote in message news:3E6D6FAF.A9D2D2DB@smartsoft.us... > I think you have to add > EXETYPE NT > SUBSYSTEM WINDOWS,4.0 > to the .def file. > > Jan |
Copyright © 1999-2021 by the D Language Foundation