标  题: 如何单击除了窗口标题栏以外的区域使窗口移动       
发信人: Pacific (无情~~~Nolove), 信区: VisualC
发信站: BBS 水木清华站 (Fri Oct 16 17:04:29 1998)


                                                                                 
   当窗口需要确定鼠标位置时Windows向窗口发送WM_NCHITTEST信息,可以处理           
该信息使Windows认为鼠标在窗口标题上。对于对话框和基于对话的应用程序,可          
以使用ClassWizard处理该信息并调用基类函数, 如果函数返回HTCLIENT 则表明          
鼠标在客房区域,返回HTCAPTION表明鼠标在Windows的标题栏中。                       
UINT CSampleDialog : : OnNcHitTest  (Cpoint point )                              
{                                                                                
    UINT nHitTest =Cdialog: : OnNcHitTest (point );                              
    return (nHitTest = =HTCLIENT)? HTCAPTION : nHitTest ;                        
}                                                                                
    上述技术有两点不利之处, 其一是在窗口的客户区域双击时, 窗口将极大;         
其二, 它不适合包含几个视窗的主框窗口。还有一种方法,当用户按下鼠标左键          
使主框窗口认为鼠标在其窗口标题上,使用ClassWizard在视窗中处理WM_LBUTTODOWN       
信息并向主框窗口发送一个WM_NCLBUTTONDOWN信息和一个单击测试HTCAPTION。            
void CSampleView : : OnLButtonDown  (UINT nFlags , Cpoint point )                
{                                                                                
    CView : : OnLButtonDow  (nFlags , pont );                                    
                                                                                 
    //Fool frame window into thinking somene clicked on                          
    its caption bar .                                                            
    GetParentFrame ( ) —> PostMessage (                                         
         WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARAM (poitn .x , point .y) );      
                                                                                 
}                                                                                
    该技术也适用于对话框和基于对的应用程序,只是不必调用CWnd : :                 
GetParentFrame 。                                                                
void CSampleDialog : : OnLbuttonDown (UINT nFlags, Cpoint point )                
{                                                                                
    Cdialog : : OnLButtonDow (nFlags, goint );                                   
    //Fool dialog into thinking simeone clicked on its caption bar .             
  PostMessage (WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARM (point.x , point. y      
) )                                                                              
}                                                                                
                                                                                 

--
        老鸟有交待,中鸟要等待,菜鸟要忍耐。
        老鸟级功夫:吹牛、聊天、玩MUD 、发呆。
        中鸟级功夫:睡觉、灌水、玩游戏、NT&VC。
        菜鸟级功夫:学习、泡妞、玩篮球、And so on

        My E-Mail: Nolove@263.net

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: yazhou.bbs@bbs.net.t]
※ 修改:.fzx 于 Aug  9 16:50:58 修改本文.[FROM: heart.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.775毫秒