トップページ⇒tech
1001コメント323KB

■MFC相談室 mfc14d.dll■

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/07/13(水) 05:28:44
Microsoft Foundation Classライブラリ専用スレです。

■MFC相談室 mfc13d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1110179996/
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc5.2ch.net/test/read.cgi/tech/1062098350/
■ VisualC++(MFC限定)相談室 MFC8.dll■ (スレタイ壊れているけど前スレ)
http://pc5.2ch.net/test/read.cgi/tech/1056584836/
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc5.2ch.net/test/read.cgi/tech/1047949606/l50
■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc5.2ch.net/test/read.cgi/tech/1039607377/
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/tech/kako/1028/10285/1028553308.html
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/tech/kako/1021/10216/1021620974.html
■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/tech/kako/1014/10140/1014057520.html
■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/tech/kako/1008/10080/1008031675.html
■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/tech/kako/989/989902845.html
0446デフォルトの名無しさん2005/09/01(木) 12:50:01
char * str = new char[foo.GetLength()+1];
じゃだめなの?
0447デフォルトの名無しさん2005/09/01(木) 12:52:20
>>445
ttp://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_scanf_width_specification.asp
0448デフォルトの名無しさん2005/09/01(木) 22:34:13
sscanfにいきなりCStringを渡してもよいの?
CStringに十分なバッファを確保してからなら大丈夫そうだが
0449デフォルトの名無しさん2005/09/01(木) 22:46:02
まず>>446だな
04504252005/09/01(木) 23:12:05
結局、当初からの問題の方はGetBuffer()/ReleaseBuffer()で問題が再現しない模様。
現状、原因不明というのが頭痛の種。

ダイアログタイトルの方は、タイトルの形式が違うときに誤動作した模様。
#%*sで期待した空白が2バイト文字だったとさw
なので、sscanf()の戻り値で逃げるか2バイト空白に対応するかと言う落ちに。

>>446>>449
タイトルの一部を切り抜くのが目的だから、タイトル(foo)から文字列を一個読み飛ばしたりすうちを読み飛ばすから
それだけの長さは必要ないというロジック。従って、+1する必要はない。

>>448
CStringはconst char *へのcastオペレータを持ってますから。
つーか、なんか勘違いしていない?

結論。一部ヒントになった以外は情報収集にはなりませんでしたとさ。
協力感謝。
0451デフォルトの名無しさん2005/09/01(木) 23:18:53
>>450
const char *じゃなくてLPCTSTR(つまりconst TCHAR *)じゃないか?
0452デフォルトの名無しさん2005/09/01(木) 23:20:17
sscanfの戻り値チェックもしていなくて、かつ失敗していたってことは、

char* p = new char[...];
CString s = p; // GPF!
delete [] p;

ということ?原因不明も何も・・・
0453デフォルトの名無しさん2005/09/02(金) 00:15:15
スゲー結論書いてるな
原因解明協力してた人カワイソス
0454デフォルトの名無しさん2005/09/02(金) 00:48:52
>>453
だなw コンパイルオプションも書いてねーしどでもいいがな
0455デフォルトの名無しさん2005/09/02(金) 01:36:20
こういうクサクサした雰囲気は次の質問でスカッと解消しよーぜ。
0456デフォルトの名無しさん2005/09/02(金) 02:00:16
彼女がいるわけでもないのですが、いざというときのために財布にコンdo^ムを
忍ばせておいたほうがいいのでしょうか?友達に聞いたら財布によっては跡がつくから
気をつけるべしと言われました。
環境はXP SP2、VC++6.0、DirectX SDK9.0 Summer2004です。
0457デフォルトの名無しさん2005/09/02(金) 09:37:41
>>456
スレ違い。
Win32APIスレへ。
0458デフォルトの名無しさん2005/09/02(金) 12:09:58
MFCの質問と言うかVCの質問と言うか。
VC++7.1でnewで得たポインタの0チェックをしているソースがあるのですが、
ダイアログを生成している元の関数ではbad_allocを受け取るように書かれています。
MFCでは(あるいはVCでは)ただnewと書いた場合にはどっちになるのでしょう。
0を返すならbad_allocに落ちてこないと思うのですが・・・
0459デフォルトの名無しさん2005/09/02(金) 12:41:59
>>458
MFCならどっちも間違い。
CMemoryException*が投げられる。
0460デフォルトの名無しさん2005/09/02(金) 12:46:34
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
       ____.____    |
     |        |        |   |
     |        | ∧_∧ |   |
     |        |( ・∀・)つ ミ |
     |        |/ ⊃  ノ |   | CMemoryException*
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |
                        |
