win32 SDK窗口 详解

简介:   ///Class  Style    是指窗口本身的 属性             // CS_NOCLOSE  就是窗口不能被关闭      //  CS_HREDRAW  CS_VREDRAW  就是在 窗口移动或者 窗口的宽度或者高度改变的时候就会发送 WM_PAINT 消...
 

///Class  Style    是指窗口本身的 属性            

// CS_NOCLOSE  就是窗口不能被关闭     

//  CS_HREDRAW  CS_VREDRAW  就是在 窗口移动或者 窗口的宽度或者高度改变的时候就会发送 WM_PAINT 消息   

//CS_DBLCLKS  如果class style  不包括 那么 如果用户双击 鼠标 那么不会 发送 鼠标双击消息   

//CS_CLASSDC   这个用于多线程编程 在多个线程对 一个窗体进行操作的时候一次只能有一个线程对窗体进行操作     

//CS_DROPSHADOW   0x00020000  加上这个就会在窗体周围产生一块阴影 。。      

//CS_OWNDC  有设置这个的class创建的窗口都有个独立的 Device Context   特别是作为主窗体的中 应该都要设置它      

 

//Window Styles  是指窗口的外观 

例如 WM_BORDER      有边框    

        WM_CHILD    子窗体 

        WS_CAPTION  创建有标题栏的窗口  

       WS_CHILDWINDOW  设置为子窗体 这样设置就不会显示 菜单栏  Menu Bar  也不能设置  WS_POPUP属性   

      WS_SIZEBOX  WS_THICKFRAME 如果不设置那么窗体不能被改变大小    

   要设置最大化最小化的时候 也要设置 WS_SYSMENU  否则最大化最小化也不会显示 

 

 

 

 

#include <windows.h>
#include <stdio.h>
#include "WINUSER.H"
LRESULT CALLBACK WinProc(   //窗口回调函数的声明
       HWND hwnd,     
       UINT uMsg,     
       WPARAM wParam, 
       LPARAM lParam  
       );
