リストビューのラベル上でCtrl+CやCtrl+Vを実行したい – プログラミング – Home

リストビューのラベル上でCtrl+Cや...
 
通知
すべてクリア

リストビューのラベル上でCtrl+CやCtrl+Vを実行したい


ぷらす
 ぷらす
(@ぷらす)
ゲスト
結合: 15年前
投稿: 4
Topic starter  

開発環境
Win XP Pro SP3
VC++ 2005 MFC

SDIでViewをCListViewにして、下記のスタイルにしています。
1.LVS_OWNERDATA を追加して仮想リストビューに
2.LVS_EDITLABELS を追加してラベルを編集可能に

ラベルを編集状態にすると、エディットボックスのような
見た目や動作になりますが、ここでキーボードから
下記の作業を行いたいのです。

Ctrl + C で選択しているテキストをコピー
Ctrl + V で貼り付け

Ctrl+C,Ctrl+V自体は下記のようにしてPreTranslateMessageで
検知することは出来たのですが、選択されている文字列のみのコピーや
貼り付けの方法がわかりません。

BOOL CtestView::PreTranslateMessage(MSG* pMsg)
{
CListCtrl &listCtrl = GetListCtrl();

if (pMsg->message == WM_KEYDOWN){

switch(pMsg->wParam){
case 'C':
if (::GetAsyncKeyState(VK_CONTROL)) {

}
break;
case 'V':
if (::GetAsyncKeyState(VK_CONTROL)) {

}
break;
}
}
return CListView::PreTranslateMessage(pMsg);
}

よろしくお願い致します。


引用解決済
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

できませんでしたっけ・・・。

キーボードメッセージを監視する方法はやや遠回りかもしれません。
表示されるEditをサブクラス化して、サブクラスエディット(=仮にSubClass_Edit)
に機能を追加するのが良いかもしれません。
SubClass_Editのメッセージマップに

BEGIN_MESSAGE_MAP( SubClass_Edit, CEdit)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
END_MESSAGE_MAP()

を追加、実体は以下の通り

class
SubClass_Edit
: public CEdit
{

public:
OnEditCopy(){ Copy();}
OnEditPaste(){ Paste();}
SubclassEditWindow( ex_hWnd){CEdit::SubclassWindow( ex_hWnd)}
};

サブクラス化タイミングはリストビューのOnClickで
LISTCTRL::OnNMClick(
NMHDR * pNMHDR,
LRESULT * pResult)
{
NMLISTVIEW *pNMListView = ( NMLISTVIEW *)pNMHDR;
CEdit * edit = m_pListCtrl->EditLabel( pNMListView->iItem);
m_SubClassEdit.SubclassEditWindow(edit->m_hWnd);
}

てな感じでど~でしょう。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

いかん(vv;)。
LISTCTRL::OnLvnEndlabeledit()でサブクラス化の解除をしなければ
いけませんでした。詳細は自分で調べてください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました