MFC相談室 mfc23d.dll [無断転載禁止]©2ch.net

1デフォルトの名無しさん2016/09/21(水) 00:20:48.44ID:OfO+mYkd
Microsoft Foundation Classライブラリ専用スレです。

■MFC相談室 mfc21d.dll■
http://hibari.2ch.net/test/read.cgi/tech/1250919279/l50
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(v=VS.100).aspx

236デフォルトの名無しさん2018/07/06(金) 12:25:50.03ID:uTPDH9XV
EQ8

237デフォルトの名無しさん2018/07/07(土) 16:23:50.25ID:BnawPcHi
CListCtrでレポート表示のFullRowSelectをカスタムドローを弄ってます。

マウスがアイテムの上に来たら色を変えたいけど、カスタムドローのイベントハンドラだけできますか?
OnMouseMoveでどこにあるか判定してカスタムドローで描画が必要?


ビットマップを3番目のSubItemだけに貼るとか、16x16のSmallサイズ以外だとうまくいかないとか、癖が凄い。

238デフォルトの名無しさん2018/07/23(月) 18:19:00.33ID:+TIH++V2
tooltipの表示内容を一つのピクチャコントロール内で変更したいのですが、マウスカーソルが一端ピクチャコントロールから外れないと、ツールチップの内容が更新されないようです。onmousehoverなどを使わないと駄目でしょうか?

239デフォルトの名無しさん2018/07/24(火) 07:28:28.65ID:vj16B9du
tooltipの解決策を見つけました。
http://www.geocities.jp/sunayamak/study/mfctooltip.html

240デフォルトの名無しさん2018/07/27(金) 23:03:38.30ID:FVoX1kIB
Tooltipの件ありがとうございます。
おかげさまで何とか解決できました。

241デフォルトの名無しさん2018/08/02(木) 20:01:14.70ID:lFbk57E7
datを生成するMFCプログラムがありまして、そのdatからデータを読み込んでexcelの形式に合わせて出力するダイアログベースのMFCプログラムがあります
最初のプログラムから呼び出されて処理をするだけなので、ウインドウの表示とかしないです。ただただ処理して終わりです

それで問題なんですが通常のダイアログを使ったプログラムのように読み込み・変換処理を全部ダイアログ部分に書いてあるんです
ダイアログ使いもしないのにここに書くのおかしくないですか?と聞いたら表示されないんだしいいでしょと。画面表示を行わないMFCプログラムの場合、コードはどこに書くのが自然なんでしょうか?

242デフォルトの名無しさん2018/08/03(金) 10:09:25.61ID:SxfGFWQF
スレッドを別けたいという意味か?

243デフォルトの名無しさん2018/08/03(金) 18:35:46.47ID:uhu4d/dd
あーすいませんわかりにくかったですね
メインプログラムがあってその内部でdatを生成するんですよ
で、そのdatのパスをコマンドライン引数で別のプログラムに渡すんですね
スレッドというかそもそも2つのプログラムですわ

244デフォルトの名無しさん2018/08/03(金) 18:52:53.67ID:o/XiGXrO
MFC関係ないのにここで聞くのおかしくないですか?

245デフォルトの名無しさん2018/08/03(金) 19:53:47.89ID:82qJLwKQ
事情が見えない。

どーーしても別プログラムにする事情があると仮定すれば
DialogやConsoleで構わないと思う。
冗長さを排除したいなら_tWinMainから書く手もあるけど
体感できるような差は出ないかと。表示されないんだしいいでしょw

246デフォルトの名無しさん2018/08/05(日) 03:07:58.27ID:lHG7kQYc
>>241
>ダイアログ使いもしないのにここに書くのおかしくないですか?

じゃぁどこに書けばいいの?

247デフォルトの名無しさん2018/08/05(日) 10:12:06.95ID:D9xcyyWx
>>241
MFCの仕組みを使いつつ、まったくウィンドウ表示が不要なものなら、
アプリケーションクラスのInitInstance()の中で処理して、
FALSEを返してすぐ終了するという流れでよいのでは。

248デフォルトの名無しさん2018/08/06(月) 22:59:00.43ID:OCzRfTP8
>>247
結局それにしました。
あとは処理を分担するふっつーのC++クラスいくつか作ってダイアログは完全に使わない感じで

249デフォルトの名無しさん2018/08/07(火) 05:06:10.31ID:OlmXtX1U
サマータイムも意味がないがそれ以上に意味がない

250デフォルトの名無しさん2018/08/14(火) 16:45:48.75ID:/E7izJ6Y
横から失礼します
InitInstanceの場合は標準出力にメッセージを出せますか?
標準出力に出すmfcプログラムだとすると、_twinmainを使うとどうでしょう。

