标签:
上一篇《一个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