Win32 Application 的两种形式

×××××××××××××××××××××××××××××××××××××××××××××××

//*******************************************************************

// 工程:easywin

// 文件:easywin.cpp

// 内容:一个基本的Win32程序

//*******************************************************************

#include <windows.h>

//#include <windowsx.h>

//函数声明

BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );

//*******************************************************************

//函数:WinMain()

//功能:Win32应用程序入口函数。创建主窗口,处理消息循环

//*******************************************************************

int PASCAL WinMain( HINSTANCE hInstance, //当前实例句柄
      
       HINSTANCE hPrevInstance, //前一个实例句柄
      
       LPSTR lpCmdLine, //命令行字符
      
       int nCmdShow) //窗口显示方式
      
{
 
 MSG msg;
 
 //创建主窗口
 
 if ( !InitWindow( hInstance, nCmdShow ) )
  
  return FALSE;
 
 //进入消息循环:
 
 //从该应用程序的消息队列中检取消息,送到消息处理过程,
 
 //当检取到WM_QUIT消息时,退出消息循环。
 
 while (GetMessage(&msg, NULL, 0, 0))
  
 {
  
  TranslateMessage(&msg);
  
  DispatchMessage(&msg);
  
 }
 
 //程序结束
 
 return msg.wParam;
 
}

//******************************************************************

//函数:InitWindow()

//功能:创建窗口。

//******************************************************************

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )

{
 
 HWND hwnd; //窗口句柄
 
 WNDCLASS wc; //窗口类结构
 
 //填充窗口类结构
 
 wc.style = CS_VREDRAW | CS_HREDRAW;
 
 wc.lpfnWndProc = (WNDPROC)WinProc;
 
 wc.cbClsExtra = 0;
 
 wc.cbWndExtra = 0;
 
 wc.hInstance = hInstance;
 
 wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );
 
 wc.hCursor = LoadCursor( NULL, IDC_ARROW );
 
 wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
 //wc.hbrBackground = GetStockObject(WHITE_BRUSH);
 
 wc.lpszMenuName = NULL;
 
 wc.lpszClassName = "EasyWin";
 
 //注册窗口类
 
 RegisterClass( &wc );
 
 //创建主窗口
 
 hwnd = CreateWindow(
  
  "EasyWin", //窗口类名称
  
  "一个基本的Win32程序", //窗口标题
  
  WS_OVERLAPPEDWINDOW, //窗口风格,定义为普通型
  
  100, //窗口位置的x坐标
  
  100, //窗口位置的y坐标
  
  400, //窗口的宽度
  
  300, //窗口的高度
  
  NULL, //父窗口句柄
  
  NULL, //菜单句柄
  
  hInstance, //应用程序实例句柄
  
  NULL ); //窗口创建数据指针
 
 if( !hwnd ) return FALSE;
 
 //显示并更新窗口
 
 ShowWindow( hwnd, nCmdShow );
 
 UpdateWindow( hwnd );
 
 return TRUE;
 
}

//******************************************************************

//函数:WinProc()

//功能:处理主窗口消息

//******************************************************************

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )

{
 
 switch( message )
  
 {
  
 case WM_KEYDOWN://击键消息
  
  switch( wParam )
   
  {
   
  case VK_ESCAPE:
   
   MessageBox(hWnd,"ESC键按下了!","Keyboard",MB_OK);
   
   break;
   
  }
  
  break;
  
  case WM_RBUTTONDOWN://鼠标消息
   
   {
    
    MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);
    
    break;
    
   }
   
  case WM_PAINT://窗口重画消息
   
   {
    
    char hello[]="你好,我是EasyWin !";
    
    HDC hdc;
    
    PAINTSTRUCT ps;
    
    hdc=BeginPaint( hWnd,&ps ); //取得设备环境句柄
    
    SetTextColor(hdc, RGB(0,0,255)); //设置文字颜色
    
    TextOut( hdc, 20, 10, hello, strlen(hello) );//输出文字
    
    EndPaint( hWnd, &ps ); //释放资源
    
    break;
    
   }
   
  case WM_DESTROY://退出消息
   
   PostQuitMessage( 0 );//调用退出函数
   
   break;
   
 }
 
 //调用缺省消息处理过程
 
 return DefWindowProc(hWnd, message, wParam, lParam);
 
}

 

