手撸一个安装包制作工具(2) --界面库

OK,开始写代码.

 

界面

先放上要做成的最终界面 (仿NSIS的安装界面):

102935_0SZ5_2319385.png

 

如果要做成这种固定模式的安装界面,其实很简单,资源里创建几个对话框(Dialog),每次下一步时切换对话框就可以了

这里为了灵活性,我直接使用了WIN32的窗口(Window)来做.

 

下面解释一下界面库:

这个ctDialog类,并没有对每个控件进行封装,仅仅是为了方便只封装了WIN32API

 

创建主面板

bool createMainDialog ( int xWidth, int xHeight ,
       COLORREF xbgColor = COLOR_GRAY, COLORREF xforeColor = COLOR_WHITE,
       RECT xforeRect = {0}, COLORREF xfontColor = COLOR_BALCK );

//这个比较容易理解, 参数: 大小,背景色(整个对话框),前景色,前景块,前景色

103057_uRj0_2319385.png

在主面板上可以创建任意的组件

这里createPart只是浅封装,它内部只是封装了CreateWindow来创建组件

HWND createPart ( string className , string windowName, DWORD partType ,
      int x , int y, int width, int height ,
      string partName , CommandCallback proc = nullptr );

 

这里有2个额外添加的参数

// 这个是组件在ctDialog类中的额外名称,操作组件时必须
// 比如设置一个自己的名字 'NextButton', 之后deletePart('NextButton')即可删除组件
//
string partName

 

// 这个是注册回调 (如点击Button时会调用这个传入的回调函数)
CommandCallback proc = nullptr

// 函数定义:
#  #define CommandCallback  function< int CALLBACK( HWND , DWORD )>

// 原理:
// 在类中使用了一个map结构来保存 <WindowID, 回调函数>,注册时保存,以便在WM_COMMAND中调用
#  map <int , CommandCallback> regCommandMap ;

 

 

然后就是对createPart进行封装后的函数:

直接调用这些就可以在主面板上创建对应的组件:

//
// 创建常用控件
// 调用时带上partName时才可以操作/删除指定的控件 
// (当然也可以使用默认的partname == "static","button"...)
//
// text
bool createText( string content, int x, int y, int width, int height,
    int isCaptionSize = 0, string partName = "static" );

// push-button
bool createbutton( string content, int x, int y, CommandCallback proc = nullptr,
    int width = 85, int height = 22, string partName = "button" );

// check-button
bool createCheckbox( string content, int x, int y, CommandCallback proc = nullptr,
    int width = 150, int height = 22, string partName = "checkbox" );

// edit
bool createEdit( int x, int y, int width, int height = 20,
    string partName = "edit", string defaultContent = "", DWORD partType = WS_BORDER | ES_MULTILINE );

// progress bar
bool createProgress( int x, int y, string partName = "progress",
    int defaultRange = 100, int width = 400, int height = 20 );

另外还有一些需要在WM_PAINT中画上去的组件:

// draw line
// line =>  sx,sy -> ex,ey
void drawLine( int sx, int sy, int ex, int ey, COLORREF col = RGB( 0, 0, 0 ), string partName = "line" );

// draw images(bmp)
void drawBmp( string filename, int cx, int cy, int width, int height, string partName = "bmp" );

// 他们分别在类中存在一个对应的list保存,以便在WM_PAINT中访问并且画出
// 记录所有bmpImages的信息
#  list <BmpInfo > bmpInfos;
// 记录所有LineTo的信息
#  list <LineInfo > lineInfos;

 

附上代码地址 (直接下载.h和.cpp后调用即可):

http://git.oschina.net/codetimer/ctwin32-dialog

 

 

下一篇: 手撸一个安装包制作工具(3) --向导界面

转载于:https://my.oschina.net/tasker/blog/724597

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值