我自己的windows視窗

來源:互聯網
上載者:User

/*
HELLOWIN.C Displays "Hello , Windows xp ! " in client area
*/

#include <windows.h>

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
     PSTR szCmdLine, int iCmdShow)
{
 static TCHAR szAppName[] = TEXT ("HelloWin");
 /*
 typedef HANDLE HWND;
 typedef PVOID HANDLE;
 typedef void *PVOID;
 */
 HWND hwnd;
 /*
 typedef struct tagMSG {
  HWND hwnd;
  UINT message;
  WPARAM wParam;
  LPARAM lParam;
  DWORD time;
  POINT pt;
 } MSG;
 */
 MSG msg;
 /*
 typedef struct _WNDCLASS {
   UINT style;
   WNDPROC lpfnWndProc;
   int cbClsExtra;
   int cbWndExtra;
   HANDLE hInstance;
   HICON hIcon;
   HCURSOR hCursor;
   HBRUSH hbrBackground;
   LPCTSTR lpszMenuName;
   LPCTSTR lpszClassName;
 } WNDCLASS;
 視窗 結構體
 */
 WNDCLASS wndclass;  //利用WNDCLASS(WNDCLASSEX)定義視窗對象

 wndclass.style            = CS_HREDRAW | CS_VREDRAW ; //
 wndclass.lpfnWndProc      = WndProc;
 wndclass.cbClsExtra    = 0;
 wndclass.cbWndExtra    = 0;
 wndclass.hInstance       = 0;
 wndclass.hIcon     = LoadIcon (NULL, IDI_APPLICATION);
 wndclass.hCursor    = LoadCursor (NULL, IDC_ARROW);
 wndclass.hbrBackground   = (HBRUSH) GetStockObject (WHITE_BRUSH);
 wndclass.lpszMenuName   = 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;
}
 /* #define CALLBACK __stdcall;
    typedef LONG_PTR LRESULT;
    #if defined(_WIN64)
      typedef __int64 LONG_PTR;
 #else
   typedef long LONG_PTR;
 #endif
 */
LRESULT CALLBACK WndProc  (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 HDC       hdc;
 PAINTSTRUCT  ps;
 RECT      rect;

 switch (message)  //訊息 處理 switch
 {
 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 xp ! "), -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); //調用預設的處理方法
}

 

未解決問題:對於CALLBACK 理解不透,查MSDN 顯示 #define CALLBACK __stdcall;  我就不理解了 !!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.