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+mYkd2017/03/03(金) 21:07:16.24ID:4N2nnk0c
2017/03/03(金) 23:45:50.26ID:fzOn+GKU
>>79
なるほど、確かに仰る通りです
MFCだと定義済みコントロールを作成したタイミングでサブクラス化が自動的に行われているんですか…知らなかった…
SubclassWindowの戻り値を確認してみます
なるほど、確かに仰る通りです
MFCだと定義済みコントロールを作成したタイミングでサブクラス化が自動的に行われているんですか…知らなかった…
SubclassWindowの戻り値を確認してみます
2017/03/03(金) 23:47:56.70ID:fzOn+GKU
2017/03/03(金) 23:49:20.96ID:fzOn+GKU
2017/03/04(土) 06:08:14.80ID:5oPjtzPk
>83
不要
不要
2017/03/12(日) 16:57:53.13ID:L/+Vp36z
2017/03/12(日) 20:13:37.36ID:g7gIuH2o
そもそもなぜサブクラス化って言うの?
クラスとは関係ないと思うんですが
クラスとは関係ないと思うんですが
2017/03/12(日) 20:23:14.61ID:DJd+bif5
サブクラス化というネーミングはイマイチだとずっと思ってた。
APIの名称から来てるから翻訳者に罪はないが、、
VS2017入れてみたけど_MFC_VERは変化なし。
残念だ。
APIの名称から来てるから翻訳者に罪はないが、、
VS2017入れてみたけど_MFC_VERは変化なし。
残念だ。
2017/03/12(日) 20:33:34.83ID:l5dI0q1q
>>87
多分ウィンドウクラスを横取りするからじゃないかな?
多分ウィンドウクラスを横取りするからじゃないかな?
2017/04/02(日) 01:00:25.54ID:4o8Jb7FT
実際クラスとは関係ないと思う
ファーストクラスとかも全然クラス関係ないし
英語にそういうニュアンスがあるんじゃないの
ファーストクラスとかも全然クラス関係ないし
英語にそういうニュアンスがあるんじゃないの
2017/04/13(木) 15:17:28.33ID:O8cH7Ezk
Windows1.0のときからあるし、オブジェクト指向の用語とは別路線で発生したもんだしなあ
2017/04/13(木) 21:53:13.05ID:rVYtPk7E
GUI自体がオブジェクト指向の影響下で発展してきたわけで、別路線ってことはないだろう。
ウィンドウクラスごとにそれぞれ異なるWinProcを指す仕組みなんてほとんどv-tableだし。
ウィンドウクラスごとにそれぞれ異なるWinProcを指す仕組みなんてほとんどv-tableだし。
2017/04/14(金) 10:48:36.47ID:L6e5ZQwW
確かWin32APIはsmalltalk由来のメッセージパッシング式オブジェクト指向を意識して作られたとかなんとか。
んで、C++はメッセージパッシング意識して作られてなかったから、言語自体を拡張されたのがC++Builderで、言語は拡張せず、メッセージテーブル作って無理くり対応したのがVCのMFCって何かで読んだ。
そう考えるとMFC以前はCでどうにかオブジェクト指向と言うより、メッセージパッシングを実現しようとしてWin32APIが出来たんだろね。
んで、C++はメッセージパッシング意識して作られてなかったから、言語自体を拡張されたのがC++Builderで、言語は拡張せず、メッセージテーブル作って無理くり対応したのがVCのMFCって何かで読んだ。
そう考えるとMFC以前はCでどうにかオブジェクト指向と言うより、メッセージパッシングを実現しようとしてWin32APIが出来たんだろね。
2017/04/16(日) 20:06:30.26ID:5A0Iky+5
Win16の存在が消されてる...
2017/04/17(月) 00:21:05.80ID:6QpAECc+
生まれてなかったんで。
そう言えばWin16sとの互換性のためとか勉強した覚えある。
そう言えばWin16sとの互換性のためとか勉強した覚えある。
2017/04/17(月) 00:52:44.41ID:tarAwmvI
win32sならやったけど、Win16sは知らないなあ。
2017/04/17(月) 08:58:12.02ID:V9IKpLf1
揚げ足どりにも程があるw
2017/04/27(木) 23:52:23.90ID:fIPmJDul
IT業界を離れて10数年経つ者です。
いまどき高速なアプリを手軽に作りたい場合、現役の方はどういう環境で作っています?
当時は主にMFC、たまにC++Builderでやってました。重くても良い場合はVBも使いました。
出来れば今後10年使えそうな奴をお願いします。今もたまに簡単なツールを作る機会が
ありますが、その際はMFCで作っています。多少勉強する覚悟はあります。
よろしくお願いします。
いまどき高速なアプリを手軽に作りたい場合、現役の方はどういう環境で作っています?
当時は主にMFC、たまにC++Builderでやってました。重くても良い場合はVBも使いました。
出来れば今後10年使えそうな奴をお願いします。今もたまに簡単なツールを作る機会が
ありますが、その際はMFCで作っています。多少勉強する覚悟はあります。
よろしくお願いします。
2017/04/28(金) 01:05:33.78ID:1gQE0OT9
100デフォルトの名無しさん
2017/04/29(土) 20:05:07.24ID:cs4H/lwY >>98
本当に経験者ならこんな質問はしないやな
本当に経験者ならこんな質問はしないやな
101デフォルトの名無しさん
2017/04/29(土) 21:27:44.34ID:p2ephTDn >>98
C#
C#
102デフォルトの名無しさん
2017/05/01(月) 17:24:45.69ID:tRarccr2 C#やっときゃなんとかなる
103デフォルトの名無しさん
2017/05/01(月) 22:10:24.46ID:ybWlfBdW WPFやUWPは廃れても、C#とXAMLは残ってそう。
C++とMFCも地味に残ってるだろうけど。。。
C++とMFCも地味に残ってるだろうけど。。。
10498
2017/05/01(月) 23:13:30.10ID:MV/lR732 ご意見ありがとうございます。
参考にします。
参考にします。
105デフォルトの名無しさん
2017/05/07(日) 20:46:12.14ID:904pYcPE C#意外と人気なんだな・・・驚いた
106デフォルトの名無しさん
2017/05/10(水) 00:20:17.07ID:+OKBVlnQ MFCで印刷プレビューのリボンバーってどうやってカスタマイズするの??
107デフォルトの名無しさん
2017/05/23(火) 19:47:17.95ID:U7efYych MDIの子ウィンドウのハンドルはどこですかぁ〜
108デフォルトの名無しさん
2017/05/24(水) 06:22:57.52ID:r4nnDW8T109デフォルトの名無しさん
2017/05/30(火) 19:18:12.89ID:R0a35IVC > CCriticalSection オブジェクトの使用方式は、2 とおりあります。
> スタンドアロン方式、およびクラスに埋め込む方式です。
>
> スタンドアロン方式
> CCriticalSection オブジェクトをスタンドアロンで使うには、
> 必要が生じたときに CCriticalSection オブジェクトを構築します。
> コンストラクタから正常に戻った後、Lock を呼び出してオブジェクトを明示的にロックします。
> クリティカル セクションへのアクセスが完了したら、Unlock を呼び出します。
> この方法はソース コードを読んだ人にはわかりやすいのですが、
> アクセスの前後でクリティカル セクションをロック、アンロックすることを
> 覚えておかなければならないため、エラーを引き起こす傾向があります。
> より望ましいのは、CSingleLock クラスを使う方法です。
> この場合も Lock メソッドおよび Unlock メソッドを使いますが、
> 例外が発生したときにリソースのロックを解除する必要はありません。
>
> 埋め込み方式
> CCriticalSection 型のデータ メンバをクラスに追加し、
> 必要に応じてロックすると、複数のスレッドでクラスを共有することもできます。
MSDNのCCriticalSectionの説明には、上のように書かれているのですが、
このスタンドアロン方式って、どういう意図なのでしょうか。
普通に読めば、関数の内部でローカル変数として宣言するように思えるのですが、
それだと全く排他制御になっていないのでは?
> スタンドアロン方式、およびクラスに埋め込む方式です。
>
> スタンドアロン方式
> CCriticalSection オブジェクトをスタンドアロンで使うには、
> 必要が生じたときに CCriticalSection オブジェクトを構築します。
> コンストラクタから正常に戻った後、Lock を呼び出してオブジェクトを明示的にロックします。
> クリティカル セクションへのアクセスが完了したら、Unlock を呼び出します。
> この方法はソース コードを読んだ人にはわかりやすいのですが、
> アクセスの前後でクリティカル セクションをロック、アンロックすることを
> 覚えておかなければならないため、エラーを引き起こす傾向があります。
> より望ましいのは、CSingleLock クラスを使う方法です。
> この場合も Lock メソッドおよび Unlock メソッドを使いますが、
> 例外が発生したときにリソースのロックを解除する必要はありません。
>
> 埋め込み方式
> CCriticalSection 型のデータ メンバをクラスに追加し、
> 必要に応じてロックすると、複数のスレッドでクラスを共有することもできます。
MSDNのCCriticalSectionの説明には、上のように書かれているのですが、
このスタンドアロン方式って、どういう意図なのでしょうか。
普通に読めば、関数の内部でローカル変数として宣言するように思えるのですが、
それだと全く排他制御になっていないのでは?
110デフォルトの名無しさん
2017/05/31(水) 00:18:49.47ID:VxTDzTEq Mutexみたいに名前付きなら上のスタンドアロン方式も理解できるけど名前ないからなー
わかんね
わかんね
111デフォルトの名無しさん
2017/05/31(水) 10:12:23.47ID:7kWP6r82 CCriticalSectionインスタンスが同期オブジェクトなわけではないよ。
クリティカルセクションは名前の通りクリティカルな区間のこと。Win32APIのEnterCriticalSection()からLeaveCriticalSection()の区間。
CCriticalSectionはこれのラッパー。
クリティカルセクションに入るスレッドはプロセスで一つだけになる。
プロセス間排他はできない代わりに軽い。
同期オブジェクトがプロセスで一つだけになのと同義。
マルチコア・マルチスレッドでロック待ちが無視できなくなるようなら他の使う。
クリティカルセクションは名前の通りクリティカルな区間のこと。Win32APIのEnterCriticalSection()からLeaveCriticalSection()の区間。
CCriticalSectionはこれのラッパー。
クリティカルセクションに入るスレッドはプロセスで一つだけになる。
プロセス間排他はできない代わりに軽い。
同期オブジェクトがプロセスで一つだけになのと同義。
マルチコア・マルチスレッドでロック待ちが無視できなくなるようなら他の使う。
112デフォルトの名無しさん
2017/05/31(水) 13:08:02.66ID:ZVZYbrmW >>111
クリティカルセクションという用語は>>111の言う様に元々「クリティカルな区間」のことだが、Win32では
スレッド間排他処理のための同期オブジェクトとして"CRITICAL_SECTION"があり、CCriticalSectionはこのラッパー。
( https://msdn.microsoft.com/ja-jp/library/cc429052.aspx にも"「クリティカル セクション」は、Win32の基本的な同期オブジェクトの1つです。"と書かれている)
>>109
確かにその説明はチンプンカンプンだねえ。
推測だけど、たとえばCStringをスレッド間排他制御するために
CString strFoo ;
CCriticalSection csForFoo ; // 非AUTO
:
csForFoo.Lock() ;
strFoo += strBar ;
csForFoo.Unlock() ;
:
みたいに書く(定義上はcsForFooはstrFooと結びついていない)のが、「スタンドアロン方式」で
class CThreadSafeString : public CString {
private:
CCriticalSection csForMe ;
public:
void ThreadSafeAppend( LPCSTR p ) {
csForMe.Lock() ;
*this += p ;
csForMe.Unlock() ;
}
} ;
みたいに書く(クラスに排他処理を埋め込む)のが「埋め込み方式」じゃないかなあ。
で、いずれの方式でも上記のような記述では「クリティカルな区間」で例外が発生するとUnlock()が実行されないので、これを避けるため、CSingleLockクラスを使えと。
クリティカルセクションという用語は>>111の言う様に元々「クリティカルな区間」のことだが、Win32では
スレッド間排他処理のための同期オブジェクトとして"CRITICAL_SECTION"があり、CCriticalSectionはこのラッパー。
( https://msdn.microsoft.com/ja-jp/library/cc429052.aspx にも"「クリティカル セクション」は、Win32の基本的な同期オブジェクトの1つです。"と書かれている)
>>109
確かにその説明はチンプンカンプンだねえ。
推測だけど、たとえばCStringをスレッド間排他制御するために
CString strFoo ;
CCriticalSection csForFoo ; // 非AUTO
:
csForFoo.Lock() ;
strFoo += strBar ;
csForFoo.Unlock() ;
:
みたいに書く(定義上はcsForFooはstrFooと結びついていない)のが、「スタンドアロン方式」で
class CThreadSafeString : public CString {
private:
CCriticalSection csForMe ;
public:
void ThreadSafeAppend( LPCSTR p ) {
csForMe.Lock() ;
*this += p ;
csForMe.Unlock() ;
}
} ;
みたいに書く(クラスに排他処理を埋め込む)のが「埋め込み方式」じゃないかなあ。
で、いずれの方式でも上記のような記述では「クリティカルな区間」で例外が発生するとUnlock()が実行されないので、これを避けるため、CSingleLockクラスを使えと。
113デフォルトの名無しさん
2017/06/04(日) 22:05:56.04ID:rXndkeA4 >>110-112
解説ありがとうございます。
> CCriticalSection csForFoo ; // 非AUTO
> :
> csForFoo.Lock() ;
> strFoo += strBar ;
> csForFoo.Unlock() ;
この使い方が当初の疑問だったのですが、
このローカル変数としての使い方って、意味ありますか?
試しに同じような処理を作って、複数のスレッドから同時に呼んでみても、
全く排他制御されているように見えなかったのですが。
解説ありがとうございます。
> CCriticalSection csForFoo ; // 非AUTO
> :
> csForFoo.Lock() ;
> strFoo += strBar ;
> csForFoo.Unlock() ;
この使い方が当初の疑問だったのですが、
このローカル変数としての使い方って、意味ありますか?
試しに同じような処理を作って、複数のスレッドから同時に呼んでみても、
全く排他制御されているように見えなかったのですが。
114デフォルトの名無しさん
2017/06/05(月) 10:47:00.10ID:CcS2OTgy115デフォルトの名無しさん
2017/06/05(月) 12:03:45.22ID:umvVrk12 >>114
> CCriticalSection csForFoo ; // 非AUTO
> :
> csForFoo.Lock() ;
ああ、このcsForFooは関数内の自動変数ではなくて、
関数外なり静的変数なりで定義されているものいうことでしたか。
> 普通に読めば、関数の内部でローカル変数として宣言するように思えるのですが
の「ローカル変数」は、「自動変数」の意味でした。
失礼しました。
> CCriticalSection csForFoo ; // 非AUTO
> :
> csForFoo.Lock() ;
ああ、このcsForFooは関数内の自動変数ではなくて、
関数外なり静的変数なりで定義されているものいうことでしたか。
> 普通に読めば、関数の内部でローカル変数として宣言するように思えるのですが
の「ローカル変数」は、「自動変数」の意味でした。
失礼しました。
116デフォルトの名無しさん
2017/06/05(月) 19:28:46.05ID:SdDD09qt >>109の原文(MSDN)には
construct the CCriticalSection object when it is needed.
と書かれているからCCriticalSection objectはオート変数と解釈してもおかしくは無い気がする。
staticならあらかじめになってしまう。
construct the CCriticalSection object when it is needed.
と書かれているからCCriticalSection objectはオート変数と解釈してもおかしくは無い気がする。
staticならあらかじめになってしまう。
117デフォルトの名無しさん
2017/06/06(火) 17:22:09.38ID:2bddCvIA >>116
「コンストラクタから正常に戻った後、Lock を呼び出して」
とも書いてあるので、普通に読めば自動変数ですよねぇ。
でも、自動変数のCCriticalSectionをロックしても排他制御になっていないはずだし、
これはどういう意図なんだろうか、という質問でした。
「コンストラクタから正常に戻った後、Lock を呼び出して」
とも書いてあるので、普通に読めば自動変数ですよねぇ。
でも、自動変数のCCriticalSectionをロックしても排他制御になっていないはずだし、
これはどういう意図なんだろうか、という質問でした。
118デフォルトの名無しさん
2017/11/29(水) 18:24:25.41ID:HFlnlUlA MFC MDIで2つのメニューを出したいので、mainframeにCMFCMenuBarを2つ作って、2つCreateすると、2つ目のCreateはAssertでとまってしまいます。2つのメニューを表示させる方法はありませんか?
119デフォルトの名無しさん
2017/11/30(木) 13:32:53.51ID:isxZpuq9 >>118
「Method should be called once!」
なんてコメントが入ってるくらいだから、メニューは一つという設計なんだろう。
CMFCToolBarにCMFCToolBarMenuButtonを並べたほうが早いかも。
見た目を完全にメニューと合わせるなら、派生クラスを作ってオーバーライドする必要もあるだろうけど。
「Method should be called once!」
なんてコメントが入ってるくらいだから、メニューは一つという設計なんだろう。
CMFCToolBarにCMFCToolBarMenuButtonを並べたほうが早いかも。
見た目を完全にメニューと合わせるなら、派生クラスを作ってオーバーライドする必要もあるだろうけど。
120デフォルトの名無しさん
2017/11/30(木) 20:04:53.18ID:9ANPxZI+ menuボタンを並べるのは良いアイデアだと思います。IEdemoというサンプルを見ていたら、LinkBarというクラスを作って使っていました。2つのメニューは、やはり初期化しないのが良さそうです。1つは別の物にしてみます。ありがとうございます!
121デフォルトの名無しさん
2017/11/30(木) 23:13:55.12ID:9ANPxZI+ IEDEMOのMFCコード、なかなか思い道理に動きません。MDIでサンプルを作って、CLinksBarとCLinksButtonを移植しようとしましたが、表示がバグります。バグっているけれどマウスカーソルをあてると、TOOLTIPが表示されます。何かが足りないようです。難しい
122デフォルトの名無しさん
2017/12/01(金) 09:35:49.83ID:/UAM0shb >>121
>>121
実際に見ていないからわからないけど、
ツールバーの情報は標準でレジストリに保存されてしまうから、
開発中は定期的にレジストリを消さないといろいろ原因不明の現象は起こる。
一度消してみたらどうかと。
ちなみに、m_wndToolBar.LoadToolBar()のあとに以下の処理を入れたら、
とりあえずツールバーにメニューを出すサンプルにはなる。
(これも一度レジストリの削除は必要)
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
for (UINT i = 0; i < menu.GetMenuItemCount(); i++) {
CString strText;
menu.GetMenuString(i, strText, MF_BYPOSITION);
m_wndToolBar.InsertButton(CMFCToolBarMenuButton(-1, menu.GetSubMenu(i)->GetSafeHmenu(), -1, strText));
}
>>121
実際に見ていないからわからないけど、
ツールバーの情報は標準でレジストリに保存されてしまうから、
開発中は定期的にレジストリを消さないといろいろ原因不明の現象は起こる。
一度消してみたらどうかと。
ちなみに、m_wndToolBar.LoadToolBar()のあとに以下の処理を入れたら、
とりあえずツールバーにメニューを出すサンプルにはなる。
(これも一度レジストリの削除は必要)
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
for (UINT i = 0; i < menu.GetMenuItemCount(); i++) {
CString strText;
menu.GetMenuString(i, strText, MF_BYPOSITION);
m_wndToolBar.InsertButton(CMFCToolBarMenuButton(-1, menu.GetSubMenu(i)->GetSafeHmenu(), -1, strText));
}
123デフォルトの名無しさん
2017/12/01(金) 23:29:26.56ID:658qbITu >>122さんのおかげで先に進めました。
下記のようにしたら、思い通りのメニューが出て、しっかり動いてくれました。
/*
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
{
TRACE0("ツール バーの作成に失敗しました。\n");
return -1; // 作成できない場合
}
*/
m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
CMenu menu;
menu.LoadMenu(IDR_MENU_2);
for (UINT i = 0; i < menu.GetMenuItemCount(); i++) {
CString strText;
menu.GetMenuString(i, strText, MF_BYPOSITION);
int menuID;
menuID = menu.GetMenuItemID(i);
m_wndToolBar.InsertButton(CMFCToolBarMenuButton(menuID, menu.GetSubMenu(i)->GetSafeHmenu(), -1, strText));
}
Toolbarはとても難しいですね。私だけではとても思い通りの物は作れませんでした。>>122さんありがとう!
下記のようにしたら、思い通りのメニューが出て、しっかり動いてくれました。
/*
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
{
TRACE0("ツール バーの作成に失敗しました。\n");
return -1; // 作成できない場合
}
*/
m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
CMenu menu;
menu.LoadMenu(IDR_MENU_2);
for (UINT i = 0; i < menu.GetMenuItemCount(); i++) {
CString strText;
menu.GetMenuString(i, strText, MF_BYPOSITION);
int menuID;
menuID = menu.GetMenuItemID(i);
m_wndToolBar.InsertButton(CMFCToolBarMenuButton(menuID, menu.GetSubMenu(i)->GetSafeHmenu(), -1, strText));
}
Toolbarはとても難しいですね。私だけではとても思い通りの物は作れませんでした。>>122さんありがとう!
124デフォルトの名無しさん
2017/12/09(土) 13:03:41.75ID:6uVA15bl MDIで色々ウインドウを出すと、チャイルドウィンドウのタイトルバーが:1 :2になったり、消えてしまったりします。特に後ろになったチャイルドウィンドウのタイトルバーが書き換わって、タイトルが消えてしまう問題に頭を痛めております。
CWNDクラス内などにウインドウタイトルの情報を保持していて、時々その保持している情報で書き換えているように思うのですが、保持している情報がどれなのか、書き換えられるのかわかりません。
今の所OnPaint内でGetParent()->SetWindowTextで書き換えているのですが先のようにチャイルドウインドウが後ろに回るとタイトル表示が消えたりします。なにか良いタイトルバーテキストの書き換え方法は有りませんでしょうか?
CWNDクラス内などにウインドウタイトルの情報を保持していて、時々その保持している情報で書き換えているように思うのですが、保持している情報がどれなのか、書き換えられるのかわかりません。
今の所OnPaint内でGetParent()->SetWindowTextで書き換えているのですが先のようにチャイルドウインドウが後ろに回るとタイトル表示が消えたりします。なにか良いタイトルバーテキストの書き換え方法は有りませんでしょうか?
125デフォルトの名無しさん
2017/12/12(火) 18:12:33.03ID:/EihAdTu 124が消したり書き換えているんだと思う。
素のMDIプロジェクト作ってもそういう動きになる?
素のMDIプロジェクト作ってもそういう動きになる?
126デフォルトの名無しさん
2017/12/12(火) 22:35:42.07ID:CKA01eZH 素のMDIプロジェクトだとなりません。素のままだとタイトルバーがチャイルドウインドウの数に応じてプロジェクト名+1,2,3と表示されてしまいます。
チャイルドウインドウのFormView別にチャイルドウインドウのタイトルを変化させたいのですが、うまくいきません。
タイトルバーをもっと思うように書き換える方法を探しております。
チャイルドウインドウのFormView別にチャイルドウインドウのタイトルを変化させたいのですが、うまくいきません。
タイトルバーをもっと思うように書き換える方法を探しております。
127デフォルトの名無しさん
2017/12/12(火) 23:44:01.59ID:/EihAdTu CDocumentのサブクラスでSetTitle(LPCTSTR lpszTitle)をオーバーライドして独自のタイトルを付けるのはどうかな。
よく覚えてないけど独自のタイトルじゃなくlpszTitleを加工しようとすると嫌な感じにハマった記憶が、、
よく覚えてないけど独自のタイトルじゃなくlpszTitleを加工しようとすると嫌な感じにハマった記憶が、、
128デフォルトの名無しさん
2017/12/13(水) 09:22:41.41ID:lt+jgkVB >>124
CMDIChildWnd::OnUpdateFrameTitle()をオーバーライドしてみては。
何科変化するたびにこの関数が呼ばれるし、
デフォルトの処理だと、ここで":1"とか追加している。
CMDIChildWnd::OnUpdateFrameTitle()をオーバーライドしてみては。
何科変化するたびにこの関数が呼ばれるし、
デフォルトの処理だと、ここで":1"とか追加している。
129デフォルトの名無しさん
2017/12/13(水) 09:23:33.82ID:lt+jgkVB × 何科
○ なにか
○ なにか
130デフォルトの名無しさん
2017/12/13(水) 12:23:45.29ID:h/Ab3OoN131デフォルトの名無しさん
2017/12/13(水) 18:07:57.07ID:xRSHjr6s >CMDIChildWnd::OnUpdateFrameTitle()をオーバーライドしてみては。
OnUpdateFrameTitleをオーバーライドして、親クラスのメソッドをよびにいく時のパラメーターをfalseにしてみたところ、チャイルドウインドウのタイトルが書き換わらなくなりました。
ありがとうございます!
OnUpdateFrameTitleをオーバーライドして、親クラスのメソッドをよびにいく時のパラメーターをfalseにしてみたところ、チャイルドウインドウのタイトルが書き換わらなくなりました。
ありがとうございます!
132デフォルトの名無しさん
2017/12/25(月) 18:31:00.49ID:1KZX1+KX mfcで見た目の良い(テーマを適用した)ラジオボタンを出したいと思っています。ところが、ラジオボタンのクラスとして、CMFCRadioButtonというクラスがありません。
恐らくCMFCButtonクラスのインスタンスを生成してラジオボタンとして用いるのかなと悩み、CMFCButtonクラスの継承でCMFCRadioButtonクラスが作れないものか、考えています。
CMFCRadioButtonクラスは作ってみた物の、CMFCRadioButtonクラスのOnDrawが呼び出されません。CMFCタイプのラジオボタンを生成する良い方法はございませんか?
恐らくCMFCButtonクラスのインスタンスを生成してラジオボタンとして用いるのかなと悩み、CMFCButtonクラスの継承でCMFCRadioButtonクラスが作れないものか、考えています。
CMFCRadioButtonクラスは作ってみた物の、CMFCRadioButtonクラスのOnDrawが呼び出されません。CMFCタイプのラジオボタンを生成する良い方法はございませんか?
133デフォルトの名無しさん
2017/12/26(火) 09:21:22.00ID:pmYcZWoZ >>132
virtual void OnDraw(CDC* pDC, const CRect& rect, UINT uiState);
をオーバーライドしたら、ちゃんと呼ばれているように見えるけど。
virtual void OnDraw(CDC* pDC, const CRect& rect, UINT uiState);
をオーバーライドしたら、ちゃんと呼ばれているように見えるけど。
134デフォルトの名無しさん
2017/12/26(火) 12:13:07.59ID:SnpEsSKI リソースではラジオボタンを定義しておいて、DDXCONTROLからCMFCRadioButtonクラス(CMFCButtonクラス派生)とひもづけると、外観がボタンになってしまいます。
外観はボタンですが、確かにCMFCRadioButtonクラスのOnDrawは呼び出されます。
外観がボタンではなく、ラジオボタンにする方法をご教示下さい。
外観はボタンですが、確かにCMFCRadioButtonクラスのOnDrawは呼び出されます。
外観がボタンではなく、ラジオボタンにする方法をご教示下さい。
135デフォルトの名無しさん
2017/12/26(火) 12:55:18.72ID:pmYcZWoZ >>134
CMFCButtonの標準の描画処理がボタン前提になっているので、
ラジオボタンの見た目を表現したいなら、
OnDraw()などをオーバーライドして自分で完全に描画するしかないかと。
そもそも、CMFCButtonではなくCButtonにしてしまえば、
Windowsのテーマに従ったものは描画されるけど、
そうではなく、CMFCVisualManagerのテーマのことでいいんだよね?
最新のMFCは知らないけど、2008で導入されたときのMFCは、
ダイアログや内部のコントロールのテーマ描画は対応してない。
ライブラリの元となったBCG社が、機能を別売りしている。
ttps://www.bcgsoft.com/featuretour/tour240.htm
CMFCButtonの標準の描画処理がボタン前提になっているので、
ラジオボタンの見た目を表現したいなら、
OnDraw()などをオーバーライドして自分で完全に描画するしかないかと。
そもそも、CMFCButtonではなくCButtonにしてしまえば、
Windowsのテーマに従ったものは描画されるけど、
そうではなく、CMFCVisualManagerのテーマのことでいいんだよね?
最新のMFCは知らないけど、2008で導入されたときのMFCは、
ダイアログや内部のコントロールのテーマ描画は対応してない。
ライブラリの元となったBCG社が、機能を別売りしている。
ttps://www.bcgsoft.com/featuretour/tour240.htm
136デフォルトの名無しさん
2017/12/26(火) 19:16:10.15ID:85Qwpz2C 2008年にMSがBCGを買収してCommunityEditionにこれが入っていたら、、と思う。
137デフォルトの名無しさん
2017/12/26(火) 20:03:16.51ID:U4eSFsG2 CMFCVisualManagerでたぶんあっています。
mfcのコンパイルオプションをUnicodeモードにすると、ラジオボタンの見た目が変わることは分かったのですが、ANSI(ShiftJIS)モードでコンパイルしたいのです。
今気になっているのは、manifestファイルを追加してみようと思います。
http://gurigumi.s349.xrea.com/programming/visualcpp/sdk_luna.html
mfcのコンパイルオプションをUnicodeモードにすると、ラジオボタンの見た目が変わることは分かったのですが、ANSI(ShiftJIS)モードでコンパイルしたいのです。
今気になっているのは、manifestファイルを追加してみようと思います。
http://gurigumi.s349.xrea.com/programming/visualcpp/sdk_luna.html
138デフォルトの名無しさん
2017/12/26(火) 20:28:21.70ID:SQt/8UlT139デフォルトの名無しさん
2017/12/26(火) 21:53:49.91ID:lgrMwj5m マルチバイト文字モードでコンパイルした場合の見た目の違いです。DDXControlで左はCButton右はCMFCButtonとひもづけました。
https://i.imgur.com/4qA7an3.jpg
https://i.imgur.com/4qA7an3.jpg
140デフォルトの名無しさん
2017/12/26(火) 22:19:37.75ID:lgrMwj5m やはりmanifestファイルのようです。マニフェストファイルでラジオボタンは変化しました。
マニフェスト適用後
https://i.imgur.com/JqRoqH4.jpg
マニフェスト適用前
https://i.imgur.com/lC9fLyO.jpg
マニフェスト適用後
https://i.imgur.com/JqRoqH4.jpg
マニフェスト適用前
https://i.imgur.com/lC9fLyO.jpg
141デフォルトの名無しさん
2017/12/30(土) 19:20:54.71ID:W7MN//Qp このスレはVisualStudioの使い方、
質問はアプリケーションの作り方
微妙に違うといえば違う。
かといって誘導出来る適当なスレは見当たらない
MFCのスレくらいかな
質問はアプリケーションの作り方
微妙に違うといえば違う。
かといって誘導出来る適当なスレは見当たらない
MFCのスレくらいかな
142デフォルトの名無しさん
2017/12/30(土) 20:06:14.31ID:k3f51DlY mfcのスレでmfcのクラスに関する質問をしていますよ。
143デフォルトの名無しさん
2018/01/06(土) 20:47:11.78ID:wtVvXwwo Excelでキャレットの無い状態から日本語入力をするとテキストボックス?が現れて文字が未確定状態で表示されますが
同様な動きををCViewとCEditでやろうとしています。
以前はViewのOnCharからCEditにWM_CHARをポストすることで普通に動いていたのですが、OSの仕様が変わったのか
最初の1文字が確定状態で表示されてしまいます。ATOKもMS-IMEも同じです。
何かヒントがあれば教えてください。
同様な動きををCViewとCEditでやろうとしています。
以前はViewのOnCharからCEditにWM_CHARをポストすることで普通に動いていたのですが、OSの仕様が変わったのか
最初の1文字が確定状態で表示されてしまいます。ATOKもMS-IMEも同じです。
何かヒントがあれば教えてください。
144デフォルトの名無しさん
2018/01/11(木) 02:22:52.84ID:azQtlc4c excelでキャレットの無い状態というのがわかりません。^が無い状態で入力を開始するのでしょうか?
145デフォルトの名無しさん
2018/01/11(木) 22:28:59.70ID:nH81YmjO146デフォルトの名無しさん
2018/01/11(木) 22:30:38.90ID:nH81YmjO 文字入力時に点滅する「I」のような記号がキャレットです。
147デフォルトの名無しさん
2018/01/12(金) 22:01:33.38ID:mgMC0phM 回答になっているかどうか分からないのですが、CViewクラスではない場合でCListCtrlクラス内にCEditを貼り付けて、そのCEdit上で編集をする例は有ります。
CView上にCEditを張り付けているような応用にもかなるかもしれませんので、例を上げます。
http://www.softist.com/programming/listctrl-edit/listctrl-edit.htm
CView上にCEditを張り付けているような応用にもかなるかもしれませんので、例を上げます。
http://www.softist.com/programming/listctrl-edit/listctrl-edit.htm
148デフォルトの名無しさん
2018/01/13(土) 18:52:00.81ID:CyFncowx149デフォルトの名無しさん
2018/01/29(月) 00:24:27.95ID:lYpQ/Knz すみませんお助けください
親ウインドウにテキストボックスとボタン、ボタンを押すとdomodalでウインドウが呼び出されます
その子ウインドウにはリストボックスがあって、そこには親のテキストボックスに入力された文字が表示される
そういうものを作ろうとしています
親テキストボックスの変数名がm_input
setvalueでプライベートにしてるリストボックス変数にそれを格納しています
ですがこれですとウインドウは表示されてもリストボックスはからっぽです。
一体何が悪いのでしょうか
void 親ウインドウクラス名::OnBnClickedButton1()
{
PopupDlg pdlg;
UpdateData(TRUE);
pdlg.setValue(m_input);
pdlg.DoModal();
UpdateData(FALSE);
}
親ウインドウにテキストボックスとボタン、ボタンを押すとdomodalでウインドウが呼び出されます
その子ウインドウにはリストボックスがあって、そこには親のテキストボックスに入力された文字が表示される
そういうものを作ろうとしています
親テキストボックスの変数名がm_input
setvalueでプライベートにしてるリストボックス変数にそれを格納しています
ですがこれですとウインドウは表示されてもリストボックスはからっぽです。
一体何が悪いのでしょうか
void 親ウインドウクラス名::OnBnClickedButton1()
{
PopupDlg pdlg;
UpdateData(TRUE);
pdlg.setValue(m_input);
pdlg.DoModal();
UpdateData(FALSE);
}
150デフォルトの名無しさん
2018/01/29(月) 09:13:09.91ID:TsZXtod4151デフォルトの名無しさん
2018/01/30(火) 19:55:15.15ID:JKI/Ug3X すっかり遅くなったけど申し訳ない
oninitdialogに処理書いたらなんとかなりました
oninitdialogに処理書いたらなんとかなりました
152デフォルトの名無しさん
2018/02/08(木) 23:58:28.60ID:/8AuktPL MDIウィンドウの場合で、メニューのフォントとフォントサイズは変えられますか?
ツールバーの右端に出てくるボタンの表示非表示を無くすことは出来ますか?
ツールバーの右端に出てくるボタンの表示非表示を無くすことは出来ますか?
153デフォルトの名無しさん
2018/02/09(金) 09:43:56.52ID:DYanFj/G >>152
MFC Feature Packのメニューやツールバーのことなら、
> メニューのフォントとフォントサイズ
CMFCMenuBar::SetMenuFont
> ボタンの表示非表示
CMFCToolBar::EnableCustomizeButton
MFC Feature Packのメニューやツールバーのことなら、
> メニューのフォントとフォントサイズ
CMFCMenuBar::SetMenuFont
> ボタンの表示非表示
CMFCToolBar::EnableCustomizeButton
154デフォルトの名無しさん
2018/02/09(金) 22:24:50.30ID:n0NVuMox ありがとうございます!試してみます。
155デフォルトの名無しさん
2018/02/10(土) 15:55:33.49ID:AljsEXlF あれ?
CListViewなくなったん?
ウイザードにないw
CListViewなくなったん?
ウイザードにないw
156デフォルトの名無しさん
2018/02/10(土) 19:51:23.23ID:kahd5R/F SDIかMDIを選んでいれば、ウイザードの最後の項目でViewを選択できるはずです。選ぶ中にCListViewは有るはずです。
157デフォルトの名無しさん
2018/02/10(土) 20:30:44.41ID:9BceoeeN ないんだなーこれが
158デフォルトの名無しさん
2018/02/10(土) 23:11:10.45ID:tnD/bf0m そんなわけ無いだろうと思ったけど、無いね..
CListViewは存在するけどウィザードでは選択できなくなったのか
結構便利なクラスだと思うんだけどな
CListViewは存在するけどウィザードでは選択できなくなったのか
結構便利なクラスだと思うんだけどな
159デフォルトの名無しさん
2018/02/10(土) 23:55:46.38ID:9BceoeeN だろー
昨日から三回も再インストールしてる
昨日から三回も再インストールしてる
160デフォルトの名無しさん
2018/02/11(日) 00:27:35.71ID:Abk6WT5B 確かに2017communityでは、無くなっています。2013Communityには有るようです。
161デフォルトの名無しさん
2018/02/11(日) 14:12:45.40ID:TT4/yggk 一応、MSに連絡
162デフォルトの名無しさん
2018/02/11(日) 17:09:15.62ID:NeODdjx3 まぁこのへんの仕組みはもう変わらないだろうし、
適当なものを選んでから書き直しても問題ないけどな。
適当なものを選んでから書き直しても問題ないけどな。
163デフォルトの名無しさん
2018/02/12(月) 00:23:21.23ID:gJKrDJtj TreeViewぐらいで
164デフォルトの名無しさん
2018/02/16(金) 06:26:23.85ID:W1XJdyx1 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
165デフォルトの名無しさん
2018/02/17(土) 09:44:17.48ID:skmHixeO ウィザードのCListViewの話
去年にはもうあった話題やん
もうちょっと頑張ってくれよ
https://developercommunity.visualstudio.com/content/problem/135607/vs-1541-vcmfc-application-wizard-cant-select-listv.html
去年にはもうあった話題やん
もうちょっと頑張ってくれよ
https://developercommunity.visualstudio.com/content/problem/135607/vs-1541-vcmfc-application-wizard-cant-select-listv.html
166デフォルトの名無しさん
2018/02/28(水) 17:21:10.04ID:C00JEheo167デフォルトの名無しさん
2018/02/28(水) 18:28:27.62ID:8m4UvZqy ソースが付いてるんだから読みなよ
168デフォルトの名無しさん
2018/03/01(木) 12:14:56.76ID:AHCBMzq/ >>166
とりあえずこんな感じで書けば変わる。
ただ、あまり大きくすると、縦にドッキングしたときに文字が欠ける。
最新バージョンなら直っているのかもしれないけど、
自分のアプリではメニューは上部固定なので、深くは調べていない。
> メニューのフォントとフォントサイズ
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(metrics);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0);
LOGFONT lfMenu = metrics.lfMenuFont;
_tcscpy_s(lfMenu.lfFaceName, _T("MS P明朝"));
lfMenu.lfHeight = -24;
CMFCMenuBar::SetMenuFont(&lfMenu);
lfMenu.lfOrientation = 900;
lfMenu.lfEscapement = 2700;
CMFCMenuBar::SetMenuFont(&lfMenu, FALSE);
> ボタンの表示非表示
m_wndToolBar.EnableCustomizeButton(TRUE, -1, _T(""), FALSE);
もしくは、EnableCustomizeButtonを呼ばない。
とりあえずこんな感じで書けば変わる。
ただ、あまり大きくすると、縦にドッキングしたときに文字が欠ける。
最新バージョンなら直っているのかもしれないけど、
自分のアプリではメニューは上部固定なので、深くは調べていない。
> メニューのフォントとフォントサイズ
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(metrics);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0);
LOGFONT lfMenu = metrics.lfMenuFont;
_tcscpy_s(lfMenu.lfFaceName, _T("MS P明朝"));
lfMenu.lfHeight = -24;
CMFCMenuBar::SetMenuFont(&lfMenu);
lfMenu.lfOrientation = 900;
lfMenu.lfEscapement = 2700;
CMFCMenuBar::SetMenuFont(&lfMenu, FALSE);
> ボタンの表示非表示
m_wndToolBar.EnableCustomizeButton(TRUE, -1, _T(""), FALSE);
もしくは、EnableCustomizeButtonを呼ばない。
169デフォルトの名無しさん
2018/03/01(木) 13:10:39.24ID:txqdSq4Q 軽く煽ると答えを書いてくれるこのスレはチョロいよねw
170デフォルトの名無しさん
2018/03/01(木) 18:59:24.33ID:5P8YUW6k 自演じゃなければ
171デフォルトの名無しさん
2018/03/01(木) 21:28:45.70ID:qsUh1R3q 質問に答えると負けなんだろうか。
他のスレでも、質問に「答えない」ってだけのしょうもないマウントとりにくる人を見かけるね。
他のスレでも、質問に「答えない」ってだけのしょうもないマウントとりにくる人を見かけるね。
172デフォルトの名無しさん
2018/03/01(木) 22:57:24.75ID:txqdSq4Q >>171
君が質問に答えてあげればいいじゃん
君が質問に答えてあげればいいじゃん
173デフォルトの名無しさん
2018/03/04(日) 03:39:37.81ID:dAX9rxSb174デフォルトの名無しさん
2018/03/22(木) 07:47:15.16ID:QjvVr0xE 温度情報などをグラフにしてFormView上に描画できないか考え込んでいます。自前でCDCに描いていくのではなく、描くのに適しているmfcのライブラリは無いものか、探しています。どなたか目盛りのついたグラフ描画に良いクラスはご存じないでしょうか?
175デフォルトの名無しさん
2018/03/22(木) 10:15:31.03ID:Q2/ylW7b matlab
176デフォルトの名無しさん
2018/03/22(木) 12:52:08.54ID:nhBJfAJ/ >>174
MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
https://www.bcgsoft.com/featuretour/tour270.htm
http://www.codejock.com/products/chart/
無料ならこのへんのソースを読んでみるとか
https://www.codeproject.com/KB/miscctrl/#Charting+Controls
MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
https://www.bcgsoft.com/featuretour/tour270.htm
http://www.codejock.com/products/chart/
無料ならこのへんのソースを読んでみるとか
https://www.codeproject.com/KB/miscctrl/#Charting+Controls
177デフォルトの名無しさん
2018/03/22(木) 18:20:31.23ID:gaCTtyVy matlabはおそらく有料ライセンスですよね。
178デフォルトの名無しさん
2018/03/22(木) 18:22:47.87ID:gaCTtyVy >>176
> >>174
> MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
> https://www.bcgsoft.com/featuretour/tour270.htm
>
グラフとして、このようなグラフが描けると良いなとは思います。 http://www.codejock.com/products/chart/
>
> 無料ならこのへんのソースを読んでみるとか
> https://www.codeproject.com/KB/miscctrl/#Charting+Controls
ちょっと調べてみます。ありがとうございます。
> >>174
> MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
> https://www.bcgsoft.com/featuretour/tour270.htm
>
グラフとして、このようなグラフが描けると良いなとは思います。 http://www.codejock.com/products/chart/
>
> 無料ならこのへんのソースを読んでみるとか
> https://www.codeproject.com/KB/miscctrl/#Charting+Controls
ちょっと調べてみます。ありがとうございます。
179デフォルトの名無しさん
2018/03/22(木) 18:25:07.36ID:gaCTtyVy 昔の話で何ですが、DOSの時代にはMSCなどにグラフ描画ライブラリが付いてきていたような記憶があります。mfcには無さそうですよね。
180デフォルトの名無しさん
2018/03/22(木) 19:42:36.73ID:lw2+9AAf >>179
最新版は知らないが、昔のMFCには無かったと思う。
(昔の) MSDN Library をよく見ているが、発見してない。
でも、グラフ描画って、LineTo() だけでも大体いけると思うんだけど。
最新版は知らないが、昔のMFCには無かったと思う。
(昔の) MSDN Library をよく見ているが、発見してない。
でも、グラフ描画って、LineTo() だけでも大体いけると思うんだけど。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★3 [BFU★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 政府債務(対GDP比)2025年版発表 ついにあの国がワースト1位になってしまう [884040186]
- 千晴のおちんちん舐めたらめかぶの味がした🤮
- 近所にびっくりドンキーがないんだけど!!!
- 【朗報】高市首相に文春砲を放った文春&新潮、無事に叩かれる
- 高市早苗「長期金利なんかよりも日本が成長することのほうが大事」 [834922174]
- 【悲報】高市「マクロンさあ!近平G7に呼ばずハミゴにしちゃってよ!😡」【小学生内閣】 [359965264]