04614582005/09/02(金) 13:00:09
>>459
レスTHX。
なるほど、どっちみち0チェックは無駄ですね。
どっちの例外も受け取るように作るのが正解かな・・
0462デフォルトの名無しさん2005/09/03(土) 06:27:57
モードレスダイアログについてです。VC6です。
やりたい事は一応できるのですが、解せないことについて御教示下され。

[できてる事]
呼出し元でダイアログをnewして ->Create(...)。
ダイアログをバツ(OnClose)で閉じ、PostNcDestroyでdelete thisし自殺

[わからない事]
呼出し元のメンバでダイアログのオブジェクト(実体)を保持し、.Create。
ダイアログをバツ(OnClose)で閉じる。この時、OnCloseをオーバーライド
して、CDialog::OnClose()の前にDestroyWindow()を呼んでおくとOK。
CDialog::OnClose()のみだと、再度ダイアログ開く時にDebug assertion failed。なぜ?

MSDNを見るとデフォルトのOnCloseがDestroyWindowを呼ぶとあるので、
(IDOKやIDCANCELでなく)バツで閉じる限りはオーバーライド + DestroyWindowの挿入は
不要かなと思ったのですが、なぜこの場合はあえて挿入する必要があるのでしょう?
それとも、挿入するとたまたまうまくいってるように見えてるだけなのでしょうか?
0463デフォルトの名無しさん2005/09/03(土) 08:30:11
>>462
createしたものをdestroyせずに再度createはできないってことでは。
0464デフォルトの名無しさん2005/09/03(土) 08:47:11
あとバツで閉じてもOnCancelが呼ばれる。
0465デフォルトの名無しさん2005/09/03(土) 09:42:56
>>462
MSDNのCDialogの頁にOnCancelでDestroyWindowを呼べと書いてある
0466デフォルトの名無しさん2005/09/03(土) 10:55:18
私はいつも

[親側]

メンバ変数
CChildDlg *m_pChild=NULL;

子を呼ぶところ
if(m_pChild == NULL)
{
 m_pChild = new CChildDlg;
 m_pChild->Create(IDD_DIALOG);
}

[子側]

void CChildDlg::OnClose()
{
 m_pChildDlg=NULL;

CDialog::OnClose();
}

void CChildDlg::PostNcDestroy()
{
// TODO : ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。



CDialog::PostNcDestroy();
}
0467デフォルトの名無しさん2005/09/03(土) 10:56:35
途中で書いちゃいました。

void CChildDlg::PostNcDestroy()
{
// TODO : ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
  
delete this;

CDialog::PostNcDestroy();
}

とやってます。
エラーになることはないが、画面を起動するたびに領域が取られて、
アプリ終了時に一気に開放されるので、あまりいいやり方とは思っていないけど。
0468デフォルトの名無しさん2005/09/03(土) 11:34:24
delete this; した後にメンバを呼ぶな。
0469デフォルトの名無しさん2005/09/04(日) 21:07:01
チュートリアルって何ですか?どこにあるんですか?
0470デフォルトの名無しさん2005/09/05(月) 00:26:14
エスパーさん大忙し
0471デフォルトの名無しさん2005/09/05(月) 16:06:08
>チュートリアルって何ですか?
tutorial で英和辞書(英々でもいいが)を引くヨロシ。

