PROPSHEETPAGE: lparam wird nicht übermittel



  • Hi.

    Ich habe eine PROPSHEETPAGE, in der die General-Seite meines Optionsdialoges geknüpft ist. allerdings möchte ich die Instanz der Klasse wiederhaben, damit ich auf diese zugreifen kann. dazu habe ich den lParam mit dem This-pointer gefüllt, aber dieser kommt in der init-message nicht an...

    ZeroMemory(&pshSettings, sizeof(PROPSHEETHEADER));
    	pshSettings.dwSize = sizeof(PROPSHEETHEADER);
    	pshSettings.dwFlags = 0;
    	pshSettings.hwndParent = hParentWnd;
    	pshSettings.hInstance = hInstance;
    	pshSettings.pszCaption = MAKEINTRESOURCE(IDS_SETTINGS);
    
    	// Create general page
    	ZeroMemory(&pPages[0], sizeof(PROPSHEETPAGE));
    	pPages[0].dwSize = sizeof(PROPSHEETPAGE);
    	pPages[0].hInstance = hInstance;
    	pPages[0].lParam = (LPARAM)this;
    	pPages[0].pfnDlgProc = SettingsDlg::GeneralPageProc;
    	pPages[0].pszTemplate = MAKEINTRESOURCE(IDD_SETTINGS_GENERAL);
    	pPages[0].pszTitle = MAKEINTRESOURCE(IDS_SETTINGS_GENERAL);
    	hPages[0] = CreatePropertySheetPage(&pPages[0]);
    
    	pshSettings.nPages = 1;
    	pshSettings.phpage = hPages;
    	pshSettings.nStartPage = 0;
    	pshSettings.pStartPage = MAKEINTRESOURCE(IDS_SETTINGS_GENERAL);
    }
    
    SettingsDlg::~SettingsDlg(void)
    {
    }
    
    void SettingsDlg::Modal()
    {
    	PropertySheet(&pshSettings);
    }
    BOOL CALLBACK SettingsDlg::GeneralPageProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	static SettingsDlg* instance;
    
    	if (uMsg == WM_INITDIALOG)
    		instance = (SettingsDlg*)lParam;
    
    	return instance->InternalGeneralPageProc(hDlg, uMsg, wParam, lParam);
    }
    

    Danke.



  • Also ich habe mal eine Konstruktion gesehen bei der lParam bei der WM_INITDIALOG Message so gecasted wurde:

    PROPSHEETPAGE ps = (PROPSHEETPAGE *)lParam;

    mit dem entsprechenden Zugriff auf den lParam-Member sollte das dann funktionieren und das hat es bei mir auch.


  • Mod

    RattlesnakeAlgorithms hat recht.
    Der lParam Wert in WM_INITDIALOG zeigt auf die PROPSHEETPAGE. Über diesen Zeiger kannst Du dann den lParam Wert auslesen.

    BTW:
    Deine Aufbau versagt kläglich wenn Du 2 Pages mit der gleichen DialogProc versiehst und esmuss krachen, wenn WM_INITDIALOG nicht die erste Nachricht ist, die Deine DlgProc bekommt!



  • ich weiß, die zweite page kommt noch! es geht sich um die 1.

    aber danke... funzt.


Log in to reply