您现在的位置是: 软件 > 开发者网络 > 程序方舟 > 开发专栏 > Visual C++开发 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始



-Java套接字编程(下)
-MediaStudio Pro 6.5教程
-三款卸载软件最新试用
-基于Visual C++的Winsock API研究

Visual C++6.0开发灰度位图处理
2001-09-10· ·刘涛 蒋建国··yesky

上一页  1 2 3 4 5  下一页


  二、 调色板的操作

  灰度图像要正确显示,必须实现逻辑调色板和系统调色板 ,通过在主框架类中处理Windows定义的消息WM_QUERYNEWPALETTE 、WM_PALETTECHANGED及视图类中处理自定义消息WM_DOREALIZE(该消息在主框架窗口定义如下:#define WM_REALIZEPAL (WM_USER+100))来实现调色板的操作。

void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd)
{ file://总实现活动视的调色板
 CMDIFrameWnd::OnPaletteChanged(pFocusWnd);
 CMDIChildWnd* pMDIChildWnd = MDIGetActive();
 if (pMDIChildWnd == NULL)
  return
  CView* pView = pMDIChildWnd->GetActiveView();
  ASSERT(pView != NULL);
  SendMessageToDescendants(WM_DOREALIZE, (WPARAM)pView->m_hWnd);
  file://通知所有子窗口系统调色板已改变
 }
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);
   file://通知活动视图实现系统调色板
   pView->SendMessage(WM_DOREALIZE, (WPARAM)pView->m_hWnd);
   return TRUE;
 }
 LRESULT CDibView::OnDoRealize(WPARAM wParam, LPARAM)//实现系统调色板
 {
  ASSERT(wParam != NULL);
  CDibDoc* pDoc = GetDocument();
  if (pDoc->m_hDIB == NULL)
   return 0L; // must be a new document
   CPalette* pPal = pDoc->m_palDIB;
   file://调色板的颜色表数据在InitDIBData()函数中实现
   if (pPal != NULL)
   {
    CMainFrame* pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;
    ASSERT_KINDOF(CMainFrame, pAppFrame);
    CClientDC appDC(pAppFrame);
    CPalette* oldPalette = appDC.SelectPalette(pPal, ((HWND)wParam) != m_hWnd);
    file://只有活动视才可以设为"FALSE",
    // 即根据活动视的调色板设为"前景"调色板
    if (oldPalette != NULL)
    {
     UINT nColorsChanged = appDC.RealizePalette();//实现系统调色板
     if (nColorsChanged > 0)
      pDoc->UpdateAllViews(NULL);//更新视图
      appDC.SelectPalette(oldPalette, TRUE);
      file://将原系统调色板置为逻辑调色板
     }
    else
    {
     TRACE0("\tSelectPalette failed in
          CDibView::OnPaletteChanged\n");
     }
    }

  注:在调用API函数显示位图时,不要忘记设置逻辑调色板,即"背景"调色板,否则位图将无法正确显示。

上一页  1 2 3 4 5  下一页

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 在存储过程中调用外部的动态连接库
 用VC++实现矢量地图背景下的实时显示
 在Visual C++中用ADO进行数据库编程
 单独使用CRecordSet
 在VC++下实现高彩色工具条
 MFC中自由使用自定义消息
 用VC实现小型矢量图形系统的开发
 VC编程实现数字图像的边缘检测
 多线程技术在VC++串口通信程序中的应用研究
 VC编程实现IE风格的界面
 VC编程实现灰度图像与彩色图像的相互转换
 利用Visual C++实现AVI文件的图像截取
 VC6.0实现逆向操作并防止界面闪烁
 给Win98装上“飞毛腿”
 VC中利用ADO共同实现数据库的操作
 C++ 对象的初始化
 MAP原理及其在MFC中的实现
 C++ 对象和对象的定义
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!