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);
}

时间: 2024-11-05 14:45:48

QQ2006界面编程之鸡蛋里挑骨头的相关文章

QQ里边挑骨头:从用户心理谈QQ的设计缺憾

发短信问某君:觉得QQ有什么不好用的地方?答曰:平时只是聊天,没觉得有什么不好的.作为普通用户,QQ的设计似乎无可挑剔.这里面有两层可能的原因:其一,其设计堪称完美,无可挑剔;其二,用户已经适应了QQ自身的设计,所以感觉不出不好的地方了. 笔者的观点是,QQ的设计趋于完美,但并不是毫无缺憾;用户感觉不到QQ的缺点说明其设计已经具有很好的易用性,但是不排除其中有用户习惯的因素.本文将围绕QQ的核心功能"即时通信"探讨QQ设计的美中不足--虽然这些不足在深度用户看来不是太大的可用性问题,并

小白问一下关于c++的windows界面编程的问题

问题描述 小白问一下关于c++的windows界面编程的问题 本人刚刚开始自学windows界面编程,用的编译器是vs2012.问了同学决定从winform入手,但是刚开始就被这些头文件啊源文件啊什么的给搞晕了.本来打算今晚写出来一个程序,但是一直在纠结这个参数传递,下面先上代码,非常简单的一个程序. 解决方案 你用winforms就要按照winforms的来,首先,不同于你在学校学的那个C++,winforms有自己的程序入口,无需再写main函数. 你新建了一个窗口,直接放上去按钮.文本框(

gtk+-linux 下图形界面编程gtk_layout_new()参数的设置是怎么发挥效用的呢?

问题描述 linux 下图形界面编程gtk_layout_new()参数的设置是怎么发挥效用的呢? GtkWidget*gtk_layout_new(GtkAdjustment*hadjustment,GtkAdjustment*vhadjustment); 参数hadjustment,vadjustment设置怎么发挥影响? 下面的列子(layout里放置一个按钮)怎么没有影响 1 #include<gtk/gtk.h> 2 int main(int argc,char**argv) 3 {

C语言控制台窗口图形界面编程之八 鼠标事件

上次讲的是键盘事件,这次我们介绍鼠标事件.下面先介绍下鼠标事件的结构体以及相关信息. typedef struct _MOUSE_EVENT_RECORD //鼠标事件结构体 { COORD dwMousePosition; //当前鼠标在控制台窗口缓冲区的位置 DWORD dwButtonState; //鼠标按键的状态 DWORD dwControlKeyState; //控制键状态 DWORD dwEventFlags; //鼠标事件类型 } MOUSE_EVENT_RECORD; /*

C语言控制台窗口图形界面编程之七 键盘事件

输入事件中的键盘事件通常有字符事件和按键事件,这些事件的附带信息构成了键盘输入的信息,而想要读取这些信息,是要通过API函数ReadConsoleInput来获取的,函数原型如下: BOOL ReadConsoleInput( //读取输入信息 HANDLE hConsoleInput, //句柄 PINPUT_RECORD lpBuffer, //输入事件结构体的指针 DWORD nLength, //要读取的记录数 LPDWORD lpNumberOfEventsRead //用来接受成功读

C语言控制台窗口图形界面编程之六 光标操作

控制台窗口的光标的位置反映的是当前文本输入的插入位置,通过Windows API函数我们可以随意更改光标的位置,下面介绍这个控制光标位置的API函 BOOL SetConsoleCursorPosition( //设置光标位置 HANDLE hConsoleOutput, //句柄 COORD dwCursorPosition //坐标 ); //若函数调用成功则返回非0值 不仅仅是光标的位置,光标的信息我们也可以通过一些API函数来设置,下面介绍光标信息结构体已经获得和设置光标信息的API函数

C语言控制台窗口图形界面编程之五 控制文本移动的函数

控制文本的移动是控制台窗口界面编程的一个很重要的功能,有了这个功能我们可以实现界面的滚动.下面我们介绍一个控制文本移动的函数,如下: BOOL ScrollConsoleScreenBuffer( //文本移动函数 HANDLE hConsoleOutput, //句柄 const SMALL_RECT *lpScrollRectangle, //移动区域 const SMALL_RECT *lpClipRectangle, //裁剪区域,如果为NULL,那么将代表整个屏幕缓冲区 COORD d

C语言控制台窗口图形界面编程之四 常用的文本输出函数

文本颜色属性已经学会了,那么下面就学习几个比较常用的文本输出函数,如下: BOOL FillConsoleOutputAttribute( // 填充字符属性 HANDLE hConsoleOutput, // 句柄 WORD wAttribute, // 文本属性 DWORD nLength, // 个数 COORD dwWriteCoord, // 开始位置 LPDWORD lpNumberOfAttrsWritten // 返回填充的个数 ); BOOL FillConsoleOutput

C语言控制台窗口图形界面编程之三 设置文本属性的函数

在这里介绍一个设置文本属性的函数,原型如下 BOOL SetConsoleTextAttribute( // 设置WriteConsole等函数的字符属性 HANDLE hConsoleOutput, // 句柄 WORD wAttributes // 文本属性 ); 本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/C/ 顺便提一下文本属性,其实就是颜色属性,有背景色和前景色(就是字符的颜色)两类,每一类只提供