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
MFC相談室 mfc23d.dll [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2016/09/21(水) 00:20:48.44ID:OfO+mYkd255デフォルトの名無しさん
2018/09/20(木) 18:01:52.92ID:TMKaX7fO256デフォルトの名無しさん
2018/09/20(木) 18:03:18.25ID:TMKaX7fO257デフォルトの名無しさん
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と関係ないことが大半を占めてて知りたいことはうすーくしか書いてないのばっか
大概が初心者向けでポインタやら構造体やらMFCと関係ないことが大半を占めてて知りたいことはうすーくしか書いてないのばっか
260デフォルトの名無しさん
2018/09/21(金) 06:34:48.10ID:l8rNCGoZ261デフォルトの名無しさん
2018/09/21(金) 08:13:00.69ID:US5K8oGJ262デフォルトの名無しさん
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とかは使ってるかも
周辺の付加的モジュールでは、ATLとかは使ってるかも
265デフォルトの名無しさん
2018/09/21(金) 19:07:45.12ID:M0K6QlhH Windows7のペイントとかワードパッドとかをSpy++で見ると、
Afx〜の付くウィンドウクラス名が使われてるから、
このあたりはまだMFCで作られてたんじゃないだろうか。
Afx〜の付くウィンドウクラス名が使われてるから、
このあたりはまだMFCで作られてたんじゃないだろうか。
266デフォルトの名無しさん
2018/09/21(金) 22:10:32.71ID:Yrc2SKMF なるほど
267デフォルトの名無しさん
2018/09/22(土) 09:01:41.72ID:f3qG2b9t 「コンピューターの管理」なんかも、AfxWnd42やAfxFrameOrView42uが出てくる。
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です
普通にSDIを作りますが、そこからメニューバー等からダイアログボックスをモードレスで起動します。
すると、ダイアログを起動しながらメインウインドウも触れるようになるのですが、そのフォーカスを
モードレスダイアログとメインウインドウとをマウスを使わずにキーボードで切り替えることって出来ませんか
MSのWindowsOSのAlt+Tabではこれらはひとつとして認識されているようでこれでは切り替えられません
ちなみに、Windows7です
271デフォルトの名無しさん
2018/10/02(火) 12:45:27.08ID:+xKncks4 モードレスなら出来るやろ
272デフォルトの名無しさん
2018/10/02(火) 14:53:03.01ID:T1hsru+o273デフォルトの名無しさん
2018/10/02(火) 15:13:04.28ID:yDKwoLm6 Ctrl+TAB
274デフォルトの名無しさん
2018/10/02(火) 15:45:33.11ID:T1hsru+o275デフォルトの名無しさん
2018/10/02(火) 15:50:20.77ID:yDKwoLm6 Ctrl+Alt+TAB
276デフォルトの名無しさん
2018/10/02(火) 16:01:18.57ID:T1hsru+o277デフォルトの名無しさん
2018/10/02(火) 16:28:36.02ID:7CL4bG8Y モードレスの親がメインウィンドウなら切り替えできず、親がない(デスクトップ)なら切り替えできるのでは。
親がメインウィンドウの場合でも、PreTranslateMessageでTABキーを補足してSetForegroundWindowとかすればいいと思う
親がメインウィンドウの場合でも、PreTranslateMessageでTABキーを補足してSetForegroundWindowとかすればいいと思う
278デフォルトの名無しさん
2018/10/02(火) 16:35:36.67ID:T1hsru+o デフォルトでは用意されていないのかな
PreTranslateMessageを使えばなんでもできますが、
メインウインドウとダイアログと両方に書かないといけないからなあ。しょうがないのかな
PreTranslateMessageを使えばなんでもできますが、
メインウインドウとダイアログと両方に書かないといけないからなあ。しょうがないのかな
279デフォルトの名無しさん
2018/10/02(火) 16:38:35.01ID:T1hsru+o PreTranslateMessageで書きますか。 キーは何をあてるのが自然でしょうか
Ctrl+Tabあたりかな
タブコントロールは、Tab だけと Shift+Tabで動きますからね
Ctrl+Tabあたりかな
タブコントロールは、Tab だけと Shift+Tabで動きますからね
280デフォルトの名無しさん
2018/10/02(火) 21:23:19.58ID:R8M7QKDK vista、vs.net2003 vc++の組み合わせだが
ALT+TABでアプリがきりかわりながら
ふつうにSDIとモードレスのダイアログでトグルする
ALT+TABでアプリがきりかわりながら
ふつうにSDIとモードレスのダイアログでトグルする
281デフォルトの名無しさん
2018/10/02(火) 21:49:14.12ID:T1hsru+o282デフォルトの名無しさん
2018/10/07(日) 14:30:22.57ID:stJt0pET >>281
ダイアログをCreateする時、親ウィンドウ(省略時=NULL)を指定していないから、
アプリケーションのメインウィンドウ(=AfxGetMainWnd())が、親ウィンドウが
になっているからでは?
CDialog::Create(CWnd::GetDesktopWindow())
とかでいけるはず。 MFCとは関係なく、Windows APIでは、所有ウィンドウ
(Owner Window)と、親ウィンドウ(Parent Window)は別管理。
ダイアログを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]ボタンのフォーカスが当たり、再度
別の色を選択するとフォーカスが外れるんですが、仕様でしょうか??
CMFCColorDialogで作成した色選択ダイアログの動きが少しおかしいです。
どれかの色(六角形)を選択すると[OK]ボタンのフォーカスが当たり、再度
別の色を選択するとフォーカスが外れるんですが、仕様でしょうか??
284デフォルトの名無しさん
2018/10/15(月) 20:10:37.85ID:xZyzsY81 .DoModal()を使っています。
285デフォルトの名無しさん
2018/10/16(火) 10:55:52.13ID:gOw5Bgha286デフォルトの名無しさん
2018/10/16(火) 20:59:43.03ID:KuFMVrck >>285
わざわざ試していただいてありがとうござます!
こちらの環境、Windows10、VisualStudio2017なのでこれが原因っぽいです。
古いVisualStudioで試してみます。
業務アプリなのでサンプルは出しにくいです。申し訳ないです。
わざわざ試していただいてありがとうござます!
こちらの環境、Windows10、VisualStudio2017なのでこれが原因っぽいです。
古いVisualStudioで試してみます。
業務アプリなのでサンプルは出しにくいです。申し訳ないです。
287281
2018/11/03(土) 20:11:07.69ID:FHfXrfBW288デフォルトの名無しさん
2018/11/03(土) 20:17:24.87ID:FHfXrfBW 今まで、VC++6.0でずっとやってきました。特にそれで問題なかったからですが、意を決して、
Visual Studio 2017をインストして、古いソースコードを移植しようと思っています
VS2017に古いVC++6.0のdswファイルを読ませたのですが、うまくj変換できないようですが、どうしたら良いでしょうか
VC++6.0からの変換は出来ませんか
Visual Studio 2017をインストして、古いソースコードを移植しようと思っています
VS2017に古いVC++6.0のdswファイルを読ませたのですが、うまくj変換できないようですが、どうしたら良いでしょうか
VC++6.0からの変換は出来ませんか
289さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 20:20:22.32ID:Z2+VfrEc ワークスペースはソリューションに変わった。新しくソリューションファイルを作って、そこにC/C++のファイルを追加してビルドだ。
290デフォルトの名無しさん
2018/11/03(土) 20:48:27.94ID:FHfXrfBW インクルードファイルとかいろいろエラーがたくさん出てきたよ
これ相当無理っぽい???
これ相当無理っぽい???
292デフォルトの名無しさん
2018/11/03(土) 21:08:57.06ID:FHfXrfBW 取りあえず、簡単に比較するために、VC++6.0でMFCのSDIのデフォルトを作りました
それと比較するため、VS2017でC++のWindowsデスクトップのデスクトップアプリケーションのデフォルトを作りました
すると、VS2017の方はMFC自身を使わないバージョンなのかな、CMainFrmとかIMPLEMENT_DYNCREATEとかなくて
VC6.0++のMainFrm.cppとかを2017の方に持ってきてコンパイルしたらCMainFrmが定義されてないとか
ずらっとたくさん出てきます
それと比較するため、VS2017でC++のWindowsデスクトップのデスクトップアプリケーションのデフォルトを作りました
すると、VS2017の方はMFC自身を使わないバージョンなのかな、CMainFrmとかIMPLEMENT_DYNCREATEとかなくて
VC6.0++のMainFrm.cppとかを2017の方に持ってきてコンパイルしたらCMainFrmが定義されてないとか
ずらっとたくさん出てきます
293さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 21:11:31.59ID:Z2+VfrEc MFCに対応したプロジェクト/ソリューション設定じゃないとダメかも
294デフォルトの名無しさん
2018/11/03(土) 21:15:37.09ID:FHfXrfBW >>293
VS2017で、それを探してるのですが見つからないのですよ
MFCには対応してるのですよね。2015かそれ以前にはすでに対応してると聞いていたのですが
MFCを使ったデフォルトのコード生成はしてくれないとか??? w
VS2017で、それを探してるのですが見つからないのですよ
MFCには対応してるのですよね。2015かそれ以前にはすでに対応してると聞いていたのですが
MFCを使ったデフォルトのコード生成はしてくれないとか??? w
295さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 21:19:34.89ID:uOx37ouV Visual C++の中にMFCがある。Visual C++という項目がなければ、インストールが間違っている。
296デフォルトの名無しさん
2018/11/03(土) 21:23:19.86ID:FHfXrfBW >>295
メニューのファイルから新規作成、プロジェクトを選ぶと、その中にVisual C++はちゃんとありますよ
で、そこでWindowsデスクトップアプリケーションを選んでデフォルトを作ると、コードはSDKみたいなコードを吐きます
で、Windowsデスクトップウィザードってのがあったので、今これを選択してみたのですが、
アプリケーションの種類をコンソールにすると、その右にあるMFCのチェックボックスが有効になるのですが
メニューのファイルから新規作成、プロジェクトを選ぶと、その中にVisual C++はちゃんとありますよ
で、そこでWindowsデスクトップアプリケーションを選んでデフォルトを作ると、コードはSDKみたいなコードを吐きます
で、Windowsデスクトップウィザードってのがあったので、今これを選択してみたのですが、
アプリケーションの種類をコンソールにすると、その右にあるMFCのチェックボックスが有効になるのですが
297デフォルトの名無しさん
2018/11/03(土) 21:24:15.77ID:FHfXrfBW 続き
Windowsアプリケーションってのを選ぶと、MFCのチェックボックスが使用不可になってしまいます
Windowsアプリケーションってのを選ぶと、MFCのチェックボックスが使用不可になってしまいます
298さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 21:27:13.99ID:uOx37ouV MFCアプリが作れないなら、インストールで追加するしかないぜ。
299さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 21:29:11.91ID:uOx37ouV300デフォルトの名無しさん
2018/11/03(土) 21:29:36.23ID:FHfXrfBW おいおい、なんだこれ
VS2017で、新規作成、プロジェクトで、Windowsデスクトップウィザードで
コンソールアプリケーションでMFCをチェックしてデフォルトのコードを自動生成してみました
そしてソリューションのビルドしたら、CWinAppが定義されてないとかエラーがわんさか出てきたぞ
おいおい、デフォルトの自動生成コードもビルド出来ないじゃん
VS2017で、新規作成、プロジェクトで、Windowsデスクトップウィザードで
コンソールアプリケーションでMFCをチェックしてデフォルトのコードを自動生成してみました
そしてソリューションのビルドしたら、CWinAppが定義されてないとかエラーがわんさか出てきたぞ
おいおい、デフォルトの自動生成コードもビルド出来ないじゃん
301さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 21:30:32.78ID:uOx37ouV 左下、「探しているものが見つからないとき」
302デフォルトの名無しさん
2018/11/03(土) 21:33:48.34ID:FHfXrfBW >>299
おや、そこが違う。 私のは、
visual C++の下に
Windowsデスクトップ
クロスプラットフォーム
MFC/ATL
テスト
その他
Extensibility
ってなってて、 MFC/ATLのところは
ATLプロジェクト
ってのだけがあります
おや、そこが違う。 私のは、
visual C++の下に
Windowsデスクトップ
クロスプラットフォーム
MFC/ATL
テスト
その他
Extensibility
ってなってて、 MFC/ATLのところは
ATLプロジェクト
ってのだけがあります
303デフォルトの名無しさん
2018/11/03(土) 21:37:10.59ID:FHfXrfBW 何かインストを失敗してるのかなあ。 あるいはインストするときに何をインストするのかチェックがあったんだが
それを間違えてるのか。 でも俺がチェックをしなかったのはモバイル関係のところくらいだったんだよねえ
それを間違えてるのか。 でも俺がチェックをしなかったのはモバイル関係のところくらいだったんだよねえ
304さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 21:38:58.82ID:uOx37ouV305さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 21:40:59.04ID:uOx37ouV VS2017は頻繁に変更されるもんだから、ちょっと混乱してるみたい。
306デフォルトの名無しさん
2018/11/03(土) 21:48:14.06ID:FHfXrfBW >>304
ありがとう。
右側の概要ってとこが、私のでは、インストールの詳細になっていて、
MFCとATLのサポート
ってのが私のでは、
x86用とx64用のVisualC++ATL
x86用とx64用のVisualC++MFC
ってわかれていて、ATLの方にだけデフォルトではチェックが入っていてMFCの方のチェックは
デフォルトでは外れていました。
チェックして再インストしてみますねw
ありがとう。
右側の概要ってとこが、私のでは、インストールの詳細になっていて、
MFCとATLのサポート
ってのが私のでは、
x86用とx64用のVisualC++ATL
x86用とx64用のVisualC++MFC
ってわかれていて、ATLの方にだけデフォルトではチェックが入っていてMFCの方のチェックは
デフォルトでは外れていました。
チェックして再インストしてみますねw
307さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 21:52:26.12ID:uOx37ouV インストよりもインスコの方が俗語の通りがいい。
308デフォルトの名無しさん
2018/11/03(土) 22:01:09.50ID:FHfXrfBW ただいま、 再インスコ中です
みなさん、 VS2017をインスコするときは、
MFC はデフォルトでは入らない !!!
ことがわかりました
VS2017をインスコするときは、注意しましょう
インスコするとき、オプションをチェックすると入ります、 多分。今やってるところ
みなさん、 VS2017をインスコするときは、
MFC はデフォルトでは入らない !!!
ことがわかりました
VS2017をインスコするときは、注意しましょう
インスコするとき、オプションをチェックすると入ります、 多分。今やってるところ
309さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 22:07:33.60ID:uOx37ouV Qiitaの記事、結構役に立ってるじゃん。責任ある情報技術者なら、Qiitaに記事を書ける程になってもらいたいね。
>>309
qitta って査読制ですか?
qitta って査読制ですか?
311デフォルトの名無しさん
2018/11/03(土) 22:16:25.81ID:FHfXrfBW 出来ました。
MFCのインストがちゃんとできて、
MFCアプリケーションでデフォルトのMDI作ってみたら、 あら、すげえ
クラスビューなんかが出てくるのねw
MFCのインストがちゃんとできて、
MFCアプリケーションでデフォルトのMDI作ってみたら、 あら、すげえ
クラスビューなんかが出てくるのねw
312さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 22:18:01.50ID:uOx37ouV 最低限の審査はあると思うぞ。
詳しくは規約を。
詳しくは規約を。
313デフォルトの名無しさん
2018/11/03(土) 22:30:48.57ID:FHfXrfBW おや、新しいバージョンだと、
strcpy( a, b )
で、b に CSringとか出来ないんだね。 前の古いバージョンでは出来たのに
CString で返す関数も、char a[10] とかで宣言したのを、古いバージョンでは、retuen a
って出来たんだが、新しいバージョンではエラーになる。 一旦
CString ret;
ret = a;
ってやって、return ret;
ってやったらエラーが消えた
いろいろと細かい修正しないとダメみたいだねえ
strcpy( a, b )
で、b に CSringとか出来ないんだね。 前の古いバージョンでは出来たのに
CString で返す関数も、char a[10] とかで宣言したのを、古いバージョンでは、retuen a
って出来たんだが、新しいバージョンではエラーになる。 一旦
CString ret;
ret = a;
ってやって、return ret;
ってやったらエラーが消えた
いろいろと細かい修正しないとダメみたいだねえ
314さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/03(土) 22:35:23.28ID:uOx37ouV 暗黙の型キャストのあいまいさが嫌いな人が存在するらしい。
315デフォルトの名無しさん
2018/11/03(土) 22:42:34.44ID:FHfXrfBW >>314
いろいろとありがとう。 今日はとりあえずここまでにしておきます
いろいろとありがとう。 今日はとりあえずここまでにしておきます
316デフォルトの名無しさん
2018/11/04(日) 14:43:10.46ID:5RY1Lh2I >>313
きも
きも
317デフォルトの名無しさん
2018/11/04(日) 21:56:04.47ID:GQHsCvIR318デフォルトの名無しさん
2018/11/05(月) 10:05:31.23ID:iQgkSIfQ >>317
これありがとう。LPCWSTRの関係で、めっちゃ詰まってました
これありがとう。LPCWSTRの関係で、めっちゃ詰まってました
319デフォルトの名無しさん
2018/11/05(月) 10:35:49.97ID:cQLaagjN320デフォルトの名無しさん
2018/11/05(月) 12:07:09.35ID:iQgkSIfQ >>319
今は、_tcscpyを使ってもエラーが出るけどな
今は、_tcscpyを使ってもエラーが出るけどな
321デフォルトの名無しさん
2018/11/05(月) 12:15:02.40ID:mvX3Qu15 >>320
それはエラーではなくてセキュリティ上の警告では
それはエラーではなくてセキュリティ上の警告では
322デフォルトの名無しさん
2018/11/05(月) 12:20:01.12ID:iQgkSIfQ >>321
そうです。 _sを付けたのを使えって
警告の設定を変更しないとエラーになってコンパイルが通りません
それをプロパティの設定で、Unicodeからマルチバイトに切り替えてコンパイルしたんだけど、どうも
Unicodeのままでうまく切り替わらないようなんですよねえ。 どうなってるのか。 今は時間がないので
またあとでやってみますが
そうです。 _sを付けたのを使えって
警告の設定を変更しないとエラーになってコンパイルが通りません
それをプロパティの設定で、Unicodeからマルチバイトに切り替えてコンパイルしたんだけど、どうも
Unicodeのままでうまく切り替わらないようなんですよねえ。 どうなってるのか。 今は時間がないので
またあとでやってみますが
323デフォルトの名無しさん
2018/11/05(月) 12:26:42.35ID:mvX3Qu15324デフォルトの名無しさん
2018/11/05(月) 16:42:29.67ID:Lc5ZfJaA VS2017ですが、新規作成で、MFCアプリケーションで作った時、
新規作成途中に出てくるSDLのチェックをつけて作成したときと、はずして作成したときと両方してみました
すると、SDLつきの時は、_tcscpyはエラーになってコンパイルできませんが、
SDLをはずして新規作成したのものは、エラーにならずにコンパイルできて実行できます
デフォルトはSDLつきなので、コンパイルできません
次に、新規作成して出来上がったプロジェクトで、
メニューのプロジェクトから一番下のプロパティに入って、構成プロパティ、C/C++の全般にある
SDLチェックというところで、はい(/sdl) いいえ(/sdl-)を切り替えてやってみると、
この切り替えが動作せず、SDLのオン、オフが効きません。 プロジェクトの新規作成のときに設定したものが
残っていて、あとからここのプロパティで変更ができないようです
同じように、プロパティの構成プロパティの全般で、文字セットがデフォルトではUnicode文字セットを使用する
になってるのですが、これをマルチバイト文字セットを使用するにしても
Unicodeのままでマルチバイトにならないようです
バグですかねえ?
新規作成途中に出てくるSDLのチェックをつけて作成したときと、はずして作成したときと両方してみました
すると、SDLつきの時は、_tcscpyはエラーになってコンパイルできませんが、
SDLをはずして新規作成したのものは、エラーにならずにコンパイルできて実行できます
デフォルトはSDLつきなので、コンパイルできません
次に、新規作成して出来上がったプロジェクトで、
メニューのプロジェクトから一番下のプロパティに入って、構成プロパティ、C/C++の全般にある
SDLチェックというところで、はい(/sdl) いいえ(/sdl-)を切り替えてやってみると、
この切り替えが動作せず、SDLのオン、オフが効きません。 プロジェクトの新規作成のときに設定したものが
残っていて、あとからここのプロパティで変更ができないようです
同じように、プロパティの構成プロパティの全般で、文字セットがデフォルトではUnicode文字セットを使用する
になってるのですが、これをマルチバイト文字セットを使用するにしても
Unicodeのままでマルチバイトにならないようです
バグですかねえ?
325デフォルトの名無しさん
2018/11/05(月) 17:14:38.42ID:o5QGnfIr 新規のプロジェクトにマルチバイト使うのやめようぜ
326デフォルトの名無しさん
2018/11/05(月) 20:46:10.49ID:fgA77wSW327デフォルトの名無しさん
2018/11/05(月) 21:22:43.21ID:Lc5ZfJaA >>326
できました。多分それです。ありがとうございました
コードの編集画面の上にあるコンボボックスを見ると、Debugとx86になってるのですが、
その状態でプロパティを開くと、なぜか、x64になってました。
なのでプロパティ画面で、上にあるプラットフォームをアクティブ(Win32)に変えると、画面がおかしくなって
びっくりしましたが、画面の再描画ができなかっただけなようで、再びプロパティ画面を出して
アクティブ(Win32)を確認してから、マルチバイトやSDLの変更をしたら、ちゃんと動いたようです
プロパティ画面を開くときは、連動してないので必ず確認してから変更しないといけないということですね
ちなみになんとか誤魔化せないかと思って、 stdafx.h の最初に
#undef UNICODE
#undef_UNICODE
ってやってみたら、コンパイルまでは全部のcppファイルで出来たのですが、リンクで未解決エラーが出て
出来ませんでした
できました。多分それです。ありがとうございました
コードの編集画面の上にあるコンボボックスを見ると、Debugとx86になってるのですが、
その状態でプロパティを開くと、なぜか、x64になってました。
なのでプロパティ画面で、上にあるプラットフォームをアクティブ(Win32)に変えると、画面がおかしくなって
びっくりしましたが、画面の再描画ができなかっただけなようで、再びプロパティ画面を出して
アクティブ(Win32)を確認してから、マルチバイトやSDLの変更をしたら、ちゃんと動いたようです
プロパティ画面を開くときは、連動してないので必ず確認してから変更しないといけないということですね
ちなみになんとか誤魔化せないかと思って、 stdafx.h の最初に
#undef UNICODE
#undef_UNICODE
ってやってみたら、コンパイルまでは全部のcppファイルで出来たのですが、リンクで未解決エラーが出て
出来ませんでした
328デフォルトの名無しさん
2018/11/05(月) 22:12:55.20ID:fgA77wSW さすがにそれはおかしいのでVS2017再インストール推奨
329デフォルトの名無しさん
2018/11/05(月) 22:23:54.08ID:Lc5ZfJaA >>328
マジですか。 再インストしようかな
マジですか。 再インストしようかな
330デフォルトの名無しさん
2018/11/05(月) 23:46:35.28ID:2AHpASAJ _T() ?
331デフォルトの名無しさん
2018/11/06(火) 11:56:33.16ID:rqFrnjhJ >ちなみになんとか誤魔化せないかと思って
略
>リンクで未解決エラー
MessageBoxA と MessageBoxW とかを自分で書き分けてみると解決するはず
略
>リンクで未解決エラー
MessageBoxA と MessageBoxW とかを自分で書き分けてみると解決するはず
332デフォルトの名無しさん
2018/11/11(日) 14:34:30.31ID:vUUak6BF333デフォルトの名無しさん
2018/11/11(日) 17:52:29.57ID:96wp+TZd しねNG
334デフォルトの名無しさん
2018/12/07(金) 17:05:15.69ID:meFvbPH8 MFCのツールバーって、リバーのように、「ツールバーを固定する」の動作はできませんかね。
ユーザーがコマンドを選択したら、その場所から動かすことができなくなるようにしたいのですが。
ユーザーがコマンドを選択したら、その場所から動かすことができなくなるようにしたいのですが。
335デフォルトの名無しさん
2018/12/08(土) 16:28:45.38ID:S81QsiH/ subclass化してメッセージループトラップしてmoveをにぎりつぶす
336デフォルトの名無しさん
2018/12/17(月) 19:07:24.59ID:Fq49NMNr HWND hWnd はできるけど、
HDC hDC って、別アプリ(別プロセス)に渡して、書き込ませることは出来ないの?
HDC の識別番号が、プロセスごとに別の「名前空間」みたいなことになってるのかな。
HDC hDC って、別アプリ(別プロセス)に渡して、書き込ませることは出来ないの?
HDC の識別番号が、プロセスごとに別の「名前空間」みたいなことになってるのかな。
337デフォルトの名無しさん
2018/12/17(月) 19:18:47.70ID:Fq49NMNr GDI objects support only one handle per object. Handles to GDI objects are private to a process.
That is, only the process that created the GDI object can use the object handle.
↑によれば、HDC は、プロセス・プライベートだって、書いてるけど、
たまたますごいことみつけちゃったんだ・・・実は。
みんな知ってる?
That is, only the process that created the GDI object can use the object handle.
↑によれば、HDC は、プロセス・プライベートだって、書いてるけど、
たまたますごいことみつけちゃったんだ・・・実は。
みんな知ってる?
338デフォルトの名無しさん
2018/12/18(火) 08:47:01.21ID:G1V4hdx+ 実は、PrintWindow(HWND hWnd, HDC hDC, DWORD flag) API を使うと、HDC をプロセスの
垣根を越えて渡せるんだ。プロセスA からプロセス B に HDC を渡す場合、
プロセスA で、PrintWindow() API を呼び出す。hWnd にはプロセスBで作成した
Window の HWND を、hDC には、プロセスAに所属している HDC を渡す。
MFCを使って実験してみると、この場合、プロセスBの hWnd にWM_PRINT メッセージが
来るが、OnPrint() ハンドラが BeginPaint(), EndPaint() を使わずに、メッセージから受け取った
hDC を CDC *pDC に入れて、WM_PAINT の時と同じ OnDraw() を呼び出すらしい。
らしいと言ったのは、もしかしたら、MFCが途中で何らかの手を加えている可能性があるから。
で興味深いのは、この時の pDC->m_hDC の値は、プロセスA のオリジナルの値とは
数値的には異なっていると言うこと。
推定ではあるが、PrintWindow() API を使うと、Windows System が、プロセスA での hDC の
識別番号とは異なる識別番号を、WM_PRINT メッセージのの hDC に与える。
これは、>>337 で書いているとおり、HDC は、process private だから、プロセスごとに
「名前空間」が異なるため、プロセスの垣根を越えるときには、同じ値をそのまま使うことは
出来ないため。
でも、結局、「番号」が変わっているだけで、同じ Device Context を「指している」ので、
効率よく 描画動作を行える。
この API を使えば、プロセスA で用意した実DC や メモリーDC に、プロセスB の OnDraw()
によって直接書き込ませることが出来ることを確認済み。
垣根を越えて渡せるんだ。プロセスA からプロセス B に HDC を渡す場合、
プロセスA で、PrintWindow() API を呼び出す。hWnd にはプロセスBで作成した
Window の HWND を、hDC には、プロセスAに所属している HDC を渡す。
MFCを使って実験してみると、この場合、プロセスBの hWnd にWM_PRINT メッセージが
来るが、OnPrint() ハンドラが BeginPaint(), EndPaint() を使わずに、メッセージから受け取った
hDC を CDC *pDC に入れて、WM_PAINT の時と同じ OnDraw() を呼び出すらしい。
らしいと言ったのは、もしかしたら、MFCが途中で何らかの手を加えている可能性があるから。
で興味深いのは、この時の pDC->m_hDC の値は、プロセスA のオリジナルの値とは
数値的には異なっていると言うこと。
推定ではあるが、PrintWindow() API を使うと、Windows System が、プロセスA での hDC の
識別番号とは異なる識別番号を、WM_PRINT メッセージのの hDC に与える。
これは、>>337 で書いているとおり、HDC は、process private だから、プロセスごとに
「名前空間」が異なるため、プロセスの垣根を越えるときには、同じ値をそのまま使うことは
出来ないため。
でも、結局、「番号」が変わっているだけで、同じ Device Context を「指している」ので、
効率よく 描画動作を行える。
この API を使えば、プロセスA で用意した実DC や メモリーDC に、プロセスB の OnDraw()
によって直接書き込ませることが出来ることを確認済み。
339デフォルトの名無しさん
2018/12/18(火) 08:56:36.56ID:G1V4hdx+ この話には続きがある。
Ubuntu Linux の Wine Emulator 3.2 で実験してみると、PrintWindow() が上手くいかないらしい。
なので、誰かに直して欲しい、と言うこと。
直してクレクレ。
Ubuntu Linux の Wine Emulator 3.2 で実験してみると、PrintWindow() が上手くいかないらしい。
なので、誰かに直して欲しい、と言うこと。
直してクレクレ。
340デフォルトの名無しさん
2018/12/18(火) 11:55:37.33ID:/M0/bFGF341デフォルトの名無しさん
2018/12/20(木) 16:21:01.93ID:IGyhJ3NX >>338
さらに実験してみたところ、プロセスA から、プロセスB の HWND に対して、
PrintWindow() した場合、プロセス B には、WM_PRINT も WM_PRINTCLIENT
も送られることなく、WM_PAINT、WM_NCPAINT が送られる。
興味深いことに、MainFrame のような、OVERLAPPEDWINDOW には、
メッセージキューを介すことなく、WM_PAINT、WM_NCPAINT が送られるが、
EditBox などの CHILD WINDOW には、メッセージキューに WM_PAINT が
格納された後、EditBox の WndProc に WM_PAINT、WM_NCPAINT が送られる。
もっと実験してみたところ、普段、PrintWindow() を使うことなく、Winow のサイズ
変更などをして再描画が必要な場合、(スレッド)メッセージキューには
ポストされることなく、直接 WndProc に WM_PAINT、WM_NCPAINT が
送られてくる。
また、PrintWindow() に渡す プロセスA の HDC を、MemoryDC にして、
常に固定のハンドル値を渡してみた。すると、興味深いことに、
プロセスB では、ほぼ毎回異なる値の HDC が渡されることが分かった。
ただし、時々連続して同じ値の HDC が渡されてくる。連続回数は、
2回〜10回くらいまでの開きがある。
なお、PrintWindow() の速度は思ったより遅く、プロセスB側が(敢えて)何も
描画しない場合でも、なぜか、1.3x10^(-4) 〜7.1 x 10^(-3) (sec) 程度かかる。
つまり、50万クロック程度かかってしまう。ただし、有る程度の大きさの
グラフィックを書いても、余り速度は変わらない印象を受けた。環境は書かないが、
余り速くはない 3.0GHz の Dual CPU のマシンでの話。
さらに実験してみたところ、プロセスA から、プロセスB の HWND に対して、
PrintWindow() した場合、プロセス B には、WM_PRINT も WM_PRINTCLIENT
も送られることなく、WM_PAINT、WM_NCPAINT が送られる。
興味深いことに、MainFrame のような、OVERLAPPEDWINDOW には、
メッセージキューを介すことなく、WM_PAINT、WM_NCPAINT が送られるが、
EditBox などの CHILD WINDOW には、メッセージキューに WM_PAINT が
格納された後、EditBox の WndProc に WM_PAINT、WM_NCPAINT が送られる。
もっと実験してみたところ、普段、PrintWindow() を使うことなく、Winow のサイズ
変更などをして再描画が必要な場合、(スレッド)メッセージキューには
ポストされることなく、直接 WndProc に WM_PAINT、WM_NCPAINT が
送られてくる。
また、PrintWindow() に渡す プロセスA の HDC を、MemoryDC にして、
常に固定のハンドル値を渡してみた。すると、興味深いことに、
プロセスB では、ほぼ毎回異なる値の HDC が渡されることが分かった。
ただし、時々連続して同じ値の HDC が渡されてくる。連続回数は、
2回〜10回くらいまでの開きがある。
なお、PrintWindow() の速度は思ったより遅く、プロセスB側が(敢えて)何も
描画しない場合でも、なぜか、1.3x10^(-4) 〜7.1 x 10^(-3) (sec) 程度かかる。
つまり、50万クロック程度かかってしまう。ただし、有る程度の大きさの
グラフィックを書いても、余り速度は変わらない印象を受けた。環境は書かないが、
余り速くはない 3.0GHz の Dual CPU のマシンでの話。
342デフォルトの名無しさん
2018/12/20(木) 17:27:58.15ID:t8x/0UH1 なお予告なく変更されることがあります
343デフォルトの名無しさん
2019/02/01(金) 14:28:07.62ID:Y7K3gTaF MFC アプリケーションのツールバーを移動すると、ツールバーの移動枠とマウスカーソルの位置が離れる
https://social.msdn.microsoft.com/Forums/ja-JP/b47f8e8c-318b-4e7b-a81e-b97f26bffdc0/mfc
https://social.msdn.microsoft.com/Forums/ja-JP/b47f8e8c-318b-4e7b-a81e-b97f26bffdc0/mfc
344デフォルトの名無しさん
2019/02/20(水) 12:07:37.06ID:6ZQ0VW2w スタティックビルドがうまくできたらうれしかった
345デフォルトの名無しさん
2019/03/04(月) 21:22:00.31ID:w7LKY+n1 ウインドウを2枚用意して、片方を表に(上に)表示して、もう片方は裏にして見えないようにしている。で、裏の見えない方を
書き換えて、表のウインドウと入れ替えて、新しい描画のウインドウを出すということをしたいのです
裏メモリに書き込んで一瞬でモニターに出すという普通のやつをウインドウでします
裏でウインドウで書き込むとき、HIDE状態では書き込めないので、MINIMIZEの状態では出来ることがわかったので
そうしているのですが、問題はそれを最大化するときに、どうしても描画に時間がかかるというか、一瞬では出来ないのです
なので、アクティブ化せずに裏で最大化、あるいは、RESTOREする方法を探しているのですが、
APIのShowWindowとかだと、RESTOREもMAXIMIZEも必ずアクティブ化してしまうのですがいい方法はないでしょうか
いろいろとやってみて、2枚のウインドウに違う絵をかいておいて、片方をHIDE、片方をSHOWして、このHIDEと
SHOWと切り替えるってのが一番きれいに切り替わるようなのですが、書き込むとき、HIDEでは書き込めずに
MINIMIZEして書き込まないといけないので、MINIMIZEして書き込んだウインドウを表に出さずに大きくしてHIDE状態に出来れは
いいのですが
書き換えて、表のウインドウと入れ替えて、新しい描画のウインドウを出すということをしたいのです
裏メモリに書き込んで一瞬でモニターに出すという普通のやつをウインドウでします
裏でウインドウで書き込むとき、HIDE状態では書き込めないので、MINIMIZEの状態では出来ることがわかったので
そうしているのですが、問題はそれを最大化するときに、どうしても描画に時間がかかるというか、一瞬では出来ないのです
なので、アクティブ化せずに裏で最大化、あるいは、RESTOREする方法を探しているのですが、
APIのShowWindowとかだと、RESTOREもMAXIMIZEも必ずアクティブ化してしまうのですがいい方法はないでしょうか
いろいろとやってみて、2枚のウインドウに違う絵をかいておいて、片方をHIDE、片方をSHOWして、このHIDEと
SHOWと切り替えるってのが一番きれいに切り替わるようなのですが、書き込むとき、HIDEでは書き込めずに
MINIMIZEして書き込まないといけないので、MINIMIZEして書き込んだウインドウを表に出さずに大きくしてHIDE状態に出来れは
いいのですが
346デフォルトの名無しさん
2019/03/05(火) 03:38:03.26ID:VDry4yCP MemoryDCに書き込め
347デフォルトの名無しさん
2019/03/07(木) 10:13:48.09ID:wL/Z2Jw6 MFCのSDIアプリケーションで、PCを一定時間操作しなかったときに、
「更新中」のダイアログをDoModal()で出して、内部の情報を更新する動作を作っています。
更新処理はダイアログの中で別スレッドで行っていて、
タイマーで定期的にスレッドを監視して、終わっていたらEndDialog()で閉じます。
他の操作を不可にした上でキャンセルは可能にするために、このように作りました。
ここまでは問題なく動いているのですが、
アプリケーションがアクティブでないときにこの更新処理が走ると、
「更新中」のダイアログが閉じられた後に、アクティブ表示になってしまいます。
表示がアクティブになるだけで、フォーカスまでは奪いません。
二つのアプリケーションがアクティブ表示になってしまう状態です。
不思議に思ってMFCのソースを追いかけたところ、
CFrameWndのOnEnable()やOnActivate()やOnNcActivate()で
WF_STAYACTIVEのフラグを使ってアクティブ表示を強制するような仕組みがあり、
この中の処理を通った結果、アクティブ表示になってしまうようでした。
どうしてWF_STAYACTIVEに引っかかるのかなど、細かい流れは追い切れていませんが、
アクティブでないときに裏でダイアログが出て、その後自動で閉じるような動きを、
CFrameWndは想定していないということになりますでしょうか。
見た目のだけの問題ではありますが、CFrameWndの仕組みを保ったまま、
この現象を回避する方法はありませんでしょうか。
「更新中」のダイアログをDoModal()で出して、内部の情報を更新する動作を作っています。
更新処理はダイアログの中で別スレッドで行っていて、
タイマーで定期的にスレッドを監視して、終わっていたらEndDialog()で閉じます。
他の操作を不可にした上でキャンセルは可能にするために、このように作りました。
ここまでは問題なく動いているのですが、
アプリケーションがアクティブでないときにこの更新処理が走ると、
「更新中」のダイアログが閉じられた後に、アクティブ表示になってしまいます。
表示がアクティブになるだけで、フォーカスまでは奪いません。
二つのアプリケーションがアクティブ表示になってしまう状態です。
不思議に思ってMFCのソースを追いかけたところ、
CFrameWndのOnEnable()やOnActivate()やOnNcActivate()で
WF_STAYACTIVEのフラグを使ってアクティブ表示を強制するような仕組みがあり、
この中の処理を通った結果、アクティブ表示になってしまうようでした。
どうしてWF_STAYACTIVEに引っかかるのかなど、細かい流れは追い切れていませんが、
アクティブでないときに裏でダイアログが出て、その後自動で閉じるような動きを、
CFrameWndは想定していないということになりますでしょうか。
見た目のだけの問題ではありますが、CFrameWndの仕組みを保ったまま、
この現象を回避する方法はありませんでしょうか。
348デフォルトの名無しさん
2019/03/07(木) 11:03:18.49ID:MaxgRiSY ダイアログの前にアクティブだったウィンドウをアクティブにしてから閉じる
349sage
2019/03/12(火) 23:39:31.92ID:5NMUaJ/A VS2019のリリースノートでのMFCへの言及は、廃止予定の機能一覧中にいくつかあるのみ。
MFCをバリバリ使っているわけではないけど、なんか悲しい。
MFCをバリバリ使っているわけではないけど、なんか悲しい。
350デフォルトの名無しさん
2019/09/19(木) 20:20:47.92ID:h0nmK2Rt 空のソリューションを作って既存のAとBのMFCダイアログベースのプロジェクトを追加して、リソースビューでAにBのダイアログをコピペしたらIDが同じという警告が出た。
AのダイアログからBのダイアログをDoModalで呼び出す内容なんですが、ビルドも実行させても問題ないように見えるが大丈夫なんでしょうか?
AのダイアログからBのダイアログをDoModalで呼び出す内容なんですが、ビルドも実行させても問題ないように見えるが大丈夫なんでしょうか?
351デフォルトの名無しさん
2019/11/12(火) 03:43:11.18ID:dQMkkNV/ 数年前に作ったダイアログのコンボボックスの初期値が反映されなくなってたんだが
CComboBox:: SelectStringの第一引数nStartAfterを0から-1にしたら動作した
でもなんでやろ?0でよさげなのに
CComboBox:: SelectStringの第一引数nStartAfterを0から-1にしたら動作した
でもなんでやろ?0でよさげなのに
352デフォルトの名無しさん
2020/02/27(木) 02:47:52.87ID:HQmHUU7r いまやCDCといえばアメリカ疾病対策センター(Centers for Disease Control and Prevention)だね
353デフォルトの名無しさん
2020/02/27(木) 03:05:08.52ID:CxyJejD6 >>349
MSは傲慢になっているだけ。
MSは傲慢になっているだけ。
354デフォルトの名無しさん
2020/02/27(木) 15:15:55.59ID:G6pyHvdg355デフォルトの名無しさん
2020/03/18(水) 18:37:21.32ID:7DDJtRdm ローカルディスクの中で、MFCのCWinやCViewなどのソースは見られるのですが、
AfxGetApp()のソースコードだけが見つかりません。
どこにあるのでしょうか?
AfxGetApp()のソースコードだけが見つかりません。
どこにあるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 空自機レーダー照射、音声データ公開 中国 ★3 [蚤の市★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★] [蚤の市★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 低所得層のマクドナルド離れが深刻に 広がる「ファストフード格差」の真相 米国 [少考さん★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 中国がここまで過敏になるのは日本に前科があるから。盧溝橋、満州事変。ジャップの先制攻撃は挙げればキリがないけど [472617201]
- ぶっちゃけ天のうって昭和天のうのせいで全然ありがたみないよな
- MOIWなアイドルマスターミリオンライブシアターデイズアイマスミリマスグリマスミリシタスレ
- 犬って顔くっつけて寝たがるよな
- 『猟友会がクマ駆除を嫌がるなら潰すべき。職務を放棄するハンターから免許や銃を没収して罰金を取ろう』の声、ネットで上がる [932029429]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
