MFCのダイアログベースでプロジェクトを作成し、
実行すると雛形のダイアログが画面中央に出現しますが、
このダイアログを任意の位置に動かし、ダイアログを閉じた後、
再実行した際に、前回終了時の位置に表示させるにはどのように実装すれば良いのでしょうか?
なお、座標のデータなどは終了時にiniファイルに書き出しておき、
再起動時にそれを読み出す方法を考えています。
iniファイルへの読書きの方法については理解済みです。
お手数ですがご回答よろしくお願いします。
開発環境:VC++2005

このQ&Aに関連する最新のQ&A

A 回答 (1件)

 こんにちは。


 http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_D …

 と言う事で、

BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// "バージョン情報..." メニュー項目をシステム メニューへ追加します。

// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE);// 大きいアイコンを設定
SetIcon(m_hIcon, FALSE);// 小さいアイコンを設定

// TODO: 特別な初期化を行う時はこの場所に追加してください。
//此処で読んだ座標を指定
CRect rect(0, 0, 256, 256);
GetWindowRect(&rect);
SetWindowPos(&this->wndTop, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_SHOWWINDOW);

return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}

void CTestDlg::::OnDestroy()
{
//サイズを取る
RECT rc;
this->GetWindowRect(&rc);
//此処でiniファイルへrcを記録

CDialog::OnDestroy();

// TODO: この位置にメッセージ ハンドラ用のコードを追加してください
}

 では無いでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
上記方法で期待動作をさせることが出来ました。
参考URLまで乗せていただき、ありがとうございました。

お礼日時:2009/05/24 13:37

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q英訳(not only ~ but の挿入位置)を教えてください。

次の文を英訳したいのですが、not only, fromの挿入位置はどちらが
正しいでしょうか。または英訳は正しいでしょうか。
文法の説明も一緒に御説明いただけますでしょうか。

In this commercial, Alison, whose vivid beauty comes not only from her appearance but from within herself, shows her natural facial expressions as much as possible, in the costume she has never worn in the film.

In this commerscial, Alison, whose vivid beauty comes from not only her appearance but within herself, shows her natural facial expressions as much as possible, in the costume she has never worn in the film.

このコマーシャルに、外見だけではなく、内面から美しく輝いたアリソンが、限りなくありのままの素顔に近い表情や、これまでに見せたことのない衣装で登場します。

次の文を英訳したいのですが、not only, fromの挿入位置はどちらが
正しいでしょうか。または英訳は正しいでしょうか。
文法の説明も一緒に御説明いただけますでしょうか。

In this commercial, Alison, whose vivid beauty comes not only from her appearance but from within herself, shows her natural facial expressions as much as possible, in the costume she has never worn in the film.

In this commerscial, Alison, whose vivid beauty comes from not only her appearance but within he...続きを読む

Aベストアンサー

not only ~ but 英語的にも前者。 

within より 直前の韻から from her inside
as much as possible は少し陳腐。

shows more ....expressions/ beautiful face than ever seen before、或いは
is expressing herself as close to her mind/heart as she can.
等 としたい。

in the costume より with the costume,
worn より is dressed uo の受身が。

film なら映画であるがそれがふさわしいか?
video clip のような気もする。 

経験的、感覚的、英語によると個人的感想です.

Qダイアログのボタンが押された時に、その「ボタン」のあるダイアログと、すでに表示されている他のダイアログを消したいです

Win2000/MFC/ダイアログベース
で作業しています。初心者です(^^;)

Aというダイアログで「あるボタンa」を押してDoModalでBというダイアログを表示させ、Bダイアログで「あるボタンb」を押してDoModalでCというダイアログを表示させ、Cダイアログで「あるボタンc」を押した時にBダイアログとCダイアログを閉じたい(消したい)のですが
EndDialogで消せません
DoModalの戻り値をret_b,ret_cとした場合
EndDialog(ret_c);
EndDialog(ret_b);
としたのですが。。。

やり方がおかしいのか、よくわかりません・・
初心者でもわかりやすいお返事お待ちしています(^^;)

Aベストアンサー

各ダイアログボックスを CDialog の派生クラスとして次のように定義したとします。

