天天看點

MFC對話框禁止移動 使标題欄不響應滑鼠消息 通過客戶區移動窗體 OnNcHitTest()的實作

//這個函數允許我們對 windows滑鼠消息進行處理  對于基類函數的傳回值  我們可以通過判斷消息類型來進行不同的處理

//也就是說 我們可以對滑鼠消息做任意處理   比如 是菜單欄上的消息 我們可以傳回标題欄的值

//對應的消息類型有如下   查找MSDN此函數的 值有介紹

UINT CMyDlg::OnNcHitTest(CPoint point)

{

      UINT nFlags= CDialog::OnNcHitTest(point);   //調用基類的OnNcHitTest獲得傳回值 

       if(nFlags==HTCAPTION||nFlags==HTSYSMENU)  //如果滑鼠消息是在 标題欄上或者系統菜單欄  我們就傳回FALSE 不進行處理

    {

     return FALSE ;

    } 

    else if(nFlags==HTCLIENT)   //可以通過客戶區域移動窗體但是不能通過标題欄移動

     return  HTCAPTION ;

    else

     return nFlags;

}

下面是一些測試枚舉值

::OnNcHitTest

  afx_msg UINT OnNcHitTest( CPoint point );

  傳回值:下面列出的滑鼠擊中測試枚舉值之一。

  · HTBORDER 在不具有可變大小邊框的視窗的邊框上。

  · HTBOTTOM 在視窗的水準邊框的底部。

  · HTBOTTOMLEFT 在視窗邊框的左下角。

  · HTBOTTOMRIGHT 在視窗邊框的右下角。

  · HTCAPTION 在标題條中。

  · HTCLIENT 在客戶區中。

  · HTERROR 在螢幕背景或視窗之間的分隔線上(與HTNOWHERE相同,除了Windows的DefWndProc函數産生一個系統響聲以指明錯誤)。

  · HTGROWBOX 在尺寸框中。

  · HTHSCROLL 在水準滾動條上。

  · HTLEFT 在視窗的左邊框上。

  · HTMAXBUTTON 在最大化按鈕上。

  · HTMENU 在菜單區域。

  · HTMINBUTTON 在最小化按鈕上。

  · HTNOWHERE 在螢幕背景或視窗之間的分隔線上。

  · HTREDUCE 在最小化按鈕上。

  · HTRIGHT 在視窗的右邊框上。

  · HTSIZE 在尺寸框中。(與HTGROWBOX相同)

  · HTSYSMENU 在控制菜單或子視窗的關閉按鈕上。

  · HTTOP 在視窗水準邊框的上方。

  · HTTOPLEFT 在視窗邊框的左上角。

  · HTTOPRIGHT 在視窗邊框的右上角。

  · HTTRANSPARENT 在一個被其它視窗覆寫的視窗中。

  · HTVSCROLL 在垂直滾動條中。

  · HTZOOM 在最大化按鈕上。

繼續閱讀