WEB开发网
开发学院软件开发VC QQ2006 界面编程之鸡蛋里挑骨头 阅读

QQ2006 界面编程之鸡蛋里挑骨头

 2007-03-15 21:46:11 来源:WEB开发网   
核心提示:2007新的一年即将来临,新版本的QQ估计也要跟我们相见,QQ2006 界面编程之鸡蛋里挑骨头,在此献上本人写于8月份的一个练习程序,主要是希望腾讯做界面的同志能否把创建异形窗体函数 SetWindowRgn 放到合适的位置,一、SetWindowRgn的合适位置1、在void C**Dlg::OnPaint()里调用

2007新的一年即将来临,新版本的QQ估计也要跟我们相见。在此献上本人写于8月份的一个练习程序。主要是希望腾讯做界面的同志能否把创建异形窗体函数 SetWindowRgn 放到合适的位置,别让拖动窗体改变大小时出现用做 MASK 的紫色区域;再者与大家分享不指定窗体风格 WS_THICKFRAME(对于对话框,相当指定其属性 Border 为 Resizing ),用代码实现窗体拖放,任意改变其尺寸。

一、SetWindowRgn的合适位置

1、在void C**Dlg::OnPaint()里调用SetWindowRgn,可以在内存画图完毕准备显示到屏幕前调用,如下:

void C**Dlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this);
  ...
 }
 else
 {
  CPaintDC dc(this); // 用于绘制的设备上下文
  CRect rcClient;
  GetClientRect(&rcClient);
  //构造内存DC,用于画图
  CDC m_MemDC;
  m_MemDC.CreateCompatibleDC(&dc);
  CBitmap btScreen;
  btScreen.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height());
  m_MemDC.SelectObject(&btScreen);
  btScreen.DeleteObject();
  //这里画图
  ...
  //创建不规则窗体
  ChangeWindowRgn(&m_MemDC);//这里面调用了SetWindowRgn
  //画到显示器上
  dc.BitBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), &m_MemDC, 0, 0, SRCCOPY);
  m_MemDC.DeleteDC();
 }
}
void C**Dlg::ChangeWindowRgn(CDC *pDC)
{
 COLORREF col = RGB(255,0,255);
 CRect rcClient;
 GetClientRect (rcClient);
 CRgn rgn;
 rgn.CreateRectRgn (0, 0, rcClient.Width(), rcClient.Height());
 ...
 SetWindowRgn (rgn, TRUE);
}

2、在void C**Dlg::OnShowWindow()里调用SetWindowRgn, 如下:

1 2  下一页

Tags:QQ 界面 编程

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