int WINAPI WinMain(  //入口函数
       HINSTANCE hInstance,      // 当前实例的句柄
       HINSTANCE hPrevInstance,  //先前实例的一个句柄
       LPSTR lpCmdLine,          // 命令行
       int nCmdShow              // 显示状态
       )
{
 
 WNDCLASS cls;
 cls.cbClsExtra =0 ;
 cls.cbWndExtra=0 ;
 cls.hbrBackground=(HBRUSH)::GetStockObject(GRAY_BRUSH) ;
 cls.hCursor=::LoadCursor(NULL,IDC_ARROW) ;
 cls.hIcon=LoadIcon(NULL,IDI_ERROR);  
 cls.hInstance=hInstance ;
 cls.lpfnWndProc=WinProc  ;
 cls.lpszClassName="SDK";
 cls.lpszMenuName="NewMenu";
 cls.style=CS_VREDRAW|CS_HREDRAW |CS_DBLCLKS|0x00020000|CS_NOCLOSE;
 ::RegisterClass(&cls) ;
 HWND m_hWnd;
 m_hWnd=::CreateWindow("SDK","New Win32 Application",WS_OVERLAPPEDWINDOW|WS_SYSMENU|WS_MINIMIZEBOX,100,200,600,600,NULL,NULL,hInstance,NULL) ;  //创建窗口返回窗口的句柄
 ::ShowWindow(m_hWnd,SW_SHOWNORMAL) ;   //显示窗口 
 ::UpdateWindow(m_hWnd) ;   //更新窗口  
 MSG msg ;
 while(::GetMessage(&msg,m_hWnd,NULL,NULL))   //从消息队列检索消息
 {
  ::TranslateMessage(&msg) ;  //翻译消息
  ::DispatchMessage(&msg) ;   //分发消息
 }
 
 return 0 ;
}
LRESULT CALLBACK WinProc(
       HWND hwnd,      //   窗体的句柄
       UINT uMsg,      // WM_开头的消息
       WPARAM wParam,  //   第一个附加参数
       LPARAM lParam   //  消息的第二个附加参数 
       )
{
    switch(uMsg)
 {
 case WM_PAINT :
  {
   HDC hdc  ;
   PAINTSTRUCT ps ;   //填充PAINTSTRUCT 结构体 
   hdc=::BeginPaint(hwnd,&ps) ; //BeginPaint() EndPaint()只有在响应WM_PAINT 消息的时候才会被调用 作用是从消息队列删除WM_PAINT 消息 
   //如果此处用GetDC来获取DC那么 就无法从消息队列中取出 WM_PAINT 消息 那么 windows会一直认为这是一个
   //Invalid Area 无效区域  那么就会不停的重绘 导致程序卡死 。
   ::TextOut(hdc,10,10,"Win32_SDK",strlen("Win32_SDK")) ;  
   ::EndPaint(hwnd,&ps);     //在响应WM_PAINT 消息的时候 BeginPaint()后面必须跟上 EndPaint()
   break;    
  }
  
    case WM_LBUTTONDOWN:
  {
   HDC dc ;
   dc=::GetDC(hwnd) ;   //获得窗口的画布   ClientAprea   
   TextOut(dc,10,30,"Left Button Down!",strlen("Left Button Down!")) ; 
   break;
   
  } 
 case WM_LBUTTONDBLCLK :
  {
          MessageBox(hwnd,"","",MB_OK) ;
    break ;
 

  }
 case WM_CLOSE:
  {    if(IDYES==::MessageBox(hwnd,"真的要退出?","提示",MB_YESNO))
   ::DestroyWindow(hwnd) ;    //销毁窗体     销毁窗体的时候会发送一个 WM_DESTROY 消息 我们可以拦截这个消息并且调用PostQuitMessage(0)  
  break ;                   //来退出程序 
  }
 case WM_DESTROY :
  {   ::PostQuitMessage(0);  //正常退出
   break ;
  }
 case WM_RBUTTONDOWN  :
  {
             MessageBox(hwnd,"Right Button Down","提示",MB_OK); 
    break ;
  }
  
 default: return DefWindowProc(hwnd,uMsg,wParam,lParam) ;  //默认调用缺省的窗口过程
  
 }
 return 0 ;
}

目录
相关文章
|
开发工具
VC++ WIN32 sdk实现按钮自绘详解.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片:    首先建立一个标准的Win32 Application 工程.选择a simple Win32 Application.
1395 0
|
开发工具 Windows
win32 sdk树形控件的项拖拽实现
本课中,我们将学习如何使用树型视图控件。另外还要学习如何在树型视图中完成拖-拉动作,以及如何使用图象列表。 理论: 树型视图是一种特别的窗口,我们可以使用它一目了然地表示某种层次关系。譬如象在资源管理器中左边窗口中的就是树型视图。
1160 0
|
开发工具
win32 sdk 列表视图控件绘制
[cpp] view plaincopy   //////////////////////////////////////////////////////////////   LRESULT ListViewCustomDraw(HWND hwnd, LPARAM lParam...
1003 0
|
开发工具
VC++ WIN32 sdk实现按钮自绘详解 之二.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片:    首先建立一个标准的Win32 Application 工程.选择a simple Win32 Application.
997 0
|
开发工具 C++ 资源调度
MFC 对象与Win32 SDK 句柄的映射关系
MFC相关技术说明: Mapping of Windows Handles to Objects MFC对象与Win32 SDK 句柄的映射关系 说明: MFC使用C++对象封装Win32句柄(操作系统资源调度单元 HANDLE),所以在概念上一定要把MFC中的关于C++对象和WI...
885 0
|
消息中间件 开发工具 Windows
SDK窗口中增加菜单 以及 对菜单做出相应的消息响应
  对于用MFC写程序的人来说会觉得菜单很简单 直接用 APP wizard生成就行了  消息处理也是 由MFC来完成 实际上根本不知道  菜单的原理 下面就介绍下如何在 SDK写的程序中添加菜单      我所使用的环境是 VC6.
723 0
|
5天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。