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

时间:2025-04-30

程序的主窗口发送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文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219