您的位置:首页 > 编程语言 > VB

1000的阶乘的处理

2004-07-20 19:41 447 查看
参见:http://www.vccode.com/file_show.php?id=2226

以前我自己也做过类似的程序,原理与此相同,所不同的是我的每个数组元素间的进制是10,而这个程序用1,000,000做进制,好!!

 

下面是初级的讨论,不要见笑,我不太懂MFC。

我想使得这个程序在文本框中敲回车与按下按钮作用相同。这个很自然的想法。按照VB的思路,我找到此文本框的可用事件,根本没有onkeypress之类的东西。心想:这么基本的东西都不会,岂不太那啥了。

找到半天材料,才知道有两条路可走:
1、重写OnOK(),因为在当前窗体上在任何文本框(?有个别例外)上按下回车时都会执行这个方法。因为这个例子中只有一个能接收回车的文本框,自然可直接调用方法即可。但如果有多个呢,用什么区分呢?答案是:GetFocus()会返回当前的焦点元素,做判别就行了,代码:

void CBigDateDlg::OnOK()

{

    if (GetFocus() == GetDlgItem(IDC_VALUE))

        this->OnCalculate();

}
2、上一个方法不通用,所以不推荐使用,最好用下面的方法:重写PreTranslateMessage(MSG* pMsg)!! 不再表述,代码如下:

BOOL CBigDateDlg::PreTranslateMessage(MSG* pMsg)

{

 // 处理IDC_VALUE的消息

 if (pMsg->hwnd == GetDlgItem(IDC_VALUE)->GetSafeHwnd())

 {

  // 避免右键菜单

  if (pMsg->message == WM_RBUTTONUP || pMsg->message == WM_CONTEXTMENU)

   return true;

  // 考虑用户在该文本框中按回车的情况

  if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)

  {

   CWnd* aw = this->GetFocus();

   ((CEdit*)aw)->SetSel(0, -1);    // 同时,选中文本框中所有的文本,更方便于使用!!

   this->OnCalculate();

  }

 }

 return CDialog::PreTranslateMessage(pMsg);

}

 

通过这个例子,我开始有点理解消息循环的含义了。

Good luck!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc vb