Dialog verschieben ohne Titelleist + ContextMenu`?



  • Hallo,
    ich verwende diese code um den dialog ohne titelleiste zu verschieben:

    UINT CTestDlg::OnNcHitTest(CPoint point)
    {
    	// TODO: Add your message handler code here and/or call default
    	UINT nHitTest = CDialog::OnNcHitTest(point); 
    
    	if ((nHitTest == HTCLIENT) || (nHitTest == HTBORDER)) 
    	{ 
    		nHitTest = HTCAPTION; 
    	} 
    	return nHitTest;
    
    }
    

    aber seit dem funktioniert das context menü nicht mehr, was muss ich einstellen damit es wieder geht?

    danke



  • So hatte ich das immer gemacht. Hat auch noch den Vorteil das in der Titelleiste das normale Windows-Kontextmenü angezeigt wird statt dem Eigenem.

    // lastHT ist eine Membervariable der Klasse
    
    UINT CTest123Dlg::OnNcHitTest(CPoint point) 
    {
    	lastHT = CDialog::OnNcHitTest(point);
    
    	return lastHT == HTCLIENT ? HTCAPTION : lastHT;
    }
    
    void CTest123Dlg::OnNcRButtonUp(UINT nHitTest, CPoint point) 
    {
    	if(lastHT == HTCLIENT)
    		SendMessage(WM_CONTEXTMENU,0,MAKELONG(point.x,point.y));
    	else
    		CDialog::OnNcRButtonUp(nHitTest, point);
    }
    
    void CTest123Dlg::OnContextMenu(CWnd* pWnd, CPoint point) 
    {
    	if(lastHT != HTCLIENT)
    	{
    		CDialog::OnContextMenu(pWnd,point);
    		return;
    	}
    	// dein Kontextmenü...
    }
    


  • danke,
    ich habe noch eine etwas kürzere methode gefunden:

    UINT CTestDlg::OnNcHitTest(CPoint point)
    {
    	UINT nHitTest = CDialog::OnNcHitTest(point); 
    	if (GetAsyncKeyState(VK_LBUTTON))
    	{
    		nHitTest = HTCAPTION;
    	}
    	return nHitTest;
    
    }
    


  • Ist mal jemand so nett und schiebt das in die FAQ? 👍


Anmelden zum Antworten