vc自画窗体 黑边去除
来源:互联网 发布:黑马程序员 c 课件 编辑:程序博客网 时间:2024/05/01 13:22
貌似无论怎么设置,窗体总有一条黑边
暂时没找到办法能去除这条黑边
通过WM_NC_CALCSIZE可以看到客户区比窗口区域缩了1个像素
这样就会导致自画窗口边缘1个像素的内容很随机凌乱
可以做几件事儿:
1,在WM_NCPAINT中
case WM_NCPAINT: { HDC hDC = ::GetWindowDC(m_hWnd); if(hDC != NULL) { RECT rtWnd = {0}, rtClient = {0}; ::GetWindowRect(m_hWnd, &rtWnd); ::GetClientRect(m_hWnd, &rtClient); ::ClientToScreen(m_hWnd, (LPPOINT)&rtClient); ::ClientToScreen(m_hWnd, ((LPPOINT)&rtClient)+1); ::OffsetRect(&rtClient, -rtWnd.left, -rtWnd.top); HRGN hRgn = ::CreateRectRgn(rtClient.left, rtClient.top, rtClient.right, rtClient.bottom); ::ExtSelectClipRgn(hDC, hRgn, RGN_DIFF); ::DeleteObject(hRgn); hRgn = NULL; rtWnd.right = rtWnd.right - rtWnd.left; rtWnd.left = 0; rtWnd.bottom = rtWnd.bottom - rtWnd.top; rtWnd.top = 0; ::FillRect(hDC, &rtWnd, m_hBrushBg); ::ReleaseDC(m_hWnd, hDC); hDC = NULL; } return 1L; } break;
来填充那一个像素的边界,但是注意要把客户区排除出去,不然界面子控件容易出现问题
注意 return 1L
2.在WM_ERASEBKGND中重画背景,防止最大化最小化闪烁
case WM_ERASEBKGND: { HDC hDC = ::GetDC(m_hWnd); ::BitBlt((HDC)wParam, 0, 0, m_oMemDC.GetWidth(), m_oMemDC.GetHeight(), m_oMemDC, 0, 0, SRCCOPY); ::ReleaseDC(m_hWnd, hDC); } return 1L;
注意 return 1L
3.在WM_PAINT中注意清理屏幕后再画图。
4.如果以一个图片(例如500*345的图片)来作为背景图,因为有1个像素的NC区域,所以界面初始化的时候窗口大小应该为
SetWindowPos(NULL, 0, 0, 500 + 2, 345 + 2, SWP_NOMOVE);
貌似也可以用
AdjustWindowRectEX
函数来计算窗口大小
5.关于窗口圆角透明,还以上面图片为例
窗口初始化时候(窗口已经为无边框的样式)
SetWindowPos(NULL, 0, 0, 500 + 2, 345 + 2, SWP_NOMOVE); CenterWindow(); ::SetWindowLong(m_hWnd, GWL_EXSTYLE, WS_EX_LAYERED); ::SetLayeredWindowAttributes(m_hWnd, RGB(1,3,5), 0, 1); ::SetWindowLong(m_hWnd, GWL_STYLE, WS_VISIBLE|WS_CLIPSIBLINGS|WS_OVERLAPPED);
前面的
m_hBrushBg
为RGB(1,3,5)的画刷
WM_PAINT的时候再次调用这个画刷填充图片
PNG图片透明部分为完全透明,不能半透明
- vc自画窗体 黑边去除
- 去除dialog的黑边
- 去除自定义AlertDialog黑边
- AlertDialog去除黑边自定义布局
- android 自定义Dialog去除黑边
- 去除自定义alertdialog(dialog)黑边
- 笔记107--去除自定义AlertDialog黑边
- 去除图像旋转黑边现象
- 自定义dialog并且去除黑边
- [ArcPy] 去除遥感影像黑边
- 遥感影像镶嵌-黑边去除-无效区域去除方法
- VC画不规则窗体
- vc 主窗体边框和子窗体的去除3D效果
- cmd去除黑窗口
- 全黑图像去除
- VC 实现 自绘 窗体 标题栏 非客户区
- VC 实现 自绘 窗体 标题栏 非客户区
- VC 实现自绘 窗体 标题栏 非客户区
- C/S应用程序中进行HTTP登录,获取相应的资料。
- 算法感悟
- 清华大学韩顺平讲师讲算法之三(下),环链表创建与删除
- 华为交换机注释零-视图切换
- 程序以及体会
- vc自画窗体 黑边去除
- 8中食物抗衰老
- 巴黎雨季的伤感空间日志发布:喜欢在两个完全不同的世界
- oracle 11g 学习笔记 2012_10_25(a)
- omapdss DISPC error: timeout waiting for EVSYNC
- 判断链表中环的存在
- 我的小成就
- Java基础知识——SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系
- 我的第一次程序