[表示 : 全て 最新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ライブラリ専用スレです。

152 名前:147 mailto:sage [2007/09/16(日) 18:02:30 ]
..rc には
IDD_TEST DIALOGEX 0, 0, 250, 170
という記述がありました。

リソースをビルドという方法がよくわからなかったのですが、
 ソリューションのリビルド 
. rcファイルのコンパイル
の両方とも、現象は変わりませんでした。
リソースのビルドって、他のやり方でしょうか?


153 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:10:28 ]
つ AFX_MANAGE_STATE

154 名前:147 mailto:sage [2007/09/16(日) 18:43:56 ]
>>153
DLL関数の先頭に
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
を追加したらうまくいきました。

どうもありがとうございました。

155 名前:デフォルトの名無しさん [2007/09/19(水) 17:46:56 ]
ダイアログの上でエンターキーを押すと、
プログラムが正常終了してしまいます。
プログラムを終了させたくないのですが、どうすればいいのか教えて下さい。
よろしくお願いします

156 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 18:47:04 ]
>>155
つ[OnOK()]

157 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:23:59 ]
いや俺は PreTranslateMessageで処理するほうが好きだ

158 名前:155 mailto:sage [2007/09/19(水) 20:06:07 ]
>>156,157
ありがとうございました
OnOK()で対応しました

159 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:57:01 ]
OnOK()で対応するというのは間違っていると思う。
OnOK()の意味をちゃんと考えるべき。
そして「Enterキーを押したときにダイアログを終了させない」という仕様の意味をちゃんと考えるべき。
するとどうやって実現するのが正しい形かわかるでしょ。
面倒でも、何事も正しい形ってものを常に意識して作っておかないと後悔するよ。大袈裟だがw

160 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:19:33 ]
MFCが勝手に定義してる機能を殺すだけだろ
元のダイアログにはそんな機能ない



161 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 22:50:34 ]
リターンキーが押される→OnOK()が呼び出される→OnOK()の処理をキャンセルする
よりは
リターンキーが押される→OnOK()を呼ばないようにする
の方がスマート。
よってPreTranslateMessageを推奨するよ。
他の用途にも使えるし覚えといて損はない。

162 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 23:14:48 ]
そこまで気にするんなら
メッセージ発生するごとにPreTranslateMessage呼ばれるのも気にした方がいいよ
OnOKよりはるかにオーバヘッドになってるはず

163 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 12:46:43 ]
Okボタンが在る場合、
Okボタンがデフォルトボタン形状なのはUI的にまずい。

164 名前:デフォルトの名無しさん [2007/09/20(木) 17:56:11 ]
フォトショップ等、メインウィンドウの他に、
レイヤー情報などを表示するウィンドウがあるんですが、
それをCDialogで作ろうと思っているんです

m_dlg.Create( CTestDialog::IDD , this );
m_dlg.ShowWindow( SW_SHOW );

で、一応表示されるんですが、
ダイアログにフォーカスが写ると、
メインウィンドウのタイトルバーが灰色になるのです。

正しい、子ウィンドウの作り方ってありますか?


165 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 19:38:14 ]
正しいかどうか知らんけどツールウィンドウ

166 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 12:26:58 ]
Enterキーは、OKボタンを押すのではなく、デフォルトボタンを押す操作です。
PreTranslateMessageでEnterキーを弾いてしまうと、
OKボタン以外のボタン上でEnterキーを押したときにも無視されてしまいます
(そのときにはそのボタンが押されるべき)。

もちろん、PreTranslateMessageでフォーカス位置を調べてもいいけど、
そこまで面倒なことをするのなら、
OKボタンをDisable・非表示にしたほうが早いです。

OKボタン自体は残しておきたいのであれば、
なにもしない非表示ボタンをデフォルトにすればよいです。

PreTranslateMessageの方法だと、デフォルトボタン枠が出ているのに
Enterキーが効かないというGUI上の矛盾もあります。

