- 1 名前:デフォルトの名無しさん [2007/08/01(水) 06:23:28 ]
- Microsoft Foundation Classライブラリ専用スレです。
- 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
ありがとうございます!
- 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++)で 作られてるみたいだし
|

|