okuru
asked on
No Sysmenu
Is it possible to create a WIN32 app with a window having a title bar and a [X] close button BUT NO system menu.
Or do I have to have a dialog box as my main.
Thanks,
Or do I have to have a dialog box as my main.
Thanks,
Remove style WS_SYSMENU from CreateWindow
Just don't specify the WS_SYSMENU window style. You probably want to specify WS_CAPTION WS_OVERLAPPED WS_THICKFRAME and maybe WS_MINIMIZE and WS_MAXIMIZE.
Let me know if you have questions. (If that doesn't work, There is another way, but i think that will)
Let me know if you have questions. (If that doesn't work, There is another way, but i think that will)
Damn, I pressed comment iso answer
ASKER
Does not work - I want a window with a title bar, a [X] close button but NO icon/sysmenu...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I create such a window in my programs. The styles I use are
WS_POPUPWINDOW | WS_DLGFRAME | WS_THICKFRAME | WS_OVERLAPPED | WS_CLIPSIBLINGS
You can remove the clip sibblings style. My window has a caption although I didn not specify the WS_CAPTION style. It does have a close box but does not have minimize and maximize buttons. (these can be added with the WS_MINIMUZE and WS_MAXIMIZEstyles) It has no system menu.
WS_POPUPWINDOW | WS_DLGFRAME | WS_THICKFRAME | WS_OVERLAPPED | WS_CLIPSIBLINGS
You can remove the clip sibblings style. My window has a caption although I didn not specify the WS_CAPTION style. It does have a close box but does not have minimize and maximize buttons. (these can be added with the WS_MINIMUZE and WS_MAXIMIZEstyles) It has no system menu.
ASKER
With this I get a window with title bar no close button, if I add sysmenu I get an icon/menu ???
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow) {
static char szAppName[] = "Test";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = NULL;
RegisterClassEx(&wndclass) ;
hwnd = CreateWindow(szAppName,
" Test",
WS_POPUPWINDOW |
WS_DLGFRAME |
WS_THICKFRAME |
WS_OVERLAPPED |
WS_CLIPSIBLINGS,
CW_USEDEFAULT,
CW_USEDEFAULT,
150,
50,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
switch (iMsg) {
case WM_CREATE:
return 0;
case WM_PAINT :
hdc = BeginPaint(hwnd, &ps);
EndPaint (hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage (0);
return 0 ;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow) {
static char szAppName[] = "Test";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = NULL;
RegisterClassEx(&wndclass)
hwnd = CreateWindow(szAppName,
" Test",
WS_POPUPWINDOW |
WS_DLGFRAME |
WS_THICKFRAME |
WS_OVERLAPPED |
WS_CLIPSIBLINGS,
CW_USEDEFAULT,
CW_USEDEFAULT,
150,
50,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
switch (iMsg) {
case WM_CREATE:
return 0;
case WM_PAINT :
hdc = BeginPaint(hwnd, &ps);
EndPaint (hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage (0);
return 0 ;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
I have a close button on mine. However, I use CreateWindowEx() and specify two extended styles. WS_EX_DLGMODALFRAME and WS_EX_WINDOWEDGE.
You might try that or you might try adding the WS_CAPTION style. (Which probably should have been there, but actually isn't in my code.)
You might try that or you might try adding the WS_CAPTION style. (Which probably should have been there, but actually isn't in my code.)
ASKER
Thanks
CreateWindowEx() does it, CreateWindow() does not.
CreateWindowEx() does it, CreateWindow() does not.