您的位置:首页 > 其它

win32 dll工程开发创建对话框

2017-06-05 17:24 513 查看
界面编程的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);
}


效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: