找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2236|回复: 1
打印 上一主题 下一主题
收起左侧

windows 窗口创建

[复制链接]
跳转到指定楼层
楼主
ID:72008 发表于 2015-1-11 19:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1、设计窗口类
2、注册窗口
3、创建窗口
4、显示窗口与更新窗口
5、消息循环
6、窗口函数




1.设计窗口
typedef struct tagWNDCLASS {
    UINT        style;                              //窗口的样式
    WNDPROC     lpfnWndProc;        //名回调函数的名字
    int         cbClsExtra;                     //窗口类无扩展
    int         cbWndExtra;                  //窗口实例无扩展
    HINSTANCE   hInstance;            //当前实例句柄
    HICON       hIcon;                              //窗口的图标   
    HCURSOR     hCursor;                    //光标的形状与类型
    HBRUSH      hbrBackground;         //窗口的背景
    LPCSTR      lpszMenuName;       //设定菜单
    LPCSTR      lpszClassName;      //设定窗口名字(类名)
} WNDCLASS, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA;

注:以上是设计窗口的一个结构体 ,
       作用是确定窗口的 。
       图标、窗口样式、回调函数、背景、光标、类名等属性


2.注册窗口

RegisterClass(&XXX);

注:XXX代表  某某某设计窗口的结构体名+“&”是取地址
       作用是导入内存


3.创建窗口

CreaeWindow 创建窗口函数原型
HWND CreateWindow(

LPCTSTR lpClassName, //窗口类名(与设计函数的类名相同)

LPCTSTR lpWindowName,  //窗口标题

DWORD dwStyle,       //窗口样式,多种样式
int x,    //x坐标 (屏幕坐标)
int y,              //Y坐标(屏幕坐标

int nWidth,   //宽

int nHeight,       //高

HWND hWndParent,   //父窗口

HMENU hMenu,       //加载菜单的句柄

HANDLE hlnstance,  //创建此窗口的应用程序的当前句柄(PID)(也是设计窗口中的.hInstance)

LPVOID lpParam    // 这个一般是NULL。不用的

);


注:以上是一个创建窗口的函数 <CreaeWindow>创建窗口后
       函数会返回一个句柄 这时要用一个 窗口句柄类型(HWND)
       的变量来接收这个返回值。
       作用是确定:
       窗口的 标题、窗口样式、窗口位置、窗口大小、菜单、父窗口等等。



4、显示窗口与更新窗口
      显示窗口
ShowWindow(XXXX,         //第一个参数是 窗口句柄(HWND)
                      SW_SHOW  //指定窗口如何显示
                      );


     更新窗口
UpdateWindow(hWnd   //窗口句柄
                        );



5、消息循环
下面是代码:
       MSG msg; //声明消息结构

while(GetMessage(&msg,NULL,0,0)) //消息循环
{
TranslateMessage(&msg);     //让Windows为与键盘相关的消息做一些转换
DispatchMessage(&msg);      //分派消息到窗口过程函数中对消息处理
}

6、窗口函数

//窗口过程函数的实现(消息处理函数)
LRESULT CALLBACK MyWindowProc(
       HWND hwnd,      // handle to window 窗口句柄
       UINT uMsg,      // message identifier消息标识
       WPARAM wParam,  // first message parameter
       LPARAM lParam   // second message parameter
      )
{

   switch(uMsg)
   {
   case WM_PAINT:
   {
   TCHAR str[] = _T("这是一个Windows的SDK程序!");
   HDC hDc;//声明HDC数据结构
   PAINTSTRUCT  Ps;
   hDc = BeginPaint(hwnd,&Ps); //获取设备环境句柄
   SetTextColor(hDc,RGB(13,25,200)); //设置文本颜色
   TextOut(hDc,0,0,str,18); //输出文字
   EndPaint(hwnd,&Ps); //释放资源
   break;
   }
   case WM_CLOSE: //点击"X"按钮时发送此消息,使消息循环停止
   if(IDYES == MessageBox(hwnd,_T("是否要退出?"),_T("提示"),MB_YESNO))
   {
             DestroyWindow(hwnd); //销毁窗口,发送WM_DESTROY消息,注意程序进程还没退出
   }   
   break;
   case WM_DESTROY:
   PostQuitMessage(NULL); //进程结束,完全退出程序
   break;
   case WM_LBUTTONDOWN:
   MessageBox(hwnd,_T("鼠标左键按下"),_T("提示"),MB_OK);
   break;
   default:
   return DefWindowProc(hwnd,uMsg,wParam,lParam); //处理未处理的消息
   break;
   }

   return 0;

}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:28571 发表于 2015-4-18 16:15 | 只看该作者
好东西,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表