标签:
上一篇《一个Demo初识MFC》用一个例程带入对MFC的初探,本篇紧接着上篇,首先对代码进行讲解,然后继续向前进。
MFC提供数百个类,最重要的、也是编写任何VC++应用程序都必不可少的两个类 CWinApp 和 CFrameWnd ,这两个类是编写复杂庞大应用程序的基石。
将消息与消息处理函数联系起来,形成一一对应的机制。消息映射宏声明: DECLARE_MESSAGE_MAP定义:BEGIN_MESSAGE_MAP
ON_COMMANDON_CONTROLON_MESSAGE
END_MESSAGE_MAP
类是MFC中最主要的内容。MFC类是以层次结构方式组织起来的。MFC中的类分成两部分,除了一些辅助类,大多数的MFC类是直接或间接从根类CObject派生而来。
CObject项目类)->CCmdTarget(消息响应类)->
{
CWinThread(线程类)->CWinApp(Window应用程序类)
CDocument(文档类)
CWnd(窗体类)->[
CFrameWnd(框架类)
CView(视图类)
]
}
// TestWinAPI.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<windows.h>
/* 声明窗口过程 */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/* 窗口类名 */
TCHAR szClassName[]=TEXT("WindowsApp");
/* 入口函数 */
int WINAPI WinMain (
HINSTANCE hInstance, // 实例句柄
HINSTANCE hPrevInstance, // 先前的实例, Win32下始终为NULL
LPSTR lpCmdLine, // 命令行参数
int nCmdShow // 窗口显示命令参数
)
{
HWND hwnd; /* 窗口句柄 */
MSG messages; /* 消息结构变量 */
WNDCLASS wincl; /* 窗口类结构变量 */
/* 填充窗口类结构变量 */
wincl.hInstance = hInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* 设置窗口过程 */
wincl.style = CS_DBLCLKS; /* 窗口类样式 */
/* 设置默认图标光标 */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* 菜单 */
wincl.cbClsExtra = 0; /* 窗口类额外数据字节数 */
wincl.cbWndExtra = 0; /* 窗口额外数据字节数 */
/* 窗口默认背景 */
wincl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
/* 注册窗口类 */
if (!RegisterClass(&wincl))
return 0;
/* 创建窗口 */
hwnd = CreateWindow (
szClassName, /* 类名 */
TEXT("我的Windows API应用程序"),/* 标题文本 */
WS_OVERLAPPEDWINDOW, /* 窗口样式 */
CW_USEDEFAULT, /* X坐标 */
CW_USEDEFAULT, /* Y坐标 */
CW_USEDEFAULT, /* 宽度px */
CW_USEDEFAULT, /* 高度px */
HWND_DESKTOP, /* 父窗口句柄 */
NULL, /* 菜单 */
hInstance, /* 程序实例句柄 */
NULL /* 窗口创建参数 */
);
/* 按照参数显示窗口 */
ShowWindow (hwnd, nCmdShow);
/* 进入消息循环,直到GetMessage()返回0. 即WM_QUIT消息发出 */
while (GetMessage(&messages, NULL,0,0))
{
/* 翻译虚拟键消息成字符消息 */
TranslateMessage(&messages);
/* 发送消息给窗口过程 */
DispatchMessage(&messages);
}
return (int)messages.wParam;
}
/* 窗口过程实现 */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
RECT rect;
HDC hDC = BeginPaint(hwnd,&ps);
//TCHAR sz[]=TEXT("我的Windows API应用程序");
//TextOut(hDC,10,10,sz,lstrlen(sz));
GetClientRect (hwnd, &rect) ;
DrawText(hDC,TEXT("Hello Windows API"),-1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd,&ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0); /* 向消息队列发出WM_QUIT消息 */
break;
default: /* 不感兴趣的消息交给DefWindowProc()处理 */
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/zhuxipan1990/article/details/51360316