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?


  • Mod

    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?


  • Mod

    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.


Anmelden zum Antworten