你的对话框程序应该这样做:
1当对话框按关闭,“确定”,取消 时 要摧毁窗口。
void CMyDlg::OnClose()
{
DestroyWindow();
}
void CMyDlg::OnBnClickedOk()
{
OnOK();
DestroyWindow();
}
void CMyDlg::OnBnClickedCancel()
{
OnCancel();
DestroyWindow();
}
2添加虚函数PostNcDestroy ,使窗口关闭时可以自动删除自己。
因为你前面用了theApptestDlg2Create(MAKEINTRESOURCE(IDD_DIALOG1),cWnd);
用创建就必须有删除。
#define WM_USERDEFMSG WM_USER + 101 //自定义消息
void CMyDlg::PostNcDestroy()
{
//删除自己
delete this;
//向主窗口发送自定义消息,告知对话框已关闭,可以调用FreeLibrary
::PostMessage(::FindWindow(NULL,"Demo"),WM_USERDEFMSG,NULL,NULL);
CDialog::PostNcDestroy();
}
3主窗口添加自定义消息。
捕获来自子对话框的消息,并调用FreeLibrary
//自定义消息
LRESULT CDemoDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
HMODULE hModule = GetModuleHandle(_T("mydlldll"));
ASSERT(hModule);
if (hModule)
FreeLibrary(hModule);
return 0;
}
例子下载:
>
需要在所有代码最上方加入WIN API函数的声明才行,你用到了以下几个API和常数
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const VK_CONTROL = &H11
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const KEYEVENTF_KEYUP = &H2
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_SYSKEYUP = &H105
版本 2
DLL命令 SendMessage, 整数型, , "SendMessageA"
参数 a
参数 b
参数 c
参数 d
版本 2
子程序 _按钮1_被单击
SendMessage (262958, 245, 0, 0)
只有把专门做成的按键精灵DLL插件,放在按键精灵中plugin文件夹内,重启后,在按键精灵-全部命令-插件命令中可以找到。
不是按键精灵插件的DLL是找不到的。我们可以放在系统的user32文件夹内,利用VB60的写法来调用API命令。
如我需要调用GetAsyncKeyState的函数(判断按键状态)。写法如下
Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
//解释:调用user32库名中GetAsyncKeyState函数,数值传递长整数值,返回整数型数值。
以上就是关于血本急求:将对话框放入 DLL 文件当中,在主程序中作为子窗口非模态显示,做完 *** 作后,释放该 DLL 的方法全部的内容,包括:血本急求:将对话框放入 DLL 文件当中,在主程序中作为子窗口非模态显示,做完 *** 作后,释放该 DLL 的方法、C++ dll中窗口显示问题、用VB写模拟按键dll,遇到的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)