nim_duilib(4)之CheckBox

introduction

  • 更多控件用法,请参考 here 和 源码。
  • 本文的代码基于这里

xml文件添加代码

基于上一篇, 继续向basic.xml中添加下面关于CheckBox的代码。 xml完整源码在文末。

<!--checkbox-->
<VBox>
  <CheckBox class="checkbox_font12" name="checkbox1" text="checkbox1" margin="0,5,0,10" selected="true"/>
  <CheckBox class="checkbox_font12" name="checkbox2" text="checkbox2" margin="0,5,0,10"/>
  <CheckBox class="checkbox_font12" name="checkbox3" text="checkbox3" margin="0,5,0,10"/>
</VBox>

class属性来自global.xml中设置的样式,name是代码中使用该空间用的,text是控件展示的文字,margin从左到右分别是当前控件距左、上、右、下的距离,selected为true,设置为选中状态。 可以调用函数IsSelected获取是否选中。

代码中关联

BasicForm.h

  • 打开BasicForm.h,类中添加下面的代码用于关联界面控件。
// 关联3个checkbox
	ui::CheckBox	*pcb_arr_[count_3];

同时,类中再额外添加两个函数,用于监听CheckBox的选中和反选。

// checkbox点击处理函数
	bool OnCheckBoxSelected(ui::EventArgs * msg);
	bool OnCheckBoxUnSelected(ui::EventArgs * msg);

BasicForm.cpp

InitWindow函数
  • 转到BasicForm.cpp,找到 InitWindow 函数,向其增加下面的代码
void BasicForm::InitWindow()
{
  ......
	// 2.查找界面的3个checkbox控件
	//----------------------------------------------------------------------------------------
	pcb_arr_[0] = dynamic_cast<ui::CheckBox*>(FindControl(L"checkbox1"));
	pcb_arr_[1] = dynamic_cast<ui::CheckBox*>(FindControl(L"checkbox2"));
	pcb_arr_[2] = dynamic_cast<ui::CheckBox*>(FindControl(L"checkbox3"));

	for (auto item : pcb_arr_)
	{
		if (item)
		{
			// 监听选中
			item->AttachSelect(nbase::Bind(&BasicForm::OnCheckBoxSelected, this, std::placeholders::_1));
			// 监听反选
			item->AttachUnSelect(nbase::Bind(&BasicForm::OnCheckBoxUnSelected, this, std::placeholders::_1));
		}
	}
}
OnCheckBoxSelected

函数体代码如下

bool BasicForm::OnCheckBoxSelected(ui::EventArgs * msg)
{
	std::wstring str = msg->pSender->GetName() + std::wstring(L" is selected\n");
	LPCWSTR result = str.c_str();
	OutputDebugString(result);

	return false;
}
OnCheckBoxUnSelected

函数体如下

bool BasicForm::OnCheckBoxUnSelected(ui::EventArgs * msg)
{
	std::wstring str = msg->pSender->GetName() + std::wstring(L" is unselected\n");
	LPCWSTR result = str.c_str();
	OutputDebugString(result);

	return false;
}

运行结果

当选中checkbox和反选时,VS的输出对话框中将输出我们设置的监听处理结果。

xml完整源码

<?xml version="1.0" encoding="UTF-8"?>
<Window size="600,400" caption="0,0,0,35">
  <VBox bkcolor="bk_wnd_darkcolor">
    <HBox width="stretch" height="35" bkcolor="bk_wnd_lightcolor">
      <Control />
        <Button class="btn_wnd_min" name="minbtn" margin="4,6,0,0" />
        <Box width="21" margin="4,6,0,0">
          <Button class="btn_wnd_max" name="maxbtn"/>
          <Button class="btn_wnd_restore" name="restorebtn" visible="false"/>
        </Box>
      <Button class="btn_wnd_close" name="closebtn" margin="4,6,8,0"/>
    </HBox>

    <!--下面是中间的控件-->
    <VBox padding="30, 30, 30, 30" >   
      <HBox>
        <VBox>
          <!-- Buttons -->
          <Button class="btn_global_blue_80x30" name="btn_blue" text="blue" />
          <Button class="btn_global_white_80x30" name="btn_white" text="white"/>
          <Button class="btn_global_red_80x30" name="btn_red" text="red"/>
        </VBox>
        
        <!--checkbox-->
        <VBox>
          <CheckBox class="checkbox_font12" name="checkbox1" text="checkbox1" margin="0,5,0,10" selected="true"/>
          <CheckBox class="checkbox_font12" name="checkbox2" text="checkbox2" margin="0,5,0,10"/>
          <CheckBox class="checkbox_font12" name="checkbox3" text="checkbox3" margin="0,5,0,10"/>
        </VBox>

      </HBox>
    </VBox> <!--下面是中间的控件 结束-->
  </VBox>
</Window>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值