SetWindowText setzt Text von Edit-Control des Speichern-Dialogs nicht
-
Hallo.
Ich habe dieses Minimalbeispiel:
// SaveFileDialogTest.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <Windows.h> HWND hwndEditControl; WNDPROC wndProcSaveDialogOld; WNDPROC wndProcEditControlOld; LRESULT CALLBACK WindowProcSaveDialog(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_COMMAND: switch (wParam) { case IDOK: SetWindowText(hwndEditControl, L"Test"); } } return CallWindowProc(wndProcSaveDialogOld, hwnd, uMsg, wParam, lParam); } LRESULT CALLBACK WindowProcEditControl(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_SETTEXT: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return CallWindowProc(wndProcEditControlOld, hwnd, uMsg, wParam, lParam); } UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) { switch (uiMsg) { case WM_INITDIALOG: HWND hwndDialog = GetParent(hdlg); wndProcSaveDialogOld = (WNDPROC)SetWindowLongPtr(hwndDialog, GWLP_WNDPROC, (LONG)WindowProcSaveDialog); hwndEditControl = GetDlgItem(hwndDialog, cmb13); wndProcEditControlOld = (WNDPROC)SetWindowLongPtr(hwndEditControl, GWLP_WNDPROC, (LONG)WindowProcEditControl); } return FALSE; } int main() { OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(ofn)); WCHAR fileName[255] = {0}; ofn.lStructSize = sizeof(ofn); ofn.Flags = OFN_ENABLEHOOK | OFN_EXPLORER; ofn.lpfnHook = OFNHookProc; ofn.lpstrFile = fileName; ofn.nMaxFile = sizeof(fileName); GetSaveFileName(&ofn); return 0; }
Bei Klick auf den Speichern-Button springt er in Zeile 22, aber der Text des Edit-Controls ändert sich nicht zu "Test". Wieso?
-
Weil Du Deinem Edit Control verbietest WM_SETTEXT auszuführen...
Was hast Du gedacht, was passiert wenn man WM_SETTEXT abfängt und nichts tut...
-
Ich dachte, dass die DefWindowProc das macht. Aber wenn ich jetz so drüber nachdenke, kann die das ja gar nicht machen, weil die nicht für das Edit-Control zuständig ist. Oje, danke!
Was ich eigentlich machen wollte, ist, einen potentiellen anderen Hook der Windowprocedure des Edit-Controls auszuhebeln. Aber es hat sich gezeigt, dass das in meinem Fall auch nichts bringt.
-
Keiner?
-
Du kannst keinen bestehenden Hook aushebeln indem Du einen Subclass durchführst.
Woher willst Du wissen wie Du an Du dovor ursprüngliche Fensterfunktion kommst?Erkläre genauer!
-
Ups, entschuldige bitte, ich wollte das in einem anderen Thread posten. Der hier hat sich schon erledigt. Danke dir.