Win32 - 处理退格命令?

时间:2012-03-23 04:55:32

标签: c++

TL; DR我需要知道哪些字符是用Win32删除的。

基本上,我需要知道每次删除哪些字符。考虑到有三种删除方法,(退格键,删除键和右键单击>删除)我不确定我是否只是重复使用相同的代码或什么。还可以选择多个字符,以及撤消/重做选项。可能还有别的我想念的东西。

正如我上面所说,我需要知道哪些字符被删除,以及如何使用undo / redo以及如何在使用这些字符时添加或删除字符。 (如果这很容易谷歌,告诉我,我只是想到了他们,因为我一直在写这篇文章)

1 个答案:

答案 0 :(得分:1)

你到底在说什么? win32默认控制窗口?你可以将它们子类化来做那个...... http://msdn.microsoft.com/en-us/library/bb773183%28v=vs.85%29.aspx

好吧,如果你想出具体的代码并且不知道该怎么做,那就问问一下是否有人可以帮助你。

关于撤销/重做,我认为这一切都取决于焦点区域的大小,而且我不确定MS是如何为Word,或Excel等做的。

但是对于简短的东西,我上面发布的内容应该是普遍意义上的,但显然不是你的情况。

尽管如此,如果有人想缩短上面的迭代次数,他们可以通过在较短字符串末尾开始替换上面的循环,就像这样 -

for(int i = iLen2, x=0; i < iLen1; i++, x++)
 szAnswer[x]=str1[i];

这简单地将交互限制在缺少的字符上。

这是一个小型的Win32控制台应用程序,它将演示一种非常简单的方法来确定哪些字符已被删除。您可以轻松地将其调整为Win32应用程序,向其添加迭代,等等

#include <iostream>
#include <string>

using namespace std;

#ifndef MAX_PATH
#define MAX_PATH 256
#endif

int main()
{
       int iLen1, iLen2, iResult;
       char str1[]="The old red box.";
       char str2[]="The old red";
       char szAnswer[MAX_PATH]="";

       // strcmp() will be greather than 0
       // if str1 is longer than str2
       if(strcmp(str1, str2) > 0)
       {
    iLen1=strlen(str1);
    iLen2=strlen(str2);
    iResult=iLen1-iLen2;

    cout << "The number of missing characters is " << iResult << endl << endl;

    // now lets see which characters are missing
    // we iterate through the entire length
    // of str1, which is the full text, but
    // we only start puting characters into our
    // result when we get to the end of str2
    for(int i=0, x=0; i < iLen1; i++)
    {
                    if(i >= iLen2)
        {
            szAnswer[x++]=str1[i];
        }
    }

       cout << endl << "The missing characters are --" << endl << endl << szAnswer << endl << endl;
      }

      return 0;
}