VC深入詳解 第一個WINMAIN程式

czhaii發表於2013-11-09


#include
#include  
 
LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
); 
 
int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance當前例項
  HINSTANCE hPrevInstance,  // handle to previous instance前一個例項
  LPSTR lpCmdLine,          // command line 字串指標
  int nCmdShow              // show state  指定視窗的顯示方式最大最小隱藏
)
{
    WNDCLASS wndcls;                                          //P6
    wndcls.cbClsExtra=0;                                      //1註冊視窗類時追加記憶體空間用於儲存附加資訊
    wndcls.cbWndExtra=0;                                      //2建立視窗類時追加記憶體空間用於儲存附加資訊
    wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //3畫刷控制程式碼視窗重繪時指定畫刷擦除視窗背景&顏色
    wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);                //4游標資源控制程式碼
    wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);                    //5圖示
    wndcls.hInstance=hInstance;                               //6應用例項控制程式碼,由WinMain函式傳進來
    wndcls.lpfnWndProc=WinSunProc;                            //7指向視窗過程回撥函式
    wndcls.lpszClassName="sunxin2006";                        //8指定選單資源名字
    wndcls.lpszMenuName=NULL;                                 //9視窗名
    wndcls.style=CS_HREDRAW | CS_VREDRAW;                     //A視窗樣式
    RegisterClass(&wndcls);                                   //
 
    HWND hwnd;                                                //建立物件變數
    hwnd=CreateWindow("sunxin2006","http://www.sunxin.org",WS_OVERLAPPEDWINDOW,
        0,0,600,400,NULL,NULL,hInstance,NULL);                //建立的物件變數存放資料
    ShowWindow(hwnd,SW_SHOWNORMAL);
    UpdateWindow(hwnd); 
 
    MSG msg;                                                  //訊息變數
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);                               //轉換字元訊息
        DispatchMessage(&msg);                                //將訊息回傳給作業系統
    }
    return msg.wParam;

 
LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
    switch(uMsg)
    {
    case WM_CHAR:                                             //字元訊息
        char szChar[20];
        sprintf(szChar,"您輸入的字元程式碼為 %d",wParam);       //字元列印
        MessageBox(hwnd,szChar,"char",0);
        break;
    case WM_LBUTTONDOWN:                                      //左鍵
        MessageBox(hwnd,"mouse clicked","message",0);
        HDC hdc;
        hdc=GetDC(hwnd);
        TextOut(hdc,0,50,"程式設計師之家",strlen("程式設計師之家"));  //文字輸出
        //ReleaseDC(hwnd,hdc);
        break;
    case WM_RBUTTONDOWN:                                      //右鍵
        MessageBox(hwnd,"mouse clicked","message",0);
        HDC hdc1;
        hdc1=GetDC(hwnd);
        TextOut(hdc1,5,150,"誰的心 落在水鄉忘了收",strlen("誰的心 落在水鄉忘了收"));  //文字輸出
        //ReleaseDC(hwnd,hdc);
        break;
    case WM_PAINT:                                            //重繪視窗
        HDC hDC;
        PAINTSTRUCT ps;                                       //
        hDC=BeginPaint(hwnd,&ps);                             //開始重繪
        TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org"));//文字輸出
        EndPaint(hwnd,&ps);                                   //重繪結束
        break;
    case WM_CLOSE:                                            //關閉視窗
        if(IDYES==MessageBox(hwnd,"是否真的結束?","message",MB_YESNO))//文字輸出
        {
            DestroyWindow(hwnd);
        }
        break;
    case WM_DESTROY:                                          //銷燬視窗
        PostQuitMessage(0);                                   //傳送訊息關閉視窗
        break;
    default:
        return DefWindowProc(hwnd,uMsg,wParam,lParam);        //
    }
    return 0;


Win32 Application 是標準 windows程式,完全擁有windows的特性,也即我們常說的視窗應用程式!它通過GUI(Graphics User Interface圖形使用者介面)可以把視窗介面做得比較個性化,比如圓形的、不規則形狀的等等,另外,我們還可以通過滑鼠點選來完成控制。所以說它是基於WINDOWS平臺的32位開發環境開發應用程式(即,SDK程式)。入口函式為WinMain()。
Win32 Console Application(win32控制檯應用程式)往往是像MS-DOS視窗(XP中叫命令提示符)的樣子出現,我們得用鍵盤輸入各種命令來使用它,它與純dos程式區別是:它是32位的;或者叫CUI(Character User Interface字元使用者介面)。console程式以main()為入口,可以訪問部分windows API函式,比如建立視窗、對話方塊等等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27660822/viewspace-776208/,如需轉載,請註明出處,否則將追究法律責任。

相關文章