// FirstView.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst; // 当前句柄
TCHAR szTitle[MAX_LOADSTRING]; // 标题
TCHAR szWindowClass[MAX_LOADSTRING]; // 类名
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //消息处理回调函数
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); //消息处理回调函数
//该函数被系统调用,作为一个32位应用程序的入口点。
//HINSTANCE hInstance 应用程序当前事例的句柄
//HINSTANCE hPrevInstance 应用程序的前事例的句柄。对于一个32的位程序,该参数总为NULL。
//LPSTR lpCmdLine 指向应用程序命令行的空字符串的指针
//int nCmdShow 指明窗口如何显示
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg; //消息
HACCEL hAccelTable;//加速键表
// 初始化全局字符串、装载字符串表资源
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_FIRSTVIEW, szWindowClass, MAX_LOADSTRING);
//创建窗口
WNDCLASSEX wcex;//指向一个WNDCLASSEX结构的指针
wcex.cbSize = sizeof(WNDCLASSEX);
//定义INPUT结构的大小。若cbSize不是INPUT结构的大小,则函数调用失败。
wcex.style = CS_HREDRAW | CS_VREDRAW;
//此风格中可使用DKGRAY_BRUSH、GRAY_BRUSH和LTGRAY_BRUSH对象。
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;//句柄赋值
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_FIRSTVIEW);//图标句柄
wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //光标句柄
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //背景句柄
wcex.lpszMenuName = (LPCSTR)IDC_FIRSTVIEW;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
//注册一个窗口类。
RegisterClassEx(&wcex);
// 执行应用初始化:初始化失败返回false
HWND hWnd;//窗口句柄
hInst = hInstance; //全局变量处理
//创建窗口
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
//显示窗口
ShowWindow(hWnd, nCmdShow);
//重绘窗口
UpdateWindow(hWnd);
//LoadAccelerators 调入加速键表
//hInstance 模块的一个事例的句柄
//(LPCTSTR)IDC_FIRSTVIEW 指向一个以空结尾的字符串的指针,
//该字符串包含了即将调入的加速键表的名字
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_FIRSTVIEW);
// 主要消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
//TranslateAccelerator 翻译加速键表。该函数处理菜单
//命令中的加速键。如果失败,执行TranslateMessage,DispatchMessage方法
//msg.hwnd 窗口句柄,该窗口的消息将被翻译。
//hAccelTable 加速键表句柄。
//&msg MSG结构指针
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//函数:WndProc(HWND, unsigned, WORD, LONG)
//目的:过程信息的主窗口
//WM_COMMAND -应用程序的菜单
//WM_PAINT -主窗口
//WM_DESTROY -显示退出信息并返回
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc; //指向目标设备环境的句柄
TCHAR szHello[MAX_LOADSTRING]; //100个单位长度字符串
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); //装载字符串表资源
switch (message)
{
//应用程序的菜单
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单:
switch (wmId)
{
case IDM_ABOUT:
//根据对话框模板资源创建一个模态的对话框
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
//关闭窗口
DestroyWindow(hWnd);
break;
default:
//调用缺省的窗口过程来为应用程序没有处理的任何窗口消息提供缺省的处理
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
//主窗口
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
RECT rt;//指向RECT结构的指针
//该函数获取窗口客户区的坐标
GetClientRect(hWnd, &rt);
//该函数在指定的矩形里写入格式化文本
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
//绘制结束
EndPaint(hWnd, &ps);
break;
//显示退出信息并返回
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
//信息处理器.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
MFC小程序
最新推荐文章于 2023-09-25 16:32:03 发布