座標


ユウ  2002-12-24 01:32:54  No: 50871  IP: [192.*.*.*]

ダイアログの中にピクチャボックスがあります。256×256です。
その1番左上の座標を(0.0)にしたいです
どうすればいいでしょうか?
今、1応、(0.0)なんですが、ダイアログの中のピクチャボックスの配置を変更するとまた設定しなければならないので、つねに左上の座標が(0.0)にいくようにしたいです

編集 削除
Wanderer  2002-12-24 18:23:49  No: 50872  IP: [192.*.*.*]

MFCを使っているのなら、OnInitialDialog()の中で、ピクチャボックスの座標を(0, 0)に設定すればいいのではないでしょうか。

編集 削除
ユウ  2002-12-25 07:02:28  No: 50873  IP: [192.*.*.*]

SDIを使ってます・・・

編集 削除
YuO  2002-12-25 07:42:05  No: 50874  IP: [192.*.*.*]

SDI(=Single Document Interface)を使っている,と言われても……。
MFCを使おうが使うまいが,SDIであるプログラムは作れますよ。

編集 削除
Wanderer  2002-12-25 08:45:50  No: 50875  IP: [192.*.*.*]

ごめんなさい書き間違えていました。OnInitDialog()でした。

ちなみにこの雰囲気からするとユウさんはMFCを使っていると思われます。
試してみてください。

編集 削除
ユウ  2002-12-26 13:24:42  No: 50876  IP: [192.*.*.*]

どういった形にすればよろしいのでしょうか?
OnInitDialog()というものがないのですが・・

編集 削除
Wanderer  2002-12-26 20:06:07  No: 50877  IP: [192.*.*.*]

メッセージハンドラの追加方法はわかりますか?

クラスビューのダイアログクラス上で右クリックすると出るメニューに
ありますが、そこでWM_INITDIALOGを選択してハンドラを追加してくださ
い。そうしたら OnInitDialog()が出てきます。

その中でピクチャボックスのオブジェクトに対してMoveWindow(0, 0, 256,
 256)とでもすれば問題ないかと思います。

編集 削除
ユウ  2002-12-27 14:06:45  No: 50878  IP: [192.*.*.*]

WM_INITDIALOGというんがないんですけど。すいません

編集 削除
ゆう  2002-12-27 17:53:03  No: 50879  IP: [192.*.*.*]

BOOL CAboutDlg::OnInitDialog() 
{
  CDialog::OnInitDialog();
  
  MoveWindow(IDC_FIGURE, 0, 0, 256, 256);
  
   TODO: return TRUE; 
 }
ここまでできたんですが、まだ座標がさだまりません
どうしたらいいのでしょうか?

編集 削除
cc  2002-12-27 19:34:41  No: 50880  IP: [192.*.*.*]

引数がめちゃくちゃです。
とりあえずMSDNでMoveWindowを調べてください・・・

編集 削除
Wanderer  2002-12-27 19:43:20  No: 50881  IP: [192.*.*.*]

>MoveWindow(IDC_FIGURE, 0, 0, 256, 256);

MSDNを見ると、MoveWindowの関数の引数は、
MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint);
となっていると思います。これに当てはめて考えてみてください。

(IDC_FIGURE, 0)の座標を左上として、サイズ(0, 256)の大きさのウインドウに変更することになります。また、単にMoveWindowとしただけでは、変化するのは自分自身(この場合はCAboutDlg)になります。SDKの方のMoveWindowを見られたのかもしれませんが、引数の数が一致していません。

VCをほとんど理解されていないような気がしますので、一度入門書等を読まれた方がよろしいかと思います。なお、以下のようにすると動作しますが、手順を記憶するのではなく、MSDN等を参照しながらきちんと意味を理解するようにしてくださいね。


コントロールへの一時的なポインタを取得するために GetDlgItem()を
使用します。

CWnd* pWnd = GetDlgItem(IDC_FIGURE);

移動するのはコントロールですから、コントロールのポインタに対して
MoveWindowを実行します。

pWnd->MoveWindow(0, 0, 256, 256);

編集 削除