从双击至窗口最大化都发生了什么

 在研究Duilib框架时的测试小例子,只需在OnSize下断点,并双击标题栏,即会在OnSize中命令断点,可分析调用流程,解释见后

	//5、最后,响应了OnSize消息
>	DuiLib_d.dll!DuiLib::WindowImplBase::OnSize(unsigned int uMsg, unsigned int wParam, long lParam, int & bHandled)  行 225	C++
 	DuiLib_d.dll!DuiLib::WindowImplBase::HandleMessage(unsigned int uMsg, unsigned int wParam, long lParam)  行 370 + 0x1f 字节	C++
 	DuiLib_d.dll!DuiLib::CWindowWnd::__WndProc(HWND__ * hWnd, unsigned int uMsg, unsigned int wParam, long lParam)  行 436 + 0x1b 字节	C++
 	user32.dll!__InternalCallWinProc@20()  + 0x2b 字节	
 	user32.dll!UserCallWinProcCheckWow()  + 0x30a 字节	
 	user32.dll!SendMessageWorker()  + 0x26a39 字节	
 	user32.dll!RealDefWindowProcWorker()  + 0x263 字节	
 	user32.dll!RealDefWindowProcW()  + 0x5b 字节	
 	uxtheme.dll!6bd3690f() 	
 	[下面的框架可能不正确和/或缺失,没有为 uxtheme.dll 加载符号]	
 	uxtheme.dll!6bd365e8() 	
 	user32.dll!DefWindowProcW()  + 0x263 字节	
 	user32.dll!__InternalCallWinProc@20()  + 0x2b 字节	
 	user32.dll!UserCallWinProcCheckWow()  + 0x30a 字节	
 	user32.dll!CallWindowProcW()  + 0x97 字节
	//4、此处 WM_WINDOWPOSCHANGED 0x47 窗口位置尺寸发生变化
 	DuiLib_d.dll!DuiLib::CWindowWnd::HandleMessage(unsigned int uMsg, unsigned int wParam, long lParam)  行 496 + 0x22 字节	C++
 	DuiLib_d.dll!DuiLib::WindowImplBase::HandleMessage(unsigned int uMsg, unsigned int wParam, long lParam)  行 390	C++
 	DuiLib_d.dll!DuiLib::CWindowWnd::__WndProc(HWND__ * hWnd, unsigned int uMsg, unsigned int wParam, long lParam)  行 436 + 0x1b 字节	C++
 	user32.dll!__InternalCallWinProc@20()  + 0x2b 字节	
 	user32.dll!UserCallWinProcCheckWow()  + 0x30a 字节	
 	user32.dll!DispatchClientMessage()  + 0xf0 字节	
 	user32.dll!___fnINLPWINDOWPOS@4()  + 0x41 字节	
 	ntdll.dll!_KiUserCallbackDispatcher@12()  + 0x36 字节	
 	win32u.dll!_NtUserMessageCall@28()  + 0xc 字节	
 	user32.dll!RealDefWindowProcWorker()  + 0xbd 字节	
 	user32.dll!RealDefWindowProcW()  + 0x5b 字节	
 	uxtheme.dll!6bd4343e() 	
 	uxtheme.dll!6bd431c5() 	
 	uxtheme.dll!6bd36bb8() 	
 	uxtheme.dll!6bd365e8() 	
 	user32.dll!DefWindowProcW()  + 0x263 字节	
 	user32.dll!__InternalCallWinProc@20()  + 0x2b 字节	
 	user32.dll!UserCallWinProcCheckWow()  + 0x30a 字节	
 	user32.dll!CallWindowProcW()  + 0x97 字节	
	//3、此处是DefWindowProcW向窗口发送了命令消息 0x112 WM_SYSCOMMAND wPrarm = 0xF032 窗口最大化命令
 	DuiLib_d.dll!DuiLib::CWindowWnd::HandleMessage(unsigned int uMsg, unsigned int wParam, long lParam)  行 496 + 0x22 字节	C++
 	DuiLib_d.dll!DuiLib::WindowImplBase::OnSysCommand(unsigned int uMsg, unsigned int wParam, long lParam, int & bHandled)  行 257 + 0x14 字节	C++
 	DuiLib_d.dll!DuiLib::WindowImplBase::HandleMessage(unsigned int uMsg, unsigned int wParam, long lParam)  行 372 + 0x1f 字节	C++
 	DuiLib_d.dll!DuiLib::CWindowWnd::__WndProc(HWND__ * hWnd, unsigned int uMsg, unsigned int wParam, long lParam)  行 436 + 0x1b 字节	C++
 	user32.dll!__InternalCallWinProc@20()  + 0x2b 字节	
 	user32.dll!UserCallWinProcCheckWow()  + 0x30a 字节	
 	user32.dll!DispatchClientMessage()  + 0xf0 字节	
 	user32.dll!___fnDWORD@4()  + 0x49 字节	
 	ntdll.dll!_KiUserCallbackDispatcher@12()  + 0x36 字节	
 	win32u.dll!_NtUserMessageCall@28()  + 0xc 字节	
 	user32.dll!RealDefWindowProcWorker()  + 0xbd 字节	
 	user32.dll!RealDefWindowProcW()  + 0x5b 字节	
 	uxtheme.dll!6bd4343e() 	
 	uxtheme.dll!6bd5cbd8() 	
 	uxtheme.dll!6bd36bb8() 	
 	uxtheme.dll!6bd365e8() 	
 	user32.dll!DefWindowProcW()  + 0x263 字节	
 	user32.dll!__InternalCallWinProc@20()  + 0x2b 字节	
 	user32.dll!UserCallWinProcCheckWow()  + 0x30a 字节	
 	user32.dll!CallWindowProcW()  + 0x97 字节	
	//2、此处是 双击标题栏的消息 0xa3 WM_NCLBUTTONDBLCLK 
 	DuiLib_d.dll!DuiLib::CWindowWnd::HandleMessage(unsigned int uMsg, unsigned int wParam, long lParam)  行 496 + 0x22 字节	C++
 	DuiLib_d.dll!DuiLib::WindowImplBase::HandleMessage(unsigned int uMsg, unsigned int wParam, long lParam)  行 390	C++
 	DuiLib_d.dll!DuiLib::CWindowWnd::__WndProc(HWND__ * hWnd, unsigned int uMsg, unsigned int wParam, long lParam)  行 436 + 0x1b 字节	C++
 	user32.dll!__InternalCallWinProc@20()  + 0x2b 字节	
 	user32.dll!UserCallWinProcCheckWow()  + 0x30a 字节	
 	user32.dll!DispatchMessageWorker()  + 0x234 字节	
 	user32.dll!_DispatchMessageW@4()  + 0x10 字节
	//1、此处是程序响应的消息循环
 	DuiLib_d.dll!DuiLib::CPaintManagerUI::MessageLoop()  行 2012 + 0xc 字节	C++
 	BDMonSetup.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpCmdLine, int nCmdShow)  行 41 + 0x8 字节	C++
 	BDMonSetup.exe!__tmainCRTStartup()  行 547 + 0x2c 字节	C
 	BDMonSetup.exe!wWinMainCRTStartup()  行 371	C
 	kernel32.dll!75fc62c4() 	
 	ntdll.dll!__RtlUserThreadStart()  + 0x2f 字节	
 	ntdll.dll!__RtlUserThreadStart@8()  + 0x1b 字节	

双击消息从步骤2开始

2.双击标题栏,窗口过程对非客户区窗口消息进行处理,并用SendMessage向窗口发送窗口最大化的命令

3.窗口过程处理,响应窗口最大化消息,发送窗口,大小位置变化消息

4.窗口过程处理,修改窗口的大小和位置,并调用了OnSize变化的事件

5.OnSize被调用了

 

其中消息之间使用了SendMessage,因此,可以形成上面的堆栈,SendMessage可以相象为,直接通过窗口过程的地址调用窗口过程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值