MFC学习之第二天

来源:互联网 发布:c语言选择题 编辑:程序博客网 时间:2024/05/17 02:55

问题1:

        为什么我的对话框类CTestDlig继承自类CDialogEy,而CDialogEy类继承自CDialog,在CDialogEy类中重写了消息响应函数,比如OnPaint、OnNcMouseMove、OnNcLButtonDown、OnNcLButtonUp,而在对话框上发送的消息不能响应。。

   解决办法1:

               在类CTestDialog中添加消息响应函数既可以了。比如::

                            void CTestDlg::OnNcMouseMove(UINT nHitTest, CPoint point)
                           {
                                  // TODO: 在此添加消息处理程序代码和/或调用默认值

                                CDialogEy::OnNcMouseMove(nHitTest, point);
                           }

解决办法2:

            原来是BEGIN_MESSAGE_MAP(CTestDlg, CDialogEy)这个宏中的两个参数在作怪。。第一个参数类别本身,第二个参数是父类别。。。

 

 

自绘窗口::

           窗口分为客户区和非客户区,非客户区包括标题栏(图片、按钮(最大化,最小化,关闭))、左边框、下边框、右边框,剩下的即为客户区。

          标题栏上按钮一般分为四种状态:

                   1.正常

                   2.鼠标经过

                   3.按下

                   4.失效

      绘制非客户区的消息要用到以WM_NC开头的消息,比如WM_NCPAINT、WM_NCLBUTTONDOWN、WM_NCLBUTTONUP等等。

 

          我们绘图都是在CDC下作图的:有CDC,CPaintDC(也只能用在WM_PAINT消息响应函数中)、CClientDC(用于客户区的绘图)、CWindowDC(可以在非客户区中绘制)。。

             CWindowDC dc(this) 

             CWindowDC dc(GetParent())

             CWindowDC dc(GetDesktopWindow())

 

           (该窗口参看郭延明的博客内容。。)

通过CImage函数中的BitBlt方法来绘制最小化、最大化、关闭按钮。。。用于来显示不同的状态,比如,鼠标经过、离开、按下、抬起,这些消息进行响应。。

BOOL BitBlt( HDC hDestDC, intxDest, int yDest, intnDestWidth, int nDestHeight, intxSrc, int ySrc, DWORDdwROP = SRCCOPY ) const throw( );

返回值:函数成功,返回非零值,否则为0。

参数:

hDestDC 指向CDC对象的指针,标识待拷贝位图的设备上下文。 

x Dest指定目标矩形左上角的逻辑x坐标。  
y Dest指定目标矩形左上角的逻辑y坐标。  
nDestWidth 指定目标矩形和源位图的宽度(逻辑单位)。  
nDestHeight 指定目标矩形和源位图的高度(逻辑单位)。  
xSrc 指定源位图左上角的逻辑X坐标。  
ySrc 指定源位图左上角的逻辑Y坐标。  
dwROP 指定要执行的光栅操作。光栅操作代码定义GDC如何合并输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。

0 0
原创粉丝点击