WEB开发网
开发学院软件开发VC 智能ABC窗口的实现 阅读

智能ABC窗口的实现

 2010-05-27 20:37:12 来源:WEB开发网   
核心提示:2、窗口绘制:根据四个位图“按钮”标志变量绘制相应的位图,void CMainWnd::OnPaint(){CPaintDC dc(this); // device context for painting// TODO: 在此处添加消息处理程序代码// 不为绘图消息调用 CWnd::OnPai

2、窗口绘制:根据四个位图“按钮”标志变量绘制相应的位图。

void CMainWnd::OnPaint()
  {
   CPaintDC dc(this); // device context for painting
   // TODO: 在此处添加消息处理程序代码
   // 不为绘图消息调用 CWnd::OnPaint()
   CBitmap* pOldBmp;
   CDC CompatibleDC;
   CompatibleDC.CreateCompatibleDC(&dc);
   //绘制第一个按钮
   if(m_bBTState[0])
   pOldBmp=CompatibleDC.SelectObject(&m_BT1_1);
   else
   pOldBmp=CompatibleDC.SelectObject(&m_BT1_2);
   dc.BitBlt(m_rcBT1.left,m_rcBT1.top,m_rcBT1.Width(),m_rcBT1.Height(),&CompatibleDC,0,0,SRCCOPY);
   //绘制第二个按钮
   if(m_bBTState[1])
    CompatibleDC.SelectObject(&m_BT2_1);
   else
    CompatibleDC.SelectObject(&m_BT2_2);
   dc.BitBlt(m_rcBT2.left,m_rcBT2.top,m_rcBT2.Width(),m_rcBT2.Height(),&CompatibleDC,0,0,SRCCOPY);
   //绘制第三个按钮
   if(m_bBTState[2])
    CompatibleDC.SelectObject(&m_BT3_1);
   else
    CompatibleDC.SelectObject(&m_BT3_2);
   dc.BitBlt(m_rcBT3.left,m_rcBT3.top,m_rcBT3.Width(),m_rcBT3.Height(),&CompatibleDC,0,0,SRCCOPY);
   //绘制第四个按钮
   if(m_bBTState[3])
    CompatibleDC.SelectObject(&m_BT4_1);
   else
    CompatibleDC.SelectObject(&m_BT4_2);
   dc.BitBlt(m_rcBT4.left,m_rcBT4.top,m_rcBT4.Width(),m_rcBT4.Height(),&CompatibleDC,0,0,SRCCOPY);
   //绘制第五个按钮
   if(m_bBTState[4])
    CompatibleDC.SelectObject(&m_BT5_1);
   else
    CompatibleDC.SelectObject(&m_BT5_2);
   dc.BitBlt(m_rcBT5.left,m_rcBT5.top,m_rcBT5.Width(),m_rcBT5.Height(),&CompatibleDC,0,0,SRCCOPY);
   //绘制边框
   CRect rcClient;
   GetClientRect(&rcClient);
   dc.Draw3dRect(&rcClient,RGB(192,192,192),RGB(0,0,0));
   rcClient.DeflateRect(1,1,1,1);
   dc.Draw3dRect(&rcClient,RGB(255,255,255),RGB(144,144,144));
   CompatibleDC.SelectObject(pOldBmp);
  }

3、WM_MOUSEMOVE 消息处理函数void CMainWnd::OnMouseMove(UINT nFlags, CPoint point)
  {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    bool bInRegionNow=IsInRegion(point);
    TRACE("Mouse move:(%d,%d) InRegion=%d\n",point.x,point.y,bInRegionNow);
    if(bInRegionNow)
    {
     SetCursor(m_hCrossCursor);//设置十字形光标
     if(nFlags&MK_LBUTTON)
     {
      POINT pt;
      pt.x=point.x;pt.y=point.y;
      ClientToScreen(&pt);
   //发送移动消息
      SendMessage(WM_NCLBUTTONDOWN,HTCAPTION,(LPARAM)(pt.x|(pt.y>>16)));
     }
    }
    CWnd::OnMouseMove(nFlags, point);
  }

程序运行效果

效果如下:

你可以用鼠标拖动它到任意位置。

结束语

本文只是实现了和智能ABC类似的窗口,但我在用spy++查找智能ABC窗口时发现并不能找到它,不知为什么,难道它根本就不是一个真正的窗口?那它又是怎么实现的呢?有谁知道的能否告诉我,谢谢!

本文配套源码

上一页  1 2 

Tags:智能 ABC 窗口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接