- 1 名前:デフォルトの名無しさん [2007/08/01(水) 06:23:28 ]
- Microsoft Foundation Classライブラリ専用スレです。
- 182 名前:デフォルトの名無しさん [2007/09/24(月) 05:07:52 ]
- MFCは隠蔽化というより隠蔽工作だというようなことがかかれた本があった。
本来仕組みなど知らなくても簡単に使用できるのが隠蔽化だが MFCには仕組みを知らなければバグの原因がまったく理解できない不可解な現象も多い。 それらを苦労して乗り越えて来た人間は威張り腐りって、 「MFCが糞なんじゃなくて理解できないやつが糞」と言いたいのだろう。気持ちはわかる。 だが世間一般ではそういう場合ライブラリが糞だという。 自分の腕前を自慢したいからって言葉を捻じ曲げてはいけない。
- 183 名前:デフォルトの名無しさん [2007/09/24(月) 05:31:44 ]
- あの当時に書かれたライブラリで今まで通用したものってほかに何かあるかな?
OLEを隠蔽するフレームワークとして十分納得いくし、フル機能のウインドウズ ソフトウエアを書くのにほかにいいライブラリが無かったのも事実だと思う。
- 184 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 06:03:59 ]
- >>それらを苦労して乗り越えて来た人間は威張り腐りって、
被害者意識が強い傾向が見られます。 何かトラウマになるような事でもあったのでしょうか(w
- 185 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 06:41:22 ]
- MFCがなければWIN32のバグが分からない
永遠に更新を続けるべき
- 186 名前:デフォルトの名無しさん [2007/09/24(月) 07:39:58 ]
- >>182
あー、でも俺、そういうラッパー系のクラスで 下層の構造知らずにうまく包んであるもんってみたことないわ 無理なんじゃねぇの?って思ってる 可変長ですよといいつつ なんも意識せずに1文字ずつ追加すると毎回全バッファを再確保する 最近の次世代(?)言語の文字列クラスのようにw
- 187 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 09:28:21 ]
- 文字列定数 -> System.String
CString -> System.Text.StringBuilder と考えれば、それはそんなもんかって気もする。 Stringの連結はおまけ機能ってことで。
- 188 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 10:54:07 ]
- MFCのいいところはVisualStudioで使う場合にドキュメントモデルを提供してくれることとダイアログエディタがあることか。
ちょっと凝ったことをしようと思うと折角クラスで隠蔽化しているように見えても実際にはAPIと同じ名前のメソッドだからAPIと手間は変わらないし、 全てを網羅しているわけではないから結局APIを直截呼ばないといけないケースもある。 あれはだからAPIラッパクラス集と思えばいいのであって、それ以上のフレームワークと思ってはいけないのだろう
- 189 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 15:22:11 ]
- >>187
>Stringの連結はおまけ機能ってことで。 そんなことになってるぐらいならラップなんてしないほうがいいじゃないって思う
- 190 名前:デフォルトの名無しさん [2007/09/26(水) 11:01:12 ]
- CDC型のメンバからその描画領域のサイズを取る方法はありますでしょうか。
CBitmap* pBitmap = pDC->GetCurrentBitmap(); BITMAP bmp; pBitmap->GetBitmap(&bmp); とやってbmp.bmWidthやbmp.bmHeightを参照しようと思ったのですが、 ビューのOnDrawなどで渡される画面DCに対しては GetBitmapがエラーになるようなのです。 メモリDCに対しては成功します。 もちろん、OnDraw時はGetClientRectを使えばサイズを取れるのですが、 関係無い場所でpDCだけを見て調べられないかなと思っています。
- 191 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 11:43:46 ]
- つ ::WindowFromDC
- 192 名前:デフォルトの名無しさん [2007/09/26(水) 11:53:25 ]
- >>191
ありがとうございます。 ::WindowFromDCというのは、CDC::GetWindowと対応しているようなので、 CRect rect; BITMAP bmp; if (pDC->GetCurrentBitmap()->GetBitmap(&bmp)) { /* メモリDC */ rect = CRect(0, 0, bmp.bmWidth, bmp.bmHeight); } else { /* 画面DC */ pDC->GetWindow()->GetClientRect(rect); } とやってみたところ、どちらの場合でもサイズを取ることができました。 判定方法はこれで大丈夫ですよね?
- 193 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 13:30:06 ]
- .NETのMenuStrip簡単にできていいなぁ
MFCでもサポートしてくれ
- 194 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 21:33:08 ]
- 簡単に作れる代わりに使い物にならんほど遅いプログラムとなってしまった
.NET非常に残念だったな
- 195 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 01:39:05 ]
- MFC not dead - "massive update" planned
まさか .NETは無しね!MFC大幅機能強化するから! なんてことになるん(r
- 196 名前:デフォルトの名無しさん [2007/09/30(日) 06:51:40 ]
- MFC と NET って、どの程度の処理速度がちがうんですか?
まじレス希望
- 197 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:27:09 ]
- >>196
MFC全盛期のPCでMFCを動かすと、今のハイエンドなPCで.netを動かすのとは較べ物にならないほどもっさりしています。
- 198 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 11:28:36 ]
- MFCって.NETのコントロールと比べると鼻くそみたいにショボイのに2008にもまだ残ってる理由ってなんですか?
必要かな?
- 199 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 12:54:06 ]
- 鼻くそみたいにショボイと思ってるのに
このスレへやってくる理由ってなんですか? 必要かな?
- 200 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:07:07 ]
- .NETのコントロールなんて飾りです。偉い人には(ry
冗談抜きで。
- 201 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:56:35 ]
- >>198
2008ではMFCはなくなってたお
- 202 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:25:47 ]
- >>201 ソースキボンヌ
2008でも含まれると考えられるソースはこちら ttp://msdn.microsoft.com/msdnmag/issues/07/06/Cpp/default.aspx?loc=jp
- 203 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:29:11 ]
- EEダウンロードできんじゃん
- 204 名前:デフォルトの名無しさん [2007/10/01(月) 11:36:20 ]
- VS2005とMFCで拡張DLLを作成しているのですが、
この拡張DLLを呼び出した側のインスタンスハンドルって どうやって参照すればよいのでしょうか。 AfxRegisterClassで必要なのですが、 AfxGetInstanceHandleだと、大元のEXEのハンドルが返ってきてしまいます。 EXEから呼び出された別の拡張DLLがこの拡張DLLを使う可能性もあるため、 大元のEXEではなく、呼び出し元を参照できるようにしたいのです。
- 205 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 23:44:38 ]
- Code Projectにたくさんのコントロールがあげられているが
コントロールってダイアログベースにするかViewをFormViewに選択するしか 使えないんでしょうか?
- 206 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 19:19:08 ]
- VC6です。
プログレスバーについての質問。 時間がどのくらい掛かるか不明な処理でプログレスを表示したい。 Webなんかで有るような、2−3このコマが左から右へくるくる回ってるの が良いんだけど、CProgressCtrlじゃできないっぽい? なんか良い案あったらおしえて。 時間がどのくらい掛かるか不明なのは、開始ボタン押すとハードと通信して ハードが処理終了するのを待つから。 ハードは詳細な進捗なんて返してくれない。 ハードの状態や処理対象によっても時間が大きく変わるので平均でこのくらい ってどんぶりで表示するのも厳しい状況。 したがって、ループするようなヤツが欲しいといった理由。
- 207 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 19:21:10 ]
- 砂時計
- 208 名前:206 mailto:sage [2007/10/02(火) 19:29:58 ]
- >>207
レスサンクス。 砂時計は却下されてしまいました。 と言うか、すでに砂時計は出してるけど、曰く 「ホントに、動いてるのか解らない」だそーで。 プラスでプログレスが欲しいんだと。 えらい人の考えは良くわかりません。
- 209 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 21:23:57 ]
- >>206
まあ、砂時計出したままフリーズするアプリもあるから、動いているか どうかを確認したいというのもわからなくはない。 どうしてもプログレスコントロールにこだわるなら、何回も繰り返して 描画してやればいいんじゃない?
- 210 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 01:24:29 ]
- >>205
ん? Code Projectにあがっているコントロール”だけ”使えてないの? そうなら、そのコントロールを挙げてくれ。 そうでなく普通のEditやComboも同じように使えてないなら、動的生成すればいい。 ”Edit 動的生成”とかでググレば、サンプルとかあるんじゃねーかな。
- 211 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 02:23:43 ]
- >>206
IEのようなウィンドウ右上のアニメーションで済むならCAnimateCtrlでが楽。 プログレスバーの現在位置が左から右へ動き続けるような奴だと 中断ボタンも必要だろうし、別スレッドでプログレスバー制御と中断の 入力待ちをすることになるんじゃないかな。 砂時計を却下する上司って良いなーと思った。
- 212 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 08:38:51 ]
- 動いてるのか解らないという理由で砂時計がダメなら
IEのようなアニメーションもダメだろう
- 213 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 18:40:21 ]
- >>206
blogs.wankuma.com/melt/archive/2007/06/21/81494.aspx
- 214 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:03:48 ]
- エディットコントロールの質問です。
コントロール内部に画像を表示させて、文字編集を行うものを作ろうと思ってるのですが なかなかうまくいきません。 OnCtlColorでCreatePatternBrushで作ったものを返すようにして 何とか文字未入力領域に画像を表示させたのですが、 文字入力エリア部分に画像を表示できなくて困っています。 何かいい解決方法はないんでしょうか?
- 215 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:19:12 ]
- >>214
SetBkModeで透過にするのを忘れている予感 マルチラインは、この方法だと不都合があるみたいなので注意
- 216 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:30:44 ]
- >>215
あ、説明たりなくて申し訳ない。 複数行エディットコントロールについての話でした。
- 217 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 01:05:32 ]
- 質問です。
CViewの派生クラス を A 、 CWndの派生クラス を B とします。 Aのメンバ変数にBを持ち、A の OnCreate にて B を Create し、A全体に貼り付けました。 正常に生成され、貼り付けもうまくいっているのですが、B にてマウスホイールが 取得出来ないことに気づきました。(クリック等は正常動作します) どうもフォーカスがいっていないようなので、A の OnSetFocus にて、B に対して SetFocus をすると、期待通りの動作をしてくれ、B にてホイールを取得出来る ようになりました。 A全体にBが貼り付けてあり、これをクリックしたら当然Bにフォーカスが行くものだと 思っていたのですが、なぜ行かないのでしょうか? XP Pro SP2 VC++8 sp1
- 218 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 02:15:47 ]
- >>217
例えば、ラベルをクリックしてもフォーカス受け取らないじゃん? そしてどーやるんだったか忘れた。 ごめん。 SPYでフォーカス受け取るコントロールと 受け取らないコントロールのメッセージの違いを調べる…とか。 激しく疲れるな。。
- 219 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 06:11:25 ]
- ラベルというかスタティックはidの設定だから全然別の話
- 220 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 00:21:28 ]
- >>219
idの設定て、IDC_STATIC? まさか、そんなはずは。 もうちょっと分かるように説明してくれ。
- 221 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 10:53:03 ]
- シングルダイアログのプログラムです、最小化ボタンと最大化ボタンを付けるのを忘れてしもうたww
今から付加したいのだが、どのクラスのどのプロパティーをいじったらええの? VS20005 MFC
- 222 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 11:21:44 ]
- >>221
ダイアログエディタかテキストエディタで<project>.rcを編集し給え。
- 223 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 11:58:13 ]
- >>222
221です rcファイルいじって悲惨な目(編集不能)に何回かあったのだが大丈夫なのか?
- 224 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 12:34:21 ]
- ダイアログのプロパティでMinimize/MaximizeBoxをTrueにすればいいだけの話だろ。
何を悩んでるんだ?
- 225 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 12:53:44 ]
- >>224
('ー')ゞラジャサンクス
- 226 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:57:59 ]
- >>223
ダイアログエディタでプロパティを変更する行為だけで編集不能にできるならたいしたもんだ。
- 227 名前:デフォルトの名無しさん [2007/10/06(土) 15:19:49 ]
- CToolBarのボタンを大きくすることは出来ますか?ロードするビットマップのサイズが大きければ大きくなるのでしょうか?
- 228 名前:デフォルトの名無しさん [2007/10/06(土) 18:17:23 ]
- MFCのSDIアプリケーションを作成しています。
日本語以外のOSでも正しく動作させたいのですが、 最小化ボタンの上にカーソルを合わせたときに表示されるツールチップの「最小化」 などは自動的に現地の言葉で表示されるのでしょうか?
- 229 名前:デフォルトの名無しさん [2007/10/06(土) 19:09:31 ]
- コード調べたらわかるでしょ
- 230 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:24:13 ]
- 日本語化されてない英語アプリ動かしてみりゃわかるだろ
- 231 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:28:51 ]
- apiのソースは非公開
漏れたのもあるけど
- 232 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 09:57:50 ]
- CStringのTrimの中でアサートするんですが・・・
CString str = "33 " str.Trim(); ・・・ Truncate ATLASSERT( nNewLength <= GetLength() ); Unicodeライブラリ使ってますがこれがまずい?
- 233 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 10:33:50 ]
- "33 "
- 234 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 11:07:27 ]
- VC2005で試したところ、>>232のコードはコンパイルを通らなかったのだが、
それはそれとして、不思議な現象が。 1. CString str = "33"; // NG 2. CString str("33"); // OK 3. CString str; str = "33"; // OK いまいち納得がいかない。
- 235 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 11:10:22 ]
- すみません str = _T(" 33 ")なら通りますね
- 236 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 12:22:02 ]
- >>234
コンストラクタと=の動作が違うんかな?とかわからずに言ってみるテスト
- 237 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 21:32:43 ]
- >>234
初期化と代入の違いわかってるか? あと_T()マクロがどう展開されるか
- 238 名前:234 mailto:sage [2007/10/08(月) 08:29:48 ]
- WCHARベースのCStringでも
CString(LPCSTR) operator=(LPCSTR) の両方とも定義されているので、2.と3.が通るのは分かるが、 なら、何故1.が通らないのかがよく分からない。 1.は3.の省略系みたいなものだとの解釈は間違い?
- 239 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 08:39:47 ]
- コンパイラはヘッダみてるだけだから
コンパイラの立場でヘッダ見てみればいい
- 240 名前:デフォルトの名無しさん [2007/10/08(月) 16:48:36 ]
- MDIでApp作ってます。
CMDIChildFrameA :: OnCreate() { dlg.Create(IDD_DIALOG, this); } としておいて Dialog 内 OnOKで if ( GetParent()->IsKindOf(RUNTIME_CLASS( CMDIChildFrameA )) ) とすると何故か失敗するのですが・・・ GetParent()で取れるCWnd* がCMainFrameになっているみたいです。 誰かボスケテ
- 241 名前:234 mailto:sage [2007/10/08(月) 16:52:45 ]
- (・∀・)ワカッタ!!
1. CString str="33"; は、暗黙的に CString str("33") に変換される 2. が、WCHARベースのCStringでは #define CSTRING_EXPLICIT explicit CSTRING_EXPLICIT CString::CString (LPCSTR str); と宣言されることになる 3. explicit宣言されていると、1.のような暗黙的なコンストラクタへの変換は禁止される。 よってコンパイルエラー発生。 explicit使った事無かったから、全然思いもつかなかった。
- 242 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 17:36:32 ]
- >>240
Windowsの仕様で、自動的にフレームウィンドウを親にされてしまうみたいだな。 Get/SetOwnerで関連付けてしまうのも一つの方法か。
- 243 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 18:20:18 ]
- >>242さん ありがとうございます
色々試してみてたんだけど GetWindow(GW_OWNER) ← 駄目 GetParent() ← 駄目 SetOwner() GetOwner()すればRUNTIME_CLASSうまくいきました
- 244 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:34:05 ]
- >>228
MFC使わないコードで Tooltip(?)の処理しなくても出てくるから OSが処理してる。 だからOS依存で英語版なら英語で表示されるでしょ。 MFC内で独自処理してたらしらない
- 245 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:04:47 ]
- 英語版のVCでコンパイルすれば解決ということだな
- 246 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:05:39 ]
- そうだっけ?
なんかリソースファイルの中くまなくさがしてみるとか・・・
- 247 名前:デフォルトの名無しさん [2007/10/09(火) 00:25:46 ]
- SDIアプリでCreateWindowでCFrameWindowの子供ウインドを作成し、Viewの上に沢山並べてみた。
で、そいつらをクリックしたら、アクティブになってフォーカスがあたってフォアグラウンドになる予定だった。 でも実際はWM_MOUSEMOVEすらそいつらには飛んでこない。くるのはWM_CREATE,WM_MOVE,SIZE,PAINTくらいだ。 この子供ウインドをWS_POPUPとかにすれば飛んでくるけど。。あーわかんないよぉ。 子供ウインドの一つを選択したら、他のウインドがフォーカスを失って、選択されたウインドがフォーカスされて しかもメッセージを受け取って欲しいんだよぉ。なんでだめなの?????
- 248 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 01:23:05 ]
- >>247
何が作りたいのか俺にはわからんが 他のアプリで似たような動きしてるもんあったら教えてみぃ
- 249 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 08:18:03 ]
- MFCのライブラリをスタティックリンクすると挙動が変になり悩んでます。
[現象] ・スタティックリンクすると、 メニュー → ファイルを開く → コモンダイアログのフィルタに「すべてのファイル(*.*)」がなくなる。 ・共有DLLでビルドすると普通に出来る。 -- 新規プロジェクトでスタティックリンク試してみると 普通に出来るので俺が悪いのは確かだろうが・・・ ちなみにデバッグビルド(&スタティックリンク)すると [docmgr.cpp] DoPromptFileName() VERIFY(title.LoadString(nIDSTitle)); でエラーになる。 この先を追っかけているが(atlcore.hとか)だんだん鬱になってきた。 似たような現象になった人いませんか? >>247 割り込んでごめんなさい
- 250 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 08:41:24 ]
- フォーカスないウインドウにもマウスのメッセージは飛んでくるし
WM_MOUSEMOVEすらそいつらには飛んでこないというのは変
- 251 名前:デフォルトの名無しさん [2007/10/09(火) 14:34:01 ]
- >>248
そうですね。。たとえて言えばエクセルのオートシェープをウインドで表現し、 シートに沢山並べた状態みたいなものでしょうか。
- 252 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 21:54:53 ]
- トラッカークラス使えよ
- 253 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 10:54:24 ]
- VC6です。CListCtrlをレポート形式で使ってます。
SetExtendedStyle()でLVS_EX_GRIDLINESを設定するとグリッド線が表示されていたのですが、 Windows2000からWindowsXPに変えて、画面をXPスタイルで表示するとグリッドが消えてしまします。 設定の仕方を間違えているのでしょうか。
- 254 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 11:22:16 ]
- >>253
スクロールさせると消える挙動はバグ。修正予定はたぶん無い。 どうしても直したいなら、自前描画するしかないと思われ。
- 255 名前:253 mailto:sage [2007/10/10(水) 12:35:12 ]
- >>254
まだスクロールもさせていない段階なのですが・・・。
- 256 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 20:02:58 ]
- カスタムコントロールにCPenで書いた線を消そうと
void CLineChartCtrl::DeInvalidateCtrl() { CClientDC dc(this); CRect rcClient; GetClientRect(rcClient); InvalidateRect(rcClient , TRUE); } として再描画しても消えないのはお子ちゃまだからデツカ? ハンドルもしっかり取れてるのにな??
- 257 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:11:51 ]
- おぼっちゃまがやっていることは
ただ画面を更新してるだけ
- 258 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:14:22 ]
- 再描画でまた書いてるだけなんじゃ……
ちなみに、その処理ならCWnd::Invalidate()一発で済む。
- 259 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:19:55 ]
- >>257のおじさま、ありがd
うぅぅぅ〜〜〜、嫌な悪寒デツ どうしたら簡単に線が消せマツカ? やっぱり書いた線をxorで描くとかマンドクサイことやんなきゃムリッポなのかなぁ。。。。。。うぅぅぅ〜〜〜
- 260 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:31:29 ]
- >>258さんもありがd
やってミマスタガ線が消えません、MFCってCPenクラスがあるならCEraserクラスも 作ってホスイ片手落ちって言うんだよねこれ豆知識 線が消したいというか初期画面に戻したいんデツガ、コンストラクタをも一回読んでみたら どうなるのかな、実験シマツ
- 261 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:41:26 ]
- おまいは何か根本的に勘違いをしている。
ウィンドウに描画した内容は、基本的に保持されていない。 描画内容を変更したい時は、一旦クライアント全体を無効にして、 次の再描画からその変更した内容で描くようにする。 自前でフレームバッファを用意してそこに描画してる、とかは無しな。
- 262 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:45:15 ]
- >>260
おまえ、あたまん中をいっぺん消した方がいいぞ
- 263 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:57:24 ]
- 最小化して戻したら消えてないか?
- 264 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:59:21 ]
- >>260
消しゴムかそうか?
- 265 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 01:27:09 ]
- まぁマイクロソフトのウインドシステムは確かにわかりにくい仕様がおおいけどな。
- 266 名前:デフォルトの名無しさん [2007/10/15(月) 10:11:46 ]
- VS2005です。
SDIのプロジェクトからダイアログを追加し(CDialog1)、 そのコンストラクタにビューのポインタを渡してみたのですが、 ダイアログはフレームウィンドウの中央に出てきてしまいます。 void CTestView::OnLButtonDown(UINT nFlags, CPoint point) { CDialog1 dlg(this); dlg.DoModal(); } ダイアログのコンストラクタで親ウィンドウを指定しているのに、 なぜその中央に表示されないのでしょうか? 中央に表示させたい場合は、ダイアログに何を渡せばよいのでしょうか?
- 267 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 11:49:39 ]
- .........@ノ”
かたつむりなのです。 わかってほしいのです。 触られると触角がひっこんじゃうの。 動けなくなっちゃうの。 よくわかんない、でもそうなっちゃうのだ。 雨の日とかにぺたぺた這うのが好きなのです。 なんでかしら。 自分でもよくわからないのだ。 あんまり指ではがさないでください。 ごはんたべてうんこしようっと。
- 268 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 20:36:21 ]
- 塩撒くか
- 269 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 22:02:40 ]
- >>266
>>240とたぶん同じ原因なので、同じ解決法で。 SetOwnerしておいて、OnInitDialogでCWnd::CenterWindow(GetOwner())。 別にオーナーに拘らずとも、中央配置の元になるウィンドウを渡せればいいんだけどね。
- 270 名前:デフォルトの名無しさん [2007/10/16(火) 09:30:39 ]
- >>269
ダイアログのOnInitDialog()でGetParent()とm_pParentWndを調べてみたら、 m_pParentWndにはコンストラクタで渡したビュークラスが入っているのに、 GetParent()ではメインフレームが返ってきました。 OnInitDialog()でm_pParentWndを直接CenterWindow()に渡してみたところ、 ビュークラスの中央に表示させることができました。 m_pParentWndっていうのは隠れメンバっぽいけど、 これならダイアログを呼ぶ側でオーナーを別途指定する必要は無いですよね。 ダイアログのコンストラクタって、なんの意味があるんだ…?
- 271 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 11:14:36 ]
- >>270
それはダイアログ(そのもの)ではなくてダイアログクラスだ。 OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。
- 272 名前:デフォルトの名無しさん [2007/10/16(火) 11:49:03 ]
- >>271
> OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。 もちろんコンストラクタの使いかた自体は理解しているつもりですが、 ダイアログクラスのコンストラクタで親ウィンドウを指定しても それが実際の親にならないのなら、 コンストラクタで親ウィンドウなんて指定させるなよっていうことでした。 まぁ今回の件では、隠れメンバに保管されていることがわかったので、 コンストラクタに渡す作業は無駄ではなかったようですが。
- 273 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:58:53 ]
- >それが実際の親にならないのなら、
親になってるからCenterWindowが正しく動作しているのでは? CWnd::GetParent()が親じゃなくオーナーを返すのは、内部で 呼び出しているAPI(GetParent())の仕様。 トップレベルウィンドウがGetParentするとオーナーを返すみたいね。
- 274 名前:273 mailto:sage [2007/10/16(火) 18:04:38 ]
- あ、CenterWindow(NULL)じゃ駄目なのか。しょっく
- 275 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 21:29:33 ]
- MFCアプリケーション(ダイアログ)の終了時、アプリケーションのの戻り値(%ERRORLEVEL%)を
使用したいんですが何か方法ありますか? ・コンソールアプリケーションだと一瞬コンソールが表示されるのが問題 ・引数なしの起動でダイアログでて起動をさせたいができればMFCダイアログテンプレートで作りたい。 という理由です。 WinMainのでやれば恐らく可能とは思いますが・・誰か知ってたら教えてください。
- 276 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:04:11 ]
- >>275
CWinApp::ExitInstanceをオーバーライド
- 277 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:12:31 ]
- >>276
今その方法でやったらできました。 一応方法を書いておくと、ExitInstance で戻り値を返すだけではだめで start /wait aaa.exe とかしてアプリケーションの終了を待機しないとだめなんですね・・ 当然といえば当然なのかも。 なにはともあれ、ありがとうございました。
- 278 名前:デフォルトの名無しさん [2007/10/16(火) 23:44:10 ]
- ダイアログアプリケーションでCDialog派生クラスのデストラクタがないのですが、
デストラクタの処理はどこでするのでしょうか?
- 279 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 23:54:06 ]
- >>278
勝手にオーバーライドすればいい。
- 280 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 00:09:14 ]
- 定型文のボタンを押したら、
CEditコントロールのカーソル位置に文字を自動で入力したいのですが、 どうやればいいですか?
- 281 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 00:13:17 ]
- 現在のCEditの文字取得して定型文追加して再設定
カーソル位置は GetSel() で取得
- 282 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 00:26:29 ]
- >>281
ありがとうございます!
|

|