#include "windows.h"
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow) {
MessageBox(NULL, TEXT("来见见世面"), TEXT("Say Hi"), MB_OK);
return 0;
}
MessageBox第一个参数为句柄,第二个参数为内容,第三个参数为标题
第四个为现实的按钮,MB_OK代表只显示确定按钮。
MB_OKCANCEL则代表多一个取消按钮
MB_ABORTRETRYIGNORE代表有以上三个按钮
剩下的也是根据英文意思来进行一个按钮的显示
加上异或可以进行图标的不同显示
#define MB_ICONHAND 0x00000010L
#define MB_ICONQUESTION 0x00000020L
#define MB_ICONEXCLAMATION 0x00000030L
#define MB_ICONASTERISK 0x00000040L
#if(WINVER >= 0x0400)
#define MB_USERICON 0x00000080L
#define MB_ICONWARNING MB_ICONEXCLAMATION
#define MB_ICONERROR MB_ICONHAND
#endif /* WINVER >= 0x0400 */
#define MB_ICONINFORMATION MB_ICONASTERISK
#define MB_ICONSTOP MB_ICONHAND
MB_DEFBUTTON2代表运行后默认选择在第二项,也就是重试按钮,可以看前面的都是默认选择在第一项,当然MB_DEFBUTTON3的话就会默认选择在第三项,也就是忽略按钮
MessageBox同样也存在返回值
#define IDOK 1
#define IDCANCEL 2
#define IDABORT 3
#define IDRETRY 4
#define IDIGNORE 5
#define IDYES 6
#define IDNO 7
#if(WINVER >= 0x0400)
#define IDCLOSE 8
#define IDHELP 9
#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0500)
#define IDTRYAGAIN 10
#define IDCONTINUE 11
#endif /* WINVER >= 0x0500 */
#if(WINVER >= 0x0501)
#ifndef IDTIMEOUT
#define IDTIMEOUT 32000
#define TEXT(quote) __TEXT(quote) // r_winnt
#define __TEXT(quote) L##quote // r_winnt
往TEXT宏内部看,发现可以用L来代替TEXT()
UE4中同样也是:
FString a = L"111";
GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Yellow, a);
MessageBox(NULL, TEXT("123"), TEXT("312"), MB_OK);
但是UE4如何需要使用Windows编程的话必须添加以下头文件:
#include "Windows/AllowWindowsPlatformTypes.h"
#include "Windows/PreWindowsApi.h"
#include <windows.h>
#include "Windows/PostWindowsApi.h"
#include "Windows/HideWindowsPlatformTypes.h"
ASCILL码存在中文乱码问题,Unicode解决了这一问题
窗口编程和控制台编程有所不一样,要把进行一些设置,右键点击,选择属性
将子系统选择为窗口,方能编译成功
#include "windows.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message) {
case WM_PAINT://如果消息是绘制
hdc = BeginPaint(hwnd, &ps);//dc全称为device context = 设备上下文 设备描述表中记录和此设备相关的各种信息,比如对于显示器来说,记录了显示器的尺寸、分辨率,还有当前选择的画笔、画刷、字体等GDI对象的信息。
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("学习日记!!!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_LBUTTONDOWN:
MessageBox(NULL, L"Clicked Window!", L"Hint", MB_OK);
return 0;
case WM_DESTROY://如果消息是结束绘制
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow) {
static TCHAR szAppName[] = TEXT("MyWindows");//定义窗口类的名字
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("注册失败"), L"FAILED", MB_ABORTRETRYIGNORE | MB_ICONQUESTION | MB_DEFBUTTON2);
return 0;
}
hwnd = CreateWindow(//调用WndProc函数
szAppName,
TEXT("学习日记"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hinstance,
NULL
);
ShowWindow(hwnd, iCmdShow); //调用WndProc函数
UpdateWindow(hwnd);//调用WndProc函数
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);//调用WndProc函数
}
return msg.wParam;
}