blank window with resource background IDD_*
-
Hi,
ich wollte in mein Blank Window ne IDD_FRAME reinmachen, hab aber keine Ahnung wie.
#include <windows.h> #include "resource.h" LRESULT CALLBACK fnMainWindow(HWND, UINT, WPARAM, LPARAM); const char szClassName[] = "*******"; const char szAppName[] = "********"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) { HWND hwnd; MSG msg; WNDCLASSEX wc; wc.cbClsExtra = 0; wc.cbSize = sizeof(WNDCLASSEX); wc.cbWndExtra = 0; wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = NULL; wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_AUGE),IMAGE_ICON, 32, 32, 0); wc.hInstance = hInstance; wc.lpfnWndProc = fnMainWindow; wc.lpszMenuName = NULL; wc.lpszClassName= szClassName; wc.style = CS_HREDRAW|CS_VREDRAW; if(!RegisterClassEx(&wc)) { MessageBox(NULL, "unable to register WNDCLASSEX", NULL, MB_OK|MB_ICONERROR); return 0; } hwnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, szClassName, szAppName, WS_OVERLAPPEDWINDOW, 200, 200, 200, 200, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nShowCmd); UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK fnMainWindow(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_PAINT: { break; } case WM_CREATE: { break; } case WM_KEYDOWN: { break; } case WM_CLOSE: { PostQuitMessage(0); DestroyWindow(hwnd); break; } default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }Vielen Dank schonmal fuer eure Hilfe!
-
[edit]
hier stand blödsinn, habe die frage nicht anständig gelesen[edit2]
zweiter anlauf
der dlg sollte als style haben DS_MODALFRAME | WS_CHILD | usw...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/createdialog.asp
das parent mitangeben.
-
OK, also vielleciht ist die Frage oben nicht ganz verständlich. nach dem obigen Source habe ich ja ein Blankes Fenster. Jetzt möchte ich aber nicht das das Fenster angezeigt wird, sondern von mir eine selbst erstellte IDD_*. Ich hab halt keine Ahnung wie ich das Handlen muss..
Dachte mir vielleicht das das Hauptfenster *fnMainWindow nicht dargestellt wird aber ich n ChildWindow laufen lasse... aber das muesste doch einfacher gehen?
-
möchtest du jetzt ein dialogbasirende anwendung oder eine eine mit fenster wobei der dialog als child vom mainwindow fungiert zum beispiel als toolwindow etc?
-
Ok, danke, habs jetzt!
nebenbei: kann ich bei CreateWindowEx() int nWidth, int nHeight irgendwie von der IDD_* abfragen?
Gruss
-
nicht das ich wüsste, aber ich lasse micht auch belehren

würde sowas in der art machen
case WM_SIZE: GetClientRect(hwnd, &rcMainWnd); GetWindowRect(hwndChildDlg, &rcChildDlg); SetWindowPos(hwndChildDlg, HWND_TOP, // werte anpassen // werte anpassen // werte anpassen // werte anpassen SWP_NOACTIVATE | SWP_NOOWNERZORDER);
-
jo, das funktioniert soweit. danke.
aber das mit den dialogen funktioniert noch nicht wirklich, hab da das problem das wenn ich einen weiter dialog starte, wenn es nur ne MessageBoxEx(); ist, das dann der hintergrund weiß wird und das der dialog erst durch alt in vordergrund kommt..! naja hier mal der source:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) { HWND hwnd; HWND hWindow; MSG msg; WNDCLASSEX wc; wc.cbClsExtra = 0; wc.cbSize = sizeof(WNDCLASSEX); wc.cbWndExtra = 0; wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = NULL; wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_AUGE),IMAGE_ICON, 32, 32, 0); wc.hInstance = hInstance; wc.lpfnWndProc = fnMainWindow; wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); wc.lpszClassName= szClassName; wc.style = CS_HREDRAW|CS_VREDRAW; if(!RegisterClassEx(&wc)) { MessageBox(NULL, "unable to register WNDCLASSEX", NULL, MB_OK|MB_ICONERROR); return 0; } hwnd = CreateWindowEx(NULL, szClassName, szAppName, WS_CAPTION|WS_SYSMENU|WS_VISIBLE, 400, 400, 500, 500, NULL, NULL, hInstance, NULL); hwnd = CreateDialog(NULL, MAKEINTRESOURCE(IDD_BACK), hwnd, fnService); ShowWindow(hwnd, SW_SHOW); while(GetMessage(&msg, NULL, 0, 0)) { UpdateWindow(hwnd); TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } BOOL CALLBACK fnService(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_PAINT: { SetDlgItemText(hwnd, IDC_DATE, "ADD FUNCTION 4 GetLocalTime"); SetDlgItemText(hwnd, IDC_SERVICEDATE, "ADD VAR 4 ServiceDate"); break; } case WM_CREATE: { break; } case WM_DESTROY: { PostQuitMessage(0); break; } default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; } LRESULT CALLBACK fnMainWindow(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_PAINT: { break; } case WM_CREATE: { break; } case WM_KEYDOWN: { break; } case WM_COMMAND: { switch(LOWORD(wParam)) { case IDR_MENU_DATEI_BEENDE: { MessageBoxEx(hwnd, "Test", "Info", MB_OK|MB_ICONINFORMATION,0x0407); } case IDR_ABOUT_ABOUT: { break; } } } case WM_CLOSE: { PostQuitMessage(0); DestroyWindow(hwnd); break; } default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }ich hab bestimmt die handles falsch..
Gruss und danke schonmal
-
OK, das da oben hat sich erledigt... das funktioniert jetzt alles! aber hehehe, wenn ich auf irgendwas klicke, z.B das Menu oda so dann schliesst sichd as fenster.. o_O kA warum?
-
Weil du bei WM_COMMAND das break nur im case IDR_ABOUT_ABOUT - Zweig stehen hast.
Du musst es also aus dem inneren switch herausnehmen (also danach aufrufen), damit er nach WM_COMMAND nicht gleich bei WM_CLOSE weitermacht
-
dank für deine antwort! haste recht, hab das dumme break vergessen
naja, aber das problem das die flaeche der Main IDD_* weis wird sobald ich einen button oder dialog öffne besteht immernoch... hab jetzt versucht UpdateWindow() in die GetMessage() schleife zu machen, aber das sieht das etwas merkwuerdig aus wenn man auf der IDD_* nen Text hat *ggg
-
Wenn du WM_PAINT abfängst, dann musst du dort Begin/EndPaint aufrufen. SetDlgItemText macht dort eigentlich wenig Sinn
