zoukankan      html  css  js  c++  java
  • 自绘对话框基类

    所有的对话框都是基于CDialog的,也就都具有CDialog的特征,本文以CDialog为基类派生一个新的类CSkinDialogBase,只需将基于CDialog的对话框中CDialog替换成CSkinDialogBase,则可具有自绘DLG的特征.

    下面例子是自己重绘了非客户区及客户区底色完成的一个圆角Dialog的基类,直接上图:

    实现步骤:

    1.派生自CDialog的类CSkinDialogBase,这时系统会自动生成一个DLG资源,把enum { IDD = ...};删除掉,重载CSkinDialogBase的构造函数:

    记得把原来默认的构造函数删除掉

    2.在OnNcCalcSize中定义非客户区边框的size,这里用到的绘制边框的图片都是6*5的,所以设置如下:

    3.在OnNcHitTest中设置CAPTION的size,将客户区一部分映射为非客户区,以便拖动。

    4.将客户区颜色刷为和非客户区绘制一样的颜色,这里为RGB(240,240,240),有两种实现方式,在OnEraseBkgnd中和在OnCtlColor均可实现

     5.绘制非客户区,这里必须用CWindowDC来绘制

    至此,完成,调用方法很简单:对任意以CDialog为基类的对话框,将CDialog用CSkinDialogBase替换,即可变成上图所示的对话框形状(请将边框设为none)。

    本人小菜,随手写的,很多不周,请多指点,3Q。

    ===》示例源代码下载

  • 相关阅读:
    阶乘
    资金账号,手机号等中间添加*(星号),脱敏
    对象深拷贝
    前端简易服务器
    Codeforces Round #603 (Div. 2) C. Everyone is a Winner! (数学)
    Codeforces Round #603 (Div. 2) B. PIN Codes
    Codeforces Round #603 (Div. 2) A. Sweet Problem(数学)
    Codeforces Round #605 (Div. 3) E. Nearest Opposite Parity(最短路)
    Codeforces Round #605 (Div. 3) D. Remove One Element(DP)
    Codeforces Round #605 (Div. 3) C. Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693667.html
Copyright © 2011-2022 走看看