工具:VS2019
实现功能:C++编写的DLL,通过CreateDialog载入资源中的窗口,获取窗口上编辑框IDC_EDIT1里面的内容,以达到给DLL加窗口功能的目的。
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include "resource.h"
#include <string>
#include <atlstr.h>//CString
#include <sstream>
HINSTANCE hinst = NULL;
HWND hwndDLG = NULL;
using namespace std;
//窗口监听事件
BOOL CALLBACK DlgProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
CString strText = "1234";
switch (message)
{
case WM_INITDIALOG:
SetDlgItemText(hDlg, IDC_EDIT1, strText);//设置内容
return TRUE;
case WM_COMMAND:
//IDOK是资源控件的ID
if (LOWORD(wParam) == IDOK) {
//这里可以写具体的按钮功能代码
MessageBoxA(NULL, "点击了IDOK按钮", "提示", NULL);
HWND ID = GetDlgItem(hDlg, IDC_EDIT1);//获取控件IDC_EDIT1的ID
int len = GetWindowTextLength(ID);//获取内容长度
char* str = new char[len+1];
GetWindowText(ID, (LPWSTR)str, len+1);//获取内容
MessageBoxA(NULL, (LPCSTR)str, "获取到编辑框IDC_EDIT1的内容", NULL);
}
else {
//这里可以写具体的按钮功能代码
// MessageBoxA(NULL, "操作了其他控件", "提示", NULL);
}
return TRUE;
case WM_CLOSE:
//窗口销毁
DestroyWindow(hDlg);
hwndDLG = NULL;
return TRUE;
}
return FALSE;
}
//显示资源窗口,调用此接口即可载入资源窗口
void ShowDlg()
{ //创建对话框
hwndDLG = CreateDialog(hinst, MAKEINTRESOURCE(IDHELP),
NULL, (DLGPROC)DlgProc);
//显示窗口
ShowWindow(hwndDLG, SW_SHOW);
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hinst = (HINSTANCE)hModule;
ShowDlg();
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}