50分 如何获取非模式对话框无标题栏句柄??

klkvc386 2008-11-25 02:45:43
我想实现一个像 tooltips 那样的窗口用来显示数据

createtips.Create(IDD_TOOLTIPS,GetDesktopWindow());
createtips.ShowWindow(SW_SHOW);

我想用dll 键盘钩子来关掉他
我要怎么样才能获取的句柄并关掉他
...全文
260 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
klkvc386 2008-11-26
  • 打赏
  • 举报
回复
两天了,终于解决了,
是 FindWindow() 窗口句柄 的问题,
是句柄自己改变了。所以找不到,也就是关不掉的原因!!
晕!!!
cnzdgs 2008-11-25
  • 打赏
  • 举报
回复
DLL通过句柄给窗口发消息,由EXE来关。
klkvc386 2008-11-25
  • 打赏
  • 举报
回复
既然是自己创建的,把句柄传给DLL就可以了,注意一点,句柄要用共享变量来保存,否则在其它进程中无法使用。


你的意思是说 把句柄从exe 传到 dll 然后在dll 执行关掉dialog 吗?
cnzdgs 2008-11-25
  • 打赏
  • 举报
回复
既然是自己创建的,把句柄传给DLL就可以了,注意一点,句柄要用共享变量来保存,否则在其它进程中无法使用。
leslieyan 2008-11-25
  • 打赏
  • 举报
回复
用 GetDlgItem 这个函数试试,具体的实用方法可以参见一下 msdn
klkvc386 2008-11-25
  • 打赏
  • 举报
回复
我用的就是你说的这个方法,但是,
有时她会关不了,却显示了地二个dialog 第一个没关掉
我用 原有的 tooltip 也就是 windows 那种黄色的提示框
也同样会这样 ,所以我想有没有其他方法取得句柄关掉他,
不知道是不是与失去焦点后,就没法关掉有关!!
gamezealot 2008-11-25
  • 打赏
  • 举报
回复
比如你在CMyDlg里
createtips.Create(IDD_TOOLTIPS,this);//必须设置父窗口为CMyDlg
createtips.ShowWindow(SW_SHOW);
在CMyDlg里定义一个自定义消息
enum {WM_CLOSETOOPTIP = WM_USER+100};
ON_MESSAGE(WM_CLOSETOOPTIP, KillToolTipWindow)
并处理这个消息。
LRESULT CMyDlg::KillToolTipWindow(WPARAM wp, LPARAM lp)
{
//干掉窗口的代码
return 0L;
}

然后在dll的函数里
FindWindow(),找到你的CMyDlg的窗口句柄。
SendMessage(hWnd, WM_CLOSETOOPTIP, 0, 0);
这样就好了。

klkvc386 2008-11-25
  • 打赏
  • 举报
回复
dll 键盘钩子里
case VK_F8:
SendMessage()


MFC 里接到消息调用以下,这是我原来的代码!
LRESULT CXXXDlg::OnReMoveTooltip(UINT wParam, LONG lParam){
createtips.Destroywindows();
return 0;
}

但是有时候不灵,关不了

tooltip是在exe中create而想要在dll中关闭它,那么就要想办法获得tooltip的母体的窗口句柄,然后给他发消息让他处理tooltip就可以了。

如果是这样的话,要怎么实现阿!?
给各例子!!
gamezealot 2008-11-25
  • 打赏
  • 举报
回复
你的tooltip是在哪个里面create?dll里还是exe里?
如果是tooltip和tooltip所依赖的母体是在同一个工程里(同一个dll或同一个exe),则可以使用createtips对象。这样你上面的代码就可以使用。
如果是分开的,tooltip是在exe中create而想要在dll中关闭它,那么就要想办法获得tooltip的母体的窗口句柄,然后给他发消息让他处理tooltip就可以了。
klkvc386 2008-11-25
  • 打赏
  • 举报
回复
在dll 里可以这样用吗?

CWnd* pWnd;
pWnd= GetDlgItem(IDD_TOOLTIPS);
pWnd->DestroyWindow();

不知道对不对,帮忙指正一下!?!
lbjfeng 2008-11-25
  • 打赏
  • 举报
回复

GetDlgItem(ID,phand);
BH2008 2008-11-25
  • 打赏
  • 举报
回复
CWnd::GetDlgItem

CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;

返回值:
指向给定的控件或子窗口的指针。如果没有控件具有nID给出的整数ID,则返回NULL。
返回的指针可能是临时的,不能被保存以供将来使用。

参数: nID 指定了要获取的控件或子窗口的标识符。
phWnd 指向子窗口的指针。

说明:
这个函数获得对话框或其它窗口中指定控件或子窗口的指针。返回的指针通常被强制转换为nID所标识的控件类型

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