社区
界面
帖子详情
*请教* 只知道窗口句柄 如何获取窗口大小改变消息(wm_size)!!!!
allenjiao
2010-09-30 03:02:24
本人开发的动态库dll供别人使用;
使用dll只给我传了窗口句柄 在dll需要捕捉窗体改变大小消息
有没有什么办法?????????
我网上查了下 ;钩子可以实现吗?
...全文
769
17
打赏
收藏
*请教* 只知道窗口句柄 如何获取窗口大小改变消息(wm_size)!!!!
本人开发的动态库dll供别人使用; 使用dll只给我传了窗口句柄 在dll需要捕捉窗体改变大小消息 有没有什么办法????????? 我网上查了下 ;钩子可以实现吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
allenjiao
2010-10-04
打赏
举报
回复
HHOOK IEHook; //全域
LRESULT CALLBACK HookIECallBack(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
CWPSTRUCT* data= (CWPSTRUCT*)lParam;
if (data->message == WM_SIZE)
{
//处理message
}
}
return CallNextHookEx(IEHook, nCode, wParam, lParam);
}
IEHook = ::SetWindowsHookEx(WH_CALLWNDPROC,HookIECallBack,::GetModuleHandle(NULL),0);
//释放
UnhookWindowsHookEx(IEHook);
sunlin7
2010-10-03
打赏
举报
回复
以下几种办法:
1、子类化窗口。使用SetWindowLong(GWL_WNDPROC, ...)将窗口过程改为自己的窗口过程,这其中拦截WM_SIZE消息。
2、进程内消息hook,使用SetWindowsHookEx(WH_CALLWNDPROC,...)来捕获窗口消息,在其中过滤WM_SIZE.
3、(楼下补充)
allenjiao
2010-10-03
打赏
举报
回复
谢谢大家的回复
我试试后 给分
再次感谢
yann2
2010-10-03
打赏
举报
回复
10楼的方法挺不错 简单 易懂
你可以创建个线程来实时监控 如果这个CRect的成员的大小发生变化那不就捕捉到了
tfzxyinhao
2010-10-01
打赏
举报
回复
10楼是正解
Applic
2010-10-01
打赏
举报
回复
这样设计不当吧
zhouyongku
2010-09-30
打赏
举报
回复
[Quote=引用 10 楼 zhouyongku 的回复:]
老大,一个函数就搞定了!!!
::MoveWindow(窗口句柄,位置...)
[/Quote]
上面是改变窗口大小
下面是获取窗口大小
BOOL GetWindowRect( HWND hWnd, LPRECT lpRect);
超Easy
zhouyongku
2010-09-30
打赏
举报
回复
老大,一个函数就搞定了!!!
::MoveWindow(窗口句柄,位置...)
psbeond
2010-09-30
打赏
举报
回复
如果hWnd和你是一个进程,你可以用SetWindowLong(hWnd,GWL_WNDPROC, (LONG)(WndProc));
来子类化窗口。这样就可以处理hWnd的所有消息了。
如果hWnd和你不是一个进程,你必须写个dll,用CreateRemoteThread的方法,把你写的dll注入到对方进程,然后再按上面说的子类化hWnd.
Eleven
2010-09-30
打赏
举报
回复
HOOK WM_SIZE
jacky_qiu
2010-09-30
打赏
举报
回复
钩子可以,特别假如窗口句柄是其他进程的,就非钩子不可啦。
用SetWindowLong替换窗口过程也可以,就是子类化啦。
WNDPROC OLDWNDPROC;
LRESULT CALLBACK MyWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_SIZE:
{
}
break;
default:
return ::CallWindowProc(OLDWNDPROC, hWnd, message, wParam, lParam);
}
return 0;
}
//创建窗口函数
void CreateWnd()
{
HWND hWnd=CreateWindowEx(WS_EX_TOPMOST,_T("#32770"), _T("Hello"),
WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,200,200,NULL,NULL,NULL,NULL);
//把hWnd的默认窗口过程替换为kkWndProc,返回默认函数过程的函数指针
OLDWNDPROC=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC, (LONG) (MyWndProc));
}
allenjiao
2010-09-30
打赏
举报
回复
[Quote=引用 1 楼 tiger9991 的回复:]
钩子当然是可以的,你可以尝试下这个
PretranslateMessage
BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg == WM_SIZE)
{
}
retur……
[/Quote]
我试试这个方法
allenjiao
2010-09-30
打赏
举报
回复
[Quote=引用 3 楼 weiym 的回复:]
2种方案:
1. Subclass窗口
2. 让别人再改变窗口大小Move你的窗口,或是让他通知你
[/Quote]
第二种方法可以实现
这方法不太友好 但有没有更好的方法
QQ_456
2010-09-30
打赏
举报
回复
xuexi
weiym
2010-09-30
打赏
举报
回复
2种方案:
1. Subclass窗口
2. 让别人再改变窗口大小Move你的窗口,或是让他通知你
看不见的裂痕
2010-09-30
打赏
举报
回复
pMsg.message
看不见的裂痕
2010-09-30
打赏
举报
回复
钩子当然是可以的,你可以尝试下这个
PretranslateMessage
BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg == WM_SIZE)
{
}
return CDialog::PreTranslateMessage(pMsg);
}
不知道可以么,推荐楼主尝试啊
SDL入门教程(九):1、在SDL图形
窗口
显示文本
我在水木社区的CPP版
请教
有这样关系的两个类应该是什么关系。有前辈指教说,一个类,用不同的flag加以区分。而我并不愿意多增加一个构造函数的参数,所以,我用构造函数的重载实现构造的不同;用继承类实现方法...
vc开发工作小结
一隐藏任务条上的图标第一、创建对话框时必须将它作为某个不可见框架
窗口
的子
窗口
;第二、这个不可见框架
窗口
的扩展式样必须设置 WS_EX_TOOLWINDOW;第三、保证对话框的扩展式样没有设置 WS_EX_APPWINDOW; 先在...
VC常用小知识
(1) 如何通过代码获得应用程序主
窗口
的 指针? 主
窗口
的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。 AfxGetMainWnd() ->ShowWindow(SW_SHO
WM
AXMIZED) //使程序最大化.
怎样将CDockablePane里面的控件随着CDockablePane拉伸动态
改变
大小
解决方案在父
窗口
中处理
WM
_
SIZE
消息
时用MoveWindow来移动子
窗口
位置和 大小.至于父
窗口
信息,用GetParent来
获取
HWND, VC/MFC 怎么动态让CDialog可以通过鼠标
改变
大小 如何 动态让CDialog可以...
VC++中可能遇到的问题收藏
T 在vb中能否通过向其他程序控件发送
WM
_GETCONTROLNAME
消息
得到这个控件的name Q 主要想实现在vb里区分其他程序窗体里同级、同标题、同类的控件。。。。。。。用其他方法都似乎不太保险 A
WM
_GETCONTROLNAME仅用于...
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章