windows win32创建窗口

首先要引入 头文件 #include "windows.h"

回调函数 LRESULT CALLBACK Handlefun(HWND,UINT,WPARAM,LPARAM);

HWND hwndButton1;//声明句柄
HWND hwndButton2;
HWND hwndButton3;
入口函数 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdLine,int iCmdShow){
HWND hwnd;
MSG msg;
WNDCLASS wnclass;
wnclass.style=CS_HREDRAW|CS_VREDRAW;
wnclass.lpfnWndProc=Handlefun;
wnclass.cbClsExtra=0;
wnclass.cbWndExtra=0;
wnclass.hInstance=hInstance;
wnclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wnclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wnclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wnclass.lpszClassName="test";
wnclass.lpszMenuName=NULL;
if(!RegisterClass(&wnclass))
{
MessageBox(NULL,TEXT("注册失败"),NULL,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow("test",TEXT("hello"),
WS_OVERLAPPEDWINDOW,//窗口风格,文本如如框://WS_CHILD|WS_VISIBLE|WS_BORDER!!!!!子按钮://WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,!!!!

CW_USEDEFAULT,CW_USEDEFAULT,/窗口出现屏幕的位置,大小。
CW_USEDEFAULT,
CW_USEDEFAULT,NULL,NULL,
hInstance,
NULL);

ShowWindow(hwnd,iCmdShow); //窗口显示。
UpdateWindow(hwnd); //更新窗口 如果是新的窗口,就要重新 更新,或者 显示。
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
回调函数 LRESULT CALLBACK Handlefun(HWND hwnd,UINT message,
WPARAM wParam,LPARAM lParam){
HDC hdc;//这些句柄 百度就可以查到
PAINTSTRUCT ps; //结构
RECT rect;//区域结构
char strEdit[80];//定义一个空字符串数组
switch(message){ //当窗口有操作的时候,无论是移动,放大,还是缩小, 都会发送 message消息。所以这里 判断message 就可以监听窗口执行了什么操作。

case WM_CREATE://create 是初始化窗口时候用到。 在里面 先创建一个按钮WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,一个文本域WS_CHILD|WS_VISIBLE|WS_BORDER,, 2个句柄 hwndButton2,hwndButton3.
hwndButton2=CreateWindow("edit",NULL,
WS_CHILD|WS_VISIBLE|WS_BORDER,
20,70,100,25,hwnd,NULL,NULL,NULL);
hwndButton3=CreateWindow("button","确定",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
350,70,80,25,hwnd,NULL,NULL,NULL);


hwndButton1 =CreateWindow ( TEXT("button"),"first",
WS_CHILD | WS_VISIBLE| BS_PUSHBUTTON,
10, 10,
50, 50, //这是另一个按钮。
hwnd, NULL,

NULL, NULL) ;

return 0; //返回0 表示 退出 create。 break 表示退出函数。
case WM_PAINT: //初始化后,这里会画出所有 所写空间。 最主要的是,paint 监听 窗口的变化。 如果 窗口 变化了,或者 被其他外面的窗口挡住 后又重现, 程序发出wm-paint, 将会重新绘制 窗口所有内容。
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("hello"),-1,&rect,
DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_COMMAND ://command 监听所有鼠标点击工作,附加参数 lparam 携带者句柄,wparam携带空间类型名。

if(((HWND)lParam==hwndButton3)&&(HIWORD(wParam)==BS_PUSHBUTTON))//判断 是否点击 按钮 hwndbutton3
//BS_PUSHBUTTON可以换成BN_CLICKED;
//按下按钮
{
GetWindowText(hwndButton2,strEdit,80);//获取编辑框内容
MessageBox(NULL, strEdit, NULL, 0);
}


hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
if(wParam== BS_PUSHBUTTON){ //这些是额外的。可有可无。
MessageBox(NULL,TEXT("555"),NULL,MB_ICONERROR);
}
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY: //发送消息 终止窗口
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
展开阅读全文

没有更多推荐了,返回首页