窗口和消息

窗口和消息
2011年06月27日
  #include
  预处理头文件
  LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
  此语句声明回调函数。
  LRESULT是一个windows数据类型,保存了一个从程序或回调函数返回的长整型数据
  CALLBACK意思是回调。
  参数
  1、接收消息的窗口的句柄。
  2、消息类型。
  3、消息附加值(短整型)。
  4、消息附加值(长整型)。
  int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  PSTR szCmdLine, int iCmdShow)
  WinMain程序入口。
  返回值为int类型。
  WINAPI为一个宏定义, _stdcall。
  HINSTANCE是一个windows句柄类型,含意是一个执行实例程序句柄。
  PSTR是一个字符串指针。
  函数参数
  1、hInstance代表当前实例(自已)。
  2、hPrevInstance是上一个实例句柄。
  3、szCmdLine一个字符串变量。
  4、iCmdShow设定程序开始运行时的状态。
  {
  static TCHAR szAppName[] = TEXT ("HelloWin") ;
  Static定义一个静态全局常量。
  TCHAR宽字符等同于char.
  HWND hwnd ;
  定义一个窗口句柄->hwnd。
  HWND是windows下的窗口句柄类型数据。
  MSG msg ;
  定义一个消息结构->msg.
  MSG是windows下的一个消息结构类型。
  其原型如下:
  Typedef struct tagMSG
  {
  HWND hwnd;检索窗口句柄
  UNIT message;消息值。
  WPARAM wParam;参数
  LPARAM lParam;长整型参数
  DWORD time;消息送至队列的时间
  POINT pt;消息发送时光标位置(结构体)
  }MSG;
  其中POINT的结构原型如下:
  Typedef struct tagPOINT
  {
  LONG x,y;
  } POINT;
  WNDCLASS wndclass ;
  定义一个窗口类实例->windclass。
  WNDCLASS是一个windows下的窗口类别结构。
  结构原型如下:
  Typedef struct tagWNDCLASS
  {
  UINT style;标识窗口类样式(像素大小)。
  WINDPROC lpfnWndProc;指定消息处理函数。
  Int cbClsExtra;
  Int cbWndExtra;这两句用于在窗口类别结构和Windows内部保存的窗口结构中预留一些额外空间。
  HINSTANCE hInsttance;程序的执行实例句柄(它也是WinMain的参数之一)
  HICON hIcon;为依据这个窗口类别建立的窗口设置一个图标、
  HCURSOR hCursor;预定义鼠标形状。
  HBRUSH hbrBackground;预定义窗口类背景颜色。
  LPCTSTR lpszMenuName;预定义窗口类的菜单。
  LPCTSTR lpszClassName; 定义窗口类别名称。
  }WNDCLASS;
  wndclass.style = CS_HREDRAW | CS_VREDRAW ;
  wndclass.lpfnWndProc = WndProc ;
  wndclass.cbClsExtra = 0 ;
  wndclass.cbWndExtra = 0 ;
  wndclass.hInstance = hInstance ;
  wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
  wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
  wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
  wndclass.lpszMenuNam = NULL ;
  wndclass.lpszClassName= szAppName ;
  if (!RegisterClass (&wndclass))
  {
  MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
  szAppName, MB_ICONERROR) ;
  return 0 ;
  }
  hwnd = CreateWindow( szAppName, // window class name
  TEXT ("The Hello Program"), // window caption
  WS_OVERLAPPEDWINDOW, // window style
  CW_USEDEFAULT,// initial x position
  CW_USEDEFAULT,// initial y position
  CW_USEDEFAULT,// initial x size
  CW_USEDEFAULT,// initial y size
  NULL, // parent window handle
  NULL, // window menu handle
  hInstance, // program instance handle
  NULL) ; // creation parameters
  ShowWindow (hwnd, iCmdShow) ;
  UpdateWindow (hwnd) ;
  while (GetMessage (&msg, NULL, 0, 0))
  {
  TranslateMessage (&msg) ;
  DispatchMessage (&msg) ;
  }
  return msg.wParam ;
  }
  LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  {
  HDC hdc ;
  PAINTSTRUCT ps ;
  RECT rect ;
  switch (message)
  {
  case WM_CREATE:
  PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
  return 0 ;
  case WM_PAINT:
  hdc = BeginPaint (hwnd, &ps) ;
  GetClientRect (hwnd, &rect) ;
  DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
  DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
  EndPaint (hwnd, &ps) ;
  return 0 ;
  case WM_DESTROY:
  PostQuitMessage (0) ;
  return 0 ;
  }
  return DefWindowProc (hwnd, message, wParam, lParam) ;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值