从Win32过渡到MFC(二)

本文介绍了如何将Win32Lib转换为类形式,包括创建CMyWnd和CMyApp类,分别处理窗口和应用程序的管理。通过对WinMain函数的分析,将窗口创建与消息循环分离,便于后续向MFC过渡。此外,还进行了代码优化,将常用和不常用代码分离,使用宏实现类似MFC的消息映射,简化理解和维护。
摘要由CSDN通过智能技术生成

将Win32Lib封装成类

 前面两个工程都还是全局函数的形式,现在我们来将Win32Lib封装成class,为向MFC过渡埋下伏笔。
Win32Lib工程中,我们仅仅是改造了WinProc()这个窗口处理函数,对WinMain()主函数并没有改造。仔细分析WinMain()函数,发现其本质就做了2件事情:一是创建和显示窗口,一是进行消息循环以响应窗口消息。因此,我们的封装思想也是基于这2点的。将其封装成2个类:CMyWnd类,和CMyApp类。CMyWnd类专门负责和窗口创建相关的工作,CMyApp类专门负责初始化、程序的运行(消息循环)等应用性的工作。
将Win32Lib工程复制一份,将目录改名为Win32Class,我们将在此基础上封装我们的Win32Class类。打开Win32Class工程,添加一个新类CMyWnd。
函数WinMain()中的代码在编写任何一个Win32工程时几乎都是上述固定的步骤,即注册窗口类,创建窗口,显示窗口,更新窗口,消息循环。

Win32Lib.h文件

// Win32Lib.h: interface for the CMyWnd class.
//

#ifndef AFX_MYWIN32LIB_H_ 
#define AFX_MYWIN32LIB_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//返回元素的个数
#define dim(x)(sizeof(x) / sizeof(x[0]))

//定义函数指针
typedef LRESULT(*FXN)(HWND, UINT, WPARAM, LPARAM);

//消息映射结构
struct tagMESSAGEMAP
{
	UINT Code;	//消息
	FXN Fxn;	//响应函数
};

class CMyWnd
{
public:
	HINSTANCE m_hInstance;
	HWND m_hWnd;
public:
	BOOL UpdateWindow();
	BOOL ShowWindow();
	BOOL Create();
	CMyWnd();
	virtual ~CMyWnd(){};

	//主窗口回调函数
	static LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);

	//声明消息响应函数
	static LRESULT OnChar(HWND, UINT, WPARAM, LPARAM);
	static LRESULT OnLButtonDown(HWND, UINT, WPARAM, LPARAM);
	static LRESULT OnPaint(HWND, UINT, WPARAM, LPARAM);
	static LRESULT OnDestroy(HWND, UINT, WPARAM, LPARAM);
	static LRESULT OnTimer(HWND, UINT, WPARAM, LPARAM);
};

//消息映射数组
tagMESSAGEMAP MessageMaps[] = {
	WM_CHAR,			CMyWnd::OnChar, 
	WM_LBUTTONDOWN,		CMyWnd::OnLButtonDown, 
	WM_PAINT,			CMyWnd::OnPaint, 
	WM_DESTROY,			CMyWnd::OnDestroy, 
	WM_TIMER,			CMyWnd::OnTimer, 
};

class CMyApp  
{
public:
	CMyWnd* m_pMainWnd;	//主窗口

public:
	CMyApp();
	virtual ~CMyApp(){};

	BOOL InitInstance();	//初始化主窗口
	BOOL Run();	//消息循环
};

#endif // defined(AFX_MYWIN32LIB_H_)

 

Win32Lib.cpp文件

#include <windows.h>
#include <stdio.h>
#include "Win32Lib.h"

CMyApp theApp;

//入口函数
int WINAPI WinMain(
	HINSTANCE hInstance,		// handle to current instance
	HINSTANCE h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值