由零開始做 Dialog (SDK版) — 在 VC + MSDN 下取巧篇

發表于:2007-07-01來源:作者:點擊數: 標簽:
(一般來說要做一個 Dialog 是非常簡單的,所以這篇教程是寫給初學者的。但是由于篇幅所限,對窗體過程或事件驅動不做介紹。) 好了,言歸正傳。我們就馬上來做吧。 打開你的 VC6 (如果有工程的請Close Workspace),選擇新建工程(Win32 Application - An empty

    (一般來說要做一個 Dialog 是非常簡單的,所以這篇教程是寫給初學者的。但是由于篇幅所限,對窗體過程或事件驅動不做介紹。)
    好了,言歸正傳。我們就馬上來做吧。
    打開你的 VC6 (如果有工程的請Close Workspace),選擇新建工程(Win32 Application - An empty project ,記得選好保存路徑),然后在該路徑里新建一個 .cpp文件(比如WinMain.cpp),最后在工程管理窗口的 "FileView" 那里,選擇 Add Files to project , 把剛新建的 WinMain.cpp 加入到工程里面去。
    好了,你現在已經有了一個工程文件了,如果你希望加入你自己定義的對話框,還要做一個資源文件,并包含到你的工程中來,就好像 WinMain.cpp 的那樣。
在 VC6 的菜單 "Insert" – "Resource... Ctrl+R" 中,理所當然要加入一個 Dialog ,選擇 "New" (不是Import)。 然后你就可以得到一個默認模板的對話框了,隨便給這個新建的 Dialog 設置一些屬性(雙擊該對話框的標題欄可以得到設置屬性的對話框),比方說,那個對話框的 ID: 默認的是 IDD_DIALOG1 ,你就把它改為 "MYDIALOG" (請記住要給ID 加上雙引號,默認的是沒有引號的,這樣做是為了可以不包含 Resource.h 的頭文件);跟著你喜歡的話就改改標題吧,在 Caption: 里填入 my first Dialog 。 好了,剩下的就是保存工作了。請選擇 Save All,選在你的工程的目錄里保存該資源文件(我這里的名字選擇 Resource.rc)。
好了,現在資源文件已經有了,剩下的就是把它加入到工程中來了,方法可以參考 WinMain.cpp 的加入,不再累敘 (在 FileView 里面加入)。

    好了,以下剩下的就是編輯你的 WinMaiin.cpp 了,也是我所說的可以取巧的地方。

    首先,你首先必須加入的是 這一句:  #include <windows.h>。 然后另起一行,鍵入 winmain之后再按 F1 鍵。  你是不是看到 MSDN 出來了呢? 那里面就有關于 WinMain 的定義和參數可以 copy 了,好了,拿來就用吧。把剛才鍵入的 winmain 刪掉,拿從 MSDN 里 copy 來的代替??梢猿蔀橄旅娴臉幼?還要加入 return 0;語句)。

#include <windows.h>

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{ // 你可以插入你的代碼于此
 return 0;
}

   好了,你試試編譯一下,看看能不能夠通過編譯? OK 吧?取巧第一步成功了?,F在函數入口總算出來了,可是你要建一個對話框的話,還需要一個對話框的 CALLBACK 過程。下面介紹小小的取巧辦法。
這個過程實際上是一個函數,要在 WinMain  中使用的話就必須在 WinMain 之前定義了。那么請在 WinMain 的定義之前的位置某個空行輸入 DialogProc 然后再次按下 F1 , call 出 MSDN 來。哈哈,關于 DialogProc 的定義及參數又可以抄了。代替你剛才鍵入的 DialogProc 吧,經過加工后就如下面的樣子:
INT_PTR CALLBACK DialogProc(
  HWND hwndDlg,  // handle to dialog box
  UINT uMsg,     // message
  WPARAM wParam, // first message parameter
  LPARAM lParam  // second message parameter
  )
{ // 你可以插入你的代碼于此
    return 0;
}

    這樣還不行,還得對消息進行處理,加入如下句子:
    switch (uMsg)
    {
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK) EndDialog( hwndDlg, 0 );
        if (LOWORD(wParam) == IDCANCEL) EndDialog( hwndDlg, 0 );
}

    剩下的就只有一件事,就是在 WinMain 里面調用 DialogBox 函數了,(詳細的參數請看 MSDN)
也就是在 WinMain 里面的第一句那里寫入如下句子:

DialogBox( hInstance,"MYDIALOG", NULL, (DLGPROC)DialogProc );

    現在已經可以完全的編譯和調用了。試試看,效果如何?是不是簡單得來又顯得比較專業?? 哈哈哈,其實不過滿足了我自個的一點偷懶的心理而已(并非真的取巧!被騙了.....)。
    詳細的代碼見下面,<全文完>

// WinMain.cpp 源程序
#include <windows.h>

INT_PTR CALLBACK DialogProc(
  HWND hwndDlg,  // handle to dialog box
  UINT uMsg,     // message
  WPARAM wParam, // first message parameter
  LPARAM lParam  // second message parameter
  )
{
    switch (uMsg)
    {

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK) EndDialog( hwndDlg, 0 );
        if (LOWORD(wParam) == IDCANCEL) EndDialog( hwndDlg, 0 );

    }  // End of switch (uMsg)

    return 0;
}


int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
    DialogBox( NULL, "MYDIALOG", NULL, (DLGPROC) DialogProc);
    return 0;
}

// End of source file


原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97