少年意气强不羁,虎胁插翼白日飞。这篇文章主要讲述CWinApp和CFrameWnd相关的知识,希望能为你提供帮助。
- anotherapp.h
#include< afxwin.h> class myapp:public CWinApp { virtual BOOL InitInstance(); }; class mywnd:public CFrameWnd { public: mywnd(); //protected: //DECLARE_MESSAGE_MAP(); };
- anotherapp.cpp
#include "anotherapp.h" //myapp cpc; BOOL myapp::InitInstance() { this-> m_pMainWnd=new mywnd(); this-> m_pMainWnd-> ShowWindow(this-> m_nCmdShow); this-> m_pMainWnd-> UpdateWindow(); return TRUE; }; /*BEGIN_MESSAGE_MAP(mywnd,CFrameWnd) ON_WM_PAINT() END_MESSAGE_MAP()*/ mywnd::mywnd() { this-> Create(NULL,TEXT("喜欢小松鼠")); }
- duwa.cpp
#include "anotherapp.h" myapp cpc; //调用写好的窗体类
输出结果:
文章图片
- 消息映射----我们已知微软利用C语言封装了很多winapi应用编程接口来满足窗体开发需要,但如果仅仅是继承cwinapp那么会有很多函数会被声明为虚函数,在运行自定义的窗口类时,这些继承关系会导致生成一个虚函数列表(可以参考一些C++实现多态的资料,子类重写父类虚函数实现多态的原理),造成性能方面的开销,因此,微软使用了消息映射
- anotherapp.h
#include< afxwin.h> class myapp:public CWinApp { virtual BOOL InitInstance(); }; class mywnd:public CFrameWnd { public: mywnd(); protected: afx_msg void OnPaint(); //固定语法,onpaint类 DECLARE_MESSAGE_MAP(); //固定语法---消息映射 };
- anotherapp.cpp
#include "anotherapp.h" //myapp cpc; BOOL myapp::InitInstance() { this-> m_pMainWnd=new mywnd(); this-> m_pMainWnd-> ShowWindow(this-> m_nCmdShow); this-> m_pMainWnd-> UpdateWindow(); return TRUE; }; BEGIN_MESSAGE_MAP(mywnd,CFrameWnd)//消息映射函数 ON_WM_PAINT() END_MESSAGE_MAP()//消息映射函数 mywnd::mywnd() {this-> Create(NULL,TEXT("喜欢小松鼠"),WS_OVERLAPPEDWINDOW|WS_VSCROLL,CRect(100,100,380,300)); }void mywnd::OnPaint()//实现的wm_paint消息映射函数 { CPaintDC cp(this); //设备上下文 CRect rect; //窗体上空白的部分 this-> GetClientRect(& rect); cp.DrawText(TEXT("想和小松鼠一起看徐黑冬的MMA比赛"),-1,& rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); }
- 主函数调用
#include "anotherapp.h" myapp cpc;
运行结果:
【CWinApp和CFrameWnd】
文章图片
推荐阅读
- ORA-02050 trapped in 2PC on transaction 191.4.1345608. Cleaning up.
- 最简单的方法通过命令制作安卓签名文件证书并获取其 md5,可不安装软件
- django给app返回接口列表, 流式分页
- android 使用人脸功能随处可用的方法
- call 和 apply
- Android Jetpack -- Lifecycles篇
- Android基础——隐式intent和intent过滤器
- django-腾讯paas-appengine阅读
- [record] 初入android