167 名前:392 mailto:sage [2007/09/21(金) 21:55:41 ]
> OKボタン自体は残しておきたいのであれば、
> なにもしない非表示ボタンをデフォルトにすればよいです。
デフォルトボタンは何ですか、と問われたときに、ありませんと答える方が良いかと。

168 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:03:04 ]
今、以下の方法で自作ボタンを作ろうとしています。
・CStaticを派生させる。SS_BITMAPとSS_NOTIFYを設定する。
・OnMouseMoveでカーソルが乗ったらSetCaptureなどして降りるまでハイライト用のビットマップをSetBitmapする。
・カーソルが降りたらReleaseCaptuerして通常のボタン用ビットマップをSetBitmapする。
・OnLButtonUpで親ウインド(CDialog)にWM_COMMAND,BN_CLICKEDをPostMessageする。下記ソース参照。あと押された時のビットマップをセットする。
CMyButton::OnLButtonUp
{
 WPARAM w = MAKEWPARAM(id,BN_CLICKED);
 ::PostMessage(hParent,WM_COMMAND,w,0);
 ごにょごにょ
}

すると確かにLボタンを押下すると親のダイアログに通知されます。
しかしながら親ダイアログではON_BN_CLICKEDマクロで登録したハンドラが2回呼ばれます。
一回目は不明。2回目は私の作ったCMyButton::OnLButtonUpから。

誰が一回目のBN_CLICKEDを送るの?CStaticの規定クラス??

169 名前:392 mailto:sage [2007/09/22(土) 22:02:59 ]
winuser.h
#define STN_CLICKED 0
#define BN_CLICKED 0

170 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 22:19:04 ]
>>169
ありがとうございます。



171 名前:デフォルトの名無しさん [2007/09/22(土) 23:31:42 ]
本当にMFCが全くわかりません。
とにかく、GUIを作るのが難しすぎに感じます。

VC#なんて超簡単にGUI作れるのに・・・

まだまだ、VC+++MFCはデファクトスタンダードなんですかね?

172 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 00:33:02 ]
>>171
MFCは欠陥製品だと思う

対抗するボーランドがコケちゃったんでMSの一人天下になっていますが
これに付き合わされる開発者はたまらない

C#を使いましょう


173 名前:デフォルトの名無しさん [2007/09/23(日) 00:42:51 ]
慣れの問題ですよ
VC#が簡単に、作れるって言っても例えばテキストエディタを作る場合
商用を考えたら標準のTextBoxなんて使い物になりません。
一から書くことになります。

だったら、WIN32APIを手間なく呼べるVC++に利がある。
VC#だと使う、WIN32APIをいちいち宣言しなくてはいけない。

174 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 01:58:19 ]
MFC使わねばならん環境なら、頑張って使えるようになればいいだけだし、
使わなくて言い環境なら、C#でやればいいだろう。
何故このスレで愚痴るのか理解できない。

175 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 23:52:49 ]
>>174
MFCの習得に挫折した人がMFC叩きしてるだけ。
穏やかになだめてあげてください。

176 名前:デフォルトの名無しさん [2007/09/24(月) 00:10:51 ]
確かに他のライブラリと比較すると挫折率はダントツに高いかもしれん
よく、Cはポインタで躓いたなんて人いるけど似たようなもん

177 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 01:45:06 ]
ていうかあまりの複雑さと面倒臭さに死にたくなるときあるな
なんでもかんでもメッセージって逆に面倒臭いだけだったんじゃないだろうか・・・

178 名前:デフォルトの名無しさん [2007/09/24(月) 02:17:59 ]
けど、大抵の商用ソフトはMFCが使われている。
.NETなんて皆無では???

179 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 02:47:39 ]
>>178
だって糞おせぇし

180 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 02:54:45 ]
Vistaならネイティブとほとんど変わらんが?



181 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 03:10:20 ]
>>180
それって普通に作ってた奴の方が遅くなったんでしょ?w

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 ]
トラッカークラス使えよ






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

前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