■MFC相談室 mfc18d.d ..
116:112
07/09/09 02:15:39
>>114
「OnFileNew」をキーワードに、下記フォルダを検索したら探せました。
ありがとうございました!!
C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc
117:デフォルトの名無しさん
07/09/09 02:24:10
WIN32開発、java、C#とやってきて
最近MFCを始めました。
MFCってすごく難しく感じます。
実際どうなんですか?
118:デフォルトの名無しさん
07/09/09 02:25:59
>>117
あなたにとって難しい。それだけのことです。
119:デフォルトの名無しさん
07/09/09 03:16:30
>>117
平然と並列でないものを並べられると、頭がグラグラする。
漢文、英語、中国語とやってきて、
最近2ch語を始めました。
2ch語って凄く難しく感じます。
とかそんな感じか?
120:デフォルトの名無しさん
07/09/09 03:24:08
とりあえず、107のソース使って、dllとexeから実行してみたけど
リーク検出できなかったな
1日実行してみて、どれくらいリークしてるの?
121:デフォルトの名無しさん
07/09/09 08:17:53
>>117
win32の経験があるのなら、mfcはそんなに難しくないと思うが。
122:デフォルトの名無しさん
07/09/09 13:15:43
フレームワーク「郷に入っては郷に従え」
の考え方ができればいける。
123:デフォルトの名無しさん
07/09/09 13:48:24
>>114
もっと簡素化したソースについては今から作る事にします。
>あと、”何らかの初期処理”ってのが、DLLの初期処理ではないとか、
何らかの初期化処理というのは、単にスレッドを起こす前に、おまじない的なものが必要なのかと思って書いただけです。
また、DLLMain関数はMFC側で作っているものを使っているので、こちらの初期化処理については不明です。
>メモリリークが発生しているかどうかをどのように見極めているとか、
管理ツールからパフォーマンスモニタを開きまして、そこでプロセスを選択して、15秒おきにワーキングセットを監視しています。
直接のメモリリークではないと思いますが、exeとの比較により、ワーキングセットの増え方があまりに異常なので問題かと……
>メモリリークは、1スレッドあたりどの程度発生しているとか
1スレッドあたりのリークは調べていませんが、15秒おきのワーキングセット増加値は平均で23kBほどです。
これは、CThreadManager::Run();をタイマーで、90msごとに動かした結果です。
一日動かしたときは、これよりも間隔をあけて1000msでやりました。割合は減りますが、同じようにリークします。
なお、1000msで一日動かしたときの、一日のリーク量は1MBほどです。
>>120
1000ms間隔で1MB程度です。
ちなみに、事情がありまして、DLLエクスポートの部分は少々特殊かなぁ……と。
そこのソースも書いてみます。
124:デフォルトの名無しさん
07/09/09 13:49:25
// エクスポート部分のソース。
__declspec(dllexport) void CreateThreadManager(DWORD** ppObject)
{
*ppObject = (DWORD*)(new CThreadManager());
}
__declspec(dllexport) void RunThread(DWORD* pObject)
{
((CThreadManager*)pObject)->Run();
}
__declspec(dllexport) void DeleteThreadManager(DWORD* pObject)
{
delete (CThreadManager*)pObject;
}
//アプリ側の使用部分
#include "stdafx.h"
#include "ThreadTest.h"
#include "ThreadTestDlg.h"
#include "ThreadDll.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CThreadTestDlg::CThreadTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CThreadTestDlg::IDD, pParent)
{
m_pManager = NULL;
m_nTimerEvent = 0;
}
// 続く
125:デフォルトの名無しさん
07/09/09 13:50:08
//続き
BEGIN_MESSAGE_MAP(CThreadTestDlg, CDialog)
ON_WM_TIMER()
ON_WM_DESTROY()
END_MESSAGE_MAP()
BOOL CThreadTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
::CreateThreadManager(&m_pManager);
m_nTimerEvent = SetTimer(1, 89, NULL);
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}
void CThreadTestDlg::OnTimer(UINT_PTR nIDEvent)
{
if (m_pManager)
{
RunThread(m_pManager);
}
CDialog::OnTimer(nIDEvent);
}
void CThreadTestDlg::OnDestroy()
{
CDialog::OnDestroy();
if (m_nTimerEvent != 0)
{
KillTimer(m_nTimerEvent);
}
DeleteThreadManager(m_pManager);
}
126:デフォルトの名無しさん
07/09/09 13:51:26
てな具合で、動かしています。正直な話タイマー間隔をこのぐらい短く設定すると一日は多分動きません。
もうちょっと空けてやらないと、マシンスペックの弱いPCだと落ちてしまうのではないかと……
127:デフォルトの名無しさん
07/09/09 13:59:38
>>122
そうですか?
BCBやVC#と比べると何をどうしていいのかまったく分からん
128:デフォルトの名無しさん
07/09/09 14:11:26
>>127
>何をどうしていいのかまったく分からん
たとえば、何をどうしたいのかな?
よほど難解なことをしようとしてるのか。それともごく標準的なGUIツールも作れないのか。
129:デフォルトの名無しさん
07/09/09 14:18:07
>>127
ぶっちゃけ、すぐ上のサンプルコードは動かせる?
130:デフォルトの名無しさん
07/09/10 00:10:07
>>126
とりあえず、そのもたないと思われる状態で一日動かしてみるべき
131:デフォルトの名無しさん
07/09/12 10:16:49
CObjectから派生させていないデータクラスでも
Serializeでないファイル読み書きに
CArchiveを使ってしまってよいものでしょうか?
virtual void LoadData(CArchive& ar);
virtual void SaveData(CArchive& ar) const;
こんな感じのメンバ関数を用意しようかと思っているんですけど。
それとも、CFile*を引数にしてしまうべきですか?
132:デフォルトの名無しさん
07/09/12 18:42:47
>>131
シリアル化にIMPLEMENT_SERIALを使わないなら、
CObject派生の意味は殆ど無いし、良いんじゃないかな。
結局は単純なバイト列の読み書きなのだし。
133:デフォルトの名無しさん
07/09/13 09:47:20
>>132
ありがとうございます。
自作データクラス群は大元の親クラスが純粋仮想クラスで、
また、自分自身がCObjectから派生することに慣れていないため、
この形のままCArchiveだけ使えないかなと思いました。
このデータクラス群の一つが内部でCArrayのメンバを持っているのですが、
これを保存するためにCArray::Serializeを呼ぼうとすると、
SaveDataはconstにはできないですね…。
まぁconstを取り外してしまえば、とりあえず動きそうですが、
SaveDataの中でMFCクラスメンバのSerializeをコールというのが
かなりまずい構造なのかなぁ。
134:デフォルトの名無しさん
07/09/13 10:05:42
>>133
MFC - 概念 - シリアル化 - シリアル化 : オブジェクトのシリアル化
- アーカイブを通じた CObject の格納と読み込み
135:デフォルトの名無しさん
07/09/13 22:03:21
質問です
CDialogの派生クラスを作成して、そのダイアログに
CButtonやCStaticなどのコントロールを貼り付けています
そのコントロールの上に色々描画したいんですが
やり方が解りません。どうすればいいでしょうか?
OnPaintを作ってその中で
CPaintDC dc(this);
dc.MoveTo(*,*);
dc.LintTo(**,**);
としてみましたが、コントロールの上でなく背後に描画されてしまいます
136:デフォルトの名無しさん
07/09/13 22:57:38
>>135
ダイアログを派生させるまで分かって、
コントロールを派生させることに思いつかなかったってことでいいの?
137:デフォルトの名無しさん
07/09/13 23:53:45
>>136
CStaticを派生させてそのOnPaintを処理したら
キャプションが表示されなくなりました。
やりたいことはCStaticのコントロールがあれば、そのコントロールに
縁取りして線を描いたり、コントロールの上にビットマップを表示したり
したいんです。その時CStaticの文字を表示する機能はそのまま活かしたい。
イメージとしてはダイアログを表示してそれをビットマップで保存し、
その上に落書きする、みたいな。
138:デフォルトの名無しさん
07/09/14 12:06:25
DLLの関数をコールした時に、よく解らない現象が起きます。
char Buff[1000];
int nRet = ((PT_FUNC)*m_fpFunc)( Buff, sizeof(Buff) );
1行目でBuff領域を確保した後、
2行目のDLLをコールするとBuffのアドレス値が変化してしまいます。
しかもthis変数の値も変化してしまい、エリアの破壊が起きている感じです。
DLL側(自作)では無処理のreturn としています。
2行目のBuff宣言を static char Buff[1000] とすると正常に動作します。
DLL関数には 静的なバッファしか渡せないという事なんでしょうか?
教えて下さい
139:デフォルトの名無しさん
07/09/14 12:26:52
>>138
m_fpFuncの中身をさらせ
140:138
07/09/14 12:38:29
>>139
FARPROC m_fpFunc;
です。ここが違うのでしょうか?
141:デフォルトの名無しさん
07/09/14 12:53:40
>>140
FARPROCやめて実体と同じ型で宣言してみ
引数と戻値が呼び出しと実体で違っててスタックを壊してるだけだと思うぞ
142:138
07/09/14 13:30:42
>>141
指摘の通りでした。
ありがとうございました。
143:デフォルトの名無しさん
07/09/15 17:31:24
>>137
> やりたいことはCStaticのコントロールがあれば、そのコントロールに
> 縁取りして線を描いたり、コントロールの上にビットマップを表示したり
> したいんです。その時CStaticの文字を表示する機能はそのまま活かしたい。
CStaticのOnEranseBkGroundって作れるっけ? 作れるんなら、そこで処理してみたら?
作れないなら、無理っぽい。
144:143
07/09/15 17:34:21
×OnEranseBkGround
○OnEraseBkgnd
145:デフォルトの名無しさん
07/09/15 19:40:30
>>143
結局CStaticから派生してOnPaintの中で
DrawTextとかFrameRectとかを使用するようにしました
今OnEraseBkgndでFrameRectを使ってみましたが、
これでも出来そうな気がします
しかし、テキストの描画時にFrameRectで描いた枠が消されて
しまうようで他にも幾つかいじらなければいけないっぽいですね
一応解決です、皆さんアリガト
146:デフォルトの名無しさん
07/09/16 14:26:04
CHtmlView::Navigate2のエラー検知を行いたいのですが、
どうすれば良いのでしょうか?
どなたか教えてください。
147:デフォルトの名無しさん
07/09/16 14:49:26
自作DLLでダイアログを表示しようとしています。
m_pcDebugDlg->Create(IDD_TEST);
を実行すると、
ERROR: Cannot find dialog template with IDD 0x36B1.
というエラーが発生します。
何かの設定が足りないのでしょうか?
よろしくお願いします。
148:デフォルトの名無しさん
07/09/16 15:25:03
そこに書いてある通りじゃないの?
149:147
07/09/16 17:25:10
>>148
IDD_TEST は resource.h に定義されていました。
プロジェクト/プロパティ/MFCの使用を「共有DLLでMFCを使用する」から
「スタティックライブラリでMFCを使用」に変更したら、ダイアログが表示される様になりました。
ただし、客先からは「共有MFC」でと指示があります。
何が悪いのでしょうか?
150:デフォルトの名無しさん
07/09/16 17:33:08
リソースをビルドしなおしても同じ?
151:デフォルトの名無しさん
07/09/16 17:44:40
>IDD_TEST は resource.h に定義されていました。
.rc ではどうなってますか
まあ>>150でおkだと思うけど
152:147
07/09/16 18:02:30
..rc には
IDD_TEST DIALOGEX 0, 0, 250, 170
という記述がありました。
リソースをビルドという方法がよくわからなかったのですが、
ソリューションのリビルド
. rcファイルのコンパイル
の両方とも、現象は変わりませんでした。
リソースのビルドって、他のやり方でしょうか?
153:デフォルトの名無しさん
07/09/16 18:10:28
つ AFX_MANAGE_STATE
154:147
07/09/16 18:43:56
>>153
DLL関数の先頭に
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
を追加したらうまくいきました。
どうもありがとうございました。
155:デフォルトの名無しさん
07/09/19 17:46:56
ダイアログの上でエンターキーを押すと、
プログラムが正常終了してしまいます。
プログラムを終了させたくないのですが、どうすればいいのか教えて下さい。
よろしくお願いします
156:デフォルトの名無しさん
07/09/19 18:47:04
>>155
つ[OnOK()]
157:デフォルトの名無しさん
07/09/19 19:23:59
いや俺は PreTranslateMessageで処理するほうが好きだ
158:155
07/09/19 20:06:07
>>156,157
ありがとうございました
OnOK()で対応しました
159:デフォルトの名無しさん
07/09/19 20:57:01
OnOK()で対応するというのは間違っていると思う。
OnOK()の意味をちゃんと考えるべき。
そして「Enterキーを押したときにダイアログを終了させない」という仕様の意味をちゃんと考えるべき。
するとどうやって実現するのが正しい形かわかるでしょ。
面倒でも、何事も正しい形ってものを常に意識して作っておかないと後悔するよ。大袈裟だがw
160:デフォルトの名無しさん
07/09/19 21:19:33
MFCが勝手に定義してる機能を殺すだけだろ
元のダイアログにはそんな機能ない
161:デフォルトの名無しさん
07/09/19 22:50:34
リターンキーが押される→OnOK()が呼び出される→OnOK()の処理をキャンセルする
よりは
リターンキーが押される→OnOK()を呼ばないようにする
の方がスマート。
よってPreTranslateMessageを推奨するよ。
他の用途にも使えるし覚えといて損はない。
162:デフォルトの名無しさん
07/09/19 23:14:48
そこまで気にするんなら
メッセージ発生するごとにPreTranslateMessage呼ばれるのも気にした方がいいよ
OnOKよりはるかにオーバヘッドになってるはず
163:デフォルトの名無しさん
07/09/20 12:46:43
Okボタンが在る場合、
Okボタンがデフォルトボタン形状なのはUI的にまずい。
164:デフォルトの名無しさん
07/09/20 17:56:11
フォトショップ等、メインウィンドウの他に、
レイヤー情報などを表示するウィンドウがあるんですが、
それをCDialogで作ろうと思っているんです
m_dlg.Create( CTestDialog::IDD , this );
m_dlg.ShowWindow( SW_SHOW );
で、一応表示されるんですが、
ダイアログにフォーカスが写ると、
メインウィンドウのタイトルバーが灰色になるのです。
正しい、子ウィンドウの作り方ってありますか?
165:デフォルトの名無しさん
07/09/20 19:38:14
正しいかどうか知らんけどツールウィンドウ
166:デフォルトの名無しさん
07/09/21 12:26:58
Enterキーは、OKボタンを押すのではなく、デフォルトボタンを押す操作です。
PreTranslateMessageでEnterキーを弾いてしまうと、
OKボタン以外のボタン上でEnterキーを押したときにも無視されてしまいます
(そのときにはそのボタンが押されるべき)。
もちろん、PreTranslateMessageでフォーカス位置を調べてもいいけど、
そこまで面倒なことをするのなら、
OKボタンをDisable・非表示にしたほうが早いです。
OKボタン自体は残しておきたいのであれば、
なにもしない非表示ボタンをデフォルトにすればよいです。
PreTranslateMessageの方法だと、デフォルトボタン枠が出ているのに
Enterキーが効かないというGUI上の矛盾もあります。
167:392
07/09/21 21:55:41
> OKボタン自体は残しておきたいのであれば、
> なにもしない非表示ボタンをデフォルトにすればよいです。
デフォルトボタンは何ですか、と問われたときに、ありませんと答える方が良いかと。
168:デフォルトの名無しさん
07/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
07/09/22 22:02:59
winuser.h
#define STN_CLICKED 0
#define BN_CLICKED 0
170:デフォルトの名無しさん
07/09/22 22:19:04
>>169
ありがとうございます。
171:デフォルトの名無しさん
07/09/22 23:31:42
本当にMFCが全くわかりません。
とにかく、GUIを作るのが難しすぎに感じます。
VC#なんて超簡単にGUI作れるのに・・・
まだまだ、VC+++MFCはデファクトスタンダードなんですかね?
172:デフォルトの名無しさん
07/09/23 00:33:02
>>171
MFCは欠陥製品だと思う
対抗するボーランドがコケちゃったんでMSの一人天下になっていますが
これに付き合わされる開発者はたまらない
C#を使いましょう
173:デフォルトの名無しさん
07/09/23 00:42:51
慣れの問題ですよ
VC#が簡単に、作れるって言っても例えばテキストエディタを作る場合
商用を考えたら標準のTextBoxなんて使い物になりません。
一から書くことになります。
だったら、WIN32APIを手間なく呼べるVC++に利がある。
VC#だと使う、WIN32APIをいちいち宣言しなくてはいけない。
174:デフォルトの名無しさん
07/09/23 01:58:19
MFC使わねばならん環境なら、頑張って使えるようになればいいだけだし、
使わなくて言い環境なら、C#でやればいいだろう。
何故このスレで愚痴るのか理解できない。
175:デフォルトの名無しさん
07/09/23 23:52:49
>>174
MFCの習得に挫折した人がMFC叩きしてるだけ。
穏やかになだめてあげてください。
176:デフォルトの名無しさん
07/09/24 00:10:51
確かに他のライブラリと比較すると挫折率はダントツに高いかもしれん
よく、Cはポインタで躓いたなんて人いるけど似たようなもん
177:デフォルトの名無しさん
07/09/24 01:45:06
ていうかあまりの複雑さと面倒臭さに死にたくなるときあるな
なんでもかんでもメッセージって逆に面倒臭いだけだったんじゃないだろうか・・・
178:デフォルトの名無しさん
07/09/24 02:17:59
けど、大抵の商用ソフトはMFCが使われている。
.NETなんて皆無では???
179:デフォルトの名無しさん
07/09/24 02:47:39
>>178
だって糞おせぇし
180:デフォルトの名無しさん
07/09/24 02:54:45
Vistaならネイティブとほとんど変わらんが?
181:デフォルトの名無しさん
07/09/24 03:10:20
>>180
それって普通に作ってた奴の方が遅くなったんでしょ?w
182:デフォルトの名無しさん
07/09/24 05:07:52
MFCは隠蔽化というより隠蔽工作だというようなことがかかれた本があった。
本来仕組みなど知らなくても簡単に使用できるのが隠蔽化だが
MFCには仕組みを知らなければバグの原因がまったく理解できない不可解な現象も多い。
それらを苦労して乗り越えて来た人間は威張り腐りって、
「MFCが糞なんじゃなくて理解できないやつが糞」と言いたいのだろう。気持ちはわかる。
だが世間一般ではそういう場合ライブラリが糞だという。
自分の腕前を自慢したいからって言葉を捻じ曲げてはいけない。
183:デフォルトの名無しさん
07/09/24 05:31:44
あの当時に書かれたライブラリで今まで通用したものってほかに何かあるかな?
OLEを隠蔽するフレームワークとして十分納得いくし、フル機能のウインドウズ
ソフトウエアを書くのにほかにいいライブラリが無かったのも事実だと思う。
184:デフォルトの名無しさん
07/09/24 06:03:59
>>それらを苦労して乗り越えて来た人間は威張り腐りって、
被害者意識が強い傾向が見られます。
何かトラウマになるような事でもあったのでしょうか(w
185:デフォルトの名無しさん
07/09/24 06:41:22
MFCがなければWIN32のバグが分からない
永遠に更新を続けるべき
186:デフォルトの名無しさん
07/09/24 07:39:58
>>182
あー、でも俺、そういうラッパー系のクラスで
下層の構造知らずにうまく包んであるもんってみたことないわ
無理なんじゃねぇの?って思ってる
可変長ですよといいつつ
なんも意識せずに1文字ずつ追加すると毎回全バッファを再確保する
最近の次世代(?)言語の文字列クラスのようにw
187:デフォルトの名無しさん
07/09/24 09:28:21
文字列定数 -> System.String
CString -> System.Text.StringBuilder
と考えれば、それはそんなもんかって気もする。
Stringの連結はおまけ機能ってことで。
188:デフォルトの名無しさん
07/09/24 10:54:07
MFCのいいところはVisualStudioで使う場合にドキュメントモデルを提供してくれることとダイアログエディタがあることか。
ちょっと凝ったことをしようと思うと折角クラスで隠蔽化しているように見えても実際にはAPIと同じ名前のメソッドだからAPIと手間は変わらないし、
全てを網羅しているわけではないから結局APIを直截呼ばないといけないケースもある。
あれはだからAPIラッパクラス集と思えばいいのであって、それ以上のフレームワークと思ってはいけないのだろう
189:デフォルトの名無しさん
07/09/24 15:22:11
>>187
>Stringの連結はおまけ機能ってことで。
そんなことになってるぐらいならラップなんてしないほうがいいじゃないって思う
190:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/26 11:43:46
つ ::WindowFromDC
192:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/29 13:30:06
.NETのMenuStrip簡単にできていいなぁ
MFCでもサポートしてくれ
194:デフォルトの名無しさん
07/09/29 21:33:08
簡単に作れる代わりに使い物にならんほど遅いプログラムとなってしまった
.NET非常に残念だったな
195:デフォルトの名無しさん
07/09/30 01:39:05
MFC not dead - "massive update" planned
まさか
.NETは無しね!MFC大幅機能強化するから!
なんてことになるん(r
196:デフォルトの名無しさん
07/09/30 06:51:40
MFC と NET って、どの程度の処理速度がちがうんですか?
まじレス希望
197:デフォルトの名無しさん
07/09/30 08:27:09
>>196
MFC全盛期のPCでMFCを動かすと、今のハイエンドなPCで.netを動かすのとは較べ物にならないほどもっさりしています。
198:デフォルトの名無しさん
07/09/30 11:28:36
MFCって.NETのコントロールと比べると鼻くそみたいにショボイのに2008にもまだ残ってる理由ってなんですか?
必要かな?
199:デフォルトの名無しさん
07/09/30 12:54:06
鼻くそみたいにショボイと思ってるのに
このスレへやってくる理由ってなんですか?
必要かな?
200:デフォルトの名無しさん
07/09/30 13:07:07
.NETのコントロールなんて飾りです。偉い人には(ry
冗談抜きで。
201:デフォルトの名無しさん
07/09/30 16:56:35
>>198
2008ではMFCはなくなってたお
202:デフォルトの名無しさん
07/09/30 18:25:47
>>201 ソースキボンヌ
2008でも含まれると考えられるソースはこちら
URLリンク(msdn.microsoft.com)
203:デフォルトの名無しさん
07/09/30 18:29:11
EEダウンロードできんじゃん
204:デフォルトの名無しさん
07/10/01 11:36:20
VS2005とMFCで拡張DLLを作成しているのですが、
この拡張DLLを呼び出した側のインスタンスハンドルって
どうやって参照すればよいのでしょうか。
AfxRegisterClassで必要なのですが、
AfxGetInstanceHandleだと、大元のEXEのハンドルが返ってきてしまいます。
EXEから呼び出された別の拡張DLLがこの拡張DLLを使う可能性もあるため、
大元のEXEではなく、呼び出し元を参照できるようにしたいのです。
205:デフォルトの名無しさん
07/10/01 23:44:38
Code Projectにたくさんのコントロールがあげられているが
コントロールってダイアログベースにするかViewをFormViewに選択するしか
使えないんでしょうか?
206:デフォルトの名無しさん
07/10/02 19:19:08
VC6です。
プログレスバーについての質問。
時間がどのくらい掛かるか不明な処理でプログレスを表示したい。
Webなんかで有るような、2−3このコマが左から右へくるくる回ってるの
が良いんだけど、CProgressCtrlじゃできないっぽい?
なんか良い案あったらおしえて。
時間がどのくらい掛かるか不明なのは、開始ボタン押すとハードと通信して
ハードが処理終了するのを待つから。
ハードは詳細な進捗なんて返してくれない。
ハードの状態や処理対象によっても時間が大きく変わるので平均でこのくらい
ってどんぶりで表示するのも厳しい状況。
したがって、ループするようなヤツが欲しいといった理由。
207:デフォルトの名無しさん
07/10/02 19:21:10
砂時計
208:206
07/10/02 19:29:58
>>207
レスサンクス。
砂時計は却下されてしまいました。
と言うか、すでに砂時計は出してるけど、曰く
「ホントに、動いてるのか解らない」だそーで。
プラスでプログレスが欲しいんだと。
えらい人の考えは良くわかりません。
209:デフォルトの名無しさん
07/10/02 21:23:57
>>206
まあ、砂時計出したままフリーズするアプリもあるから、動いているか
どうかを確認したいというのもわからなくはない。
どうしてもプログレスコントロールにこだわるなら、何回も繰り返して
描画してやればいいんじゃない?
210:デフォルトの名無しさん
07/10/03 01:24:29
>>205
ん? Code Projectにあがっているコントロール”だけ”使えてないの?
そうなら、そのコントロールを挙げてくれ。
そうでなく普通のEditやComboも同じように使えてないなら、動的生成すればいい。
”Edit 動的生成”とかでググレば、サンプルとかあるんじゃねーかな。
211:デフォルトの名無しさん
07/10/03 02:23:43
>>206
IEのようなウィンドウ右上のアニメーションで済むならCAnimateCtrlでが楽。
プログレスバーの現在位置が左から右へ動き続けるような奴だと
中断ボタンも必要だろうし、別スレッドでプログレスバー制御と中断の
入力待ちをすることになるんじゃないかな。
砂時計を却下する上司って良いなーと思った。
212:デフォルトの名無しさん
07/10/03 08:38:51
動いてるのか解らないという理由で砂時計がダメなら
IEのようなアニメーションもダメだろう
213:デフォルトの名無しさん
07/10/03 18:40:21
>>206
URLリンク(blogs.wankuma.com)
214:デフォルトの名無しさん
07/10/03 20:03:48
エディットコントロールの質問です。
コントロール内部に画像を表示させて、文字編集を行うものを作ろうと思ってるのですが
なかなかうまくいきません。
OnCtlColorでCreatePatternBrushで作ったものを返すようにして
何とか文字未入力領域に画像を表示させたのですが、
文字入力エリア部分に画像を表示できなくて困っています。
何かいい解決方法はないんでしょうか?
215:デフォルトの名無しさん
07/10/03 20:19:12
>>214
SetBkModeで透過にするのを忘れている予感
マルチラインは、この方法だと不都合があるみたいなので注意
216:デフォルトの名無しさん
07/10/03 20:30:44
>>215
あ、説明たりなくて申し訳ない。
複数行エディットコントロールについての話でした。
217:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/04 02:15:47
>>217
例えば、ラベルをクリックしてもフォーカス受け取らないじゃん?
そしてどーやるんだったか忘れた。 ごめん。
SPYでフォーカス受け取るコントロールと
受け取らないコントロールのメッセージの違いを調べる…とか。 激しく疲れるな。。
219:デフォルトの名無しさん
07/10/04 06:11:25
ラベルというかスタティックはidの設定だから全然別の話
220:デフォルトの名無しさん
07/10/06 00:21:28
>>219
idの設定て、IDC_STATIC? まさか、そんなはずは。 もうちょっと分かるように説明してくれ。
221:デフォルトの名無しさん
07/10/06 10:53:03
シングルダイアログのプログラムです、最小化ボタンと最大化ボタンを付けるのを忘れてしもうたww
今から付加したいのだが、どのクラスのどのプロパティーをいじったらええの?
VS20005 MFC
222:デフォルトの名無しさん
07/10/06 11:21:44
>>221
ダイアログエディタかテキストエディタで<project>.rcを編集し給え。
223:デフォルトの名無しさん
07/10/06 11:58:13
>>222
221です
rcファイルいじって悲惨な目(編集不能)に何回かあったのだが大丈夫なのか?
224:デフォルトの名無しさん
07/10/06 12:34:21
ダイアログのプロパティでMinimize/MaximizeBoxをTrueにすればいいだけの話だろ。
何を悩んでるんだ?
225:デフォルトの名無しさん
07/10/06 12:53:44
>>224
('ー')ゞラジャサンクス
226:デフォルトの名無しさん
07/10/06 13:57:59
>>223
ダイアログエディタでプロパティを変更する行為だけで編集不能にできるならたいしたもんだ。
227:デフォルトの名無しさん
07/10/06 15:19:49
CToolBarのボタンを大きくすることは出来ますか?ロードするビットマップのサイズが大きければ大きくなるのでしょうか?
228:デフォルトの名無しさん
07/10/06 18:17:23
MFCのSDIアプリケーションを作成しています。
日本語以外のOSでも正しく動作させたいのですが、
最小化ボタンの上にカーソルを合わせたときに表示されるツールチップの「最小化」
などは自動的に現地の言葉で表示されるのでしょうか?
229:デフォルトの名無しさん
07/10/06 19:09:31
コード調べたらわかるでしょ
230:デフォルトの名無しさん
07/10/06 19:24:13
日本語化されてない英語アプリ動かしてみりゃわかるだろ
231:デフォルトの名無しさん
07/10/06 19:28:51
apiのソースは非公開
漏れたのもあるけど
232:デフォルトの名無しさん
07/10/07 09:57:50
CStringのTrimの中でアサートするんですが・・・
CString str = "33 "
str.Trim();
・・・
Truncate
ATLASSERT( nNewLength <= GetLength() );
Unicodeライブラリ使ってますがこれがまずい?
233:デフォルトの名無しさん
07/10/07 10:33:50
"33 "
234:デフォルトの名無しさん
07/10/07 11:07:27
VC2005で試したところ、>>232のコードはコンパイルを通らなかったのだが、
それはそれとして、不思議な現象が。
1. CString str = "33"; // NG
2. CString str("33"); // OK
3. CString str; str = "33"; // OK
いまいち納得がいかない。
235:デフォルトの名無しさん
07/10/07 11:10:22
すみません str = _T(" 33 ")なら通りますね
236:デフォルトの名無しさん
07/10/07 12:22:02
>>234
コンストラクタと=の動作が違うんかな?とかわからずに言ってみるテスト
237:デフォルトの名無しさん
07/10/07 21:32:43
>>234
初期化と代入の違いわかってるか?
あと_T()マクロがどう展開されるか
238:234
07/10/08 08:29:48
WCHARベースのCStringでも
CString(LPCSTR)
operator=(LPCSTR)
の両方とも定義されているので、2.と3.が通るのは分かるが、
なら、何故1.が通らないのかがよく分からない。
1.は3.の省略系みたいなものだとの解釈は間違い?
239:デフォルトの名無しさん
07/10/08 08:39:47
コンパイラはヘッダみてるだけだから
コンパイラの立場でヘッダ見てみればいい
240:デフォルトの名無しさん
07/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
07/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:デフォルトの名無しさん
07/10/08 17:36:32
>>240
Windowsの仕様で、自動的にフレームウィンドウを親にされてしまうみたいだな。
Get/SetOwnerで関連付けてしまうのも一つの方法か。
243:デフォルトの名無しさん
07/10/08 18:20:18
>>242さん ありがとうございます
色々試してみてたんだけど
GetWindow(GW_OWNER) ← 駄目
GetParent() ← 駄目
SetOwner() GetOwner()すればRUNTIME_CLASSうまくいきました
244:デフォルトの名無しさん
07/10/08 22:34:05
>>228
MFC使わないコードで
Tooltip(?)の処理しなくても出てくるから
OSが処理してる。
だからOS依存で英語版なら英語で表示されるでしょ。
MFC内で独自処理してたらしらない
245:デフォルトの名無しさん
07/10/08 23:04:47
英語版のVCでコンパイルすれば解決ということだな
246:デフォルトの名無しさん
07/10/08 23:05:39
そうだっけ?
なんかリソースファイルの中くまなくさがしてみるとか・・・
247:デフォルトの名無しさん
07/10/09 00:25:46
SDIアプリでCreateWindowでCFrameWindowの子供ウインドを作成し、Viewの上に沢山並べてみた。
で、そいつらをクリックしたら、アクティブになってフォーカスがあたってフォアグラウンドになる予定だった。
でも実際はWM_MOUSEMOVEすらそいつらには飛んでこない。くるのはWM_CREATE,WM_MOVE,SIZE,PAINTくらいだ。
この子供ウインドをWS_POPUPとかにすれば飛んでくるけど。。あーわかんないよぉ。
子供ウインドの一つを選択したら、他のウインドがフォーカスを失って、選択されたウインドがフォーカスされて
しかもメッセージを受け取って欲しいんだよぉ。なんでだめなの?????
248:デフォルトの名無しさん
07/10/09 01:23:05
>>247
何が作りたいのか俺にはわからんが
他のアプリで似たような動きしてるもんあったら教えてみぃ
249:デフォルトの名無しさん
07/10/09 08:18:03
MFCのライブラリをスタティックリンクすると挙動が変になり悩んでます。
[現象]
・スタティックリンクすると、
メニュー → ファイルを開く → コモンダイアログのフィルタに「すべてのファイル(*.*)」がなくなる。
・共有DLLでビルドすると普通に出来る。
--
新規プロジェクトでスタティックリンク試してみると
普通に出来るので俺が悪いのは確かだろうが・・・
ちなみにデバッグビルド(&スタティックリンク)すると
[docmgr.cpp]
DoPromptFileName()
VERIFY(title.LoadString(nIDSTitle));
でエラーになる。
この先を追っかけているが(atlcore.hとか)だんだん鬱になってきた。
似たような現象になった人いませんか?
>>247 割り込んでごめんなさい
250:デフォルトの名無しさん
07/10/09 08:41:24
フォーカスないウインドウにもマウスのメッセージは飛んでくるし
WM_MOUSEMOVEすらそいつらには飛んでこないというのは変
251:デフォルトの名無しさん
07/10/09 14:34:01
>>248
そうですね。。たとえて言えばエクセルのオートシェープをウインドで表現し、
シートに沢山並べた状態みたいなものでしょうか。
252:デフォルトの名無しさん
07/10/09 21:54:53
トラッカークラス使えよ
253:デフォルトの名無しさん
07/10/10 10:54:24
VC6です。CListCtrlをレポート形式で使ってます。
SetExtendedStyle()でLVS_EX_GRIDLINESを設定するとグリッド線が表示されていたのですが、
Windows2000からWindowsXPに変えて、画面をXPスタイルで表示するとグリッドが消えてしまします。
設定の仕方を間違えているのでしょうか。
254:デフォルトの名無しさん
07/10/10 11:22:16
>>253
スクロールさせると消える挙動はバグ。修正予定はたぶん無い。
どうしても直したいなら、自前描画するしかないと思われ。
255:253
07/10/10 12:35:12
>>254
まだスクロールもさせていない段階なのですが・・・。
256:デフォルトの名無しさん
07/10/14 20:02:58
カスタムコントロールにCPenで書いた線を消そうと
void CLineChartCtrl::DeInvalidateCtrl()
{
CClientDC dc(this);
CRect rcClient;
GetClientRect(rcClient);
InvalidateRect(rcClient , TRUE);
}
として再描画しても消えないのはお子ちゃまだからデツカ?
ハンドルもしっかり取れてるのにな??
257:デフォルトの名無しさん
07/10/14 22:11:51
おぼっちゃまがやっていることは
ただ画面を更新してるだけ
258:デフォルトの名無しさん
07/10/14 22:14:22
再描画でまた書いてるだけなんじゃ……
ちなみに、その処理ならCWnd::Invalidate()一発で済む。
259:デフォルトの名無しさん
07/10/14 22:19:55
>>257のおじさま、ありがd
うぅぅぅ〜〜〜、嫌な悪寒デツ
どうしたら簡単に線が消せマツカ?
やっぱり書いた線をxorで描くとかマンドクサイことやんなきゃムリッポなのかなぁ。。。。。。うぅぅぅ〜〜〜
260:デフォルトの名無しさん
07/10/14 22:31:29
>>258さんもありがd
やってミマスタガ線が消えません、MFCってCPenクラスがあるならCEraserクラスも
作ってホスイ片手落ちって言うんだよねこれ豆知識
線が消したいというか初期画面に戻したいんデツガ、コンストラクタをも一回読んでみたら
どうなるのかな、実験シマツ
261:デフォルトの名無しさん
07/10/14 22:41:26
おまいは何か根本的に勘違いをしている。
ウィンドウに描画した内容は、基本的に保持されていない。
描画内容を変更したい時は、一旦クライアント全体を無効にして、
次の再描画からその変更した内容で描くようにする。
自前でフレームバッファを用意してそこに描画してる、とかは無しな。
262:デフォルトの名無しさん
07/10/14 22:45:15
>>260
おまえ、あたまん中をいっぺん消した方がいいぞ
263:デフォルトの名無しさん
07/10/14 22:57:24
最小化して戻したら消えてないか?
264:デフォルトの名無しさん
07/10/14 22:59:21
>>260
消しゴムかそうか?
265:デフォルトの名無しさん
07/10/15 01:27:09
まぁマイクロソフトのウインドシステムは確かにわかりにくい仕様がおおいけどな。
266:デフォルトの名無しさん
07/10/15 10:11:46
VS2005です。
SDIのプロジェクトからダイアログを追加し(CDialog1)、
そのコンストラクタにビューのポインタを渡してみたのですが、
ダイアログはフレームウィンドウの中央に出てきてしまいます。
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog1 dlg(this);
dlg.DoModal();
}
ダイアログのコンストラクタで親ウィンドウを指定しているのに、
なぜその中央に表示されないのでしょうか?
中央に表示させたい場合は、ダイアログに何を渡せばよいのでしょうか?
267:デフォルトの名無しさん
07/10/15 11:49:39
.........@ノ”
かたつむりなのです。
わかってほしいのです。
触られると触角がひっこんじゃうの。
動けなくなっちゃうの。
よくわかんない、でもそうなっちゃうのだ。
雨の日とかにぺたぺた這うのが好きなのです。
なんでかしら。
自分でもよくわからないのだ。
あんまり指ではがさないでください。
ごはんたべてうんこしようっと。
268:デフォルトの名無しさん
07/10/15 20:36:21
塩撒くか
269:デフォルトの名無しさん
07/10/15 22:02:40
>>266
>>240とたぶん同じ原因なので、同じ解決法で。
SetOwnerしておいて、OnInitDialogでCWnd::CenterWindow(GetOwner())。
別にオーナーに拘らずとも、中央配置の元になるウィンドウを渡せればいいんだけどね。
270:デフォルトの名無しさん
07/10/16 09:30:39
>>269
ダイアログのOnInitDialog()でGetParent()とm_pParentWndを調べてみたら、
m_pParentWndにはコンストラクタで渡したビュークラスが入っているのに、
GetParent()ではメインフレームが返ってきました。
OnInitDialog()でm_pParentWndを直接CenterWindow()に渡してみたところ、
ビュークラスの中央に表示させることができました。
m_pParentWndっていうのは隠れメンバっぽいけど、
これならダイアログを呼ぶ側でオーナーを別途指定する必要は無いですよね。
ダイアログのコンストラクタって、なんの意味があるんだ…?
271:デフォルトの名無しさん
07/10/16 11:14:36
>>270
それはダイアログ(そのもの)ではなくてダイアログクラスだ。
OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。
272:デフォルトの名無しさん
07/10/16 11:49:03
>>271
> OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。
もちろんコンストラクタの使いかた自体は理解しているつもりですが、
ダイアログクラスのコンストラクタで親ウィンドウを指定しても
それが実際の親にならないのなら、
コンストラクタで親ウィンドウなんて指定させるなよっていうことでした。
まぁ今回の件では、隠れメンバに保管されていることがわかったので、
コンストラクタに渡す作業は無駄ではなかったようですが。
273:デフォルトの名無しさん
07/10/16 17:58:53
>それが実際の親にならないのなら、
親になってるからCenterWindowが正しく動作しているのでは?
CWnd::GetParent()が親じゃなくオーナーを返すのは、内部で
呼び出しているAPI(GetParent())の仕様。
トップレベルウィンドウがGetParentするとオーナーを返すみたいね。
274:273
07/10/16 18:04:38
あ、CenterWindow(NULL)じゃ駄目なのか。しょっく
275:デフォルトの名無しさん
07/10/16 21:29:33
MFCアプリケーション(ダイアログ)の終了時、アプリケーションのの戻り値(%ERRORLEVEL%)を
使用したいんですが何か方法ありますか?
・コンソールアプリケーションだと一瞬コンソールが表示されるのが問題
・引数なしの起動でダイアログでて起動をさせたいができればMFCダイアログテンプレートで作りたい。
という理由です。
WinMainのでやれば恐らく可能とは思いますが・・誰か知ってたら教えてください。
276:デフォルトの名無しさん
07/10/16 22:04:11
>>275
CWinApp::ExitInstanceをオーバーライド
277:デフォルトの名無しさん
07/10/16 22:12:31
>>276
今その方法でやったらできました。
一応方法を書いておくと、ExitInstance で戻り値を返すだけではだめで
start /wait aaa.exe
とかしてアプリケーションの終了を待機しないとだめなんですね・・
当然といえば当然なのかも。
なにはともあれ、ありがとうございました。
278:デフォルトの名無しさん
07/10/16 23:44:10
ダイアログアプリケーションでCDialog派生クラスのデストラクタがないのですが、
デストラクタの処理はどこでするのでしょうか?
279:デフォルトの名無しさん
07/10/16 23:54:06
>>278
勝手にオーバーライドすればいい。
280:デフォルトの名無しさん
07/10/17 00:09:14
定型文のボタンを押したら、
CEditコントロールのカーソル位置に文字を自動で入力したいのですが、
どうやればいいですか?
281:デフォルトの名無しさん
07/10/17 00:13:17
現在のCEditの文字取得して定型文追加して再設定
カーソル位置は GetSel() で取得
282:デフォルトの名無しさん
07/10/17 00:26:29
>>281
ありがとうございます!
283:デフォルトの名無しさん
07/10/17 11:46:56
★番組で紹介された亀田史郎が息子・興毅に書いた手紙
興毅 ほんとうに おめでとう
お前は もう 親父だけの者ではない
今や世界の亀田興毅になったんじゃ
それも山あり谷ありの厳しい勝負の道を
ひたすら歩み続けたからこそ今日の栄光が会った
しかしボクシングの道は終った分けではない
これから厳しいボクシング道が待ってる
興毅よ万文の山はいくつはばまおうとも
戦陣の谷に何度も落ちようとも前え 進め
最後に 本当におめでとう
親父
★ アニメ「侍ジャイアンツ」最終回
川上監督が番場蛮に贈った言葉
番場よ、本当におめでとう。
おまえはもうジャイアンツだけのサムライではない。
今や世界のサムライになったんじゃ。
それも山あり谷ありの厳しい勝負の道を
ひたすら歩み続けたからこそ、今日の栄光があった!
しかし、野球の道はこれで終わったわけではない。
これから厳しい野球道が待っている。
サムライよ、万丈の山がいくつ阻もうと、
千尋の谷に何度落ちようと、前へ進め!
その前途を祝って、もう一度言わせて貰おう。
番場蛮、本当に、おめでとう!
巨人軍監督 川上哲治
284:デフォルトの名無しさん
07/10/17 21:16:32
visual c++ 2005 SP1でSDIアプリを作っています。
MFCをスタティックリンクでビルドすると、Cランタイム(_recalloc)で
メモリリークが発生します。共有DLLでビルドするとリークは発生しません。
リークのチェックにはBoundsChecker8.2を使用しました。
スケルトン(ソースは変更しない)でも同じでした。
どなたかご存知ないでしょうか?
285:デフォルトの名無しさん
07/10/17 22:26:32
>>284
BoundsCheckerって使ったことないから知らないけど
URLリンク(support.microsoft.com)
この情報のVCのバージョン相当古いのは分かってるが、参考にならないかな?
286:デフォルトの名無しさん
07/10/17 23:02:39
スタティックリンクは使うなってことよ
287:デフォルトの名無しさん
07/10/19 13:00:37
CInternetsessionでのFTPのcloseは、FTPサーバーにログが残らないものなのでしょうか。
288:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/19 15:38:34
通信処理が怪しい。
OnTimerの呼ばれるスレッド側に依存する処理が混じっていないか?
メッセージキューが回っている必要がある、とか。
290:デフォルトの名無しさん
07/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)にあってはいけないとか
そんなことはない・・・ですよね?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4170日前に更新/114 KB
担当:undef