#include<windows.h>
#pragma comment(lib, "winmm.lib")
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, //hInstance是实例句柄,具体是一个数值
HINSTANCE hPrevInstance, //此参数通常总是定义为NULL
PSTR szCmdLine, //用来运行程序的命令行,有些Windows程序启动时用它来把文件装入内存
int iCmdShow){//iCmdShow指明程序如何显示(最大化?正常显示?)
static TCHAR szAppName[] = TEXT("HelloWindows");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
// 用于类结构和Windows内部维护的窗口结构中预留一些额外空间
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; //指定窗口类的菜单,NULL为不带菜单
wndclass.lpszClassName = szAppName; //窗口名
if(!RegisterClass(&wndclass)){//为应用程序注册一个窗口类
// 注册失败
MessageBox(NULL,
TEXT("本程序需要windows NT"),
szAppName,
MB_ICONERROR
);
return 0;
}
// 函数原型:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE hlnstance,LPVOID lpParam);
hwnd = CreateWindow(szAppName, //窗口名
TEXT("Hello Programe"),//窗口内容
WS_OVERLAPPEDWINDOW, //窗口风格
CW_USEDEFAULT, //初始X坐标
CW_USEDEFAULT, //初始Y坐标
CW_USEDEFAULT, //初始X方向的尺寸
CW_USEDEFAULT, //初始Y方向的尺寸
NULL, //父窗口句柄
NULL, //菜 单句柄,或依据窗口风格指明一个子窗口标识
hInstance, //程序实例句柄
NULL //创建参数, 指向一个值的指针,该值传递给窗口 WM_CREATE消息
);
/*函数功能:该函数设置指定窗口的显示状态。
函数原型:BOOL ShowWindow(HWND hWnd, int nCmdShow);*/
ShowWindow(hwnd, iCmdShow);//创建完之后,开始显示
// 如果窗口更新的区域不为空,UpdateWindow函数就发送一个WM_PAINT消息来更新指定窗口的客户区。
// 函数绕过应用程序的消息队列,直接发送WM_PAINT消息给指定窗口的窗口过程,如果更新区域为空,则不发送消息。
UpdateWindow(hwnd);
/*GetMessage是从调用线程的消息队列里取得一个消息并将其放于指定的结构。
此函数可取得与指定窗口联系的消息和由PostThreadMessage寄送的线程消息。
此函数接收一定范围的消息值。GetMessage不接收属于其他线程或应用程序的消息。
获取消息成功后,线程将从消息队列中删除该消息。函数会一直等待直到有消息到来才有返回值。*/
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg); //翻译一些键盘消息
DispatchMessage(&msg); //将消息发送给窗口过程
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
){
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message){
case WM_CREATE:
//播放声音文件
PlaySound(TEXT("hellowin.wav"),//播放窗口打开的声音
NULL,
SND_FILENAME | SND_ASYNC
);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps); //标明窗口绘制开始
GetClientRect(hwnd, &rect); //获取窗口客户区的尺寸
// 显示一个文本字符擦混
DrawText(hdc,
TEXT("Hello, windows 10"),
-1,
&rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER
);
EndPaint(hwnd, &ps); //结束窗口绘制
return 0;
case WM_DESTROY:
PostQuitMessage(0); //将退出消息插入消息队列
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam); //执行默认的消息处理
}
C windows.h 创建窗口
最新推荐文章于 2023-01-10 21:44:33 发布