>どこにあるんですか?
ヘルプを「チュートリアル」で検索したりするとザクザク出てくるね。
04724622005/09/05(月) 20:38:21
みなさまコメントありがとうございます。お返事遅れてすみません。
>>463
その通りだと思うのですが、MSDNにはデフォルトのOnCloseが
destroyするとあったので、むしろ自分では何もすべきではないのかな、と。。。
>>464
こちらにDestroyWindow()を記述する(CDialog::OnCancel()は削除)と
うまくいってるようです。確かにOnCloseから呼ばれておりました。
>>465
そちらを見たのですが、「親のいない独立ウィンドウの場合」という風に
読めませんか?まあ上記の通り、そうすると確かにうまくいくのですが。
>>466
ご丁寧にありがとうございます。web上のサンプル含め、new/deleteされる
方が多いみたいですね。私もこちらの方法だとうまくいくのですけれども。。。
0473デフォルトの名無しさん2005/09/05(月) 21:23:24
>>472
まあ意図する動作は実装できたのけど、MFCの設計の意図がよくわからんという
ことですね。DestroyWindow()をオーバーライドしてブレークポイント張って監視しても
OnClose()からはDestroyWindow()は呼ばれないことがわかります。MFCではよくある
ことですがMSDNの説明は怪しいですね。多分CDialog以外のCWndではそうだという
ことなのでしょう。結局はCWnd::Default()のようですし。
0474462=4722005/09/06(火) 01:24:32
またまたお返事ありがとうございました。
>>473
> DestroyWindow()をオーバーライドしてブレークポイント張って監視
なるほど!まさにやりたかった操作です。OnCloseにブレークポイント
挿入してステップインでなんとかしようと思ったが、大量のアセンブラコード
に阻まれてあきらめてしまったのでした。確かにDestroyWindow()は呼ばれてないですね。
> MFCではよくある ことですがMSDNの説明は怪しいですね。
そうなんですか・・・肝に命じておきます。

お返事頂いた皆様ありがとうございました。ひとつ賢くなれました

0475デフォルトの名無しさん2005/09/06(火) 13:37:46
ウィンドウスタイルについて質問です

CFrameWndで作ったウィンドウのPreCreateWindowで
 cs.style = WS_VISIBLE | WS_POPUP;
としていますが、くぼんだ境界線がでちゃいます。
 cs.dwExStyle &= ~WS_EX_WINDOWEDGE;
としても消えてくれない…
消すことってできますか?
ちょうどVBのフォームでBorderStyleを0にしたようなウィンドウにしたいのです

環境はW2k、VC++6.0、MFCダイアログベースです、
よろしくおねがいします

0476デフォルトの名無しさん2005/09/06(火) 16:11:25
>>472
親ウィンドウがある時は親ウィンドウでDestroyWindowするかもしれない。
つーか、親に通知して親がDestroyWindowするようにした方が親の管理が簡単。
0477デフォルトの名無しさん2005/09/06(火) 23:23:20
MFCで作成したダイアログクラス内で

CRect rect;
GetWindowRect(&rect);

と実行するとうまくいくのですが、
共通処理をするために、グローバル関数として別ファイルで同様に書くと
静的でないメンバ関数の呼び出しが正しくありません。
といわれます。

環境はWinXP、VC++2003、MDIアプリです。
識者の方、よろしくお願いします。
04784772005/09/06(火) 23:24:29
すいません、追加です。
APIと区別するためにCWndで名前解決は行ってあります。
0479デフォルトの名無しさん2005/09/06(火) 23:26:45
>>478
C/C++を勉強しなおせ。
0480デフォルトの名無しさん2005/09/07(水) 00:23:44
>>477
そのGetWindowRectはCWndのメンバなんだから、
よそから呼ぶはウィンドウを指定しないとだめだろ。
0481デフォルトの名無しさん2005/09/07(水) 00:46:40
MFCでモードレスダイアログのオブジェクトを構築した際、
ウィンドウを表示させる前に、表示させる予定の場所の座標をひろうことってどうやってやるのでしょうか?

表示させている状態であればGetWindowRectでひろえるのですが・・・
0482デフォルトの名無しさん2005/09/07(水) 07:47:03
>>481
ウィンドウを表示させる前ってCreateする前?
04834822005/09/07(水) 09:34:06
そうです。Createする前です。
もちろん、オブジェクトは生成してあります。
欲しい情報は幅と高さだけなので、それだけひろえれば十分です。
0484デフォルトの名無しさん2005/09/07(水) 09:34:37
すみません、481でした。
0485デフォルトの名無しさん2005/09/07(水) 10:29:38
>>481
「予定の場所の座標」は表示させようとするときにWindows側が決めるんじゃないだろうか。
「幅と高さ」はリソースから計算できそうだけど。
0486デフォルトの名無しさん2005/09/07(水) 10:34:44
>>483
Createする前じゃ、GetWindowRectで拾うのは無理だよ。
すべてのCWndのメンバ関数はCreateされた後じゃないと無効だからね。

Createしても
ShowWindowするまでは表示されないから、
その間でGetWindowRectでとる、というのではダメなわけ?
04874812005/09/07(水) 11:08:00
皆さん、ありがとうございます。
>>485さんの通り、リソースから計算できれば解決なのですが・・・

