`
lingyibin
  • 浏览: 196332 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MFC学习笔记(五)

阅读更多

早期的MFC应用程序框架结构由两个对象组成:应用程序类CWinApp 的派生类对象和窗口类CFrameWnd的派生类对象,后者作为一个成员对象嵌在前者之中

#include<windows.h>
//定义全局变量和函数------------------------------------------------------------------------
HINSTANCE hInst;								
HINSTANCE hInstance;
MSG msg;
char lpszClassName[]="window_class";
char*ShowText;
//声明函数原型--------------------------------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口函数
void OnLButtonDown(HWND hWnd, UINT message, 
				WPARAM wParam, LPARAM lParam);
void OnPaint(HWND hWnd, UINT message, 
				WPARAM wParam, LPARAM lParam);
void OnDestroy(HWND hWnd, UINT message, 
				WPARAM wParam, LPARAM lParam);
//窗体类-----------------------------------------------------------------------------------------
class CFrameWnd
{		
public:	
	HWND hWnd;
public:
	int RegisterWindow();	
	void Create(LPCTSTR lpClassName,
				LPCTSTR lpWindowName
				);	
	void ShowWindow(int nCmdShow);
	void UpdateWindow();
};
//窗体类的成员函数----------------------------------------------------------------
int CFrameWnd::RegisterWindow()
{	
	WNDCLASS wc;
	wc.style=0;
	wc.lpfnWndProc=WndProc;
	wc.cbClsExtra=0;
	wc.cbWndExtra=0;
	wc.hInstance=hInstance;
	wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	wc.hCursor=LoadCursor(NULL,IDC_ARROW);
	wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName=NULL;
	wc.lpszClassName=lpszClassName;
	return RegisterClass(&wc);
}
void CFrameWnd::Create(LPCTSTR lpClassName,
					   LPCTSTR lpWindowName)
{
	RegisterWindow();
	hInst = hInstance; 
	hWnd = CreateWindow(lpszClassName,
						lpWindowName, 
						WS_OVERLAPPEDWINDOW,
						CW_USEDEFAULT, 
						0, 
						CW_USEDEFAULT, 
						0, 
						NULL, 
						NULL, 
						hInstance, 
						NULL);
}
void CFrameWnd::ShowWindow(int nCmdShow)
{
	::ShowWindow(hWnd, nCmdShow);
}
void CFrameWnd::UpdateWindow()
{
	::UpdateWindow(hWnd);
}

//应用程序类----------------------------------------------------------------------------------
class CWinApp
{	
public:
	CWinApp * m_pCurrentWinApp;
public:
	CWinApp( );
	~ CWinApp( ); 
public:
	CFrameWnd * m_pMainWnd;
public:
	virtual BOOL InitInstance (int nCmdShow);
	int Run( );
};

CWinApp::CWinApp( )
{ m_pCurrentWinApp = this;}

BOOL CWinApp::InitInstance(int nCmdShow)
{
	m_pMainWnd=new CFrameWnd;
	m_pMainWnd->Create(NULL,"封装的Windows程序");
	m_pMainWnd->ShowWindow(nCmdShow);
	m_pMainWnd->UpdateWindow();
	return TRUE;
}
int CWinApp::Run()
{
	while (GetMessage(&msg, NULL, 0, 0)) 
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}
CWinApp::~ CWinApp( ) { delete m_pMainWnd; }

//程序员派生的窗体类-----------------------------------------------------------------------
class CMyWnd:public CFrameWnd
{
};

//程序员由CWinApp类派生的CMyApp类-----------------------------------------------
class CMyApp:public CWinApp
{
public:
	BOOL InitInstance(int nCmdShow);
};
//派生类CMyApp的成员函数---------------------------------------------------------------
CMyApp::InitInstance(int nCmdShow)
{
	CMyWnd*pMainWnd=new CMyWnd;//应用窗体的派生类定义窗体对象
	pMainWnd->Create(NULL,"应用窗体的派生类的程序");
	pMainWnd->ShowWindow(nCmdShow);
	pMainWnd->UpdateWindow();
	m_pMainWnd=pMainWnd;//把CMyWnd类的对象赋给m_pMainWnd
	return TRUE;
}

//程序员定义的CWinApp的对象MyApp--------------------------------------------------
CMyApp MyApp;

//全局函数AfxGetApp()----------------------------------------------------------------------
CWinApp*AfxGetApp()
{
	return MyApp.m_pCurrentWinApp;
}

//主函数------------------------------------------------------------------------------------------
int APIENTRY WinMain(HINSTANCE 	hInstance,
                     HINSTANCE 	hPrevInstance,
                     LPSTR     	lpCmdLine,
                     int       		nCmdShow)
{
	int ResultCode=-1;
	CWinApp*pApp;
	pApp=AfxGetApp();
	pApp->InitInstance(nCmdShow);
	return ResultCode=pApp->Run();
}
//窗口函数的实现--------------------------------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
WPARAM wParam, LPARAM lParam)
{
	switch (message) 
	{
	case WM_LBUTTONDOWN:	OnLButtonDown(hWnd, message, wParam, lParam);	
		break;
	case WM_PAINT:			OnPaint(hWnd, message,wParam, lParam);
		break;
	case WM_DESTROY:		OnDestroy(hWnd, message, wParam, lParam);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
void OnLButtonDown(HWND hWnd, UINT message, 
				WPARAM wParam, LPARAM lParam)
{
	ShowText="Hello!";
	InvalidateRect(hWnd,NULL,1);
}
void OnPaint(HWND hWnd, UINT message, 
				WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;
	hdc = BeginPaint(hWnd, &ps);
	TextOut(hdc,50,50,ShowText,6);
	EndPaint(hWnd, &ps);
}
void OnDestroy(HWND hWnd, UINT message, 
				WPARAM wParam, LPARAM lParam)
{
	PostQuitMessage(0);
}

 在应用程序主函数WinMain()中,CWinApp派生类的对象theApp通过调用自己的各个成员函数来完成程序的初始化及消息循环等一系列工作。在CWinApp成员函数InitInstance()中形成应用程序的主窗口对象pMainWnd(类CMyWnd的对象),在完成窗口的创建与显示后,主窗口对象pMainWnd将被给CWinApp的成员m_pMainWnd。

 

 

分享到:
评论

相关推荐

    MFC学习笔记总结(onenote格式)

    MFC学习笔记(onenote格式),一个朋友参加MFC培训,其教师在讲课过程中做的学习日记。图文并茂,是初学者很好的学习资料。

    MFC笔记 MFC笔记 MFC笔记 MFC笔记 MFC笔记 MFC笔记

    MFC本身也是基于Windows API构建的,因此理解Windows API对于深入学习MFC至关重要。 ### 内存管理 C++中的内存管理是一个关键且复杂的话题。`new`和`delete`是C++中用于动态分配和释放内存的关键字。`new`操作符...

    MFC学习笔记

    **MFC 学习笔记** MFC(Microsoft Foundation Classes)是微软开发的一种C++类库,用于构建Windows应用程序。它提供了面向对象的编程接口,使得开发者可以更容易地使用Windows API。MFC的主要目标是简化Windows应用...

    MFC菜单操作学习笔记

    MFC 菜单操作学习笔记 本文是关于 MFC 菜单操作学习笔记 的资源,旨在帮助开发者学习和掌握 MFC 菜单操作的技术。下面是对该资源的详细解释和知识点总结。 一、创建菜单 MFC 菜单操作学习笔记 中提供了两种创建...

    MFC学习笔记\MFC学习笔记整理:002_腾讯游戏连连看外挂制作(一)

    《MFC学习笔记:腾讯游戏连连看外挂制作(一)》 在本文中,我们将深入探讨如何使用Microsoft Foundation Classes (MFC) 来开发腾讯游戏连连看的外挂程序。MFC是微软提供的一套C++库,用于简化Windows应用程序的开发...

    C++、MFC学习笔记

    在C++编程中,MFC(Microsoft ...以上是C++和MFC学习笔记中涉及的关键知识点,涵盖了窗口、绘图、异常处理、消息循环、对话框以及资源管理等多个方面。理解并熟练运用这些概念对于深入掌握C++和MFC编程至关重要。

    MFC学习笔记(个人总结)

    本篇笔记主要涵盖了MFC中的一些基本功能和常用函数,适合初学者入门学习。 首先,我们来看看如何在MFC中使用消息框。`MessageBeep((WORD)-1)`函数可以发出PC的提示音,提醒用户有事件发生。而`MessageBox`函数则是...

    深入浅出MFC学习笔记

    ### 深入浅出MFC学习笔记:关键知识点解析 #### 一、Windows消息机制与回调函数 在深入探讨MFC之前,我们先来理解Windows操作系统中的消息机制及其核心组成部分——回调函数。 ##### 1.1 Windows消息机制概述 ...

    MFC学习笔记2.0.pdf - MFC学习过程中的问题和疑难点总结

    本人从零开始学C++/MFC的时候,积累和整理的学习笔记,其中有大部分常见问题和处理办法,看过很过帖子,也查过很多资料,最终把他们记录下来。 Demo内容: ★ ::OnTimer OnTimer()函数用于实现定时控制功能,定时...

    MFC学习笔记.docx

    在本篇MFC学习笔记中,我们将深入探讨如何使用MFC AppWizard创建不同类型的项目,以及这些项目中的关键类和文件。 首先,我们来看MFC AppWizard如何生成应用程序。AppWizard是MFC提供的一个向导工具,可以根据选择...

    MFC学习笔记1

    【MFC学习笔记1】 MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序的开发。本笔记将重点介绍基于对话框的MFC应用程序开发。 7.16 基于对话框编程 对话框在Windows程序中扮演...

    Visual_C++MFC学习笔记0

    《Visual C++ MFC 学习笔记》 学习Visual C++ MFC,首先需要具备扎实的C/C++基础知识。这是入门VC开发的基石,因为MFC(Microsoft Foundation Classes)是基于C++的一个类库,对C++的掌握程度直接影响到理解和使用...

    MFC学习笔记--案例--销售系统

    **MFC学习笔记——销售系统案例详解** MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序。它基于面向对象的编程思想,为开发者提供了丰富的功能,简化了Win32 API的使用。在...

    达内MFC课程完整笔记

    在学习MFC时,你需要了解以下几个核心概念和知识点: 1. **基本概念**:MFC是由一系列C++类组成的库,这些类封装了Windows API的功能。它提供了窗口、控件、文档/视图架构、消息映射、数据库访问等组件,帮助开发者...

    Visual C++/MFC学习笔记.doc

    《Visual C++/MFC学习笔记》是一份深入探讨C++和Microsoft Foundation Class (MFC)库的文档,旨在帮助读者掌握使用Visual C++开发Windows应用程序的技能。这份笔记主要分为六个章节,覆盖了从入门到高级的多个主题。...

    MFC学习笔记加windows32

    《深入探索MFC与Windows32编程》 MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化Windows应用程序开发。...通过深入学习这两方面的知识,开发者可以构建出功能丰富、性能优异的应用程序。

    深入浅出MFC读书笔记2

    深入浅出MFC读书笔记2是对MFC框架的进一步学习和理解,主要涵盖了MFC的基础概念、类库结构以及程序构建的关键要素。MFC(Microsoft Foundation Classes)是微软为Windows平台开发的应用程序提供的一种类库,它基于...

    MFC学习代码及笔记

    MFC(Microsoft Foundation...总之,MFC学习代码和笔记对于希望深入理解和掌握Windows桌面应用程序开发的程序员来说,是一份不可多得的学习材料。通过学习和实践,可以提升编程技能,更好地驾驭MFC这一强大的开发工具。

Global site tag (gtag.js) - Google Analytics