用C语言编写windows窗体程序,怎么创建按钮以及怎么添加按钮的触发事件啊

用C语言编写windows窗体程序,怎么创建按钮以及怎么添加按钮的触发事件啊,第1张

Windows

窗体程序是基于消息机制的,所有控件,它的本质都是一个窗体,都是使用

CreateWindows

函数来创建,不过类名,则需要指定为系统预先注册的控件类,比如,你要创建一个按钮控件,就要这样子

CreateWindows(

"BUTTON",

"按钮标题"

),CreateWindows

这个函数你应该用了不少了吧,其余的参数可以参考

MSDN,但是类名我们指定了

“BUTTON”,说明我们要创建一个按钮,每个按钮都有一个唯一的

ID,通过你的消息处理函数,可以知道哪个按钮发生了什么事件,详细讲的话,非常多,你可以参考

MSDN,或者《Windows

程序设计》这本书

1:利用配置文件保存窗体的新加信息。每次打开窗体时先检查配置文件,读出按键信息并加到页面上;每新加按钮时,同时将对应按钮信息添加到配置文件。注:按钮信息包含名称、位置坐标、响应事件等(你的例子好像只要个数就够了)。

2:可以让所有的按钮都响应同一个单击事件(如你的butClick),只是在单击事件处理过程中根据不同的按钮执行不同的 *** 作,可以通过控件的Tag属性传递相关信息。如string strCmd=(string)(sender as ButtonBox).Tag这里的strCmd应对你生成button时给它的额外信息。

3:第二点说了,可以都用同一个单击处理函数处理所有的按钮单击事件。我不知道处理这些事件都要做些什么,这里有三种方式可供选择,不管是哪种,都是通过string strCmd=(string)(sender as ButtonBox).Tag中的strCmd来指定,具体如下:

a.使用脚本语言,则strCmd就是脚本语言的语言特征及具体代码内容,通过执行这个代码就能实现 特定的要求。一般是逻辑运算而不参与界面 *** 作时选择脚本语言方式较好。

b.使用委托方式,通过回调函数调用,具体做法是先定义好委托,然后在响应按钮单击事件中通过反射方式很执行后期定义的函数,后期定义的函数通过回调执行相应的 *** 作。这种方法需要用到动态编译和反射等知识。

c.穷举法列举所有可能的 *** 作。通过switch判断strCmd的值执行不同的 *** 作。这个需要预先知道都有哪些 *** 作,然后把它们列举出来,对于固定的有限 *** 作,这种方式最简单。

这是一个简单计算器程序:

1)创建一个对话框的应用

2)向对话框中添加一个编辑框控件和十六个按钮

3)在头文件声明:

double m_Num //记录编辑框中的数据

BOOL m_Time //判断是否为第一次按下数字键

char m_Operator//保存运算符

4)处理数字“1”按钮的单击事件将按钮代表的数字写入编辑框中,代码:

void CCalculatorDlg::OnButton1()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE)

if(m_Time == TRUE)

{

m_Result = 0

}

m_Result = m_Result * 10 + 1

m_Time = FALSE

UpdateData(FALSE)

}

5)按照步骤4设置其他的数字按钮的单击事件

6)添加Count函数,用于计算数据,代码如下:

void CCalculatorDlg::Count()

{

UpdateData(TRUE)

switch(m_Operator)

{

case '+':

m_Num += m_Result

break

case '-':

m_Num -= m_Result

break

case '*':

m_Num *= m_Result

break

case '/':

if(m_Result == 0)

{

MessageBox("除数不能为0")

return

}

m_Num /= m_Result

break

default:

m_Num = m_Result

break

}

m_Result = m_Num

m_Time = TRUE

UpdateData(FALSE)

}

7)处理“+”,为m_Operator变量赋值。代码:

void CCalculatorDlg::OnButton13()

{

// TODO: Add your control notification handler code here

if(m_Time == FALSE)

{

Count()

}

m_Operator = '+'

}

8)按照步骤7设置其他符号按钮的单击事件

9)处理“C”按钮的单击事件,用于清空编辑框中的数据,代码

void CCalculatorDlg::OnButton11()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE)

m_Result = 0

m_Num = 0

m_Time = TRUE

m_Operator = ' '

UpdateData(FALSE)

}

以上运行结果正常,不过结果贴不上来啊,就靠自己了啊


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11637902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存