Fenster wiederherstellen && Windows Mouse-Vanish
-
Beim schreiben des Grundgerüsts für eine WINAPI-Applikation bin ich auf 2 Probleme gestoßen:
1. Beim Eintippen von Text in eine Edit-Box verschwindet der Cursor. Dies ist ein Feature von Windows seit XP allerdings sollte es per default auf FALSE stehen. Ich habe es innerhalb des Codes nochmal deaktiviert (SPI_SETMOUSEVANISH) und in den User-Settings ist es auch deaktiviert (Control Panel -> Mouse -> ...) und trotzdem besteht das "Problem" weiterhin.
2. Sobald ich das Fenster minimiere lässt es sich nicht mehr herstellen. Die Anwendung wird allerdings weiterhin in der Taskbar angezeigt. Scheinbar ist mir da ein grober Fehler unterlaufen

Code (unaufgeräumt/durcheinander, ich weiß...):
main.cpp
#include "main.h" #include "resource.h" BOOL CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, INT nCmdShow) { SystemParametersInfo( SPI_SETMOUSEVANISH, 0, FALSE, 0 ); return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINWND), NULL, WndProc); } BOOL CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { HANDLE hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(2)); SendMessage(hWnd, WM_SETICON, TRUE, (WPARAM)hIcon); break; } case WM_COMMAND: { switch (LOWORD(wParam)) { /* continue with IDs */ } break; } case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc( hWnd, msg, wParam, lParam ); } return 0; }resource.rc
#include "resource.h" 1 RT_MANIFEST "0x2A_Crypt.exe.manifest" 2 ICON "Icon.ico" IDD_MAINWND DIALOGEX 0, 0, 400, 220 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOPMOST CAPTION "\\x2A Encrypter" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN GROUPBOX "Input",IDC_1,7,7,210,205 EDITTEXT IDC_2,12,17,200,190,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN EDITTEXT IDC_3,284,7,126,14,ES_AUTOHSCROLL LTEXT "Password:",IDC_4,241,12,34,8 END
-
Update:
Habe gerade festgestellt, dass ich eine MessageBox nicht bestätigen kann und diese somit weiterhin aktiv ist und einen weiteren Programm-Fluss behindert. Ich denke dieses Verhalten steht in direktem Zusammenhang mit "Problem" Nr. 2.
MfG
-
Konnte die Probleme nun auch ohne Hilfe des Forums teilweise lösen.
1. Hier ist mir kein Fortschritt gelungen und ich werde es auch nicht weiter versuchen, da ich es für nicht vertretbar halte die globalen User-Settings während der Runtime meiner Applikation zu verändern.
2. Das Problem bestand in der DefWindowProc()-Anweisung in WndProc. Diese darf in der Callback-Prozedur eines Dialog nicht verwendet werden und wird normalerweise in der Warteschleife des übergeordneten Fensters verwendet. Also die default-Direktive komplett weggelassen und siehe da: Das Fenster lässt sich wieder herstellen aber nicht mehr schließen. Hier ist mir dann schnell aufgefallen, dass ich die WM_CLOSE-Message nicht verarbeitet habe und durch hinzufügen von
case WM_CLOSE: EndDialog(hWnd, 0); break;läuft nun alles perfekt.
Ich hatte mir trotzdem mehr von den Usern hier erhofft :(.
Bei über 90 Views vllt wenigstens mal 2 wegweisende Posts... normalerweise klappt das doch
MfG, 0x2A