ダイアログバー上のドラッグリストボックスでドラッグできません – プログラミング – Home

ダイアログバー上のドラッグリストボック...
 
通知
すべてクリア

ダイアログバー上のドラッグリストボックスでドラッグできません


R
 R
(@R)
ゲスト
結合: 21年前
投稿: 48
Topic starter  

はじめまして。
Rと申します。
環境はWindowsXP(SP2) VC++2003 MFC です。

MDIアプリケーションでメインフレームにダイアログバーを付け、ダイアログバー上でド
ラッグリストボックス(CDragListBox)を使用したいのですが、そのドラッグリストボッ
クスの内容がドラッグで動いてくれません。
どなたかよい方法をご存じの方がおられましたら、お教え下さい。


引用解決済
トピックタグ
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 19年前
投稿: 192
 

VC++6.0とVC++2005でやってみましたが、普通にドラッグできましたよ。
どのようなコードを書かれていますか?


返信引用
R
 R
(@R)
ゲスト
結合: 21年前
投稿: 48
Topic starter  

kerry様

レスありがとうございます。

リソースエディタでダイアログバー(IDD_DIALOGBAR)を生成し
その上にリストボックス(IDC_LIST1)を配置しました。

私は以下のコードを書いています。
******************************************************************
CMainFrm.h
******************************************************************
class CMainFrame : public CMDIFrameWnd
{
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();

// 属性
public:
CDragListBox* m_DragListBox <----ドラッグリストへのポインタ



省略


protected: // コントロール バー用メンバ
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;

CDialogBar m_wndDlgBar;   <----ダイアログバー


};

*************************************************************
MainFrm.cpp
*************************************************************
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{


省略


  m_wndDlgBar.Create(this,IDD_DIALOGBAR,CBRS_LEFT,IDD_DIALOGBAR); <---ダイア
ログバーをクリエイト

  m_DragListBox = (CDragListBox*) m_wndDlgBar.GetDlgItem(IDC_LIST1); <--ドラ
ッグリストのポインタ取得

  m_DragListBox->AddString(aaaaaa);
  m_DragListBox->AddString(bbbbbb);
  m_DragListBox->AddString(cccccc);

return 0;
}

ドラッグリストにaaaaaa,bbbbbb,ccccccは表示できるのですが、ドラッグが出来ませ
ん。

kerryさんはどのように実装されたのでしょうか?
宜しくお願い致します。


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 19年前
投稿: 192
 

> m_DragListBox = (CDragListBox*) m_wndDlgBar.GetDlgItem(IDC_LIST1);

↑これは単にGetDlgItem()で返された一時的なCWndポインタを
CDragListBox*型にキャストしてるだけで、サブクラス化を行っている
わけではありません。
よって、ドラッグリストボックスの動作は行わず、単にリストボックス
としてしか動作しないでしょう。

以下のようにサブクラス化を行ってやれば良いかと思います。

class CMainFrame : public CMDIFrameWnd
{
CDragListBox m_dragListBox;
};

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
m_wndDlgBar.Create(this, IDD_DIALOGBAR, CBRS_LEFT, AFX_IDW_DIALOGBAR);

m_dragListBox.SubclassDlgItem(IDC_LIST1, &m_wndDlgBar);

m_dragListBox.AddString(aaaaaa);
m_dragListBox.AddString(bbbbbb);
m_dragListBox.AddString(cccccc);

return 0;
}


返信引用
R
 R
(@R)
ゲスト
結合: 21年前
投稿: 48
Topic starter  

Kerry様

さっそくのレスありがとうございます。

教えて頂いた通りにコードを書き直したのですが、プログラムを実行をするとサブクラ
ス化を行っている以下のコードでエラーダイアログが出て落ちてしまいます。
>m_dragListBox.SubclassDlgItem(IDC_LIST1, &m_wndDlgBar);

調べてみたのですが、ダイアログバーはメッセージを受け取ることが出来ないみたいで
す。(ダイアログバーは親になれない??)
そこでメインフレームでサブクラス化しようと、以下のように書き換えてみました。
>m_dragListBox.SubclassDlgItem(IDC_LIST1, this);

書き換えて実行したところこの行は通過したのですが、次のm_dragListBox.AddString
(aaaaaa);でエラーダイアログが出て落ちてしまいました。


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 19年前
投稿: 192
 

> 調べてみたのですが、ダイアログバーはメッセージを受け取ることが
> 出来ないみたいです。(ダイアログバーは親になれない??)

何のメッセージが受け取れないのですか?
親になれない、とはどういう意味ですか?

状況をもう少し正確に伝えてください。
エラーダイアログというのは具体的にどんな内容ですか?
ASSERTであればMFCのコードのどの部分で引っかかってるのか示してください。

> そこでメインフレームでサブクラス化しようと、以下のように書き換えてみました。
> >m_dragListBox.SubclassDlgItem(IDC_LIST1, this);

リストボックスはメインウィンドウに貼り付いているわけではないので、
うまくいかないのは当然です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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