windows笔记-一个简单的windows GUI应用程序
#include<windows.h> // 编写Windows程序必须包含的头文件
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); // 声明窗口函数原型
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
HWND hwnd; // 定义窗口句柄
MSG msg; // 定义一个用来存储消息的变量
TCHAR lpszClassName[] = TEXT("窗口");
WNDCLASS wc; // 定义一个窗口类变量
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = ::LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor = ::LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = lpszClassName;
::RegisterClass(&wc); // 注册窗口
hwnd= CreateWindow(lpszClassName, // 创建窗口
TEXT("Windows"),
WS_OVERLAPPEDWINDOW,
120,50,800,600,
NULL,
NULL,
hInstance,
NULL);
::ShowWindow(hwnd,SW_SHOWNORMAL); // 显示窗口
::UpdateWindow(hwnd);
while(::GetMessage(&msg,NULL,0,0)) // 消息循环
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return msg.wParam;
}
// 处理消息的窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_LBUTTONDOWN: // 鼠标左键下消息
{
::MessageBeep(0); // 可以发出声音的API函数
}
break;
case WM_DESTROY:
::PostQuitMessage(0);
break;
default:
return ::DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
风 格 宏 | 解 释 |
WS_border | 单线边框 |
WS_caption | 有标题框的窗口(包括WS_BODER风格) |
WS_popup | 作为一个弹出式窗口 |
WS_child | 作为子窗体(与WS_popup互斥) |
WS_disabled | 窗口不能初始化,并且屏蔽与用户的交互 |
WS_dlgframe | 窗口的外观类似与对话框 |
WS_group | 作为窗体的控件,可以与其他控件组合 |
WS_hscroll | 窗口具有水平滚动条 |
WS_vscroll | 窗口具有垂直滚动条 |
WS_maximize | 初始状态为最大化的窗口 |
WS_maximizebox | 窗口右上角有一个最大化按钮 |
WS_minimize | 初始状态为最小化的窗口 |
WS_minimizebox | 窗口右上角有一个最小化按钮 |
WS_overlappedwindow | 这是一个宏组合。为了方便书写,它等价于WS_overlapped|WS_caption|WS_sysmenu|WS_thickframe|WS_minimizebox|WS_maximizebox |
WS_overlapped | 边框重叠的窗口 |
WS_sizebox | 窗口的边框可以变化 |
WS_sysmenu | 在窗口的标题栏的最左上角有一个窗口菜单 |
WS_tabstop | 窗口作为控件,并且交互可以停留在这个控件上 |
WS_visible | 窗口建立的初始状态是可见的 |