vc中如何自己调用WM_PAINT消息

vc中如何自己调用WM_PAINT消息,第1张

函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口 遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。 2.UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。

1.添加消息

消息映射

BEGIN_MESSAGE_MAP(CAFT_1394Dlg, CDialog)

//{{AFX_MSG_MAP(CAFT_1394Dlg)

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

...

ON_WM_DEVICECHANGE()

//}}AFX_MSG_MAP

声明消息响应函数:

afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData)

定义函数内容:

BOOL XXXXXXX::OnDeviceChange(UINT nEventType,DWORD dwData)

{

DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData

//这里进行信息匹配,比如guid等

//针对各个事件进行处理.

switch (nEventType)

{

case DBT_DEVICEREMOVECOMPLETE:

...

break

case DBT_DEVICEARRIVAL:

...

break

...

...

...

default:

break

}

return TRUE

}

2.注册设备

if (Handle == NULL)

return FALSE

DEV_BROADCAST_DEVICEINTERFACE DevInt

memset(&DevInt,0,sizeof(DEV_BROADCAST_DEVICEINTERFACE))

DevInt.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE)

DevInt.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE

DevInt.dbcc_classguid = GetCurrentUSBGUID()//m_usb->GetDriverGUID()

if (!RegisterDeviceNotification(m_hWnd, &DevInt,DEVICE_NOTIFY_WINDOW_HANDLE) )

return FALSE

只有注册了该设备,OnDeviceChange才能获得详细的信息,否则收到的参数都是0007.

手动添加吧

我也没找到


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/bake/11850526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存