目录
-
- win32 api 窗口基础框架代码
- 动态添加菜单方法:
- 定时器,实现功能:弹出对话框,点击确定后2秒继续弹出,不会重复是因为杀了再新建
- 定时器,实现功能:显示系统时间年月日时分秒
- win32 api 窗口基础框架代码详解
win32 api 窗口基础框架代码
#define _CRT_SECURE_NO_WARNINGS 0
#include
#include
#include
#include
LRESULT CALLBACK WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreinstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
wc.style = CS_BYTEALIGNCLIENT;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = CreateSolidBrush(RGB(255, 255, 255));
wc.lpszMenuName = NULL;
wc.lpszClassName = "Main";
if (!RegisterClassA(&wc))
MessageBox(NULL, "此程序不能运行", "提示信息", MB_OK);
HWND hWnd = CreateWindow("Main","OK", WS_OVERLAPPEDWINDOW, 300, 133, 800, 600, NULL,NULL,hInstance,NULL);
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
MSG msg;
while (true)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
return 0;
}
}
else
{
}
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_TIMER:
break;
case WM_SIZE:
break;
case WM_CREATE:
break;
case WM_DESTROY:
PostMessage(hWnd, WM_QUIT, 0, 0);
break;
case WM_QUIT:
break;
case WM_COMMAND:
break;
case WM_RBUTTONUP:
break;
case WM_CONTEXTMENU:
break;
case WM_SYSCOMMAND:
case WM_PAINT:
break;
}
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
动态添加菜单方法:
#define ID_NEW 100
#define ID_OPEN 200
HMENU hmenu = CreateMenu();
HMENU hpopmenu = CreatePopupMenu();
AppendMenu(hmenu, MF_POPUP, (UINT_PTR)hpopmenu, "文件");
AppendMenu(hpopmenu, MF_STRING, ID_NEW, "新建");
AppendMenu(hpopmenu, MF_SEPARATOR, 0, NULL);
AppendMenu(hpopmenu, MF_STRING, ID_OPEN, "打开");
HWND hWnd = CreateWindow("Main", "OK", WS_OVERLAPPEDWINDOW, 300, 133, 800, 600, NULL, hmenu, hInstance, NULL);
注:也可以把创建过程放在WM_CREATE消息中,下面加一句代码就行,把上面创建主窗口里面的菜单置空就可以了。
setmenu(hwnd,hmenu);
下面是增加点击响应
case WM_COMMAND:
switch (LOWORD(wParam))
{case ID_NEW:
MessageBox(hWnd, "new", "new", MB_OK);
break;
case ID_OPEN:
MessageBox(hWnd, "open", "open", MB_OK);
break;
default:
break;
}
定时器,实现功能:弹出对话框,点击确定后2秒继续弹出,不会重复是因为杀了再新建
UINT idtimer;
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
idtimer = SetTimer(hWnd, 1, 2000, NULL);
MSG msg;
在WM_TIMER中加入下面代码
switch (Msg)
{
case WM_TIMER:
if (wParam==idtimer)
{
KillTimer(hWnd, idtimer);
MessageBox(hWnd, "idtimer", "timer", MB_OK);
idtimer = SetTimer(hWnd, 1, 2000, NULL);
}
break;
定时器,实现功能:显示系统时间年月日时分秒
int GetTimeStr(HWND hWnd)
{
PAINTSTRUCT ps;
const CHAR* str_org = "现在是%4d年%2d月%2d日%2d小时%2d分%2d秒";
SYSTEMTIME st;
WCHAR text[28];
GetLocalTime(&st);
wsprintf((LPSTR)text, str_org, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
HDC hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 33, 33, (LPCSTR)text, wcslen(text));
EndPaint(hWnd, &ps);
return 0;
}
========================================================
case WM_PAINT:
GetTimeStr(hWnd);
break;
case WM_TIMER:
if (wParam==idtimer)
{
KillTimer(hWnd, idtimer);
InvalidateRect(hWnd, NULL, FALSE);
idtimer = SetTimer(hWnd, 1, 1000, NULL);
}
break;
win32 api 窗口基础框架代码详解
#define _CRT_SECURE_NO_WARNINGS 0
#include
#include
#include
#include "resource.h"
#include
LRESULT CALLBACK WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreinstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
wc.style = CS_BYTEALIGNCLIENT;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance,(char*)IDI_ICON1);
wc.hCursor = LoadCursor(hInstance, (char*)IDC_CURSOR1);
wc.hbrBackground = CreateSolidBrush(RGB(255, 255, 255));
wc.lpszMenuName = (char*)IDR_MENU1;
wc.lpszClassName = "Main";
if (!RegisterClassA(&wc))
MessageBox(NULL, "此程序不能运行", "提示信息", MB_OK);
char szTitle[256]{ 0 };
LoadStringA(hInstance, IDS_WND, szTitle, 256);
HWND hWnd = CreateWindow(
"Main",
szTitle,
WS_OVERLAPPEDWINDOW,
300, 133, 800, 600,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
MSG msg;
while (true)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
return 0;
}
}
else
{
}
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_TIMER:
break;
case WM_SIZE:
break;
case WM_CREATE:
break;
case WM_DESTROY:
break;
case WM_QUIT:
break;
case WM_COMMAND:
break;
case WM_RBUTTONUP:
break;
case WM_CONTEXTMENU:
break;
case WM_SYSCOMMAND:
case WM_PAINT:
break;
}
return DefWindowProc(hWnd, Msg, wParam, lParam);
}