CREATESTRUCT->lpCreateParams



  • Hallo,
    ich habe ein problem mit dem Mitglied der CREATESTRUCT lpCreateParams.
    und zwar würde ich gerne in einem Tab Dialog, bei der erstellung der einzelen Tabs, den dialogen eigene werte für die erstellung mitgeben.

    die CREATESTRUCT an sich, wird problemlos übergeben und auch die werte die ich ihr für die erstellung der einzelnen dialoge mitgebe. nicht jedoch der lpCreateParams wert.

    die strucktur die ich lpCreateParams mitgebe sieht wie folgt aus.

    typedef struct tagTABPARAM
    {
    	int	iItemPos;
    	BOOL	bShowToolTip;
    	DWORD	dwLanguage;
    
    }TABPARAM , *LPTABPARAM;
    

    definieren & erstellen tue ich die Strucktur in meiner TabCtrl Classe.
    *.h

    TABPARAM m_tp;
    CREATESTRUCT m_cs;
    

    bei der erstellung der Dialoge für die TabCtrl übergebe ich dann die werte.

    m_tp.dwLanguage			= m_dwLanguage;
    	m_tp.bShowToolTip			= m_bShowToolTip;
    
    	m_cs.cx				= rc.Height();
    	m_cs.cy				= rc.Width();
    	m_cs.x				= rc.left;
    	m_cs.y				= rc.top;
    	m_cs.hInstance			= hInstance;
    	m_cs.hwndParent			= GetParent();
    	m_cs.lpszClass			= szClass;
    	m_cs.hMenu			= (HMENU)NULL;
    	m_cs.lpszName			= NULL;
    	m_cs.style			= dwStyle;
    	m_cs.dwExStyle			= dwStyleEx;
    	m_cs.lpCreateParams		= &m_tp;
    
    	HWND hWnd = CreateWindowEx(dwStyleEx,
     				szClass,	
    				"",	
    				dwStyle,
    				rc.left,		
    				rc.top,
    				rc.Width(),
    				rc.Height(),
    				hWndTab,
    				(HMENU)NULL,    
    				hInstance,       
    				&m_cs);
    

    im jeweiligen Dialog der TabCtrl rufe ich unter WM_CREATE die werte dann wieder ab mit.

    LPCREATESTRUCT lpcs = (LPCREATESTRUCT) lParam;
    LPTABPARAM lpTab = (LPTABPARAM)lpcs->lpCreateParams;
    
    m_bShowToolTip = lpTab->bShowToolTip;
    m_dwLanguage = lpTab->dwLanguage;
    

    in meinen beiden variablen steht dann aber alles andere nur nicht meine beiden werte die jeweils nur 0 o. 1 sind.

    weis jemand was ich falsch mache oder hat einen rat für mich?

    :xmas1:


  • Mod

    Du musst den Zeiger direkt übergeben und nicht nochmal in eine CREATESTRUCT verpacken:

    HWND hWnd = CreateWindowEx(dwStyleEx,
                     szClass,    
                    "",    
                    dwStyle,
                    rc.left,        
                    rc.top,
                    rc.Width(),
                    rc.Height(),
                    hWndTab,
                    (HMENU)NULL,    
                    hInstance,       
                    &m_tp);
    


  • Hallo Martin,
    danke für die hilfe, ich werde es später mal probieren.

    aber warum schreibt dann die msdn in einem beispiel das man seine werte an
    lpCreateParams übergeben soll.

    http://msdn.microsoft.com/en-us/library/ms632603(VS.85).aspx



  • LOL 🙄
    hab da wohl was völlig verpeilt.

    ok hab es verstanden wie es funktioniert, es klapt jetzt auch einwandfrei.
    thema erledigt...

    danke für die hilfe.
    :xmas1:


Anmelden zum Antworten