win32创建窗口流程

#include <Windows.h>
#include <stdio.h>


LRESULT CALLBACK winSunpro(HWND hwnd,
  UINT uMsg,
  WPARAM wParam,
LPARAM lParam);






int WINAPI WinMain( __in HINSTANCE hInstance, 
  __in_opt HINSTANCE hPrevInstance, 
  __in_opt LPSTR lpCmdLine, 
  __in int nShowCmd )
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;//注册窗口类时,让系统为WNDCLASS结构分配合追加一定字节数的附加内存空间,称为类附加内存,右属于这种窗口类的所有窗口共享,存储类的附加信息
wndcls.cbWndExtra=0;//窗口内部数据结构,窗口附加内存,创建窗口的时候
wndcls.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);//窗口类的背景画刷句柄  GetStockObject()得到系统标准画刷
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);//窗口类的光标句柄
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);//窗口类的图标句柄
wndcls.hInstance=hInstance;//窗口过程的程序的实例句柄
wndcls.lpfnWndProc=winSunpro;//指向窗口过程函数的指针
wndcls.lpszClassName="朱梦思";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW |CS_VREDRAW;//指定窗口的样式CS_HREDRAW水平重绘 CS_VREDRAW 垂直重绘 CS_NOCLOSE 禁用系统菜单close命令  CS_DBLCLKS 鼠标双击消息
RegisterClass(&wndcls);//注册窗口系统就有了过程函数的地址了
//DispatchMessage(&msg)发生消息的时候,将消息回传给系统,系统调用回调函数进行消息处理


HWND hwnd;
hwnd=CreateWindow("朱梦思","http//zhumengsi",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
//指定窗口类的名称  窗口类的名字  窗口的样式
/*指定窗口的位置




*/
ShowWindow(hwnd,SW_SHOWNORMAL); //窗口句柄,窗口显示的状态
UpdateWindow(hwnd);//刷新窗口  通过发送WM_PAINT消息来刷新窗口//直接发送给窗口过程函数,不进入消息队列


MSG msg;
BOOL bRet;
while(bRet=GetMessage(&msg,hwnd,0,0))//从队列中取出消息  Param3  获取最小的消息  Param4获取消息的最大值 ,都为0则接受所有消息
{//只有接受到WM_QUIT才返回0
if(bRet==-1)
{
return -1;
}else
{
TranslateMessage(&msg);//将虚拟键消息转化为字符消息
//比如WM_KEYDOWN WM_KEYUP转化为WM_CHAR消息,然后把WM_CHAR投递到调用线程的消息队列中,
DispatchMessage(&msg);//分派一个消息到窗口过程函数,由窗口过程函数对消息进行处理
}
}
return msg.wParam;
}


LRESULT CALLBACK winSunpro(HWND hwnd,
  UINT uMsg,
  WPARAM wParam,
  LPARAM lParam)
{
switch(uMsg)
{
case WM_CHAR:
char szchar[20];
sprintf(szchar,"char code is %d",wParam);
MessageBox(hwnd,szchar,"char",0);
break;


case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","message",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
break;

case WM_PAINT:
HDC hDc;
PAINTSTRUCT ps;
hDc=BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"ZHUMENGSI",strlen("ZHUMENGSI"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES == MessageBox(hwnd,"是否真的结束?","Message",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);




}
return 0;


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值