251デフォルトの名無しさん2018/08/14(火) 19:27:19.22ID:iucfbso2
どちらもやったことありませんが可能だと思います。
私なら _tmain 使うとおもいますが。

2521552018/08/15(水) 09:28:56.94ID:IMvh29W2
CListViewがウィザードに帰ってきた!!
やほーい

253デフォルトの名無しさん2018/09/20(木) 15:00:47.62ID:i16QdaBT
MFCというかプログラミング姿勢に関しての質問かもしれないんですけど
CやC++で標準的に実装されてる機能とMFCクラスで実装されてる機能、どちらを使っても
同じことが実現できる場合、どちらを優先して使っていくべきなんでしょうか
要するに文字列ならchar*かstringかCStringか
ファイル操作ならfopenかstreamかCfileかみたいな

254デフォルトの名無しさん2018/09/20(木) 16:28:00.36ID:+UNWjTgc
MFCはオワコン

C#
使え

255デフォルトの名無しさん2018/09/20(木) 18:01:52.92ID:TMKaX7fO
>>254
そうでもない。

>>253
文字列は、単に文字列を保持したい場合や、文字列連結を行いたいような場合は、CStringが便利だと思う。

パーサーなんかを自作する時は、char *が便利。

256デフォルトの名無しさん2018/09/20(木) 18:03:18.25ID:TMKaX7fO
>>253
ファイル操作は、経験上は、fopen()が便利かな。

CFileは意外と不便だった気がする。


stringは、敢えて使う必要は無いと思う。CStringで十分。

257デフォルトの名無しさん2018/09/20(木) 18:03:55.46ID:a/ASjwi8
俺はできるだけ標準のほうを使うように切り替えた

258デフォルトの名無しさん2018/09/20(木) 22:16:17.61ID:P1fXZpxD
機能が同等なら好みでいいと思うけど、ファイル操作みたいにOS依存が強い機能は
標準ライブラリじゃ足りない場合が多いかな。

259デフォルトの名無しさん2018/09/21(金) 00:47:14.84ID:fuc3wJjq
MFCのGUI特化した本ないのかねー
大概が初心者向けでポインタやら構造体やらMFCと関係ないことが大半を占めてて知りたいことはうすーくしか書いてないのばっか

260デフォルトの名無しさん2018/09/21(金) 06:34:48.10ID:l8rNCGoZ
>>259
20年も前の本だが、お奨めは
ttps://calil.jp/book/475611749X

261デフォルトの名無しさん2018/09/21(金) 08:13:00.69ID:US5K8oGJ
>>260
ありがと
1万くらいなら買うんだけどなぁ

262デフォルトの名無しさん2018/09/21(金) 11:19:39.33ID:Nv8vO9db
本でなくて申し訳ないけど
ヘルプ。
クラスも大幅に拡張されてしまい昔の良書だとツリービュー、リストビュー位まで
最近のリッチな所はヘルプからサンプルソースにたどるのが早いかと

263デフォルトの名無しさん2018/09/21(金) 13:21:21.50ID:9xBQcUDg
Windows本体ってMFCで作ってるの?

264デフォルトの名無しさん2018/09/21(金) 17:59:38.20ID:/FmUXr1R
カーネルという意味では、ないやろな。性能面の要求はそんなに甘くないよ。
周辺の付加的モジュールでは、ATLとかは使ってるかも

265デフォルトの名無しさん2018/09/21(金) 19:07:45.12ID:M0K6QlhH
Windows7のペイントとかワードパッドとかをSpy++で見ると、
Afx〜の付くウィンドウクラス名が使われてるから、
このあたりはまだMFCで作られてたんじゃないだろうか。

266デフォルトの名無しさん2018/09/21(金) 22:10:32.71ID:Yrc2SKMF
なるほど

267デフォルトの名無しさん2018/09/22(土) 09:01:41.72ID:f3qG2b9t
「コンピューターの管理」なんかも、AfxWnd42やAfxFrameOrView42uが出てくる。

268デフォルトの名無しさん2018/09/22(土) 12:43:01.39ID:xOVRbYWf
>>261
>>259
うちにあるよ

269デフォルトの名無しさん2018/09/22(土) 12:44:10.56ID:xOVRbYWf
>>263
あやしいよな

270デフォルトの名無しさん2018/10/02(火) 12:20:10.07ID:T1hsru+o
VC++6.0で作っています。 MFCです。
普通にSDIを作りますが、そこからメニューバー等からダイアログボックスをモードレスで起動します。
すると、ダイアログを起動しながらメインウインドウも触れるようになるのですが、そのフォーカスを
モードレスダイアログとメインウインドウとをマウスを使わずにキーボードで切り替えることって出来ませんか