CDlgA --- A というダイアログボックス
CDlgB --- B というダイアログボックス
CDlgC --- C というダイアログボックス

CDlgA のあるメンバ関数から CDlgB::DoModal() でダイアログボックス B を表示させます。 CDlgB のあるメンバ関数で EndDialog() を実行すればダイアログボックス B を閉じることができます。ここで、 CDialog::EndDialog() は引数として INT 型の値をひとつ渡すことができますが、その値が先の CDlgB::DoModal() の戻り値となります。
戻り値がある特定の値だったとき、つまり、質問の例ではダイアログボックス B で EndDialog(ret_b) が実行されたことが特定できたときに CDlgA も EndDialog() を実行すれば連鎖してダイアログボックスを閉じることができます。
ダイアログボックス C についても同様です。

実際のコーディングでは次のようになると思います。
ただし、ダイアログボックス A もモードレスで表示されていると仮定しています。



#define ret_b (-1) // 特定の値
#define ret_c (-1) // ID_OK や ID_CANCEL と重ならないように注意

...

(CDlgA の実装)

void CDlgA::OnButtonA() // あるボタン a が押されたときの処理
{
CDlgB dlg; // ダイアログボックス B

if (dlg.DoModal() == ret_b) // モードレスで表示して、戻り値をチェック
EndDialog(-1); // ダイアログボックス A を閉じる
}

...

(CDlgB の実装)

void CDlgB::OnButtonB() // あるボタン b が押されたときの処理
{
CDlgC dlg; // ダイアログボックス C

if (dlg.DoModal() == ret_c) // モードレスで表示して、戻り値をチェック
EndDialog(ret_b); // ダイアログボックス B を閉じる
}

...

(CDlgC の実装)

void CDlgC::OnButtonC() // あるボタン c が押されたときの処理
{
EndDialog(ret_c); // ダイアログボックス C を閉じる
}

各ダイアログボックスを CDialog の派生クラスとして次のように定義したとします。

CDlgA --- A というダイアログボックス
CDlgB --- B というダイアログボックス
CDlgC --- C というダイアログボックス

CDlgA のあるメンバ関数から CDlgB::DoModal() でダイアログボックス B を表示させます。 CDlgB のあるメンバ関数で EndDialog() を実行すればダイアログボックス B を閉じることができます。ここで、 CDialog::EndDialog() は引数として INT 型の値をひとつ渡すことができますが、その値...続きを読む

Q①その衛生は私達に位置を正確に教えてくれる ②沖縄に台風が近づいている ③彼らは新しいエンジンを開発

①その衛生は私達に位置を正確に教えてくれる
②沖縄に台風が近づいている
③彼らは新しいエンジンを開発している
④誰かが特効薬を見つけるまで人々はその病気を恐れるでしょう

この①~④を英訳してください!

Aベストアンサー

1. The satellite shows us the accurate position.
2. The typhoon is approaching to Okinawa.
3. They are developing a new engine.
4. People would keep fearing the disease until someone finds a silver bullet.

QMFC・ダイアログベースで、ダイアログの変更内容が反映されない・・・

初めて質問させていただきます。よろしくお願いします。

当方、VisualStdio2005内のC++2005で、
ダイアログベースにてツールを開発していました。

ある日、ダイアログ上に多くのEditコントロールを作成(追加)することになり、
ダイアログリソースをVC内のリソースエディタにて、
テキスト形式でコントロールを追加していきました。

そのときは、テキストでの変更内容がダイアログにも反映されていたのですが、
その後はダイアログにツールボックスでのコントロールの追加やサイズ変更など、
見た目には反映されてもビルド後に反映されなくなってしまいました。

クリーン後のリビルドでも、問題は解決しません。

原因と対策をご存知の方、いらっしゃいましたらご教授いただけませんでしょうか。

よろしくお願いします。

Aベストアンサー

VC2005は初心者です。VC6.0は仕事で使っていました。

私はダイアログリソースをテキスト形式でコントロールを追加したことがないので、基本的にご期待に添える回答ではないと思いますが、ご参考までに。

回答する前に質問ですが、もっと詳しい問題の状況、状態を教えていただけませんか?「ビルド後に反映」とは?実行までおこなっていない、ということですか?

以下、回答です。

ダイアログリソースとダイアログのウィンドウの関連付けは正しいですか?ダイアログIDが間違って指定されていませんか?変更対象のダイアログとビルド後の実行したダイアログが違っているなんてことがあったりします。

上記のような間違いがなければ、Editコントロールを1つだけにしてビルド&実行してみてください。それで問題があれば、Editコントロールの書き方に問題があるかも?(いや、その場合はコンパイルでエラーになるはずだけど)。問題がなければ、Editコントロールを1つずつ増やしてビルド&実行する。ある程度増やしたら、思い切って半分くらい増やしてみたりしてもいいと思います。

VC2005は初心者です。VC6.0は仕事で使っていました。

私はダイアログリソースをテキスト形式でコントロールを追加したことがないので、基本的にご期待に添える回答ではないと思いますが、ご参考までに。

回答する前に質問ですが、もっと詳しい問題の状況、状態を教えていただけませんか?「ビルド後に反映」とは?実行までおこなっていない、ということですか?

以下、回答です。

ダイアログリソースとダイアログのウィンドウの関連付けは正しいですか?ダイアログIDが間違って指定されていませんか?...続きを読む

Q修飾語句の位置

とても初歩的な質問です!!
僕は英作の問題でいつも修飾語句の位置に苦戦します!!
名詞の前に置くのか・・・・
名詞の後に置くのか・・・・

例えば、『病気の年老いた人々』を英訳する際、

『old people of sick』なのか『sick old peaple』なのか混乱します!!

どなたか、【修飾語句の位置】に関するルールみたいなものを教えてください!!お願いします!!

Aベストアンサー

Milancomです! う~ん、またまたお褒めのお言葉、かたじけない。
そのように、褒め上手なtigakuさんこそ、お若いのになかなかご優秀であられると感心いたします。

「同じ英文を何回も音読するのと、いろんな英文を一回ずつ読むのはどちらがベストなのでしょうか??やっぱ『いろんな文章を何回も読む』でしょうか??^^;笑」

確かに、よい文章をいろいろと、かつ何回も読むのが最良ではありましょう。が、一日は二十四時間、出せるエネルギーにも限界があります。

私が好きなやり方は、いろいろな文章を手当たり次第読んでみます。中には、難しすぎたり、興味が続かなくて途中でやめるものもありますが、そういうのは気にせずやめます。そんな中で、時に相性のよい文章に出会うことがありますから、これを何回も音読します。

ご参考までに!

Qダイアログを継承したダイアログの作成について

お世話になります。
今回お聞きしたいことは、
オリジナルに作成したダイアログを継承したオリジナルのダイアログを作成した際に、オリジナルに作成した基底ダイアログのダイアログ上のコントロールや、そのコントロールの位置を継承することはできますでしょうか?
ということです。
何がしたいかといいますと、4つのダイアログをメインダイアログから呼び出すのですが、その4つのダイアログには共通するコントロールがあり、そのコントロールの動作もその位置も全く同じなのです。
そのため、いちいち4つのダイアログにコントロールの貼り付けや、処理を記入せずに、その共通のコントロールをもった基底ダイアログを作成して、その基底ダイアログの継承としてダイアログが作れたらなと思い、質問させて頂きました。
継承をすると、基底クラスの関数等を使うことができるというのはわかるのですが、ダイアログ上のコントロールの位置までは不可能なのかなと疑問に思いました。
ご回答を宜しくお願い致します。

開発環境は
Windows CE 6.0
Visual Studio 2005
です。

お世話になります。
今回お聞きしたいことは、
オリジナルに作成したダイアログを継承したオリジナルのダイアログを作成した際に、オリジナルに作成した基底ダイアログのダイアログ上のコントロールや、そのコントロールの位置を継承することはできますでしょうか?
ということです。
何がしたいかといいますと、4つのダイアログをメインダイアログから呼び出すのですが、その4つのダイアログには共通するコントロールがあり、そのコントロールの動作もその位置も全く同じなのです。
そのため、いちいち4つの...続きを読む

Aベストアンサー

私、CEの経験がないので厳密なところはわからないのですが、
一般的なMFCであれば、可能です。
ただし、条件により困難さが変わります

1)4つのダイアログが全て同じコントロールのみからなる場合
  コントロールは同じだが、ラベルのキャプションが違うとか
  リストボックスのデータが違うとかいう場合です。

  非常に単純です。普通の派生と全く同じ感じです
  OnInitDialog等適当な関数をオーバーライドするだけです。

2)共通のコントロール以外に独自のコントロールも持つ場合
  多少困難です
  いくつかアプローチが考えられます。
  a) ダイアログ・テンプレートを個別に持つ方法
    リソース内のダイアログ・テンプレートは(共通のコントロールも含め)
    コピー&ペーストなどで独自に作成します(4つ作ります)
それぞれを制御するクラスですが、
    ウィザードのサポートを受けられない
    (ウィザードではCDialog派生にされてしまう)
    ので、既存のCDialog派生クラスを参照して
    自力で希望のCDialog派生からさらに派生させるようにします

    リソースIDとクラスの結びつけ方法などは既存のクラスを
    参考にしてください

  b)リソースも完全に共通化する
    ちょっと難しいかもしれません。
    OnInitDialog等で自力でコントロールをCreateします。
    レイアウトが視覚的にできないので非常に困難ですが、
    隣接するコントロールの位置情報をもとに計算するなどしてください。

    ダイアログの大きさに余裕があり、
    追加するコントロールも小さなもの
    (1行のみのエディット等)であれば、
    最初から場所をstaticコントロールで場所を確保しておき
    非表示にしておいて、
    派生クラスで、そのstaticの位置を取得するとかなり楽ができます。

    派生クラスで、本格的にレイアウトが変わってしまう場合は、
    レイアウトを頭に入れながら、Createし、試行錯誤で
    完成させることになるでしょう。


以上の方法がCEでも通じるのかわかりませんが、
参考になれば幸いです。    

   

私、CEの経験がないので厳密なところはわからないのですが、
一般的なMFCであれば、可能です。
ただし、条件により困難さが変わります

1)4つのダイアログが全て同じコントロールのみからなる場合
  コントロールは同じだが、ラベルのキャプションが違うとか
  リストボックスのデータが違うとかいう場合です。

  非常に単純です。普通の派生と全く同じ感じです
  OnInitDialog等適当な関数をオーバーライドするだけです。

2)共通のコントロール以外に独自のコントロールも持つ場合
 ...続きを読む

Qshall we now do what you want?のnowの位置

あなたが今してほしいことをしましょうか?の英訳なんですけど、
nowの位置を変更して、

1) shall we do now what you want?

2) shall we do what you want now?

3) now shall we do what you want?

にしても文法的におかしくないですか?

Aベストアンサー

1)この場所にnowは普通入れないと思います。

2)文法的にはおかしくはないのですが、この場合は、「あなたがしてほしいことを今しましょうか?」ということで、「今」がかかるものが違ってきます。

3)この場合は、
Now, shall we do what you want?
と、Nowの後にカンマを入れれば文法的におかしくないですが、やはり意味が違ってきます。この場合のNowは、「さあ、」「さて、」「では」といった呼びかけの意味が強くなり、
「では(今から)、あなたが望むことをしましょうか」という感じになります。

Q子ダイアログのデータを親ダイアログで取得するには

VC6.0にてMFCでダイアログベースアプリケーションを作成しています。

親ダイアログ(TestDlg.cpp)のメニューを選択すると、子ダイアログ(SetDlg.cpp)が開き、テキストボックスに文字を入力し、ボタン押下によりテキストボックスの入力数字を確定(グローバル変数(igStatu)に代入)しています。
子ウインドウで入力確定したデータを、親ダイアログにて使用したいのですが、データが受け渡されずに、親ダイアログ側にデータが入りません。
どのようにしたら、子ダイアログで設定したデータを親ダイアログで取得することができるのでしょうか?

C++、MFCともに全然わかっていませんがお願いします。

グローバル変数は、TestDlg.cpp、SetDlg.cppがインクルードしているTest.h内にstatic宣言しています。
static宣言しないとリンクエラー2005になってしまいます。

Aベストアンサー

Test.h内で
extern int igStatu;

TestDlg.cpp内で
int igStatu;

とすればいいのでは?
externについて調べてみてください。

参考URL:http://homepage3.nifty.com/mmgames/c_guide/20-02.html

Q副詞の位置について。

副詞の位置について質問です。
たとえば、「彼は短い髪の私の友達とたくさん話した。」
を英訳する場合、

He talked with my friend with short hair a lot.という風に、a lotは文末でいいのでしょうか?

また、

Tom goes to school by bus every day.

という文でも、every dayは文末でいいのでしょうか?
それとも、Tom goes to school every day by bus.のほうがよいのでしょうか?

副詞の位置について、漠然としていて困っています。(頻度や程度を表す副詞の位置に関しては理解しているつもりですが、それ以外の副詞に関しては、ほぼ感覚で位置を決めてます;;)

副詞の位置について、どなたか詳しくご教示ください。お願いします!

Aベストアンサー

はじめまして。

ご質問1:
<He talked with my friend with short hair a lot.という風に、a lotは文末でいいのでしょうか?>

1.こでのa lotは副詞として使われています。副詞のa lotは「たくさん」という意味になり、ここで使われているような「とても(短髪)」の意味にはなりません。

2.この文は
He talked with my friend with very short hair.
にした方がいいでしょう。

3.veryは「とても」という、形容詞short「短い」を修飾する副詞ですが、このように文中に置かれることもあります。

4.程度を表す副詞、much、so、very、littleなどは、文頭、文中、文末など、自由に置かれます。例:

文頭:
Little did I study yesterday.
「昨日はほとんど勉強しなかった」
Little「ほとんど~ない」という副詞を強調するため、前に出て主語・動詞の倒置が起こっているのです。(動詞は助動詞+原形にわかれ、助動詞が主語の前にきます)

文中:
I studied so much in the library.
「図書館で沢山勉強した」

文末:
I studied English so much
「英語を沢山勉強した」


ご質問2:
<Tom goes to school by bus every day.
という文でも、every dayは文末でいいのでしょうか?>

1.正しいです。

時を表す副詞は、場所・程度・手段・様子などを表す副詞の後、つまり最後に持ってきます。

ここでは、by busが手段を表す副詞ですので、every dayはやはり最後に置かれます。

2.一般に、「程度・様子→手段→場所→時間」の順で置かれます。

例:
I study very hard with useful books in the library every day.
「私は、毎日、図書館で、役に立つ本を使って、一生懸命、勉強する」

ここでも
程度・様子very hard→手段with useful books→場所in the library→時間every day
の順になっています。

以上ご参考までに。

はじめまして。

ご質問1:
<He talked with my friend with short hair a lot.という風に、a lotは文末でいいのでしょうか?>

1.こでのa lotは副詞として使われています。副詞のa lotは「たくさん」という意味になり、ここで使われているような「とても(短髪)」の意味にはなりません。

2.この文は
He talked with my friend with very short hair.
にした方がいいでしょう。

3.veryは「とても」という、形容詞short「短い」を修飾する副詞ですが、このように文中に置かれることもありま...続きを読む

QMFC ダイアログ→MDI風に変更

ダイアログベースで画面作成をしていたのですが、
MDIのように左右のペインの大きさをドラッグして変更出来るようにしたいのですが、
どんな方法があるでしょうか。
VisualStudioとかでもペインの大きさをドラッグして変更できますよね。
あんな感じです。
MDIだと簡単に出来るのでしょうが、既にダイアログベースにしてしまっています。

宜しくお願い致します。

Aベストアンサー

こんにちは。
VisualStudioのようなドッキングペインではなく、ただ単に左右の大きさを変えたいということであれば方法はいくつかあると思います。
(1)スプリッターウィンドウ(CSplitterWnd)をダイアログ上に貼り付けて使う方法。
スプリッターウィンドウ内の貼り付ける子ウィンドウが 2 枚必要になります。
(2)左右用の子ウィンドウを用意して、ダイアログの上に置いて境目を操作を自前で実装する。

どちらにしても、ダイアログ上に置いたコントロールは、すべて左右用の子ウィンドウに移す必要があります。
メッセージの送信先に注意してください。SetOwnerを有効に使ってください。

スプリッターウィンドウを使う場合は少々癖がありますので注意してください。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報