××××××××××××××××××××××××××××××××××××××××××××××××

#include <windows.h>

// 函数原型

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);

LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);

BOOL InitApplication(HINSTANCE);

BOOL InitInstance(HINSTANCE,int);

// WinMain 函数

int WINAPI WinMain (HINSTANCE hInstance,
     
     HINSTANCE hPrevInstance,
     
     LPSTR lpCmdLine,
     
     int nCmdShow)
     
{
 
 if (!hPrevInstance)
  
  if (!InitApplication(hInstance))
   
   return FALSE;
  
  if (!InitInstance(hInstance,SW_SHOW))
   
   return FALSE;
  
  MSG msg; // 窗口消息
  
  
  // 开始消息循环
  
  while (GetMessage(&msg,NULL,0,0))
   
  {
   
   TranslateMessage(&msg);
   
   DispatchMessage(&msg);
   
  }
  
  
  return msg.wParam;
  
}

// WndProc 主窗口过程

LRESULT WINAPI WndProc (HWND hWnd,
      
      UINT msg,
      
      WPARAM wParam,
      
      LPARAM lParam)
      
{
 
 HDC hdc;
 
 RECT rc;
 
 HPEN hPen,hPenOld;
 
 HBRUSH hBrush,hBrushOld;
 
 switch (msg)
  
 {
  
 case WM_PAINT:
  
  hdc=GetDC(hWnd);
  
  GetClientRect(hWnd,&rc);
  
  hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));
  
  hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,0));
  
  hPenOld=(HPEN)SelectObject(hdc,hPen);
  
  hBrushOld=(HBRUSH)SelectObject(hdc,hBrush);
  
  Ellipse(hdc,rc.left,rc.top,rc.right,rc.bottom);
  
  SelectObject(hdc,hPenOld);
  
  SelectObject(hdc,hBrushOld);
  
  ReleaseDC(hWnd,hdc);
  
  break;
  
 case WM_DESTROY:
  
  PostQuitMessage(0);
  
  break;
  
 default:
  
  break;
  
 }
 
 return DefWindowProc(hWnd,msg,wParam,lParam);
 
}

BOOL InitApplication(HINSTANCE hInstance)

{
 
 WNDCLASS wc; // 窗口类
 
 // 填充窗口类信息
 
 wc.style=CS_HREDRAW|CS_VREDRAW;
 
 wc.lpfnWndProc=WndProc;
 
 wc.cbClsExtra=0;
 
 wc.cbWndExtra=0;
 
 wc.hInstance=hInstance;
 
 wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
 
 wc.hCursor=LoadCursor(NULL,IDC_ARROW);
 
 wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 
 wc.lpszMenuName=NULL;
 
 wc.lpszClassName="SdkDemo2";
 
 // 注册窗口类
 
 return RegisterClass(&wc);
 
}

BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)

{
 
 HWND hWnd; // 主窗口句柄
 
 
 // 创建应用程序主窗口
 
 hWnd=CreateWindow ("SdkDemo2", // 窗口类名
  
  "经过修改的第一个Win32 SDK应用程序", // 窗口标题
  
  WS_OVERLAPPEDWINDOW, // 窗口样式
  
  CW_USEDEFAULT, // 初始化 x 坐标
  
  CW_USEDEFAULT, // 初始化 y 坐标
  
  CW_USEDEFAULT, // 初始化窗口宽度
  
  CW_USEDEFAULT, // 初始化窗口高度
  
  NULL, // 父窗口句柄
  
  NULL, // 窗口菜单句柄
  
  hInstance, // 程序实例句柄
  
  NULL); // 创建参数
 
 if (!hWnd)
  
  return FALSE;
 
 // 显示窗口
 
 ShowWindow(hWnd,SW_SHOW);
 
 // 更新主窗口客户区
 
 UpdateWindow(hWnd);
 
 return TRUE;
 
}

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值