win32 dll工程開發創建對話框


界面編程的CreateWindow函數需要instance,只要獲取到dll工程的main的instance參數,就可以使用CreateWindow函數了。


 

創建對話框需要CreateDialog函數。這個函數需要獲取對話框的界面資源。

所以需要先添加資源。


 

右鍵項目選擇添加資源,選擇IDD_FORMVIEW

之后會出現界面樣式編輯頁面,首先一個空白的對話框。

你可以選擇在上邊添加按鈕。選擇vs的視圖菜單,點擊工具箱,之后拖動控件添加按鈕即可。

之后編譯的話會出現錯誤。RC(8): error RC2144: PRIMARY LANGUAGE ID not a number

解決辦法:在在resource.h中加入#include <winresrc.h>


 

 

C++部分代碼:

(按鈕響應在DlgProc函數里寫,按鈕IDC_BUTTON1等都是資源文件里定義的。)

// 處理對話框消息  
INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)  
{  
    switch (msg)  
    {  
    case WM_COMMAND:  
        {  
            switch(LOWORD(wParam))  {  
            case IDC_BUTTON1:  
                MessageBox(hdlg, L"您點擊了第一個按鈕。", L"提示", MB_OK | MB_ICONINFORMATION);  
                break;  
            case IDC_BUTTON2:  
                MessageBox(hdlg, L"您點擊了第二個按鈕。", L"提示", MB_OK | MB_ICONINFORMATION);  
                break;  
            default:  
                break;  
            }  
        }  
        return 0;  
    }  
    return (INT_PTR)FALSE;  
} 

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  {  
    switch (msg)  {  
    case WM_CREATE:  
        {  
            // 創建對話框  
            HWND hdlg = CreateDialog(g_hinst, MAKEINTRESOURCE(IDD_FORMVIEW), hwnd, (DLGPROC)DlgProc);  
            // 顯示對話框  
            ShowWindow(hdlg, SW_SHOWNA);  
        }  
        return 0;  
    case WM_CLOSE:
        isContinue = 1;
        PostQuitMessage(0); 
        return 0;
    case WM_DESTROY:  
        PostQuitMessage(0);  
        return 0;  
    default:  
        return DefWindowProc(hwnd,msg,wParam,lParam);  
    }  
    return 0;  
}  

DWORD WINAPI  MyCreateDialog(LPVOID lpParamter) {
    // 設計窗口類  
    WNDCLASS wc = { };  
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;  
    wc.lpfnWndProc = (WNDPROC)WindowProc;  
    wc.lpszClassName = L"supper_man";  
    wc.hInstance = g_hinst;  
    wc.style = CS_HREDRAW | CS_VREDRAW;  
    RegisterClass(&wc);   
    // 創建窗口  
    HWND hwnd = CreateWindow(L"supper_man", L"證書導入",   
        WS_OVERLAPPEDWINDOW, 40, 25, 380, 300, NULL, NULL, g_hinst, NULL);  
    if(!hwnd)  
        return 0;  
    ShowWindow(hwnd, 5);  
    UpdateWindow(hwnd);  
    // 消息循環  
    MSG msg;  
    while(GetMessage(&msg,NULL,0,0))  {  
        TranslateMessage(&msg);  
        DispatchMessage(&msg);  
    }  
    return TRUE;
}


VOID CreatDialogThread() {
    dialogThread = CreateThread(NULL, 0, MyCreateDialog, NULL, 0, NULL);
}

效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM