![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
こんばんは。
すんません、迂闊でした。スタティックコントロールはマウスメッセージを受け取らないので、
http://ray.sakura.ne.jp/tips/staticmes.html
取りあえずSS_NOTIFYのフラグを追加して、
p->Create(TEXT("test"), WS_CHILD | WS_VISIBLE | SS_NOTIFY | SS_BITMAP | SS_CENTERIMAGE, CRect(pt.x, pt.y, pt.x + WIDTH, pt.y + WIDTH), this);
外側(ダイアログ側)からどうにかしないといけません。
派生クラスを作成する意味は無いかもしれません。
No.2
- 回答日時:
こんばんは。
取りあえずD&Dは後回しにして、画像を読み込みながらピクチャーボックスを並べて行く事を優先しましょう。
更にD&Dへ対応する為にCStaticの派生クラスを作成しておきます。
「MFCクラスの追加」
http://msdn.microsoft.com/ja-jp/library/1zb9t6z7 …
大体こんな感じです。以下参考程度に。
//ヘッダに置く
//CStaticから派生したCPictureのヘッダ
#include"picture.h"
//typedefで型の修正を容易にしておく
typedef CMap<CPicture*, CPicture*, CPicture*, CPicture*> Map;
Map m_map;
//自前のメンバ関数
CPicture* CMFCDlg::LoadPicture(const CString& sFileName)
{
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, sFileName.GetString(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if(hBitmap == NULL)return NULL;
//64x64,5個毎に改行
const int WIDTH = 64;
const int COLUMN = 5;
const POINT pt = {(m_map.GetCount() % COLUMN) * WIDTH, (m_map.GetCount() / COLUMN) * WIDTH};
CPicture* p = new CPicture();
p->Create(TEXT("test"), WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE, CRect(pt.x, pt.y, pt.x + WIDTH, pt.y + WIDTH), this);
p->SetBitmap(hBitmap);
m_map[p] = p;
return p;
}
//始末
void CMFCDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: ここにメッセージ ハンドラ コードを追加します。
POSITION pos = m_map.GetStartPosition();
CPicture* value, *key;
while(pos != NULL)
{
m_map.GetNextAssoc(pos, key, value);
HBITMAP hBitmap = value->SetBitmap(NULL);
if(hBitmap)
::DeleteObject(hBitmap);
delete value;
}
m_map.RemoveAll();
}
//ボタン
void CMFCDlg::OnBnClickedButton1()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
CStringArray sFiles;
sFiles.Add(TEXT("test1.bmp"));
sFiles.Add(TEXT("test2.bmp"));
sFiles.Add(TEXT("test3.bmp"));
for(int i = 0; i < sFiles.GetCount(); ++i)
{
CPicture* p = this->LoadPicture(sFiles[i]);
_ASSERT(p);
}
}
No.1
- 回答日時:
何を知りたいのか、質問の意味がよく分からないのですが……
ダイアログエディタでピクチャーボックスを貼り付けたウインドウを複数起動したいということでしょうか。
言うまでもなく、DoModalで呼び出すモーダルダイアログは作れません。(1個作ったら、それを閉じるまで次を作れないですからね)
この場合、CreateWindowを使ってモードレスダイアログとして作ることになります。ま、あとはクラスで定義しておけば幾つ出すのもオブジェクトを作るだけですが。作ったオブジェクトは配列で管理するということも言うまでもないですね。
モードレスダイアログの場合は終了処理に気を付ける必要があります。
> そのピクチャボックスはドラッグ&ドロップで移動できるようにもしたいです。
これも意味が分からないのですが、モードレスダイアログの移動なら普通のウインドウと同じように移動出来ますけど。(それとも、中身の画像をドラッグ&ドロップで移し替えるってことなのかな?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ドライブ・ストレージ PCを操作すると重いです 3 2022/04/29 21:57
- Excel(エクセル) [スライサー]に関して、 1 2022/05/24 21:07
- Windows 10 タスクバー上に表示されたアドレス・ボックス? 1 2023/04/30 17:37
- Windows 10 windowsの回復ドライブや復元ポイントを使用した場合の戻る位置を教えてください。 5 2023/08/19 14:52
- PDF PDFのテキストを追加機能 1 2022/06/18 12:45
- デスクトップパソコン ハードディスク修理業者さんって、あとあと変な請求とかします? 6 2022/11/13 13:49
- Excel(エクセル) Excelでデータを抽出するに良い方法 9 2023/02/06 12:42
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- フリーソフト アイコンとして保存アプリが不調 2 2022/04/16 06:39
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
イベントにAddHandlerされてい...
-
FriendとPublicの違い。。。
-
継承を重ねた場合のコストはど...
-
IncludeではなくClassで宣言す...
-
MessageBoxを継承したい
-
【VC++】クラスの追加方法について
-
既定のコンストラクタがない?
-
Delphi2007のCheckBox.Font.Col...
-
ダイアログクラスのコントロー...
-
名前空間について
-
エディットコントロールのイベ...
-
(UWSC) 「#32770」の意味わかり...
-
C++のfriend classについて
-
変数・関数その他の命名規則
-
CMainFrameクラスの使い方
-
CEditクラスの透過について
-
VBのシステムの設計書にUMLは適...
-
WebBrowserコントロールを継承...
-
親クラスのコンストラクタは? ...
-
VC++6.0の基本的な質問(操作)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
ダイアログ表示時にチェックボ...
-
クラスのアドレスを引数として...
-
C++ protectedにアクセス不可
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
ダイアログクラスのコントロー...
-
エディットコントロールでEnter...
-
このコンパイルエラーの意味に...
-
CMainFrameクラスの使い方
-
イベントにAddHandlerされてい...
-
MFC モードレスDlgについて
-
MFCのCListCtrlでスクロールを検出
-
privateなメンバ関数をテストす...
-
[MFC] CWnd::MessageBoxの警告...
-
継承を重ねた場合のコストはど...
-
DataGridViewのセルに斜線を引...
-
ボタンのオーナードローについて
おすすめ情報