记得! 窗口回掉要return默认函数。
#include <tchar.h>
#include <windows.h>
#include<stdbool.h>
#include<stdio.h>
/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT uMsg/*消息类型*/, WPARAM wParam, LPARAM lParam) //后两个参数是消息的详细信息
{
switch(uMsg)
{
case WM_COMMAND:
{
MessageBox(hWnd,"天助死亡成功!","啊!!!",0); //还可以使用child-window identifier 标记控件,wParam的低十六位记录了identifier。
return 0;
}
case WM_KEYDOWN: //各种各样的宏定义等你去查,有一个宏定义可以专门接受字符
{
MessageBox(0,0,0,0);
return 0;
}
case WM_CHAR: //各种各样的宏定义等你去查,有一个宏定义可以专门接受字符
{
char ch[2];
ch[0] = wParam;
ch[1] = '\0';
MessageBox(hWnd,ch,"天助",0);
return 0;
}
}
return DefWindowProc(hWnd, uMsg, wParam, lParam); //这里的返回要返回这个默认窗口,不
}
int WINAPI WinMain (HINSTANCE hThisInstance, //此参数为模块的起始地址
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow)
{
//定义窗口类,这个类里面有些东西要初始化
WNDCLASS wndclass;
ZeroMemory(&wndclass,sizeof(wndclass));
wndclass.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
wndclass.lpfnWndProc = WindowProcedure;
wndclass.lpszClassName = "123";
wndclass.hInstance = hThisInstance;
RegisterClass(&wndclass); //注册窗口类
//创建窗口并显示窗口
HWND hwnd;
char debug[80];
hwnd = CreateWindow("123",
"天助的第一个窗口",
WS_OVERLAPPEDWINDOW,
10,
10,
800,
500,
NULL,
NULL,
hThisInstance,
NULL);
if(hwnd == NULL) //窗口创建失败
{
printf("CreateWindow Error=%d",GetLastError());
return 0;
}
CreateWindow("EDIT", //这是函数自带的控件
"", //文本框本身就没有名字
WS_CHILD|WS_VISIBLE, //子窗口与可视,创建控件必选的两项,位与,懂意思吧。
10, //以父窗口为(0,0)
10,
400,
250,
hwnd,
NULL,
hThisInstance,
NULL);
CreateWindow("BUTTON", //这是函数自带的控件
"死亡", //文本框本身就没有名字
WS_CHILD|WS_VISIBLE, //子窗口与可视,创建控件必选的两项,位与,懂意思吧。
700, //以父窗口为(0,0)
100,
50,
50,
hwnd,
NULL,
hThisInstance,
NULL);
CreateWindow("BUTTON", //这是函数自带的控件
"选择", //文本框本身就没有名字
WS_CHILD|WS_VISIBLE, //子窗口与可视,创建控件必选的两项,位与,懂意思吧。
650, //以父窗口为(0,0)
100,
50,
50,
hwnd,
NULL,
hThisInstance,
NULL);
CreateWindow("BUTTON", //这是函数自带的控件
"天助", //文本框本身就没有名字
WS_CHILD|WS_VISIBLE, //子窗口与可视,创建控件必选的两项,位与,懂意思吧。
600, //以父窗口为(0,0)
100,
50,
50,
hwnd,
NULL,
hThisInstance,
NULL);
ShowWindow(hwnd,SW_SHOW);
//消息处理
MSG msg;
BOOL ret;
ZeroMemory(&msg,sizeof(msg));
while((ret = GetMessage(&msg,hwnd,NULL,NULL)) != 0) //第二个参数可以填NULL 表示所有窗口的信息我都要
{
if(ret == -1) //程序出现问题
{
sprintf(debug,"Getmessage Error=%d",GetLastError());
OutputDebugString(debug); //因为没有控制台 只能采用这种方式打印错误
return 0;
}
else
{
TranslateMessage(&msg); //当你要读取键盘输入时,要使用此函数配合WM_CHAR
DispatchMessage(&msg); //将消息分发给窗口对象,由窗口对象调用窗口回调函数处理消息。
}
}
}
写这种东西好像挺有意思的。加油