回复
CDialog aboutDlg(IDD_ABOUTBOX);<BR><BR> // Create and show the dialog box<BR> int nRet = -1;<BR> nRet = aboutDlg.DoModal();<BR><BR> // Handle the return value from DoModal<BR> switch ( nRet )<BR> {<BR> case -1: <BR> AfxMessageBox("Dialog box could not be created!");<BR> break;<BR> case IDABORT:<BR> // Do something<BR> break;<BR> case <FONT color=#0066ff><b>IDOK</b></FONT>:<BR> // Do something<BR> break;<BR> case IDCANCEL:<BR> // Do something<BR> break;<BR> default:<BR> // Do something<BR> break;<BR> };<BR> 非模态对话框的OK按钮返回值?回复
根本就不用判断返回值,通过按钮消息执行操作就可以了,void OnOk();<BR>你非要求返回值做什么? 在程序对话框中未等用户输入数据,程序就直接用数据初值进行了操作,此时,在对话框中输入任何数据均不起作用.因此想用OK作为限制. 调用这个函数:if IDOK==EndDialog() ....
因为你按OK后,对话框就关闭了
还有你按cancel 后,对话框也关闭了
这时,就用 if IDCANCEL == EndDialog()....
如果还有其他按扭,造此办理.... jxncxu发表于2005-4-30 21:55:00static/image/common/back.gif在程序对话框中未等用户输入数据,程序就直接用数据初值进行了操作,此时,在对话框中输入任何数据均不起作用.因此想用OK作为限制.
<BR>...狂倒!
如果有很复杂的数据操作要处理, 我一般处理的方式是对数据的操作和用对话框取得数据的操作做成分开的两个过程, 也就是对话框只管用户输入和显示计算结果, 计算的过程另外做.
如果只是想要简单的对话框内容实时响应用户输入显示变化, 用xxxOnChange / OnSetFocus / OnKillFocus之类的函数操作就行了, 不用死盯着OK和CANCEL两个按钮, 要是只有按按钮才能激发事件, 对话框还用个什么意思啊..
如果有很复杂的数据操作要处理, 我一般处理的方式是对数据的操作和用对话框取得数据的操作做成分开的两个过程, 也就是对话框只管用户输入和显示计算结果, 计算的过程另外做.
你说的对,我正是将输入数据与计算功能分开处理。但计算程序通过实参(对话框获取)、形参形式进行传递,此时对话框刚显示,还未等数据输入,程序序利用初值进行计算了。 调用这个函数:
if IDOK==EndDialog() ....
因为你按OK后,对话框就关闭了
还有你按cancel 后,对话框也关闭了
这时,就用 if IDCANCEL == EndDialog()....
如果还有其他按扭,造此办理....
试一试 本帖最后由 作者 于 2005-5-9 15:41:12 编辑 <br /><br /> ...我其实还是不太明白, 难道你的计算程序不是一个单独的函数么?..什么时候要计算就呼叫函数啊, 应该是你控制参数的传递(比如, 一个计算最大公约数的函数gcd(int a, int b), 你的参数应该是两个数字*而已*. 对话框程序获取两个输入, *然后*再把这两个输入传递给gcd函数; 如果用命令行, 同样可以获得两个数字输入然后使用gcd. 计算函数本身*不用知道*自己的参数是从哪一个对话框怎么获得的). 如果你的对话框在初始化时就自动计算了, 难道你在constructor或者initdialog里就叫了计算的功能? 再来, 如果除了等对话框关闭返回ok之外你没有办法控制对计算过程的呼叫, 那这个计算功能怎么能叫'分开处理'呢?
<BR>我不知道你想要的效果是对话框关闭才计算还是用户输入的时候就随时计算, 但界面控制的基本思路应该是一样的:
<BR>void c::on()<BR>{<BR> calcuation(;
// 参数可以是对话框内部的变量, 也可以是其它的变量<BR>}
void calcuation ()<BR>{<BR> // do the calculation<BR>} // 这个计算过程可以是全局函数, 也可以属于对话框 void Dwgbox()<BR>{<BR>............................
// TODO: Implement the command
DwgboxDlg *Dlg;<BR>
<FONT face="宋体, MS Song">Dlg = new CBoundAngle(acedGetAcadFrame()); <BR>Dlg->Create(IDD_DIALOG10 );</FONT>
<SPAN lang=EN-US style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 9.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Dlg->ShowWindow(SW_SHOW);</SPAN>
<BR> TK title;//tk class<BR> title.chartframe(Dlg.m_fTKwidth,Dlg.m_fTKhight,Dlg.m_fTKscale,Dlg.m_nTKsize,Dlg.m_bEnableTKtb,Dlg.m_bEnableTKhq,Dlg.m_nTKHorVer,Dlg.m_nTKratio);<BR><BR>}//参数为对话框输入.
其结果就是在显示对话框的同时,未等你输入任何数据,程序已经用初值进行了操作.