やりたいことは、メニューバーからモードレスダイアログを表示、非表示の選択をできるようにしたいのです。
フォトショとかにありそうなやつの簡易版とでもいいますか。

そのまま何もしないと毎回位置がリセットされるので何とかしたいのです。
iniファイルを利用し、位置は記憶できますが、再表示の際その位置に表示するのにSetWindowPos関数を使っていますが、
この引数に幅と高さが必要なので、何かいい方法はないか、と思ってます。
0488デフォルトの名無しさん2005/09/07(水) 11:25:40
>>487
>表示するのにSetWindowPos関数を使っていますが、 この引数に幅と高さが必要なので

SWP_NOSIZE指定すりゃいいじゃん
04894812005/09/07(水) 11:50:34
>>488
そうでした・・・完璧に忘れてましたorz

その部分は解決したのですが、今度はSetWindowPos自体が落ちます。
たぶん原因は>>486さんのいうようにCreateする前にセットしてることだと思うのですが・・・

かといってCreateした後だと一瞬(0, 0)に表示されてしまうので、これは避けたいです。
0490デフォルトの名無しさん2005/09/07(水) 12:11:44
>>489
非表示でCreateして、位置設定した後表示すりゃいいじゃない。
0491デフォルトの名無しさん2005/09/07(水) 13:27:18
>>489
OnInitDialogの中で位置を設定すれば、表示される前にその位置になるよ。
疑い深い人やOnInitDialogの中でやりたくない人は>>490。
04924812005/09/07(水) 16:41:22
皆様、ありがとうございます。

>>490さんの方法で成功しました。

続けて質問なのですが、この方法で作成すると、表示するたびにメンバ変数がクリアされてしまいます。
インスタンスの生成、消滅はビュークラスのコンストラクタ、デストラクタで行っているので、消去されいていることはないと思うのですが・・・
よろしくおねがいします。
0493デフォルトの名無しさん2005/09/07(水) 16:47:06
エスパーさん出番ですよ
0494デフォルトの名無しさん2005/09/07(水) 17:15:21
ソース出せ。
0495デフォルトの名無しさん2005/09/07(水) 17:59:13
質問です。XP、.NET です。
基本的なことではずかしいのですが・・・。
MFC を利用しています。

プロジェクト名を Hoge とします。
グローバル変数はどこでどのように定義すればいいでしょう?
というのも、CHogeApp が定義されている Hoge.h で定義したとしても、
Hoge.h を include している全てのヘッダファイルで定義されてしまい、リンクエラーになります。
extern 宣言をすると、逆に本宣言(?)がなくなり、リンク時に未解決エラーとなります。

Hoge.h のメンバとして用意し、
CHoge* pApp = (CHoge *)AfcGetApp();
pApp->〜
として呼び出すのが普通なのでしょうか。
もしくは、何か他に方法があるでしょうか。

よろしくお願いします。
0496デフォルトの名無しさん2005/09/07(水) 18:05:33
>>495
グローバル変数は関数と同じように.hファイルでexternをつけて宣言し、どこかのcppファイルで定義をする必要がある。
0497デフォルトの名無しさん2005/09/07(水) 18:06:31
>>495
お前のプロジェクト内にある「theApp」というグローバル変数がどうなってるか見てみろ
04984952005/09/07(水) 18:10:25
>>496-497
そっか・・・theApp を例にするのは全く思いつきませんでした。
理解できました、ありがとうございます。
0499デフォルトの名無しさん2005/09/08(木) 01:15:26
CPropertyPageクラスから派生したプロパティ画面で、
そこでの変更をドキュメントクラスに保存したいのですが、どうやってドキュメントクラスを呼び出せばいいのでしょうか。
GetDocumentはもちろん使えないですよね。
なお、制作は.NET2003+MDI環境です。
とても初歩的な何かを忘れてるとは思うのですが思い出せません。
0500デフォルトの名無しさん2005/09/08(木) 10:57:32
プロパティから戻った後にViewから保存すれば?
0501デフォルトの名無しさん2005/09/08(木) 19:03:11
画面閉じる前に、閉じるかどうか聞くコードはどうなりますか?
0502デフォルトの名無しさん2005/09/08(木) 19:38:48
>>501
// for example.
void cSomeDialog::OnCancel()
{
if (AfxMessageBox("閉じるかどうか", MB_ICONQUESTION | MB_YESNO) == IDYES) {
CDialog::OnCancel();
}
}
05032472005/09/08(木) 19:46:26
一月前の話題ですが、
画面が緑になる問題は、どうやら.netのバグではないか。という結論になりました。
アドバイスどおり、リブートしてからリビルドしたら直りました。
忘れた頃にまた緑になることもありますが、そのときはまたリブート、リビルドで対応してます。
またタイマで起動の1秒後にInvalidateRect(NULL)して、悪くても1秒後には解決するようにしてます。

