社区
界面
帖子详情
*请教* 只知道窗口句柄 如何获取窗口大小改变消息(wm_size)!!!!
allenjiao
2010-09-30 03:02:24
本人开发的动态库dll供别人使用;
使用dll只给我传了窗口句柄 在dll需要捕捉窗体改变大小消息
有没有什么办法?????????
我网上查了下 ;钩子可以实现吗?
...全文
817
17
打赏
收藏
*请教* 只知道窗口句柄 如何获取窗口大小改变消息(wm_size)!!!!
本人开发的动态库dll供别人使用; 使用dll只给我传了窗口句柄 在dll需要捕捉窗体改变大小消息 有没有什么办法????????? 我网上查了下 ;钩子可以实现吗?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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);
}
不知道可以么,推荐楼主尝试啊
MFC——
窗口
的缩放及控件随拖动
改变
大小
首先一个
窗口
是否可以拖动
改变
大小决定于border的属性 当border为Resizing是
窗口
可以拖动
改变
大小 其它属性时则不可以
窗口
中控件是否随着
窗口
大小
改变
而
改变
需要用的On
Size
函数。 添加
WM
_
SIZE
消息
: 对On
Size
函数添加代码 [cpp] view plain copy print? void ...
Windows
消息
处理(系统
消息
)
WM
_QUIT、
WM
_DESTROY、
WM
_CLOSE、
WM
_SYSCOMMAND、
WM
_PAINT、
WM
_LBUTTONDO、
WM
_
SIZE
、
WM
_CREATE、
windows系统
消息
WM
_QUIT、
WM
_DESTROY、
WM
_CLOSE、
WM
_SYSCOMMAND、
WM
_PAINT、
WM
_LBUTTONDO、
WM
_
SIZE
、
WM
_CREATE、
WM
_LBUTTONDOWN
mfc控件自适应
窗口
大小
,随
窗口
大小
变化而变化
作为一个mfc的初学者,难免会遇到这样的问题,
窗口
可以
改变
大小,而其中的控件大小也随之
改变
,那怎么样去做呢。 1.对应
窗口
的属性Maximize Box和Minimize Box设置为true,从而能够使
窗口
最大化和最小化,Border属性设置为Resizing从而可以
改变
窗口
的大小。 2.在
消息
有个
WM
_
SIZE
,添加函数On
Size
,这样可以在函数内调整控件的大小,特别说明很多代码中利用当
MFC,调整
窗口
大小
限制大小,设置
窗口
的最大|最小宽度与高度
方法一:响应
窗口
WM
_
SIZE
消息
(不推荐)
WM
_
SIZE
消息
是当
窗口
大小
发生
改变
后发送的,所以如果要在这个
窗口
中限制
窗口
大小
的话,你就需要重新计算
窗口
的大小信息,代码如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
对话框控件大小随
窗口
的大小变化而变化
我们经常会发现当我们将
窗口
最大化时,里面的控件并没有进行
改变
,接下来我就介绍一下此问题的解决办法,我们其实一般的都会把
窗口
的最大化按钮失效,是
窗口
不能进行最大化操作,但是有时候我们还是需要对
窗口
进行最大化操作的,下面我们可以通过添加
WM
_
SIZE
消息
来解决此问题。 1 在XXDLg.h中添加 afx_msg void On
Size
(UINT nType, int c
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章