一般情况下DLL 的窗体或对话框,是不能响应这个PreTranslateMessage函数的,
而被主程序窗口响应了。
怎么样使这个函数在DLL的窗体中也能响应呢?有效呢?
我主要是想在DLL的窗体中用工具提示类?
m_ToolTipCtrl.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
谢谢!
而被主程序窗口响应了。
怎么样使这个函数在DLL的窗体中也能响应呢?有效呢?
我主要是想在DLL的窗体中用工具提示类?
m_ToolTipCtrl.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
谢谢!
解决方案 »
- 如果散分还不能缓解郁闷,那就再散。。
- 初学者的简单问题!!
- dc画图刷新后总是闪动的问题
- word换页
- 我要在ocx上添加toolbar 只能用多重继承的方式吗?
- arraylist问题
- 使用CWnd::Create创建窗口,怎样让窗口没有最大、最小和关闭按钮?怎么让窗口总在前面?怎么设置窗口的大小?
- 怎样在一个窗口下实现list view 以及cform view.
- 通过EnumFontFamExProc获取的字体利用CFONT.CreatePointFont之后,汉字横着了
- 多线程调试问题
- 求救!~在dll里创建的非模式对话框,怎么响应对话框上的鼠标事件?
- [急]CAsyncSocket类,关于发送接受的问题。
bool __stdcall MyPreTranslateMessage(LPMSG pMSg)
{
return theApp.PreTranslateMessage(pMsg);
}然后在主程序的PreTranslateMessage中调用该程序
这个接口添加在哪里呢?是我的DLL窗口的里面呢?还是DLL导出函数?
//添加一个接口进行pretranslatemessage谢谢
1、我在DLL导出函数这样写
extern "C" _declspec(dllexport) bool MyPreTranslateMessage(LPMSG pMsg)
{
return theApp.PreTranslateMessage(pMsg);
}
2、我在主对话框这样写.h前面
typedef bool(_cdecl *MusicList_Pre)(MSG* pMsg);
3、我在主对话框.h里面这样写
MusicList_Pre m_MusicList_Pre;
去发现关闭窗口的时候有错误,不知道为什么喔。
4、
我在初始化对话框OnInitDialog这样写,也有错,为什么呢?
m_MusicList_Pre = (m_MusicList_Pre)GetProcAddress(hinstDll_List,"MyPreTranslateMessage");
如果是非模态显示的窗口,你需要做个接口函数,比如
A::MessageForToolTip(MSG* pMsg)
{
if (非模态显示)
m_ToolTipCtrl.RelayEvent(pMsg);
}然后在调用dll的主窗口里面的PreTranslateMessage函数里面,调用你dll窗口的MessageForToolTip函数,也就是
B::PreTranslateMessage(MSG* pMsg)
{
.......
pDialiogA->MessageForToolTip(pMsg);//dll窗口对话框指针以及导出函数
........................
}
pDialiogA->MessageForToolTip(pMsg);//dll窗口对话框指针以及导出函数
我是用CWND派生的窗口类。
能这样使用吗?主程序窗口根本就不知道有这个函数可以调用的,会认为找不到这个函数呀。
这个函数要你暴露出来啊!!如果确定你的dll里面的窗口是非模态show出来的,那么可以对pDialiogA指针灵活处理,当显示出来的时候,pDialiogA可以赋上正确的值,如果窗口关闭,那么置pDialiogA为NULL。
pDialiogA为dll里面的窗口
MessageForToolTip为dll窗口类里面的导出函数
如果dll窗口显示,那么pDialiogA设置为类的指针,如果关闭,则置pDialiogA为null
在外面的主窗口PreTranslateMessage(MSG* pMsg)里
......
if (pDialiogA)
pDialiogA->MessageForToolTip(pMsg);
更好点
你想暴露哪些东西给调用的人。
说明白了,才好想解决问题的办法
如果这个函数不行,就用你的方法,不过你这个函数,我是在窗口类中使用,怎么会能在别的窗口中使用呢?
加上这个DLL中窗口类的.H到主程序中的窗口中去是吗?
tooltip的关键就是要调用那个RelayEvent(pMsg)函数,所以找准PreTranslateMessage的地方。这个MessageForToolTip(pMsg);定义在dll窗口类里面的公有函数,你可以导出类,导出特定的函数,也可以所有的信息都导出!将这个函数的.h文件加到主窗口里面去。
我再问你,你的dll窗口是用什么方法或者函数show出来的?
CWND::CreateEx这个函数用完就可以出来了呀。导出类,导出特定的函数??这个怎么用做呢?
不好意思。
1、CMusicWnd *ListWnd;
在DLL-CXXWNDAPP中用个全局的窗口指针
2、DLL中需要导出该一个接口涵数-
extern "C" _declspec(dllexport) BOOL List_PreTM(MSG *pMsg)//PreTranslateMessage
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
if(ListWnd!=NULL)
return ListWnd->PreTranslateMessage(pMsg);
return false;
}
3、主程序中用typedef BOOL(_cdecl *List_PreTM)(MSG *pMsg);//导出函数
List_PreTM m_pList_PreTM;//导出函数指针
在BOOL CXXXDlg::OnInitDialog()中(主程序的对话框)
m_pList_PreTM = (List_PreTM)GetProcAddress(hinstDll_List,"List_PreTM");
4、在主程序的
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(m_pList_PreTM(pMsg))
return true;
return CDialog::PreTranslateMessage(pMsg);
}
所有即可成功完成该过程。