TL; DR我需要知道哪些字符是用Win32删除的。
基本上,我需要知道每次删除哪些字符。考虑到有三种删除方法,(退格键,删除键和右键单击>删除)我不确定我是否只是重复使用相同的代码或什么。还可以选择多个字符,以及撤消/重做选项。可能还有别的我想念的东西。
正如我上面所说,我需要知道哪些字符被删除,以及如何使用undo / redo以及如何在使用这些字符时添加或删除字符。 (如果这很容易谷歌,告诉我,我只是想到了他们,因为我一直在写这篇文章)
答案 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;
}