- 1 名前:デフォルトの名無しさん [2007/08/01(水) 06:23:28 ]
- Microsoft Foundation Classライブラリ専用スレです。
- 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
ありがとうございます!
- 283 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 11:46:56 ]
- ★番組で紹介された亀田史郎が息子・興毅に書いた手紙
興毅 ほんとうに おめでとう お前は もう 親父だけの者ではない 今や世界の亀田興毅になったんじゃ それも山あり谷ありの厳しい勝負の道を ひたすら歩み続けたからこそ今日の栄光が会った しかしボクシングの道は終った分けではない これから厳しいボクシング道が待ってる 興毅よ万文の山はいくつはばまおうとも 戦陣の谷に何度も落ちようとも前え 進め 最後に 本当におめでとう 親父 ★ アニメ「侍ジャイアンツ」最終回 川上監督が番場蛮に贈った言葉 番場よ、本当におめでとう。 おまえはもうジャイアンツだけのサムライではない。 今や世界のサムライになったんじゃ。 それも山あり谷ありの厳しい勝負の道を ひたすら歩み続けたからこそ、今日の栄光があった! しかし、野球の道はこれで終わったわけではない。 これから厳しい野球道が待っている。 サムライよ、万丈の山がいくつ阻もうと、 千尋の谷に何度落ちようと、前へ進め! その前途を祝って、もう一度言わせて貰おう。 番場蛮、本当に、おめでとう! 巨人軍監督 川上哲治
- 284 名前:デフォルトの名無しさん [2007/10/17(水) 21:16:32 ]
- visual c++ 2005 SP1でSDIアプリを作っています。
MFCをスタティックリンクでビルドすると、Cランタイム(_recalloc)で メモリリークが発生します。共有DLLでビルドするとリークは発生しません。 リークのチェックにはBoundsChecker8.2を使用しました。 スケルトン(ソースは変更しない)でも同じでした。 どなたかご存知ないでしょうか?
- 285 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:26:32 ]
- >>284
BoundsCheckerって使ったことないから知らないけど support.microsoft.com/kb/192102/ja この情報のVCのバージョン相当古いのは分かってるが、参考にならないかな?
- 286 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:02:39 ]
- スタティックリンクは使うなってことよ
- 287 名前:デフォルトの名無しさん [2007/10/19(金) 13:00:37 ]
- CInternetsessionでのFTPのcloseは、FTPサーバーにログが残らないものなのでしょうか。
- 288 名前:デフォルトの名無しさん [2007/10/19(金) 15:04:58 ]
- CCriticalSectionについて質問があります。
今Visual C++ 2005でアプリを作成しているます。 TestA.cppに通信処理があって2箇所からココを呼び出してます 1つはTestA.cppのOnTimerからコール 1つはTestB.cppのワーカースレッドからコール 通信処理は、入った時点で CCriticalSectionのLock()、抜けるときにUnLock()してます で、問題なのはTestB.cppのワーカースレッドから通信処理をコールし、Lock状態のときに TestA.cppのOnTimerから通信処理をコールするとデッドロックしてしまいます なぜそうなってしまうのか、原因が全く分からず困ってます・・・ 何か分かる方、いらっしゃいましたらご教授お願いします
- 289 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 15:38:34 ]
- 通信処理が怪しい。
OnTimerの呼ばれるスレッド側に依存する処理が混じっていないか? メッセージキューが回っている必要がある、とか。
- 290 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:20:28 ]
- >>289
ご返答ありがとうございます 通信処理の本体はTestC.cppに用意してあり、そこで完結してます それをTestA.cppからコールしているだけなのです なので依存する処理とかはないと思います 簡単に書くとTestA.cppの通信部分はこんな感じです void CTestA::SendProc() { m_CriticalSection.Lock(); TestC->SendData(); m_CriticalSection.Unlock(); } もしかして、OnTimerとCCriticalSectionのLock、UnLockは 同じ場所(TestA.cpp)にあってはいけないとか そんなことはない・・・ですよね?
- 291 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:26:09 ]
- 当たり前だろ
Lock状態というのは、他から同時に同じ部分をアクセスさせないように するのが仕様だよ 要はバッティングしないようにしてるわけだから、用がすんだら 解放される
- 292 名前:291 mailto:sage [2007/10/19(金) 17:27:56 ]
- >>291 は、>>288 に対するレスね
- 293 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:36:27 ]
- >>292
Lock状態のときに、その処理に入ったら待機状態になりますよね? 先にLockを掛けた処理が動いてUnlockしてくれればなんの問題もないのですが、 何故か動いてくれないんですよ・・・ なので困っております・・・ 説明不足ですみません
- 294 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:06:04 ]
- ワーカースレッドからSendProcを呼び出した際にm_CriticalSection.Unlock();
までたどり着いてないってこと?
- 295 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:11:19 ]
- UI更新しようとSendMessageしてロック、とかは初心者にありがちなんだけどな。
TestC->SendData()の処理内容が判らないことにはなんとも。 あと、Lock/Unlockを直接書くより、CSingleLockを使っておいた方がいい。
- 296 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:32:57 ]
- >>294
はい、おっしゃる通りです Lockした状態でOnTimerから通信処理に入って m_CriticalSection.Lock(); の中へステップで進んで行くと :EnterCriticalSection(&m_sect); で実行中になったまま処理が戻らず、 仕方なくデバッグ中断すると 「プロセスはデッドロックされているか、ユーザーモードコードがどれも実行されません。すべてのスレッドが中止されました。」 となります >>295 TestC->SendData()の処理内容はUSBドライバに対して プロトコルに沿ったデータの送信・受信をしています CSingleLock、ちょっと勉強してみます
- 297 名前:294 mailto:sage [2007/10/19(金) 18:51:18 ]
- ならAPIのTryEnterCriticalSectionを使うか >>295の方法。
ワーカスレッドから呼ばれたTestC->SendData()がフリーズしてる可能性もある。
- 298 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:25:33 ]
- >>297
TryEnterCriticalSectionを試してみたところ、それっぽい動きになりました ありがとうございます! ところで、MSDNライブラリに書いてある解説に 「TryEnterCriticalSection 関数は、クリティカルセクションの所有権を 取得できたかどうかにかかわらず、すぐに制御を戻します。」 とありますが、これは処理が終わる前に次の処理が動いてしまう と解釈してよろしいのでしょうか・・・
- 299 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:36:13 ]
- 戻り値で、他のスレッドがCriticalSectionを所有している事が判るわけだから
後で再送するとか、諦めてエラーにするとか好きにすれば良い。
- 300 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:41:08 ]
- >>299
了解しました 戻り値で判断して何とか回避してみます 皆様、色々ご指導ありがとうございました とてもとても助かりました 素敵な週末を過ごしてください
- 301 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 23:38:36 ]
- 今後Winアプリって.NETがデファクトスタンダードとなるんですかね?
MFCは開発止まってるのですか?
- 302 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:03:37 ]
- デファクトスタンダード(笑)
まあ、そうだろうね。 XPが標準になってることで、.NETFrameworkデフォルトで入ってるだろうし 最近のすごいアプリ 3ds maxとか、C++/CLI(.NET使えるように拡張したC++)で 作られてるみたいだし
- 303 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:17:45 ]
- Win32で十分だろ。なぜ.Netなんかで開発するの?
いまはじめてWindowsFormアプリケーションってのを生成してみたが さっぱりわからない。ショック。
- 304 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:37:31 ]
- しょぼいツール作るならWin32でいいけど、
こったもの作るなら、.Net最高
- 305 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:55:04 ]
- 自分がMFCを勉強し始めた時と比べると、C++/CLIの学習は
随分楽だなーと思った。 でもC++/CLIの描画がGDI+を使わなくなるか、GDI+の性能が 大幅アップするまではMFCを使い続ける気がする。
- 306 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 09:55:15 ]
- 結局.NETってライブラリとして充実しているんだろ?
Win32だって充実させてくれたらいいじゃん。 なんで言語まで変えるの。。
- 307 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 10:45:24 ]
- >>303
Win32、MFCが理解できて .NET Frameworkが理解できないヤツはいねえだろ MTは運転できるがATは運転できない というヤツがいないように
- 308 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 22:12:33 ]
- >>304
逆だろ? こったものを.NETで作るのは無理 メモ帳程度のテキストエディタなら.NETでも十分つくれるが メジャーなテキストエディタに勝とうとしたら.NETでは絶対無理
- 309 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 23:03:43 ]
- ちょっとさみしい気もするが手軽にきれいなのできるからいいよ
クラスの構造もMFCと比べるときれいだし、仕事の関係上使えないのが残念なくらいだ C#とかで作ってるとVBって(使ったことないけど)こういうもんなのかなーって思うくらい簡単
- 310 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:41:09 ]
- ていうか基本的に糞重いアプリができる
- 311 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:28:10 ]
- 296じゃありませんが
ちょっと前(>295)で CCriticalSectionを直接Lock/Unlockするのではなく CSingleLockを使った方がいいとありますが その理由はなぜでしょうか? CCriticalSectionだと待ち合わせ時間が設定できないって事くらいですか?
- 312 名前:デフォルトの名無しさん [2007/10/22(月) 22:31:04 ]
- MFC71.DLLは何処からダウンロードできるのですか?
- 313 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:29:00 ]
- >>311
別に深い理由ではなく、単に解放し忘れが無くなるだけ。 途中returnや例外でロックしっぱなしとかなると危険だし。
- 314 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:20:13 ]
- C#でのDataGridViewみたいな便利なものはないんですか?
- 315 名前:sage mailto:sage [2007/10/23(火) 02:40:33 BE:233717663-2BP(0)]
- 質問です。
あるGUI有りのアプリから、別のDLLの関数を呼び、そのDLLが 生成したウィンドウを表示したところ、Tab キーや、OK, Esc キーなどが 期待通りに動作しない現象が起こりました。 具体的には、CMainFrame から DLLのある関数を呼び出し、その関数に HWND を引数に与えて、そのHWNDを親ウィンドウとした、別ウィンドウを 表示しています。モーダルではありませんが、モーダルでも同じ挙動です。 原因が分かる方、教えてください。 VC++ 8.0 SP1 WinXP SP2
- 316 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 13:45:48 ]
- CEditコントロールで質問ス
カレット位置を取得するためにGetSel()を使うというのは理解できるんですが、 範囲選択状態となっている場合、カレット位置がどこにあるかという判断はどーすればいいっスか?
- 317 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 14:14:30 ]
- >>316
CWnd::GetCaretPos()で取れると思う。尤も、クライアント座標だから適当に変換する必要があるけど。
- 318 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 14:47:10 ]
- >>317
ありがとうっス! ちょっと試してみるっス
- 319 名前:315 mailto:sage [2007/10/23(火) 16:44:59 ]
- 自己解決しました。失礼しました。
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vccore/html/_core_Are_there_any_MFC_classes_or_functions_that_cannot_be_used_in_an_MFC_DLL.3f.asp
- 320 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 17:12:21 ]
- VS2005、ダイアログベースで、マウスオーバーイベントを
ボタンコントロールが取得するにはどうしたらいいでしょうか? ↓やったこと ボタンを画像にするのに、オーナードローでやってみて それ自体は問題なかったのですが マウスオーバーしたときにも画像を変えようと思ったら マウスオーバーのイベントが来てませんでした。 MSDNみてCBitmapButtonなるものを使って見たのですが AutoLoadでアサートが出てしまって動きませんでした。
- 321 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 17:41:50 ]
- >>320
前似たようなもの作った時は CButtonのサブクラスの中のOnMouseMoveで マウスが入ってきたことを検知し、TrackMouseEventを呼び出してWM_MOUSELEAVE を発生させるようにし表示画像を変えてた。一般的なやりかたかどうかは知らない。 WM_MOUSEHOVERも同様にTrackMouseEventで発生させることができる。 マウスオーバーってホバーのことだよね?
- 322 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 17:44:08 ]
- >>321
そうです。 ありがとうございまいた。 ちょっくらやってみます。
- 323 名前:デフォルトの名無しさん [2007/10/24(水) 17:42:18 ]
- Win32APIスレから誘導されてきました。
MSGraph.Chart(Officeについてくるグラフコンポーネント)をウィンドウに張り付けたいんですが、どうすればいいですか? MFCのCWnd::CreateContorlをいじってみましたが、うまくいかないです(´・ω・`) ゚・(ノД`)教えて下さい。 CWnd* wnd = new CWnd(); BOOL ret = wnd->CreateControl("MSGraph.Chart", "", WS_VISIBLE, rc, this, 2000); で、retがFALSEになります。 CreateControlの第1引数を"mscal.calendar.7"にすると、ちゃんとカレンダーが表示されます。
- 324 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 18:45:52 ]
- ActiveXコントロールとして貼り付けたら?
- 325 名前:323 mailto:sage [2007/10/24(水) 19:25:39 ]
- >>324
(Officeフォルダ)\Graph9.olbをリソースエディタのツールボックスに登録しようとしたら、 「有効なCOMサーバーではありません」と言われました(´・ω・`) そもそも根本的に無理なのでしょうか?
- 326 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:13:31 ]
- ググってみて思ったのだが、
もしかすると、MSGraph.ChartはActiveXドキュメントかもしれない。 自分の所にはOffice無いからそれ以上は分からないけど。
- 327 名前:323 mailto:sage [2007/10/24(水) 22:38:16 ]
- >>326
情報ありがとうございます(・∀・) ActiveXドキュメントでググリましたが、要領を得ません(;´Д`)スミマセン ActiveXドキュメントというのは、それ単体では表示できず、 ExcelのWorksheetや、RichEdit等にしか貼り付け出来ないということでしょうか?
- 328 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:24:44 ]
- 質問です。
class CHogeA; class CHogeB; class CHogeA : public CView { ... private: CHogeB m_hogeB; }; class CHogeB : public CWnd { }; CHogeA 上に CHogeB を貼り付けて使っていたのですが、そうすると、 CHogeA にて例えばマウス操作などのイベントを拾うことが出来ません。 そこで、 1. CHogeA でも各種イベントを拾う、一般的な方法がありますか? 2. CHogeA と CHogeB で、ウィンドウを2枚作らず、1枚を共有するような手法がありますか? よろしくお願いします。 WinXP SP2 VC++ 8.0 SP1
- 329 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:32:13 ]
- >217
- 330 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:14:52 ]
- >>328
>1. CHogeA でも各種イベントを拾う、一般的な方法がありますか? あなたの書いたとおりの構成でサンプルを作ってみたらマウスイベントは 全てCHogeAに流れました。逆にCHogeBでマウスイベントを拾うためには 細工が必要でした。 >2. CHogeA と CHogeB で、ウィンドウを2枚作らず、1枚を共有するような手法がありますか? おそらくあります。 要するに情報不足杉です。
- 331 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:09:51 ]
- SDIでCView
CViewでCWndをCreate あとはどこもいじらないでCWndにMouseMoveイベント来たよ
- 332 名前:デフォルトの名無しさん [2007/10/27(土) 10:30:33 ]
- スレ間違いで再投稿です。
マルチすいません・・・ Visual studio6.0です。 ラジオボタン2個、ボタン1個のwindow作ってます。 MFCでラジオボタンにintの変数を追加しようと してもbuttonにしか変数が追加できません。 どうすれば、受付けてくれるのでしょうか? VS.NET仕様のテキストを見ながらやってて違いに困ってます・・・
- 333 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:48:56 ]
- ラジオボタンはボタンなの
- 334 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:53:22 ]
- >>332
ラジオボタンのグループ分け(WS_GROUPのオン・オフ)がきちんとできているか? 面倒ならDDX_Radio()を直書きしてもいい。案外簡単だから。
- 335 名前:デフォルトの名無しさん [2007/10/27(土) 11:07:00 ]
- >>333
言われて見れば・・・「チェックしたか、してないか」しかないのに 変数の設定っていうのも変な気がします・・・。 >>334 グループ分けは出来てると思うので ラジオボタンがどんな値を返すのか勉強してきます。 VC6.0準拠の本かサイトも探してきます・・・
- 336 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:50:57 ]
- VC2005でもそこら辺の仕様は変更されていなかったはず。
MFCのヘッダをDDX_Radioで検索して、実際に中身を見た方がたぶん早い。
- 337 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:12:59 ]
- グループをチェックすれば出てくるな
- 338 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:21:37 ]
- Win2k 上で vc6 sp6 使ってMFC勉強中の者です。
ウィザードで CFormView 指定してつくったもので、 その画面のボタンから CDialogの Modal で表示してる部分があるんですけど、 垂直方向に一画面に入りきらなくなってスクロールさせようと思い、ハマッテマス。 リソースで垂直のチェック入れて、OnVScrollとってきてScrollWindowExつかって みたんですけど再描画で位置がリセットされちゃうんで OnDrawで覚えた値を使って ScrollWindowExで戻してます。みなさんもこんなやり方で実装します? アドバイスお願いしますm(__)m やり方、なんか間違ってる気がするんですよね……。 CFormViewでdoModal できれば楽なのになぁ〜。
- 339 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:13:37 ]
- リセットされるところをみるに、SetScrollPosしていない予感。
WM_VSCROLLはスクロールさせたいという意図を伝えてくるだけで、 実際にスクロールバーの位置を確定させるのはプログラム側の仕事。
- 340 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:35:10 ]
- スクロールバーが付いたダイアログって見たことない。
止めるつもりは無いけど、自分ならプロパティシート使う。
- 341 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:13:02 ]
- もう1個別のCFormViewのウインドウ出すのは可能だし
CDialogの上にCFormViewを貼り付けることも可能 でも問題はそういうことではなさそうだな
- 342 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:51:04 ]
- レスありがとうございます
>>339 ウィンドウについてるって事で OnVScroll内に引数でもってきてる pScrollBarは null なので pos = ::GetScrollPos( m_hWnd, SB_VERT );しています。 あとは nSBCodeみて 移動量決め SetScrollPos( m_hWnd, SB_VERT, pos, TRUE );して ScrollWindowEx( 0, 垂直移動量, NULL, NULL, NULL, NULL, 0 ) してます で…再描画でリセットされてしまうので OnPaint()用意して ScrollWindowEx( 0, 総移動量, … って感じになっちゃっております。 >>340 なるほど。プロパティシートですか。 いやぁこまった、変えられない仕様みたいでして。 >>341 CDialog上にCFormViewの貼り付けですか。 CDialog持ってるクラスのメンバーに CFormView持ってるクラスをメンバーのインスタンスもたせるのかなって想って ちょっと今やってみましたがProtectあたりでひっかかってコンパイルもとおりませんね。 難しい……。
- 343 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 21:18:23 ]
- 子ウィンドウを全然動かしていない件について。
そりゃ、再描画でリセットされるように見えるわ。 子ウィンドウを一つ一つ動かすより、 フレーム-CDialog派生の子ウィンドウ(=フォーム) という風に乗せて、 フォームの位置を動かす感じで作ればいいんじゃないかな。
- 344 名前:デフォルトの名無しさん [2007/10/28(日) 01:43:07 ]
- CSliderCtrlを使用して、マウスでクリックした位置に一発で移動する動作をさせたいです。
(通常はページスクロールをしますが、この動作をさせずに、クリックした位置に移動させたいです。) ためしにGetChannelRectでスライダーの稼動範囲(厳密には稼動範囲より広いエリアになってしまうけど。。)とマウス位置から Posを求め、SetPosしています。これだと問題が二個あります。 1)ユーザーが一回クリックすると、見た目上二回動く 2)そもそもGetChannelRectはスライダーの稼動範囲を取るわけではないので、微妙に位置の計算が狂う。 なにか良いアイディアは無いものでしょうか?
- 345 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 03:19:32 ]
- ぶち殺すぞ糞が
- 346 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 03:39:56 ]
- ↑しゃぶれよ
- 347 名前:デフォルトの名無しさん [2007/10/30(火) 11:52:37 ]
- とりあえず保守させておいてくれ
また質問したい時がくるかも知れんから
- 348 名前:デフォルトの名無しさん [2007/10/31(水) 09:32:39 ]
- tserve01.aid.design.kyushu-u.ac.jp/~fujiki/vc_lecture/c_5.htm
のページを見てキャラクターを表示しようとしてるんですが キャラクターの白い部分が残って うまく表示がされません、どうすれば良いか教えて頂けないでしょうか。 お願いします。
- 349 名前:291 mailto:sage [2007/10/31(水) 10:37:25 ]
- そのページを見てわからんのなら
君にはむりだ
- 350 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 10:49:25 ]
- >>348
謎は解けた! マスク描画のROPを、SRCPAINTからMERGEPAINTに変えれば正しく描画される。 普通はキャラ画像の背景は黒にして、 SRCANDで抜いてSRCORで重ねるってのが定番だと思うのだけどな。 CImageListならカラーキーを使った描画ができるから、 こっちを使った方が手っ取り早いかも。
- 351 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 12:36:21 ]
- >>350さん
ありがとうございました。 感謝感謝です。
- 352 名前:デフォルトの名無しさん [2007/11/01(木) 07:21:07 ]
- どうも、他スレから流されてきました。
Win32環境+VS2005で開発を行っています。 ダブルクリックでファイルを開く処理に対応させようと頑張っていた所 Debugビルドでは成功したのですが、Releaseビルドにするとファイルを開かなくなりました。 (でもショートカットに開きたいファイル名を指定するとReleaseビルドでもきちんと開く) そこで処理を追っていくと、どうもInitInstanceメソッドが呼び出されていないようなのですが、似たような経験をされた方はいらっしゃらないでしょうか?
- 353 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:16:22 ]
- そこまで分かってんなら呼び出せばいいじゃん
- 354 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 14:28:25 ]
- CTreeCtrlを使ってエクスプローラライクなダイアログを作っています。
メーラーの未読数表示のように、フォルダ内のファイル数を表示する 方法はあるのでしょうか? ラベル編集も可能にしたいので、"フォルダ名(n)"のように直書きでは 問題が出てしまいます。 やっぱり無理矢理作るしかないのでしょうか?
- 355 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 14:57:38 ]
- >>354
楽な方法は無いな。 NM_CUSTOMDRAWを始め、 いくつかの通知メッセージを処理しないと実現できないと思う。
- 356 名前:352 [2007/11/01(木) 15:25:21 ]
- >>353
すいません、関連付け関係のレジストリをすべて掃除したら直りました。 プログラムのミスではなかったようです。orz
- 357 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 15:33:26 ]
- ダブルクリックってそういう意味か
仕様を満足に説明できないやつは1人でやってればいいと思う
- 358 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:04:18 ]
- MFCを使った有名なソフトはどんなものがあるんですか?
- 359 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:51:16 ]
- 秀丸
- 360 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 00:07:13 ]
- ペイント
- 361 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 15:55:16 ]
- >>358
有名になる予感 www.cute.or.jp/~makuchan/wore.html 10/31
- 362 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:48:38 ]
- Internet Explorer
- 363 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:19:39 ]
- >>361
いいねえ。 これは期待できる。
- 364 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:58:22 ]
- 得体の知れないリンクは踏まないようにしてる
- 365 名前:デフォルトの名無しさん [2007/11/05(月) 22:00:13 ]
- マルチです。すいません。
tserve01.aid.design.kyushu-u.ac.jp/~fujiki/vc_lecture/c_6.htm のお絵かきソフトを作るページを参考にしてるんですが 「ToolBar」の「IDR_MAINFRAME」のボタンとIDを書き換えても ページに書かれているようなIDに対応するような関数が作られず ボタンも描いたように表示されず灰色の使用不可のような状態 になってしまいます。 VS2005stdです。 どなたか、わかるかた、VS2005ではどうしたらよいか教えていただけないでしょうか。 お願いします。
- 366 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:06:23 ]
- >365
教えてやったのに無視してこっちに引越しか? とんでもないやつだな
- 367 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:28:00 ]
- VC++2005スタンダードを使ってMFCを勉強しているのですが、
onNewDocumentやonOpenDocument、Serializeなどファイル操作や イベント処理などがどういう流れで行われているのかがいまいち把握できないので、 詳しく解説してある良い書籍とかないでしょうか? ちなみに今頃MFCかよとかなしでおねがいします。
|

|