MFC学习之第三天

          昨天学习了自绘窗口的代码编写。。

         实际上就是在非客户区作图。。利用其消息响应WM_NCPAINT、WM_NCLBUTTONDOWN、WM_NCLBUTTONUP等等来重写其消息响应函数即可。。

 

自绘窗口二:

         今天学习自绘窗口的第二种办法。

        其大体思路是:去掉窗口的非客户区,实现无边框、无标题栏的窗口,然后自己来模拟绘制窗口的非客户区和客户区。

 

1、创建一个对话框应用程序,注意::在创建的时候不要使用Unicode库,否则在程序中,LPCTSTR与路径const char*之间有问题。。

                                                                        当然使用了Unicode库,可以在路径前面加上_t()也可以。。

2、去除窗口的边框和标题栏,在OnInitDialog函数中添加代码::

                                    DWORD dwStyle = GetStyle();

               DWORD dwNewStyle = WS_OVERLAPPED|WS_VISIBLE|WS_SYSMENUWS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
               dwNewStyle&=dwStyle;
               SetWindowLong(m_hWnd,GWL_STYLE,dwNewStyle);
               DWORD dwExStyle = GetExStyle();
               DWORD dwNewExStyle = WS_EX_LEFT |WS_EX_LTRREADING |WS_EX_RIGHTSCROLLBAR;
               dwNewExStyle&=dwExStyle;
               SetWindowLong(m_hWnd,GWL_EXSTYLE,dwNewExStyle);

3、重新封装CImage类,采用GdiPlus。。

           在StdAfx.h中静态调用diplus.lib,即由编译系统完成对DLL的加载,应用程序结束时卸载DLL的编码。如下:

                    #include "GdiPlus.h"
                    using namespace Gdiplus;
                    #pragma comment(lib, "gdiplus.lib")

在类的头文件中定义,以下成员变量,用来初始化GDI+的使用和结束使用。

GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;

然后在InitInstance()函数中加入初始化GDI+的函数:

GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);

在ExitInstance()函数中加入结束GDI+使用的函数: GdiplusShutdown(m_gdiplusToken);

 

需要画的时候

Graphics graphics(GetDC()->m_hDC);
 Image image(L"Mega_GamesPack_001.png", FALSE);
 graphics.DrawImage(&image, 10,10,image.GetWidth(),image.GetWidth());

4、向窗口上添加按钮,重绘CMyButtonEx继承自CButton

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值