明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: jxncxu

[求助]如何在应用程序中得知用户按了OK按扭?

  [复制链接]
发表于 2005-4-30 09:18:00 | 显示全部楼层

回复

CDialog aboutDlg(IDD_ABOUTBOX);

// Create and show the dialog box
int nRet = -1;
nRet = aboutDlg.DoModal();

// Handle the return value from DoModal
switch ( nRet )
{
case -1:
AfxMessageBox("Dialog box could not be created!");
break;
case IDABORT:
// Do something
break;
case IDOK:
// Do something
break;
case IDCANCEL:
// Do something
break;
default:
// Do something
break;
};
 楼主| 发表于 2005-4-30 17:57:00 | 显示全部楼层
非模态对话框的OK按钮返回值?
发表于 2005-4-30 19:41:00 | 显示全部楼层

回复

根本就不用判断返回值,通过按钮消息执行操作就可以了,void OnOk();
你非要求返回值做什么?
 楼主| 发表于 2005-4-30 21:55:00 | 显示全部楼层
在程序对话框中未等用户输入数据,程序就直接用数据初值进行了操作,此时,在对话框中输入任何数据均不起作用.因此想用OK作为限制.
发表于 2005-5-4 14:54:00 | 显示全部楼层
调用这个函数:


        if         IDOK==EndDialog() ....


因为你按OK后,对话框就关闭了


还有你按cancel 后,对话框也关闭了


这时,就用 if IDCANCEL == EndDialog()....


如果还有其他按扭,造此办理....
发表于 2005-5-5 12:01:00 | 显示全部楼层
jxncxu发表于2005-4-30 21:55:00在程序对话框中未等用户输入数据,程序就直接用数据初值进行了操作,此时,在对话框中输入任何数据均不起作用.因此想用OK作为限制.

...狂倒! 如果有很复杂的数据操作要处理, 我一般处理的方式是对数据的操作和用对话框取得数据的操作做成分开的两个过程, 也就是对话框只管用户输入和显示计算结果, 计算的过程另外做. 如果只是想要简单的对话框内容实时响应用户输入显示变化, 用xxxOnChange / OnSetFocus / OnKillFocus之类的函数操作就行了, 不用死盯着OK和CANCEL两个按钮, 要是只有按按钮才能激发事件, 对话框还用个什么意思啊..
 楼主| 发表于 2005-5-6 18:08:00 | 显示全部楼层

如果有很复杂的数据操作要处理, 我一般处理的方式是对数据的操作和用对话框取得数据的操作做成分开的两个过程, 也就是对话框只管用户输入和显示计算结果, 计算的过程另外做.


你说的对,我正是将输入数据与计算功能分开处理。但计算程序通过实参(对话框获取)、形参形式进行传递,此时对话框刚显示,还未等数据输入,程序序利用初值进行计算了。
 楼主| 发表于 2005-5-6 18:12:00 | 显示全部楼层
调用这个函数:



        if         IDOK==EndDialog() ....


因为你按OK后,对话框就关闭了


还有你按cancel 后,对话框也关闭了


这时,就用 if IDCANCEL == EndDialog()....


如果还有其他按扭,造此办理....


试一试
发表于 2005-5-9 10:51:00 | 显示全部楼层
本帖最后由 作者 于 2005-5-9 15:41:12 编辑

...我其实还是不太明白, 难道你的计算程序不是一个单独的函数么?..什么时候要计算就呼叫函数啊, 应该是你控制参数的传递(比如, 一个计算最大公约数的函数gcd(int a, int b), 你的参数应该是两个数字*而已*. 对话框程序获取两个输入, *然后*再把这两个输入传递给gcd函数; 如果用命令行, 同样可以获得两个数字输入然后使用gcd. 计算函数本身*不用知道*自己的参数是从哪一个对话框怎么获得的). 如果你的对话框在初始化时就自动计算了, 难道你在constructor或者initdialog里就叫了计算的功能? 再来, 如果除了等对话框关闭返回ok之外你没有办法控制对计算过程的呼叫, 那这个计算功能怎么能叫'分开处理'呢?
我不知道你想要的效果是对话框关闭才计算还是用户输入的时候就随时计算, 但界面控制的基本思路应该是一样的:
void c[class name]::on[event where you want to do calculation]()
{
calcuation([specify parameters here]; // 参数可以是对话框内部的变量, 也可以是其它的变量
} void calcuation ([parameters])
{
// do the calculation
} // 这个计算过程可以是全局函数, 也可以属于对话框
 楼主| 发表于 2005-5-10 02:24:00 | 显示全部楼层
void Dwgbox()
{
............................ // TODO: Implement the command DwgboxDlg *Dlg;
Dlg = new CBoundAngle(acedGetAcadFrame());
Dlg->Create(IDD_DIALOG10 );
Dlg->ShowWindow(SW_SHOW);
TK title;//tk class
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);

}//参数为对话框输入. 其结果就是在显示对话框的同时,未等你输入任何数据,程序已经用初值进行了操作.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 08:24 , Processed in 0.151326 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表