一个Windows程序必须有一个名为WinMain的主函数。WinMain函数是Windows应用程序开始执行时的入口点,它的返回类型为int。其作用十分类似于C应用程序的main函数。
在Windows环境下,可以运行同一个程序的多个拷贝,每一个拷贝都是该应用程序的一个句柄,每个实例使用一个实例句柄进行标识。hInstance是标识当前程序的实例的句柄,它的值不会为NULL。如果在此之前Windows中已经运行了该程序的另一个实例,则这个实例的句柄由参数hPrevInstace给出。如果在运行该程序时,除夕有什么风俗Windows环境中不存在该程序的另一个实例,则hPrevInstance为NULL。
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int PASCAL WinMain(
HINSTANCE hInstance, // 应用程序的实例句柄
HINSTANCE hPrevInstance, // 该应用程序前一个实例的句柄
LPSTR lpszCmdLine, // 命令行参数串
int nCmdShow) // 程序在初始化时如何显示窗口
{
char szAppName[] = "Window";
HWND hwnd; //主窗口句柄(句柄为窗口windows中的标识)
MSG msg; //定义windows消息数据结构
WNDCLASS wndclass; //定义窗口类
if (!hPrevInstance) //判断是否有其他应用程序实例在运行
/*同一个类只能向Windows注册一次,此处通过判别hPrevInstance的值是否为NULL,来决定是否应向Windows注册窗口类,从而保证了只在该程序的第一个实例中注册窗口类。*/
{
慈禧光绪 // 该实例是程序的第一个实例,注册窗口类
wndclass.style = CS_VREDRAW CS_HREDRAW;//窗口风格
生肖拼音 wndclass.lpfnWndProc = WndProc; // 窗口函数
wndclass.cbClsExtra = 0; // 类变量占用的存储空间孙浩
wndclass.cbWndExtra = 0;// 实例变量占用的存储空间
wndclass.hInstance = hInstance;//定义该类的应用程序实例的句柄
//图标对象的句柄
wndclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
//光标对象的句柄
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
//用于擦除用户区的刷子对象的句柄
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.lpszMenuName = NULL; // 标识选单对象的字符串
wndclass.lpszClassName = szAppName; //标识该类的名字的字符串
if (!RegisterClass(&wndclass))//注册窗口类
return FALSE; // 如果注册失败
}
// 对每个实例,创建一个窗口对象
hwnd = CreateWindow(
szAppName, ∥窗口类名
"Sample Program", ∥窗口标题名
WS_OVERLAPPEDWINDOW, ∥创建窗口的样式
CW_USEDEFAULT, CW_USEDEFAULT, ∥窗口左上角坐标
CW_USEDEFAULT, CW_USEDEFAULT, ∥窗口宽度和度高
NULL, ∥该窗口的父窗口句柄
NULL, ∥窗口主菜单句柄
hInstance, ∥应用程序当前句柄
NULL); ∥指向传递给窗口的参数值的指针
ShowWindow(hwnd, nCmdShow); //显示窗口,nCmdShow指定显示方式
UpdateWindow(hwnd); //刷新窗口用户区
while(GetMessage(&msg, NULL, 0, 0)) //建立消息循环
{
TranslateMessage(&msg); //将键盘消息翻译成Windows字符集
DispatchMessage(&msg);// 将消息发送到窗口处理
}
return msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
ca WM_DESTROY:
PostQuitMessage(0);//将消息WM_QUIT消息放入应用程序的消息队列中
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
1. 输出文本举例:
在WndProc窗口函数中加入一下定义:
HDC hdc;
PAINTSTRUCT ps;
char MsgLBTN[]="你刚按下了鼠标左键!";
char MsgRBTN[]="你刚按下了鼠标右键!";
char str1[]="输出文字1毒鲉!";
char str2[]="输出文字2!";
在相应消息中加入WM_PAINT消息:
ca WM_PAINT:
{
hdc = BeginPaint(hwnd, &ps);//绘制图形开始
TextOut(hdc, 10, 40, str1, strlen(str1));
TextOut(hdc, 40, 90, str2, strlen(str2));
EndPaint(hwnd, &ps); //绘制图形结束
return 0;//若无此句看看结果怎么样?
}
2. 在WndProc窗口函数中加入一下定义:
能源动力类专业 HDC hdc;
PAINTSTRUCT ps;
RECT rc;
微观经济学创始人在相应消息中加入WM_PAINT消息:
ca WM_PAINT:
hdc = BeginPaint( hwnd, &ps );
GetClientRect( hwnd, &rc ); // 获取窗口客户区大小
DrawText( hdc, TEXT("Hello Windows!"), -1, &rc,
DT_SINGLELINE | DT_CENTER |DT_VCENTER );
EndPaint( hwnd, &ps );
return 0 ;
看看输出结果。
TextOut()函数用当前选择的字体、背景颜色和正文颜色将一个字符串写到指定位置。
函数原型
BOOL TextOut(
HDC hdc, // 设备描述表句柄
int nXStart, // 字符串的开始位置 x坐标
int nYStart, // 字符串的开始位置 y坐标
LPCTSTR lpString, // 字符串
int cbString // 字符串中字符的个数
);
DrawText()函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的制表符,字符对齐、折行等)。
函数原型:
驯鹿怎么读
int DrawText(
HDC hDC, // 绘制设备的句柄
LPCTSTR lpString, // 要绘制的文本
int nCount, // 文本的字符个数
LPRECT lpRect, // 参考矩形
UINT uFormat // 文本绘制格式
);
说明:
当nCount为–1时,表示lpString指定的是以“\0”为结尾的字符串,并自动计算该字符串的字符个数。lpRect是一个指向RECT类型的“矩形”结构指针,该“矩形”结构含有left、top、right
和bottom 4个LONG域。为了能在窗口客户区中间绘制文本,该函数的lpRect被填为RECT变量rc的指针,它通过调用GetClientRect函数,获取hwnd窗口的客户区大小。同时,指定uFormat格式为DT_SINGLELINE(单行输出)、DT_CENTER(水平居中)和DT_VCENTER(垂直居中)。
LOGFONT是Windows内部字体的逻辑结构,主要用于设置字体格式,其定义如下:
typedef struct tagLOGFONTA
{
LONG lfHeight; // 指定逻辑单位的字符或者字符元高度
LONG lfWidth; // 指定逻辑单位的字体字符的平均宽度
LONG lfEscapement; // 指定每行文本输出时相对于设备x轴的角度,其单位为1/10度
LONG lfOrientation; // 指定字符基线相对于设备x轴的角度,其单位为1/10度
LONG lfWeight;//字体的粗细程度,其范围在0~1000之间, 正常为400,粗体为700,NULL表示默认粗细
BYTE lfItalic; //此值为TRUE时,字体为斜体
BYTE lfUnderline; // 此值为TRUE时,字体带下划线
BYTE lfStrikeOut; //此值为TRUE时,字体带删除线
BYTE lfCharSet; // 使用的字符集,如GB2312_CHARSET,CHINESEBIG5_CHARSET等。
BYTE lfOutPrecision; // 输出精度,与所要求的字体高度、宽度、字符方向及字体类型等相接近的程度
BYTE lfClipPrecision; // 指定剪辑精度,当字符的一部分超过剪辑区域时对字符的剪辑方式
BYTE lfQuality; //输出质量, GDI在匹配逻辑字体属性到实际的物理字体时所使用的
方式
BYTE lfPitchAndFamily;// 字体的字符间距
CHAR lfFaceName[LF_FACESIZE];//所使用的字体名称,如果为空,则使用系统默认的字体
} LOGFONTA
字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸等方面的属性。字样是字符书写和显示时表现出的特定模式。
例如,对于汉字通常有宋体、楷体、隶书、黑体以及魏碑林等多种字样;
字体风格主要表现为字体的粗细和是否倾斜等特点;