[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 09/12 19:35 / Filesize : 114 KB / Number-of Response : 423
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

■MFC相談室 mfc18d.dll■



1 名前:デフォルトの名無しさん [2007/08/01(水) 06:23:28 ]
Microsoft Foundation Classライブラリ専用スレです。

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++)で
作られてるみたいだし


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イベント来たよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<114KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef