关于消息的问题

gfh21cn 2003-07-01 05:38:37
我在弹出菜单中有一项为拷贝快捷键设置为ctrl-c
把Treeview的弹出菜单设置为该菜单,就是让用户在按下CTRL-C的时候处理一些自己的东西。

现在有个情况,当用户编辑TTreeview的某个节点,处于编辑状态,这个时候,如果用户按下CTRL-C的话,我想让系统作原来的处理动作

不知道该怎么办

if(TreeView1->IsEditing())
{
TreeView1->Perform(WM_COPY,NULL,NULL);
}
else
{
....
}

这样作好像不行
...全文
51 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfh21cn 2003-07-03
  • 打赏
  • 举报
回复
多谢季大哥的代码

jishiping 2003-07-02
  • 打赏
  • 举报
回复
刚刚是我弄错了。应该是这样的:
void __fastcall TForm1::Copy1Click(TObject *Sender)
{
if (TreeView1->IsEditing())
SendMessage(GetFocus(), WM_COPY, 0, 0); //执行Windows本身的Ctrl+C命令
else {
//添加你的代码
}
}
gfh21cn 2003-07-02
  • 打赏
  • 举报
回复
CTRL-C是拷贝的命令,把编辑框中的选择的字符拷贝到剪贴板上。
因为我在这个函数中要处理两种状态,就必须判断TreeView1->IsEditing();
我反复试,都不可以,就是把那个判断语句去掉,什么也不做,在编辑状态下按CTR-C时候都没有执行默认的拷贝动作(去执行菜单函数了)。



HWND hActiveWindow=GetFocus();
if(hActiveWindow)
{
char t_Buffer[255];
GetWindowText(hActiveWindow,t_Buffer,255);
TClipboard *t_Clipboard=Clipboard();
t_Clipboard->Open();
t_Clipboard->SetTextBuf(t_Buffer);
t_Clipboard->Close();
}

这段有问题,当用户选择了其中的一部分字符,我就无从判断(得到的是编辑框中的所有字符)。


jishiping 2003-07-02
  • 打赏
  • 举报
回复
就是说,在copy1Click中,你无需做任何判断,直接执行菜单项的代码就可以了,不要去管
TreeView是否处于编辑状态。如果判断的话,反而出错了。
jishiping 2003-07-02
  • 打赏
  • 举报
回复
我又试了一下,你不能判断 TreeView1->IsEditing(),一旦在copy1Click中执行了这句,
那么TreeView就会自动变成非编辑状态了,所以按Ctrl+C就不会粘贴剪贴簿的文字了。
hong668 2003-07-02
  • 打赏
  • 举报
回复
学习.
gfh21cn 2003-07-02
  • 打赏
  • 举报
回复
TO:jishiping(JSP 季世平)
不可以吧,为什么我这边不可以。


void __fastcall TForm1::copy1Click(TObject *Sender)
{
if(!TreeView1->IsEditing())
{
ShowMessage("ok");
}

}

我在编辑状态下,按下CTRL-C,剪贴板中的内容不是拷贝的字符。
gfh21cn 2003-07-02
  • 打赏
  • 举报
回复
我已经作出来了
因为快捷键覆盖的问题,不可能再触发原有的快捷键处理
只能自己做处理

HWND hActiveWindow=GetFocus();
if(hActiveWindow)
{
char t_Buffer[255];
GetWindowText(hActiveWindow,t_Buffer,255);
TClipboard *t_Clipboard=Clipboard();
t_Clipboard->Open();
t_Clipboard->SetTextBuf(t_Buffer);
t_Clipboard->Close();
}
jishiping 2003-07-02
  • 打赏
  • 举报
回复
刚刚试了一下,不需要做任何处理就可以啊。在我的测试程序里,当TreeView处于编辑状态
时,按Ctrl+C就是粘贴剪贴簿的文字;当TreeView没有处于编辑状态时,按Ctrl+C就是执行
PopupMenu里面的菜单命令。
ybluo 2003-07-02
  • 打赏
  • 举报
回复
我的方法不行吗:
if(!TreeView1->IsEditing()) //在非编辑状态下按照我的程序来处理
{
....
}

//在编辑状态下,按照原有的快捷键处理
//什么都不做就行了。
kingcaiyao 2003-07-02
  • 打赏
  • 举报
回复
你可以直接在程序中来处理Ctrl+C键(OnKeyDown),当用户按下CTRL+C时,你直接将当前结点的内容拷贝Clipboard,上面已经说过你按Ctrl+C时,TreeView不一定就是编辑状态,你可以先判断它是否是编辑状态。
gfh21cn 2003-07-02
  • 打赏
  • 举报
回复
可能是我的问题没有讲清楚

是这样,我想控制树的CTRL-C快捷键(通过右键菜单实现TPopupMenu,把TreeView的PopupMenu属性指向这个弹出菜单),当用户按下这个快捷键时,我把当前焦点所在的节点的附带的信息(TTreeNode::Data)放到BUFFER中,(在软件中,我同样处理了其它的几个快捷键)

但是有一点,这个快捷键在Tree中某个节点属于编辑状态的时候,把原有的那几个快捷键处理给冲掉。也就是说,我按CTRL-C,软件没有把编辑框(TTreeView)中的的字符放到剪贴板中。

我如何作才能两者兼顾(在编辑状态下,按照原有的快捷键处理,在非编辑状态下按照我的程序来处理)

if(TreeView1->IsEditing())
{
// TreeView1->Perform(WM_COPY,NULL,NULL);
}
else
{
....
}
kingcaiyao 2003-07-02
  • 打赏
  • 举报
回复
你按ctrl+c时可能已经不是编辑状态了。
FlySky01 2003-07-02
  • 打赏
  • 举报
回复
我感觉这两个根本就没有什么冲突

消息处理你尽管处理就好了 不要管哪个什么状态
所以你把你的代码delete了
应该可以


FlySky01 2003-07-02
  • 打赏
  • 举报
回复
我想让系统作原来的处理动作

是继续编辑呢 还是处理快捷键呢
ybluo 2003-07-02
  • 打赏
  • 举报
回复
在弹出菜单的Click事件中对TreeView是否正处于编辑状态进行判断,如果是则什么都不做。

//----------------------
void __fastcall TForm1::test1Click(TObject *Sender)//弹出菜单的Click事件
{
if(!TreeView1->IsEditing())
{
//ShowMessage("ok");


}
}
//---------------------------------------------------------------------------
「已注销」 2003-07-02
  • 打赏
  • 举报
回复
搬个板凳来听课
gfh21cn 2003-07-02
  • 打赏
  • 举报
回复
没人感兴趣?

我觉得应该不是难题,只是脑子一时不开窍,呵呵

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