本文详细介绍QQ2006 界面编程之鸡蛋里挑骨头
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, 如下:
来源:VCKBASE 作者:黄锐坤 责编:豆豆技术应用
正在加载评论...
- VC/VC++按钮设计专题
- VC/VC++ 菜单专题
- VC/VC++ 工具条专题
- VC/VC++ 对话框教程
- VC/VC++ 报表教程
- VC/VC++ 控件
- VC/VC++ GDI
- Visual Studio 2008
- VC/VC++ MFC教程
- VC/VC++ QQ
- VC/VC++ Socket编程
- VC/VC++ 钩子编程
- TangramMini组件应用教程
- VC/VC++ 窗体
- VC/VC++ ADO 教程
- Windows CE 教程
- VC/VC++ DLL(动态链接库)编程
- VC/VC++ PDFlib
- VC与MATLAB编程
- VC/VC++ DirectShow 教程
- VC++入门视频教程
- VC/VC++ COM组件设计与应用
- VC/VC++ ATL
- VC/VC++ WTL
- VC/VC++ 定制调试诊断工具和程序
- VC/VC++ 进程
- VC/VC++ Win32
- VC/VC++ WMI
- VC/VC++ 消息
- 更多VC/VC++专题……