近況報告でした!
0504デフォルトの名無しさん2005/09/10(土) 15:32:10
自分の思い通りにならないと、すぐ開発環境のせいにするのはいかがなものかと
0505デフォルトの名無しさん2005/09/10(土) 15:43:08
どう考えたってお前のコードのバグだろうが。
起動時の処理のタイミングで症状が出たり出なかったりするだけ。
05065032005/09/10(土) 19:52:06
そうですね。
安易な責任転嫁は良くないですね。
じゃよければ理由を教えていただけるとありがたい。
0507名無しさん@そうだ選挙に行こう2005/09/10(土) 20:09:04
ソースも晒さずにこういう事言うからなぁ。
どんなダイアログかも分からんし。
0508デフォルトの名無しさん2005/09/10(土) 20:12:11
>>506
.NETのバグだと思うよ
0509名無しさん@そうだ選挙に行こう2005/09/11(日) 10:31:44
>507
まあそうだと思うんですが、どこが悪いのかわからないので、
晒せないんですよ。OnInitDialogだけでもかなり長いし。
でも、「どう考えても」っていうぐらいだから多少の心当たりはあるのかなと思ったので。

>508
やっぱりそうですかね。

まあ1秒後には消せるので、これでいいかなとも思います。
いろいろありがとうございます。
0510名無しさん@そうだ選挙に行こう2005/09/11(日) 10:38:30
バグなら公式サイトに情報が乗るはず
0511名無しさん@そうだ選挙に行こう2005/09/11(日) 11:56:56
とりあえず>>509はプログラマに向いてない。
0512名無しさん@そうだ選挙に行こう2005/09/11(日) 12:38:03
>>509
タイマ使って逃げるのは糞プログラム
0513名無しさん@そうだ選挙に行こう2005/09/11(日) 17:52:41
MFCで動画再生はできますか?
0514名無しさん@そうだ選挙に行こう2005/09/11(日) 18:28:26
MFCにそういう機能はないが動画再生は可能
0515名無しさん@そうだ選挙に行こう2005/09/11(日) 18:46:56
MFCにvideo for windows あるいは DirectShow を組み込むということですよね?
0516名無しさん@そうだ選挙に行こう2005/09/11(日) 19:02:08
一例をあげると
HTMLViewにしてプラグイン入れればほとんどの静止画、動画が再生可能
0517名無しさん@そうだ選挙に行こう2005/09/11(日) 19:36:20
ありがとうございます。
プラグイン探しましたけど、いいのがなくて…
フリーのやつですかね?
0518名無しさん@そうだ選挙に行こう2005/09/11(日) 23:28:09
すいません。初心者です。。。
MFCを使っていくにあたって、こうセオリーみたいなのってありますか?
プログラムによってはソースを書く場所がちがくても
同じ実行だったりするじゃないですか。
ようするに今わからないのは、どの動き方だったらどこに入れるって
いうのがいまいちわからないんです。
なので、もしそういうセオリーみたいなのをわかるサイトもしくは本でも
あれば、教えていただきたいです。

0519デフォルトの名無しさん2005/09/12(月) 02:19:58
「ちがくて」とか言う奴に用はないな
0520デフォルトの名無しさん2005/09/12(月) 02:52:52
セオリーなんて無い。心で感じるんだよ。茶化しているように
見えるかもしれないが、MFCを使いこなせるようになって来たら
確かに心で感じるものだと実感出来るようになるだろう。
0521デフォルトの名無しさん2005/09/12(月) 06:14:23
ソースの書き方は人それぞれでいいよ。
でもMFCは基本的な作りが決まってるから
誰が作ってもだいたい同じような感じになってしまう。
でたらめに作るとビルドできないし動かないからね。
05225182005/09/12(月) 19:35:23
ありがとうございました。心で感じられるようにがんばってみますです。
05235182005/09/12(月) 20:42:05
>>522
どちらさま?

>>520,521
そうですね。自分なりに努力してみます。
05245182005/09/12(月) 21:16:30
>>523
お前こそ誰だ

