02MFC基础 - 图文(8)

2019-01-26 17:05

CONST MSG *lpMsg // 消息结构的地址 );

LONG DispatchMessage( // 传送消息(给窗口的消息处理过程) CONST MSG *lpmsg // 消息结构的地址 );

10.绘图开始与结束函数

HDC BeginPaint( // 开始绘图 HWND hwnd, // 窗口句柄

LPPAINTSTRUCT lpPaint // 绘图信息结构的指针 );

BOOL EndPaint(

HWND hWnd, // 窗口句柄

CONST PAINTSTRUCT *lpPaint // 绘图信息结构的指针 );

11.文本输出函数

BOOL TextOut( // 绘制文本串 HDC hdc, // DC句柄

int nXStart, // 起始位置的x坐标 int nYStart, //起始位置的y坐标 LPCTSTR lpString, // 串指针 int cbString // 串中的字符数 );

12.传递退出消息函数

VOID PostQuitMessage(

int nExitCode // 退出代码(一般0表示正常、1表示出错) );

36

2.3.3 示例程序(WHello)

利用上面这些函数和结构,可以写出一个最简单的Windows API程序——WHello。

1.源代码

// WHello.cpp

#include //#include

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam,

LPARAM lParam);

LPCWSTR szAppName = L\// 程序入口函数

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE

hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

HWND hWnd; MSG msg;

WNDCLASS wndClass; // 注册窗口类

if (!hPrevInstance) {

wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WndProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0;

wndClass.hInstance = hInstance;

wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground =

(HBRUSH)GetStockObject(WHITE_BRUSH);

wndClass.lpszMenuName = NULL; wndClass.lpszClassName = szAppName;

37

}

if (!RegisterClass(&wndClass)) return FALSE;

// 创建并显示窗口

hWnd = CreateWindow(szAppName, L\

WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

}

if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // 消息循环

while (GetMessage(&msg, NULL, 0, 0)) { }

return (int)msg.wParam;

TranslateMessage(&msg); DispatchMessage(&msg);

// 消息处理的窗口过程函数

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam,

LPARAM lParam) {

static LPCTSTR str = L\PAINTSTRUCT ps; HDC hDC; /*int x, y;

wchar_t buf[20];*/ switch (uMsg) {

case WM_PAINT: // 绘制客户区

hDC = BeginPaint(hWnd, &ps);

TextOut(hDC, 0, 0, str, (int)wcslen(str)); EndPaint(hWnd, &ps);

38

}

}

return 0;

/*case WM_LBUTTONUP: // 响应鼠标左键松开消息

x = LOWORD(lParam); // 光标的x坐标 y = HIWORD(lParam); // 光标的y坐标

swprintf(buf, 20, L\hDC = GetDC(hWnd);

TextOut(hDC, x, y, buf, (int)wcslen(buf)); ReleaseDC(hWnd, hDC); return 0;*/

case WM_DESTROY: // 关闭窗口

PostQuitMessage(0); return 0;

return DefWindowProc(hWnd, uMsg, wParam, lParam);

注意:由于Visual C++项目默认都采用双字节的Unicode字符编码,所以在上面的程序中,使用了宽字符类型wchar_t、字符串及其指针类型LPCWSTR和LPCTSTR,在字符串常量前添加了L转换符,串长计算函数改用了wcslen,串格式打印函数也改用了swprintf。

2.逻辑框图

图2-11是WHello程序的基本逻辑框图。

39

定义窗口类结构 包含Windows头文件 注册窗口类 声明窗口过程函数原型 定义应用程序名串 定义入口函数 创建窗口 显示和刷新窗口 消息循环 定义变量 定义窗口过程函数 处理消息 调用默认窗口过程 返回消息处理结果 图2-11 WHello程序的基本逻辑框图

3.运行结果

WHello程序的运行结果是创建并显示一个窗口,窗口的标题条为“Hello Program”,并在窗口客户区的左上角显示字符串“Hello, Welcome to Windows!”,参见图2-12 a)。

如果去掉程序中三处灰色代码的注释符号(程序开始处的包含头文件stdio.h,过程函数中的定义表示光标位置坐标的整数变量x和y、用作缓冲区的宽字符数组buf,响应WM_LBUTTONUP消息的case语句),则结果会响应用户的鼠标单击(左鼠标键松开)消息,并在光标处显示字符串“Hello! (x, y)”,其中(x, y)为当前光标位置的坐标值,参见图2-12 b)。

40


02MFC基础 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:加气混凝土砌块墙施工方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: