c 6.0语言的主窗口,vc6.0窗口HelloWorld源码分析

#include "stdafx.h"

#include "resource.h"

#define MAX_LOADSTRING 100                                                // 最大读取字符串

// 全局变量:

HINSTANCE hInst;                                                                // 当前实例

TCHAR szTitle[MAX_LOADSTRING];                                                                // 标题栏

TCHAR szWindowClass[MAX_LOADSTRING];                                                                // 窗口类名

// 函数声明:

ATOM                                MyRegisterClass(HINSTANCE hInstance);

BOOL                                InitInstance(HINSTANCE, int);

LRESULT CALLBACK        WndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK        About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR     lpCmdLine,

int       nCmdShow)

{

// TODO: 代码位置.

MSG msg;

HACCEL hAccelTable;

// 初始化全局字符串

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_ANALYSIS, szWindowClass, MAX_LOADSTRING); // 加载字串表资源

MyRegisterClass(hInstance); // 注册窗口应用程序

// 应用程序初始化:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_ANALYSIS); // 注册快捷键

// 主消息循环:

while (GetMessage(&msg, NULL, 0, 0)) // 获取消息,收到WM_QUIT消息时退出循环

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))  // 将快捷键转换为按键消息,如果不是快捷键消息执行下面的语句

{

TranslateMessage(&msg); // 将WM_KEYDOWN和WM_KEYUP消息转换成WM_CHAR消息放入消息队列

DispatchMessage(&msg); // 将消息发送到回调函数(WndProc)处理

}

}

return msg.wParam; // 将退出消息返回给操作系统,从而退出,wParam的值是由PostQuitMessage的参数获得的

}

//

//  函数: MyRegisterClass()

//

//  目的: 注册窗口类.

//

//  注释:

//

//    此函数必须使用,如果你想要这段代码兼容

//    win32系统首先要知道'RegisterClassEx'函

//    数是在Windows 95之后添加的,调用这个函

//    数很重要,这样这个应用程序就会正确关联

//    小图标文件。

//

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex; // 窗口类结构体,用于注册窗口类

wcex.cbSize = sizeof(WNDCLASSEX);  // 结构体大小

wcex.style                        = CS_HREDRAW | CS_VREDRAW; // 窗口风格

wcex.lpfnWndProc        = (WNDPROC)WndProc; // 窗口处理函数

wcex.cbClsExtra                = 0; // 指定紧跟在窗口类结构后的附加字节数

wcex.cbWndExtra                = 0; // 指定紧跟在窗口事例后的附加字节数

wcex.hInstance                = hInstance; // 窗口实例句柄

wcex.hIcon                        = LoadIcon(hInstance, (LPCTSTR)IDI_ANALYSIS); // 图标句柄

wcex.hCursor                = LoadCursor(NULL, IDC_ARROW); // 光标句柄

wcex.hbrBackground        = (HBRUSH)(COLOR_WINDOW+1); // 背景画刷句柄

wcex.lpszMenuName        = (LPCSTR)IDC_ANALYSIS; // 菜单指针

wcex.lpszClassName        = szWindowClass; // 指向窗口类名的指针,用于内部标识窗口

wcex.hIconSm                = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); // 小图标

return RegisterClassEx(&wcex); // 注册窗口类

}

//

//   函数: InitInstance(HANDLE, int)

//

//   目的: 保存实例句柄和创建主窗口

//

//   注释:

//

//        在这个函数中, 保存实例句柄到全局变量

//        创建和显示主窗口程序.

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd; // 窗口句柄

hInst = hInstance; // 在全局变量中存储实例句柄

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); // 创建窗口,风格WS_OVERLAPPEDWINDOW,初始坐标CW_USEDEFAULT,初始大小CW_USEDEFAULT,返回窗口句柄

if (!hWnd)

{

return FALSE; // 如果创建失败,返回FALSE

}

ShowWindow(hWnd, nCmdShow); // 显示窗口

UpdateWindow(hWnd); // 发送WM_PAINT消息,更新窗口

return TRUE;

}

//

//  函数: 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; // WM_COMMADN消息的菜单ID或子窗口的控件ID(低位)和通知码(高位)

PAINTSTRUCT ps;

HDC hdc; // 设备句柄

TCHAR szHello[MAX_LOADSTRING];

LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch (message)

{

case WM_COMMAND: // 按键消息

wmId    = LOWORD(wParam);

wmEvent = HIWORD(wParam);

// 处理菜单项:

switch (wmId)

{

case IDM_ABOUT: // 菜单About被单击,执行下面的语句

DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); // 创建对话框IDD_ABOUTBOX,父窗口为hWnd,处理过程About函数

break;

case IDM_EXIT: // 菜单Exit被单击,执行下面的语句

DestroyWindow(hWnd); // 销毁窗口

break;

default: // 把无用的消息交给DefWindowProc处理

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

}

break;

case WM_PAINT: // 重绘消息

hdc = BeginPaint(hWnd, &ps); // 获取设备句柄,为窗口进行绘图工作准备

// TODO: 绘图代码段

RECT rt; // 客户区右下角坐标

GetClientRect(hWnd, &rt); // 获取客户区坐标

DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); // 在客户区写入szHello,DT_CENTER使内容水平居中

EndPaint(hWnd, &ps); // 结束绘画,释放设备句柄

break;

case WM_DESTROY: // 关闭窗口消息

PostQuitMessage(0); // 发送WM_QUIT消息到消息循环

break;

default: // 把无用的消息交给DefWindowProc处理

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) // 如果按键为IDOK或者IDCANCEL(关闭按钮)

{

EndDialog(hDlg, LOWORD(wParam)); // 结束对话框

return TRUE;

}

break;

}

return FALSE;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值