VCネタ
さて、ランチャー。
ランチャーの動きとして欲しいのは、
「ファイルをランチャーにD&Dで落としてボタンを登録」
というもの。
そのために必要なのは
1)D&Dで落としたファイルのファイル名取得
2)ボタンの動的生成
というもの。
まずはD&D。 これはダイアログのプロパティを開き、 「拡張スタイル」→「ドラッグドロップを許可」 にチェックを入れる。 そして 〜Dlg.hに // 生成されたメッセージ マップ関数 //{{AFX_MSG(CMyDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); virtual void OnOK(); virtual void OnCancel(); afx_msg void OnDropFiles(HDROP hDropInfo); ←追加 //}}AFX_MSG 〜Dlg.CPPに BEGIN_MESSAGE_MAP(CMyDlg, CDialog) //{{AFX_MSG_MAP(CMyDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_DROPFILES() ←追加 //}}AFX_MSG_MAP END_MESSAGE_MAP() さらに↓を追加。 下記の例ではszPathにドロップしたファイル名がフルパスで格納されます。 void CMyDlg::OnDropFiles(HDROP hDropInfo) { // ドロップされた内容を取得 int ncnt = 0; UINT unSize ; char szPath[_MAX_PATH+1]; while(1) { // ドロップされた内容を取得 unSize = ::DragQueryFile( hDropInfo, ncnt++, szPath, _MAX_PATH); if( unSize <= 0) { break; } } CDialog::OnDropFiles(hDropInfo); }
で。
次はボタンの動的生成。 CButton *but; ←先にメンバ変数として定義しておく。 but = new CButton(); but->Create("キャプション" ,BS_PUSHBUTTON|WS_CHILD | WS_VISIBLE ,CRect(1,30+m_nButtons*30,140,54+m_nButtons*30) ,&m_pMainTabSheet,IDC_BUTTN_1); CRect(1,30+m_nButtons*30,140,54+m_nButtons*30) これはサイズと位置を指定している。 (左端,上,右端,底) の座標を指定するのだ。 &m_pMainTabSheet は親のハンドル。ここではタブシートを使っている。 これで親ハンドルに指定したコントロールの上にボタンが生成される。 OnDestroyとかでbutをdeleteするのを忘れないように。