MSのWindowsOSのAlt+Tabではこれらはひとつとして認識されているようでこれでは切り替えられません
ちなみに、Windows7です

271デフォルトの名無しさん2018/10/02(火) 12:45:27.08ID:+xKncks4
モードレスなら出来るやろ

272デフォルトの名無しさん2018/10/02(火) 14:53:03.01ID:T1hsru+o
>>271
メインウインドウからモードレスダイアログを起動するのですが、すると、Alt+Tabではこれらはひとつとして
認識されますよ

273デフォルトの名無しさん2018/10/02(火) 15:13:04.28ID:yDKwoLm6
Ctrl+TAB

274デフォルトの名無しさん2018/10/02(火) 15:45:33.11ID:T1hsru+o
>>273
Ctrl+TABでは、ダイアログ上のコントロールのフォーカスが変わっていきます
ウインドウの切り替えはできません

275デフォルトの名無しさん2018/10/02(火) 15:50:20.77ID:yDKwoLm6
Ctrl+Alt+TAB

276デフォルトの名無しさん2018/10/02(火) 16:01:18.57ID:T1hsru+o
>>275
やってみましたが、Alt+Tabでアプリを変えていけますが、そこに出てくるアプリの数が減っているのを
除いて、同じ動作です。 アプリが変わります

277デフォルトの名無しさん2018/10/02(火) 16:28:36.02ID:7CL4bG8Y
モードレスの親がメインウィンドウなら切り替えできず、親がない(デスクトップ)なら切り替えできるのでは。
親がメインウィンドウの場合でも、PreTranslateMessageでTABキーを補足してSetForegroundWindowとかすればいいと思う

278デフォルトの名無しさん2018/10/02(火) 16:35:36.67ID:T1hsru+o
デフォルトでは用意されていないのかな
PreTranslateMessageを使えばなんでもできますが、
メインウインドウとダイアログと両方に書かないといけないからなあ。しょうがないのかな

279デフォルトの名無しさん2018/10/02(火) 16:38:35.01ID:T1hsru+o
PreTranslateMessageで書きますか。 キーは何をあてるのが自然でしょうか
Ctrl+Tabあたりかな
タブコントロールは、Tab だけと Shift+Tabで動きますからね

280デフォルトの名無しさん2018/10/02(火) 21:23:19.58ID:R8M7QKDK
vista、vs.net2003 vc++の組み合わせだが
ALT+TABでアプリがきりかわりながら
ふつうにSDIとモードレスのダイアログでトグルする

281デフォルトの名無しさん2018/10/02(火) 21:49:14.12ID:T1hsru+o
>>280
わざわざありがとう。私と環境がちがうからなのかな
PreTranslateMessageを利用して、Ctrl+Tabでプログラムを作りました。これでうまく行きました

282デフォルトの名無しさん2018/10/07(日) 14:30:22.57ID:stJt0pET
>>281
ダイアログをCreateする時、親ウィンドウ(省略時=NULL)を指定していないから、
アプリケーションのメインウィンドウ(=AfxGetMainWnd())が、親ウィンドウが
になっているからでは?

CDialog::Create(CWnd::GetDesktopWindow())

とかでいけるはず。 MFCとは関係なく、Windows APIでは、所有ウィンドウ
(Owner Window)と、親ウィンドウ(Parent Window)は別管理。

283デフォルトの名無しさん2018/10/15(月) 20:08:17.72ID:xZyzsY81
MSDN見ても解決しないのでお願いします。
CMFCColorDialogで作成した色選択ダイアログの動きが少しおかしいです。
どれかの色(六角形)を選択すると[OK]ボタンのフォーカスが当たり、再度
別の色を選択するとフォーカスが外れるんですが、仕様でしょうか??

284デフォルトの名無しさん2018/10/15(月) 20:10:37.85ID:xZyzsY81
.DoModal()を使っています。

285デフォルトの名無しさん2018/10/16(火) 10:55:52.13ID:gOw5Bgha
>>284
VS2008のNewControlsサンプルではそういう動作は見られないけど、
再現できるサンプルでもありますか?

286デフォルトの名無しさん2018/10/16(火) 20:59:43.03ID:KuFMVrck
>>285
わざわざ試していただいてありがとうござます!
こちらの環境、Windows10、VisualStudio2017なのでこれが原因っぽいです。
古いVisualStudioで試してみます。
業務アプリなのでサンプルは出しにくいです。申し訳ないです。

新着レスの表示
レスを投稿する