在主页上看到有关有句柄窗口和无句柄窗口的讨论,本来想直接在回复里面问这个问题的,但是希望能让跟多人解答下这个问题,就单独开了一个贴。图如下:上面那张图片上的UI不是方的,它的实现是直接写显存还是在创建win32窗口的时候用了CreateDC("Display",NULL,NULL,NULL)这个函数实现非规则形状窗口,还是其他方法?
解决方案 »
- 关于定制CFileDialog中的工具条该如何编辑?
- videorender把图像宽度加大了
- MFC用CDatabase,CRecordset类编程时提示“无效的游标状态”,一般是怎么回事?
- 如何创建画刷? vc api 如何用画刷填充制定区域
- 如何分割窗口
- 如何让cpropertysheet显示出来后,对里面的每个page都已经create?
- 如何在vc++ (win32 application项目中)把图片插入到word中?(急!)
- 三次样条插值算法 vc
- 某个消息在同一时刻被发送了5次, 这个消息的接收函数是 启动5个不同副本的还是只启动一个?
- MFC下线程唤醒问题
- 多线程浏览器内存泄露
- 求助,mfc中文档读入和显示之间的联系
SetWindowRgn
函数!
if(point.y>=0 && point.y<=30)
{
SendMessage(WM_NCLBUTTONDOWN,HTCAPTION,0);
}
如上:可以在该指定的范围内移动窗口!
http://hi.baidu.com/jenfmo/blog/item/1add55388b6288f1b211c7c3.html
还有这个
http://www.anqn.com/dev/vc/2009-06-12/a09111475.shtml
CRgn rgnWnd,rgnTemp;
rgnWnd.CreateRectRgn(0,0,rectWnd.Width(),rectWnd.Height());
int nWidth,nHeight;
COLORREF color;
//下面的两层循环为检查背景位图象素颜色,进行透明区域处理;
//当象素颜色为指定的透明值时,即将该点从区域中剪裁掉。
for (nWidth = 0;nWidth <= rectWnd.Width()-1;nWidth++)
{
for (nHeight = 0;nHeight <= rectWnd.Height();nHeight++)
{
color = memDC.GetPixel(nWidth,nHeight);
// 当象素是白色时,去掉该点
if (color == RGB(255,255,255))
{
//象素颜色为指定的透明色,创建透明"微区域"
rgnTemp.CreateRectRgn(nWidth,nHeight,nWidth+1,nHeight+1);
//"扣像",从完整的区域中"扣除"透明的"微区域"
rgnWnd.CombineRgn(&rgnWnd,&rgnTemp,RGN_XOR);
//删除刚创建的透明"微区域",释放系统资源
rgnTemp.DeleteObject();
}
}
}
memDC.SelectObject(pOldBitmap);
SetWindowRgn((HRGN)rgnWnd,TRUE); //用最终设定窗口的显示区域为指定区域
上面的代码可以根据位图形成复杂形状的区域。