随笔-11  评论-0  文章-0  trackbacks-0
在VC++6.0里的Projects里创建一个Win32 Application工程,选择第三个“Hello World!”,代码如下:
#include "stdafx.h"
#include 
<tchar.h>
#include 
"resource.h"

LRESULT CALLBACK MyCR09WndProc(HWND hwnd, 
                               UINT Message,
                               WPARAM wparam, 
                               LPARAM lparam);

WNDCLASS MyRegisterClass(HINSTANCE hInstance )
{
  
//1、设计、注册窗口类
  
//要得到某一窗口的WNDCLASS数据,可以用GetClassLong(); 
  
//WNDCLASS中的回调函数是窗体的消息处理函数:
  
//一个WNDCLASS可以有多个窗口对象, 要得到某一窗口的窗口类,可以用GetClassName(); 
  
  
//初始化窗口类
  WNDCLASS wndclass = {0};
  
  
//窗口类的风格,默认可以缺省
  wndclass.style = CS_HREDRAW | CS_VREDRAW; ;
  
  
//窗口回调函数
  wndclass.lpfnWndProc = MyCR09WndProc;
  
  
//窗口背景画刷 GetStockObject 函数检索预定义的备用笔、刷子、字体或者调色板的句柄。
  wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  
  
//窗口指定紧随在 WNDCLASS 数据结构后分配的字节数。系统将其初始化为零。
  wndclass.cbClsExtra = 0;
  
  
//指定紧随在窗口实例之后分配的字节数,系统将其初始化为零。
  
//如果应用程序正在用WNDCLASS结构注册一个在RC 
  wndclass.cbWndExtra = 0;
  
  wndclass.hInstance 
= hInstance;
  
  
//窗口类的光标 LoadCursor 加载你要的光标类型 失败返回NULL,成功返回句柄
  wndclass.hCursor = LoadCursor(hInstance, IDC_ARROW);
  
  
//该窗口类的图标 LoadIcon 加载图标  MAKEINTRESOURCE指定你要的图标类型 自定义
  wndclass.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));
  
  
//窗口类的主菜单名称 可以用MAKEINTRESOURCE指定你的类型 就是数值
  wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
  
  wndclass.lpszClassName 
= _T("CR09WndClass");

  
return wndclass;

}


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     
int       nCmdShow)
{
  
//1 设计、注册窗口类
 
  WNDCLASS wndclass 
= MyRegisterClass(hInstance);

  
//注册窗口类
  if ( RegisterClass(&wndclass) == NULL )
  
{
    MessageBox(NULL,_T(
"RegisterClass Error"),NULL,MB_OK);
    
return -1;
  }


  
//2 创建窗口
  HWND hWnd = NULL;

  hWnd 
= CreateWindow( _T("CR09WndClass"),//窗口类名
                      _T("FirstWindow"), //窗口名称
                      WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX,
                      CW_USEDEFAULT,
0,CW_USEDEFAULT,0,
                      NULL,               
//父窗口句柄
                      NULL,NULL,(LPVOID)100);
  
//WM_GETMINMAXINFO  0x24
  
//not client 非客户区
  
//WM_NCCREATE       0x0081
  
//WM_NCCALCSIZE     0x0083
  
//WM_CREATE         1

  
if ( hWnd == NULL )
  
{
    MessageBox(NULL,_T(
"CreateWindow Error"),NULL,MB_OK);
    
return -1;
  }


  
//3 显示、更新窗口
  ShowWindow(hWnd,SW_NORMAL);
  
  
//发送了WM_PAINT消息   用来通知程序可以显示内容
  UpdateWindow(hWnd);

  
//4 消息循环
  MSG msg;

  BOOL bRet;

  
//GetMessage(NULL) 取线程消息队列中的消息,并拿走
  
//GetMessage(Hwnd) 取线程消息队列中指定窗口(Hwnd)的消息,并拿走
  
//WM_QUIT消息 退出
  while( (bRet = GetMessage( &msg, NULL, 00 )) != 0 )
  

    
if (bRet == -1)
    
{
      
// handle the error and possibly exit
      break;
    }

    
else
    
{
      
//分发消息 
      
//msg.hwnd ==> WndClassName ==> MyCR09WndProc
      
//MyCR09WndProc( msg.hwnd, msg.message,msg.wParam,msg.lParam);
      DispatchMessage(&msg); 
    }

  }


  
//5 完成窗口的过程函数
  
    
return 0;
}


LRESULT CALLBACK MyCR09WndProc(HWND hwnd, 
                               UINT Message,
                               WPARAM wparam, 
                               LPARAM lparam)
{
  
switch (Message)
  
{
  
case WM_CREATE:
    MessageBox(NULL,
"WM_CREATE",NULL,MB_OK);
    
//lpParam = *lparam
    break;
  
case WM_PAINT:
    
{
      
//何时收到消息
      
//1.改变窗口大小
      
//2.窗口恢复
      
//3.遮挡部分被移开时候
      
//4.UpDateWindow();

      
// DC 设备上下文   画布
      PAINTSTRUCT ps;
      
      RECT rc 
= {0,0,600,300};
      
      
// HWND ---> DC
      
// DC用到的时候取得 不要保留
      HDC hdc = BeginPaint(hwnd,&ps);

      DrawText(hdc,_T(
"Hello Wolrd"),
              _tcslen(_T(
"Hello Wolrd")),
              
&rc,
              DT_SINGLELINE
|DT_CENTER|DT_VCENTER);
    
      EndPaint(hwnd,
&ps);

      
//输出调试信息
      OutputDebugString("WM_PAINT");
    }

    
break;
  
case WM_CLOSE:
    
{
      
if ( MessageBox(NULL,"是否关闭窗口?",NULL,MB_YESNO) == IDNO )
      
{
        
return 0;
      }

    }

    
break;
  
case WM_DESTROY:
    
{
      
//MessageBox(NULL,"WM_DESTROY",NULL,MB_OK);

      
//在线程消息队列中加入WM_QUIT消息而已
      
//EixtCode传递退出参数使用
      PostQuitMessage(0);
    }

    
break;
  }

  
  
//WM_CLOSE   DefWindowProc 销毁了窗口,发送了WM_DESTROY消息
  
//WM_DESTROY DefWindowProc 没有动作
  return DefWindowProc(hwnd,Message,wparam,lparam);
}
posted on 2011-04-17 23:08 CrackerCS 阅读(376) 评论(0)  编辑 收藏 引用 所属分类: API

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理