创建一个windows窗体--学习笔记一
2008-09-11 13:00
579 查看
创建一个windows窗体主要的代码就是以下的内容:
#include "stdafx.h"
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
static TCHAR szAppName[] = "HelloWin";
HWND hWnd;
MSG msg;
WNDCLASS WndClass;
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;
if(!RegisterClass(&WndClass))
{
MessageBox(NULL,TEXT("This program requires windows NT"),TEXT(szAppName),MB_ICONERROR);
return 0;
}
hWnd = CreateWindow(szAppName,
TEXT("The Hello Program."),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(uMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("This is a test for HelloWin."),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
实际上,每一个Windows程序代码中都包括程序的大部分。没人能真正记住此程序的全部写法;通常,Windows程序写作者在开始写一个新程序时总是会复制一个现有的程序,然后再做相应的修改。
Windows函数呼叫
HELLOWIN至少呼叫了18个Windows函数。下面以它们在HELLOWIN中出现的次序列出这些函数以及各自的简明描述:
LoadIcon 加载图标供程序使用。
LoadCursor 加载鼠标光标供程序使用。
GetStockObject 取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。
RegisterClass 为程序窗口注册窗口类别。
MessageBox 显示消息框。
CreateWindow 根据窗口类别建立一个窗口。
ShowWindow 在屏幕上显示窗口。
UpdateWindow 指示窗口自我更新。
GetMessage 从消息队列中取得消息。
TranslateMessage 转译某些键盘消息。
DispatchMessage 将消息发送给窗口消息处理程序。
PlaySound 播放一个声音文件。
BeginPaint 开始绘制窗口。
GetClientRect 取得窗口显示区域的大小。
DrawText 显示字符串。
EndPaint 结束绘制窗口。
PostQuitMessage 在消息队列中插入一个「退出程序」消息。
DefWindowProc 执行内定的消息处理。
这些函数均在Platform SDK文件中说明,并在不同的表头文件中声明,其中绝大多数声明在WINUSER.H中。
大写字母标识符
读者可能注意到,HELLOWIN.C中有几个大写的标识符,这些标识符是在Windows表头文件中定义的。有些标识符含有两个字母或者三个字母的前缀,这些前缀后头接着一个底线:
这些是简单的数值常数。前缀指示该常数所属的类别,如表3-1所示。
奉劝程序写作者不要费力气去记忆Windows程序设计中的数值常数。实际上,Windows中使用的每个数值常数在表头文件中均有相应的标识符定义。
#include "stdafx.h"
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
static TCHAR szAppName[] = "HelloWin";
HWND hWnd;
MSG msg;
WNDCLASS WndClass;
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;
if(!RegisterClass(&WndClass))
{
MessageBox(NULL,TEXT("This program requires windows NT"),TEXT(szAppName),MB_ICONERROR);
return 0;
}
hWnd = CreateWindow(szAppName,
TEXT("The Hello Program."),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(uMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("This is a test for HelloWin."),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
实际上,每一个Windows程序代码中都包括程序的大部分。没人能真正记住此程序的全部写法;通常,Windows程序写作者在开始写一个新程序时总是会复制一个现有的程序,然后再做相应的修改。
Windows函数呼叫
HELLOWIN至少呼叫了18个Windows函数。下面以它们在HELLOWIN中出现的次序列出这些函数以及各自的简明描述:
LoadIcon 加载图标供程序使用。
LoadCursor 加载鼠标光标供程序使用。
GetStockObject 取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。
RegisterClass 为程序窗口注册窗口类别。
MessageBox 显示消息框。
CreateWindow 根据窗口类别建立一个窗口。
ShowWindow 在屏幕上显示窗口。
UpdateWindow 指示窗口自我更新。
GetMessage 从消息队列中取得消息。
TranslateMessage 转译某些键盘消息。
DispatchMessage 将消息发送给窗口消息处理程序。
PlaySound 播放一个声音文件。
BeginPaint 开始绘制窗口。
GetClientRect 取得窗口显示区域的大小。
DrawText 显示字符串。
EndPaint 结束绘制窗口。
PostQuitMessage 在消息队列中插入一个「退出程序」消息。
DefWindowProc 执行内定的消息处理。
这些函数均在Platform SDK文件中说明,并在不同的表头文件中声明,其中绝大多数声明在WINUSER.H中。
大写字母标识符
读者可能注意到,HELLOWIN.C中有几个大写的标识符,这些标识符是在Windows表头文件中定义的。有些标识符含有两个字母或者三个字母的前缀,这些前缀后头接着一个底线:
这些是简单的数值常数。前缀指示该常数所属的类别,如表3-1所示。
表3-1 |
前缀 | 类别 |
CS | 窗口类别样式 |
CW | 建立窗口 |
DT | 绘制文字 |
IDI | 图示ID |
IDC | 游标ID |
MB | 消息框 |
SND | 声音 |
WM | 窗口消息 |
WS | 窗口样式 |
相关文章推荐
- ExtJS 学习笔记 示例1-点击按钮弹出一个新窗体,避免重复创建
- 汇编语言学习笔记-创建最基本的windows窗体
- C#源代码—在windows窗体中添加一个名为lblShow的Lable控件4,创建可变字符串,字符串转换为字符型
- OpenStack开发学习笔记03————创建一个openstack
- 吕鑫MFC就业培训宝典学习笔记—创建一个简单的win32应用程序(2-1)
- sandy引擎学习笔记: 创建一个立方体
- SpringMVC学习笔记---- 一、SpringMVC基础入门,创建一个HelloWorld程序
- Extjs学习笔记2 -创建一个GridPanel
- VS2010 C++ MFC框架学习笔记1 - 创建一个简单的加法计算器(1)
- VS2010 C++ MFC框架学习笔记2 - 创建一个简单的加法计算器(2)
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度
- Windows编程学习笔记 lesson2 窗口创建
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度
- DirectX11 学习笔记3 - 创建一个立方体 和 轴
- VS2013MFC单文档工程学习笔记七 - 创建新的一个窗口并让窗口2透明
- Castle ActiveRecord学习笔记一:创建一个实例
- OpenGL_Qt学习笔记之_01(创建一个OpenGL窗口)
- django学习笔记【001】django版本的确定&创建一个django工程
- C#学习笔记——windows窗体
- Zend framework 学习笔记(1):创建一个Hello World应用