动态库中显示界面的问题

时间:2021-05-14 23:03:13
我在一个应用程序中,有两个Button,一个Button消息响应函数从一个Dll中显示一个CFrame,另一个Button消息响应函数从另一个Dll中显示一个CDialog。如果我只点击后一个Button,显示出来的Dialog很正常,点击这个Dialog上的任何控件都很正常。但是如果我先点击前一个Button,显示出Frame,在点击后一个Button,Dialog虽然能正常显示,但是当我点击Dialog上的控件时,原本被Dialog覆盖的Frame上的控件却显示出来,结果每点Dialog上的任何一个位置,都是Frame上同位置的控件Dialog的画面中显示出来。这种“花屏”的现象只发生在Dialog界面上,却不发生在Frame界面里。哪位大虾指点指点,是什么回事啊?

8 个解决方案

#1


http://blog.csdn.net/na_he/archive/2008/05/16/2451822.aspx
如果是在dll里面完成的,看看这个了!

#2


楼上兄弟提供的网址以前看过类似的,好像只是将应用程序和Dll进行模态转换时的资源句柄的切换。好像跟我的“花屏”现象不是一回事啊。
不过好像也有关系,我点击一个DLL中的控件,确实另一个Dll中的控件响应,说明资源句柄切换到了前一个Dll中去了。回家再研究研究。

#3


显示的时候有隐藏先前的Frame吗?用spy++看看它们的状态,有没有子父窗口的关系等等。小建议不知道有用没!

#4


回楼上:都有隐藏先前的界面。每一个Dll中的界面的父窗口都用被设置为调用Dll的主应用程序的Dialog,通过SetParent设置的。

#5


高手在哪里?

#6


资源问题,如果两个dll中某些资源的ID刚好相同,就会发生冲突,会发生这种问题,我遇到过。解决的办法是切换资源句柄。当然,我试过改掉那些相同的ID,有时不用切换资源句柄也行。

#7


好像跟资源句柄的切换有关。调用CFrameWnd的Dll显示一个CFrameWnd时没有调用这个宏
AFX_MANAGE_STATE(AfxGetStaticModuleState());
不知道什么原因,调用的时候没有异常。但是如果在Dll中显示一个Dialog没有用这个宏大话肯定会异常;
调用CDialog的Dll显示Dialog时则用到了这个宏。
后来,我在调用Dll显示CFrameWnd时,我用AfxSetResourceHandle来切换资源句柄(我的资源都是被做成另一个Dll的)。这样“花屏”现象就基本解决了。
楼上的Spy++是什么工具?没用过。我用VC时间不长。

#8


应该是资源出现问题了
两个Dll中肯定有相同的资源ID,我曾经是在Dll和主应用程序中遇到过。
我当时的解决方法是修改了资源的ID,或者调用AfxSetResourceHandle来切换资源句柄

Spy++ 工具:使用 Spy++,您可以了解一个运行中的应用程序的窗口布局或识别一个导致错误的特定窗口消息。

Microsoft Visual Studio6.0 Tools中就有这个工具,但是我没用过,你可以尝试一下

#1


http://blog.csdn.net/na_he/archive/2008/05/16/2451822.aspx
如果是在dll里面完成的,看看这个了!

#2


楼上兄弟提供的网址以前看过类似的,好像只是将应用程序和Dll进行模态转换时的资源句柄的切换。好像跟我的“花屏”现象不是一回事啊。
不过好像也有关系,我点击一个DLL中的控件,确实另一个Dll中的控件响应,说明资源句柄切换到了前一个Dll中去了。回家再研究研究。

#3


显示的时候有隐藏先前的Frame吗?用spy++看看它们的状态,有没有子父窗口的关系等等。小建议不知道有用没!

#4


回楼上:都有隐藏先前的界面。每一个Dll中的界面的父窗口都用被设置为调用Dll的主应用程序的Dialog,通过SetParent设置的。

#5


高手在哪里?

#6


资源问题,如果两个dll中某些资源的ID刚好相同,就会发生冲突,会发生这种问题,我遇到过。解决的办法是切换资源句柄。当然,我试过改掉那些相同的ID,有时不用切换资源句柄也行。

#7


好像跟资源句柄的切换有关。调用CFrameWnd的Dll显示一个CFrameWnd时没有调用这个宏
AFX_MANAGE_STATE(AfxGetStaticModuleState());
不知道什么原因,调用的时候没有异常。但是如果在Dll中显示一个Dialog没有用这个宏大话肯定会异常;
调用CDialog的Dll显示Dialog时则用到了这个宏。
后来,我在调用Dll显示CFrameWnd时,我用AfxSetResourceHandle来切换资源句柄(我的资源都是被做成另一个Dll的)。这样“花屏”现象就基本解决了。
楼上的Spy++是什么工具?没用过。我用VC时间不长。

#8


应该是资源出现问题了
两个Dll中肯定有相同的资源ID,我曾经是在Dll和主应用程序中遇到过。
我当时的解决方法是修改了资源的ID,或者调用AfxSetResourceHandle来切换资源句柄

Spy++ 工具:使用 Spy++,您可以了解一个运行中的应用程序的窗口布局或识别一个导致错误的特定窗口消息。

Microsoft Visual Studio6.0 Tools中就有这个工具,但是我没用过,你可以尝试一下