>>520,521
うるせー、さっさと答えだけ教えろ
05255182005/09/12(月) 22:00:09
>>522,523,524
成りすましはやめて下さい。
>>520,521
ありがとうございました。
0526デフォルトの名無しさん2005/09/12(月) 22:19:25
>>518が誰でもいいから消えてくれ。
0527デフォルトの名無しさん2005/09/13(火) 11:52:39
初心者はMFCを使わないほうが良い。
0528デフォルトの名無しさん2005/09/13(火) 12:00:19
誰でも最初は初心者なんだが
0529デフォルトの名無しさん2005/09/13(火) 13:42:31
MFCは初心者でも、C++言語自体やWin32くらいは習得しないとどうしようもない。
0530デフォルトの名無しさん2005/09/13(火) 13:47:07
MFCでよく見るソースですが,

void CPenDlg::DrawPen(void){
CPenp(PS_SOLID, 1, RGB(255,255,255));
CPen*oldp=dc.SelectObject(&p);
…
dc.SelectObject(oldp);
}

このoldpを保存して,最後にSelectObject(oldp)する操作は必要なのでしょうか?
このdcはこの関数終了後に破棄されるので,もとのペンに戻す必要がないように見えます
0531デフォルトの名無しさん2005/09/13(火) 13:51:59
>>530
リソースリークしてもいいのなら戻さなくていいよ。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_9v3o.asp
>An application should always replace a new object with the original, default object after it has finished drawing with the new object.
0532デフォルトの名無しさん2005/09/13(火) 14:42:29
CMenu menu;
menu.LoadMenu(IDR_〜);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);

このmenuをポップしたときに、ディセイブルにするにはどうしたら良いでつか?
0533デフォルトの名無しさん2005/09/13(火) 14:50:48
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_graphic_objects.asp
現在のグラフィック オブジェクトを使い終わったら、
古いグラフィック オブジェクトをデバイス コンテキストに選択し直して、状態を復元します。
フレームに割り当てられたグラフィック オブジェクトは、スコープからはずれたときに自動的に削除されます。
0534デフォルトの名無しさん2005/09/13(火) 15:12:58
>>532
WM_INITMENUPOPUP
0535デフォルトの名無しさん2005/09/13(火) 15:15:37
サンクス>>534



menuのアイテムをディセイブルにする側のコードはどうなるんでしょう?
0536デフォルトの名無しさん2005/09/13(火) 15:18:40
>>535
マニュアル持ってないのか?
CMenuのメンバ関数調べろ
0537デフォルトの名無しさん2005/09/13(火) 15:52:07
メンバ関数見ましたが無さげでつが...
0538デフォルトの名無しさん2005/09/13(火) 16:03:51
ヒント: disableで見つからなければenableで探す
0539デフォルトの名無しさん2005/09/13(火) 16:18:41
サンクス>>538

menu.EnableMenuItem(ID_MENU_〜, MF_GRAYED | MF_BYCOMMAND);
でできますた。
0540デフォルトの名無しさん2005/09/16(金) 17:40:42
GetTextExtent や GetOutputTextExtent で文字列が描画されるサイズを
求めたいんですが、複数行の文字列のサイズを求める方法が分かりません。
各行のサイズを自前で求めるしかなかですか?
0541デフォルトの名無しさん2005/09/16(金) 17:44:17
そもそも行という単位は君が決めることだ。WindowsやMFCの知ったことではない。
0542カラス2005/09/16(金) 18:04:49
みんな・恋のノマノマエイってしってる?>−<
0543デフォルトの名無しさん2005/09/16(金) 18:38:59
540
CRect rect( 0, 0 ,1024 ,0 );
pDC->DrawText("test\nテスト\nテスト", rect, DT_CALCRECT|DT_WORDBREAK );
rect.bottomに高さが
0544デフォルトの名無しさん2005/09/16(金) 18:52:32
サイズを求めるためにGetTextExtent や GetOutputTextExtentするんだろ
それでサイズがわからんとはどういうこと?
0545デフォルトの名無しさん2005/09/16(金) 18:57:53
>>543
どうもありがとうございます。
DT_CALCRECTに見覚えがあるとに、すっかり忘れとりました。ボケてきたかな。

>>544
改行を含む文字列の場合、1行に繋がった横長のサイズが求まるとです。
■ このスレッドは過去ログ倉庫に格納されています