2020.02.03
昨天和前天,基本完成了对windows程序设计的基础认识,并且也写了一些在windows程序设计里面十分简单的代码。今天……继续学习!!!
上一篇文章里面,直接用API函数进行windows程序设计,我简直成为了抄代码的机器,一言难尽。
所以为了化简windows程序设计,方便你我他。就出现了用面向对象程序设计的方式,把API函数包装成了几百个类。
把零散的函数包装为类,显而易见,不论代码行数有不有减少,至少在我们学习上更加的有条理性。
接下来主要就学习两个最重要的类:CWInAPP 和 CFrameWnd
还是一段代码
#include <afxwin.h>
class CMyApp :public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMainWindow :public CFrameWnd
{
public:
CMainWindow();
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()//声明消息映射
};
CMyApp app;
BOOL CMyApp::InitInstance()
{
this->m_pMainWnd = new CMainWindow;
this->m_pMainWnd->ShowWindow(this->m_nCmdShow);
this->m_pMainWnd->UpdateWindow();
//system("pause");
return 0;
}
BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)//开始消息映射
ON_WM_PAINT()
END_MESSAGE_MAP()
CMainWindow::CMainWindow()
{
this->Create(NULL, TEXT("Hello,WIndows!"), WS_OVERLAPPEDWINDOW | WS_VSCROLL, CRect(100, 100, 380, 300));
}
void CMainWindow::OnPaint()//处理绘制消息
{
CPaintDC dc(this);//DC对象
CRect rect;
this->GetClientRect(&rect);
dc.DrawText(TEXT("Hello Windows!"), -1, &rect, DT_SINGLELINE | DT_CENTER | BS_VCENTER);
}
运行的结果
因为自己看的教程有一些年纪了,所以当自己写了和老师基本一样的代码运行后,发现了我的窗口竟然闪退!找资料的结果是自己还是没有解决。于是乎,容我后面来解决吧……
接下来,我在讲一讲自己这几天从老师哪里学到的关于windows编程的一些理论知识!
首先,我们要知道的是学习windows编程,是因为我们绝大多数人用的系统是微软的。那么Windows编程就是微软里面的一群人编写的,一套基于C语言的,函数总成。也就是著名的API函数。说实话,这些函数背起来真的有一些困难。故而后面又用面向对象的设计思想吧API函数包装成了几百个类。
在者,windows设计里面,窗口是一切的基础。我们看到的一切都是窗口。
最后,就是我们消息处理机制,如下图: