- 1 名前:デフォルトの名無しさん [2007/08/01(水) 06:23:28 ]
- Microsoft Foundation Classライブラリ専用スレです。
- 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
ありがとうございます!
- 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かよとかなしでおねがいします。
- 368 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 02:40:56 ]
- いや、本当にいまさらMFC勉強しても意味がない
>>367 みたいな質問してるようだと、人に見せれるようなアプリがかけるまで、2年以上はかかる 2年後にはMFCはVSからなくなってるぞ
- 369 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 11:34:51 ]
- なくなるわけねーだろ
お前みたいな、おこちゃまアプリしか作らんやつには MFC は必要ないだけだ
- 370 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 12:46:27 ]
- 2年後が楽しみになってきました
- 371 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:17:56 ]
- 2年後にMFCが無くなってたら怖いな。
M$がwin32apiを無理矢理クラス化し、永続させてきたMFCを ばっさり切るなんて、今までの努力を捨てちまうようなもんだもんな。 それにVBを.net化したりしてるのを見れば「まだまだ、へこたれへんでー」 ってな感じに受け止めれる。 まぁ、主流はVC#VB.netの方針で発展していくんだろうね。
- 372 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:37:15 ]
- >>371
いいえ。C++の財産はとてつもなく大きいものです。 C++/CLI について語ろうぜ Part2 pc11.2ch.net/test/read.cgi/tech/1142147319/ これ最強
- 373 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:45:45 ]
- Picture ControlのBorderをプログラム実行中に変更する方法を教えてください
- 374 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 16:16:42 ]
- 変らない?
- 375 名前:373 mailto:sage [2007/11/06(火) 16:17:49 ]
- >>374
やり方がよく分からないんです。
- 376 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 10:43:29 ]
- パスがファイルかフォルダかを判定する方法があれば教えていただけないでしょうか?
そのパスは存在することが前程でよいのですが。。。 よろしくお願いいたします。
- 377 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 10:53:11 ]
- ファイルの属性を見る
MFCにそういうのを扱うクラスはなかったと思う
- 378 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 10:58:57 ]
- >>377
CFileにGetStatus()があるのだが。static版の方は引き数にフルパスを取るから一応使えると思う。
- 379 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 11:25:51 ]
- CFileでディレクトリも扱えるの?
- 380 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 11:32:05 ]
- >>379
CFile::GetStatus()のstatic版は、実体を必要としないので普通の関数のように使える。 つまり、その対象を予め開いておく必要はない。詳しくは、MSDNでも読め。
- 381 名前:367 mailto:sage [2007/11/07(水) 18:08:26 ]
- >>368
何を根拠に2年なのかkwsk、というかカチンときた。 まぁ、ATLとか.NETとか出てる中、いまどきMFCやるのもあれかもしらんが・・・ で、MSDN以外に参考になるものはないってことかい?
- 382 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 18:13:41 ]
- カチンと来るのは勝手だけれど、MFCが斜陽なのは事実。
一頃本はたくさんあったようだしWebSiteもそれなりにあると思う。 それを探せないようでは先が思いやられるのも同感。
- 383 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 18:15:08 ]
- ATLとMFCって同じレベルのものなの?
全然知らなくてすまそ
- 384 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:48:24 ]
- 無駄に複雑で使えないっていう点では同じレベル
- 385 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:13:42 ]
- 簡単なツールならVB感覚でさくっと作れるじゃない。MFCは。
- 386 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:05:34 ]
- やっぱり.NET
- 387 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 15:15:14 ]
- View画面でのサイズ指定で
SDIのCMainFrameウィンドウサイズを変更する関数ってありますか? やっぱり、指定のサイズ+枠のサイズとかメニューのサイズとかを計算しないとだめですか?
- 388 名前:デフォルトの名無しさん [2007/11/09(金) 16:37:49 ]
- CHTMLViewクラスを使って表示したHTML文書のテキストの
色などをプログラム中から変更することはできるでしょうか? PutPorpertyというメソッドを使えばできそうな気がするの ですが使い方がよく分かりません。 <P class='test'>Hello, World</P> というテキストの色を赤にする方法を教えてください。
- 389 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:49:22 ]
- >>388
CHTMLViewのGet/SetPropertyは、単にIWebBrowser2の同メソッドが呼ばれるだけ。 GetHtmlDocument()から始めるしかないと思う。という訳で、試しに書いてみた。 ちなみに、MFCでなくてATLだが全く問題無い。 // 1. CSSを追加してみる方法 CComPtr<IDispatch> spIDisp; spIDisp.Attach(GetHtmlDocument()); CComQIPtr<IHTMLDocument2> spIDom(spIDisp); CComPtr<IHTMLStyleSheet> spCSS; spIDom->createStyleSheet(NULL, -1, &spCSS); long idx; spCSS->addRule(CComBSTR(_T("P.test")), CComBSTR(_T("color:red")), -1, &idx);
- 390 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:53:27 ]
- // 2. エレメントに直接スタイルを追加してみる方法
CComPtr<IDispatch> spIDisp; spIDisp.Attach(GetHtmlDocument()); CComQIPtr<IHTMLDocument2> spIDom(spIDisp); CComPtr<IHTMLElementCollection> spElemCol; spIDom->get_all(&spElemCol); spIDisp.Release(); spElemCol->tags(CComVariant(_T("P")), &spIDisp); CComQIPtr<IHTMLElementCollection> spElemCol2(spIDisp); for ( int idx = 0 ; ; idx++ ) { spIDisp.Release(); spElemCol2->item(CComVariant(idx), CComVariant(), &spIDisp); if ( !spIDisp ) break; CComQIPtr<IHTMLElement> spElem(spIDisp); CComBSTR clsname; BSTR bstr; spElem->get_className(&bstr); clsname.Attach(bstr); if ( clsname != _T("test") ) continue; CComPtr<IHTMLStyle> spStyle; spElem->get_style(&spStyle); spStyle->put_color(CComVariant(_T("red"))); }
- 391 名前:388 mailto:sage [2007/11/09(金) 22:57:03 ]
- >>389 >>390
ありがとうございます。ATLは全く知らないのでコードは謎ですが、 必要なヘッダを調べてインクルードして何とか両方とも動かすこと ができました。 if ( clsname != _T("test") ) continue; のところで エラーが出たので調べてみると CComBSTR::operator==は 定義されていましたが CComBSTR::operator!=は定義されて いませんでした。if ( clsname == _T("test") ) { /*../*/ } と直すとコンパイル通りました。これはVisual C++6.0の 不具合かもしれません。 師匠になってほしいです。
- 392 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 02:19:17 ]
- blogs.msdn.com/somasegar/archive/2007/11/09/visual-c-libraries-update.aspx
結局捨てないのか ともかく壮絶なソースコードが見れそうだ
- 393 名前:デフォルトの名無しさん [2007/11/14(水) 11:34:45 ]
- CReBarでレバーコントロールを利用しているのですが、
複数のコントロールを1つのバンドに含めるにはどうすればいいでしょうか。 CReBar cRebar; … cRebar.AddBar(コンボボックス) cRebar.AddBar(ボタン) とすると、コンボボックスとボタンが別々のバンドに配置されますが、 目的としては、コンボボックスとボタンを同一バンドに配置したいです。
- 394 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 12:30:31 ]
- 各バンドには 1 つしか子ウィンドウ (コントロール) を含むことができません。
各バンドに複数の子ウィンドウを含めたい場合は、この点が制約になります。
- 395 名前:393 mailto:sage [2007/11/14(水) 17:10:33 ]
- なるほど、ありがとうございます。
ちょっと微妙ですけど、コンボボックスとボタンをスタティックコントロールの子にして、 そのスタティックコントロールをAddBarすることにしました。
- 396 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 00:22:50 ]
- MFCでExcelのセルみたいなぐりっどコントロールってないんですか?
- 397 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 01:22:56 ]
- ありません。ListCtrlを自前で拡張するか、CodeGuruでそうしたものを探すか、市販のライブラリを使うか、
ExcelをDDEで使うことになるかと。
- 398 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 18:29:30 ]
- 拡張DLLでダイアログクラスをエクスポートしようとしているのですが、
ヘッダのクラス宣言の中に enum { IDD = IDD_… }; という記述があります。 このリソースIDは拡張DLL側のResource.hに書かれているものです。 拡張DLLを使う側がこのヘッダをインクルードすると、 リソースIDが見つからないと言われると思うのですが、 拡張DLLでダイアログクラスをエクスポートする場合 この部分はどのように対応すればよいものなのでしょうか。
- 399 名前:デフォルトの名無しさん [2007/11/16(金) 16:17:31 ]
- 保守!
- 400 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:52:56 ]
- >>398
そのリソースIDが記述されてるヘッダをインクルードしなきゃいんじゃね? 使う側は、拡張DLL側のリソースIDなんて余計なだけじゃね?
- 401 名前:デフォルトの名無しさん [2007/11/17(土) 18:06:11 ]
- MFC VC でセマフォや共有メモリみたいなのって無いの?
- 402 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:15:43 ]
- >401
自分で調べようとも思わないのか?
- 403 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:25:37 ]
- ぐぐってみようとも思わなかったんだろうな
- 404 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:25:53 ]
- VS2005付属MSDNのキーワードに「セマフォ」って入れるだけで
あっさり対応するクラスが見つかった件について。 おまえやる気無いだろ。氏ね。 >>401
- 405 名前:デフォルトの名無しさん [2007/11/17(土) 22:35:15 ]
- >>404
そんな高価なツールもってねえよばーーか
- 406 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:04:35 ]
- VS2005のどこが高価なんだよw
今までのこと考えたらクソ安いつーの つーかMSDNのちょっと遅れのイメージなんか完全フリーじゃねえか
- 407 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:12:13 ]
- MSのサイトでみれるMSDNはVS2005のとは別ものなの?
同じなら、オンラインで検索すれば。
- 408 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:15:43 ]
- 基本的には同じはずだが…
- 409 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:58:57 ]
- VS2005 MFCです
折れ線グラフを描画する、ツールを作りたいんだけど MFCのツールボックスには、ピクチャーコントロールというツールと カスタムコントロールというのがあるけれど、どう違うのでしょうか? また、グラフを描画させるにはどちらのコントロールを選んだ方がいいのでしょうか?
- 410 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:29:12 ]
- >>409
つ[TrueWinChart]
- 411 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:43:10 ]
- >>410
>>409です True WinChart for .NETですよね、標準価格:102,900円 そんな予算でないです
- 412 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:58:09 ]
- 自分で描画するだけだからコントロールは必要ない
- 413 名前:409 mailto:sage [2007/11/18(日) 19:11:21 ]
- >>412
ダイアログに直接描画するのではなく、ピクチャーコントロールかカスタムコントロールに 描いて、それをサブクラス化したいんだけど、違いがよく分からないんだよね
- 414 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:24:32 ]
- 違いは標準かカスタムか
- 415 名前:409 mailto:sage [2007/11/18(日) 19:34:14 ]
- ということは、カスタムコントロールのほうが、拡張性(自由度)が
高いってことだね?
- 416 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:56:50 ]
- 描画するだけなら、単純にウインドであれば良いだけじゃないの?
ゴテゴテ機能が付いている方がいろいろな横槍がはいって返って上手くいかないかもしれん。
- 417 名前:409 mailto:sage [2007/11/18(日) 20:34:14 ]
- >>416
言われてみればそうかも知れないな、 コントーロールを貼り付けて、描画専用クラスを別に書き、シリアル化したデータを 流し込んで、グラフを描画させようと思ったけど よく考えたら、描画専用クラスは、ダイアログに描こうがコントロールに描こうが必要なわけで 対象となるオブジェクトがどっちになろうが、使えるクラスを設計する方が賢いかもしれないね
- 418 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:17:07 ]
- .flvから0.5秒おきのBMPを作りたいんですが
何かヒントだけでもいただけたら
- 419 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:24:14 ]
- ヒント MFCと関係ない
- 420 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:34:30 ]
- >>419
とは思ったのですがやはりプログラミングのプロ集団は MFCスレかと思いまして。
- 421 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 14:26:56 ]
- B's Recorderみたいな画面作りたい><
- 422 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 15:29:48 ]
- >>420
DirectShowスレがあるぞ
|

|