VC++数字图像处理编程(13)

时间:2026-01-16   来源:未知    
字号:

程序的主窗口发送WM_QUERYNEWPALETTE 、WM_PALETTECHANGED,例如当某一窗口即将激活时,主框架窗口将收到WM_QUERYNEWPALETTE消息,通知该窗口将要收到输入焦点,给它一次机会实现其自身的逻辑调色板;当系统调色板改变后,主框架窗口将收到WM_PALETTECHANGED消息,通知其它窗口系统调色板已经改变,此时每一窗口都应该实现其逻辑调色板,重画客户区。

由于上述的调色板变更消息是发往主框架窗口的,所以我们只能在主窗口中响应这两个消息,然后由主框架窗口通知各个视窗,使得程序激活时能自动装载自己的调色板。我们定义的用户消息WM_REALIZEPAL用于主框架窗口通知视窗它已经收到调色板变更消息,视窗应该协调其调色板。下面我们给出了各个消息的响应处理函数的具体实现代码和注释:

//////////////////////////////////////////////////////////

void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd)

{//总实现活动视的调色板

CMDIFrameWnd::OnPaletteChanged(pFocusWnd);

CMDIChildWnd* pMDIChildWnd = MDIGetActive();//得到活动的子窗口指针; if (pMDIChildWnd == NULL)

return

CView* pView = pMDIChildWnd->GetActiveView();//得到视图的指针; ASSERT(pView != NULL);

SendMessageToDescendants(WM_DOREALIZE, (WPARAM)pView->m_hWnd); //通知所有子窗口系统调色板已改变

}

////////////////////////////////////////////////

BOOL CMainFrame::OnQueryNewPalette()//提供实现系统调色板的机会 {

// 实现活动视的调色板

CMDIChildWnd* pMDIChildWnd = MDIGetActive();//得到活动的子窗口指针; if (pMDIChildWnd == NULL)

return FALSE;//no active MDI child frame (no new palette)

CView* pView = pMDIChildWnd->GetActiveView();//得到活动子窗口的视图指针;

ASSERT(pView != NULL);

//通知活动视图实现系统调色板

pView->SendMessage(WM_DOREALIZE, (WPARAM)pView->m_hWnd);

return TRUE;

}

/////////////////////////////////////////////////

BOOL CDibView::OnDoRealize(WPARAM wParam, LPARAM)//实现系统调色板 {

ASSERT(wParam != NULL);

CDibDoc* pDoc = GetDocument();

if (pDoc->m_hDIB == NULL)

VC++数字图像处理编程(13).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:19 元/月 原价:99元
低至 0.1 元/份 每月下载300
全站内容免费自由复制
VIP包月下载
特价:19 元/月 原价:99元
低至 0.1 元/份 每月下载300
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)