MoveWindow() funktioniert nicht



  • Hallo

    Meine Funktion MoveWindow() funzt net, aber ich weiß nicht warum. Hab aus Testzwecken erstmal folgende Parameter Uebergeben:

    CKlasse Handle;
    Handle.GetDlgItem(IDC_TAB1)->MoveWindow(0,0,100,100,TRUE);
    

    Er meldet zwar keine Fehler, aber wenn ich auf den Dialog klicke, macht er mir nen "Debug Assertion Failed".



  • Probier mal UpdateWindow noch dazu

    wenn net amch noch nen ScreenToClient



  • Hi,

    was ist denn CKlasse? Ein Dialog (vermute ich mal).
    Wenn Du einen Dialog mit CKlasse dlg Instanzierst, ist ja noch nichts erstellt
    worden. Erst wenn du DoModal oder Create aufrufst, ist der Dialog erstellt.
    GetDlgItem kann also noch gar kein gültiges Item bzw. Control zurückliefern!

    Du rufst dann eine Methode auf einen NULL-Zeiger auf.

    Handle.GetDlgItem(IDC_TAB1)->MoveWindow(0,0,100,100,TRUE); 
    // Handle.GetDlgItem(IDC_TAB1) liefert NULL
    

    Das ist dann im Debug ein Assert und im Release der Selbstmord!

    Bei Create kannst Du in OnCreate reagieren und bei DoModal in
    OnInitDialog.

    Da Du leider nicht mehr Code gepostet hast, ist das die einzige Hilfe
    die ich Dir bis hierhin geben kann.

    Gruss
    EB



  • Da ich deinen anderen Post gelesen habe, denke ich das du deine Registerkarte verkleinern möchtest. hab ich zwar noch nicht gemacht, aber das dürfte so funktionieren:

    CTabCtrl *pTab = (CTabCtrl*)GetDlgItem(IDC_TAB1)
    pTab->MoveWindow(0,0,100,100,TRUE);
    


  • Hmm,

    es gibt keinen unterschied zwischen:

    CKlasse Handle;
    Handle.GetDlgItem(IDC_TAB1)->MoveWindow(0,0,100,100,TRUE);
    

    und

    CTabCtrl *pTab = (CTabCtrl*)GetDlgItem(IDC_TAB1)
    pTab->MoveWindow(0,0,100,100,TRUE);
    

    Denn beide können einen Null-Zeiger liefern.

    Um áuf einen NULL-Zeiger zu prüfen wäre mindestens dies notwendig:

    CTabCtrl *pTab = (CTabCtrl*)GetDlgItem(IDC_TAB1)
    ASSERT ( pTab != NULL ); // wenns hier im Debug knallt, ist das Control nicht da!
    pTab->MoveWindow(0,0,100,100,TRUE);
    

    Also, ohne mehr Quelltext geht hier gar nichts.

    Gruss
    EB


Anmelden zum Antworten