■MFC相談室 mfc21d.d ..
[2ch|▼Menu]
2:デフォルトの名無しさん
09/08/22 14:37:12
■MFC リファレンス■
URLリンク(msdn.microsoft.com)(VS.80).aspx

3:デフォルトの名無しさん
09/08/22 16:31:30
>>1乙FC

4:デフォルトの名無しさん
09/08/22 16:45:11
>>1さん、お疲れ様です(><;)

5:デフォルトの名無しさん
09/08/22 17:29:24
まさかのdat落ちいちおつ

6:デフォルトの名無しさん
09/08/22 18:11:22
MFCなんてまだ需要あるの?

7:デフォルトの名無しさん
09/08/23 07:38:55
重要性はかなり低くなったね。

リソースがいっぱいあって、実行速度もそれほど気にしないけど、
多機能なアプリを開発したいって人には.NETとC#の方がコストパフォーマンスが良いし、
(C++/CLIは本来のC++を無視した気持ちの悪い独自拡張が多すぎる…)
軽量・高速が重要なネイティブアプリにはATL/WTLが使われるようになったから。

実際、MFCの関連書籍も大半は6.0でとまっていて
もう7.0以降にはほとんど需要がない事実を物語っている。

8:デフォルトの名無しさん
09/08/23 09:53:10
7.0以降でCStringが急激に強まった事実が殆ど知られていのは一寸悲しい。
未だにA2Wとか書いてそうだ。

>リソースがいっぱいあって、実行速度もそれほど気にしないけど、
>多機能なアプリを開発したいって人には.NETとC#の方がコストパフォーマンスが良いし、
その為か、9.0SP1(VS2008SP1)で進化が極端な方向に進み始めたな。
元々GUIアプリの基本的な機能を提供するという目的ではあったけど、
今や、表示テーマの変更や、キーボードショートカットのカスタマイズUIまで、
初めから提供されるようになった。

VS2010以降もやる気満々らしいし。開発チームの暴走発言かもしれないけどw
URLリンク(blogs.msdn.com)

9:デフォルトの名無しさん
09/08/23 12:45:39
個人的なことを言えば、.NET とか C# とかいった新しいものをマスターする時間がない & もったいないのでMFCを使っているのが現状。
ATL/WTL にも興味はあるが、やはりマスターするには時間的なものが・・・。

もっとも、単純なプログラムは なんちゃってMFC 的な独自のクラスを使って書いている。
実質 100KB 程度の実行ファイルが MFC をスタティックリンクしただけで 3MB超になるんじゃ、どっちが主役かわからないもの。(笑)

10:デフォルトの名無しさん
09/08/24 00:36:02
漏れの親父がパソコン30万だして買ったけど
なんもできんので、機能をごく必要なものに限って、
ブラウザとメーラーとワープロつくってやったよ。

喜んでくれた。別に質問じゃないけど、MFC使って作ったから・・誰かに報告したくてね。

すれ汚しスマソ。

11:デフォルトの名無しさん
09/08/24 06:59:10
>>9
afxcontrolbars.h はずせばそんな巨大なサイズにならないんじゃない?

12:デフォルトの名無しさん
09/08/24 19:59:49
>>9
3MB超はデバッグビルドだべ?リリースでも1Mぐらいあるけど
まぁ最近の環境だと昔ほど気にする必要がなくてよいかなよいかな

13:デフォルトの名無しさん
09/08/24 20:13:41
リボンインターフェース用のリソース入れちゃうからでかくなるんじゃないの?

14:デフォルトの名無しさん
09/08/24 20:40:48
button = new CButton[button_num];
button[0].Create(・・・);

こんな感じでボタンを動的に生成して、Viewに配置した時に
ボタンのイベントをViewで受け取るにはどうすれば良いですか?
(ボタンの数は、動的に変化します。)

ド素人の僕にご教授お願い致します。


15:デフォルトの名無しさん
09/08/24 21:00:09
>>12
いや気にするよ。新しい機能なにも使ってないようなダイアログベースのちょっとした
アプリで実行ファイルメガ単位って嫌すぎる。まぁ、無駄な機能使わなければ小さくも
出来るからいいんだけど。

>>14
ビューのメッセージマップにON_BN_CLICKEDで出来るんじゃない?

16:デフォルトの名無しさん
09/08/24 21:05:22
WM_NOTIFYで通知受け取って捌くしかないんじゃね?
BN_CLICKEDとかボタンから親ウィンドウに通知してくる
ボタンコントロールはWM_NOTIFYじゃなくてWM_COMMANDだったかもしれん

またはCButtonの派生クラス作ってBN_CLICKEDマップして自前で通知送る

17:デフォルトの名無しさん
09/08/24 21:18:09
>>14
ボタンの親を当然ながら View にしておいて、View のメッセージマップに
ON_CONTROL_RANGE( BN_CLICKED, 最初のボタンのID, MAXで作成されたときの最後のボタンのID, OnControlRange)
と書く。

Viewのヘッダに下記を追加
afx_msg void OnControlRange(UINT nID);

あとは View で処理。
void CxxxView::OnControlRange(UINT nID)
{
  if ( nID == xxx) ToDO...
}




18:デフォルトの名無しさん
09/08/25 01:49:26
エディットボックスから文字列を取得する際、
GetWindowTextを使うと思うんですが、データ型は必ずCStringになってしまうのでしょうか?
ここでCharを使う事って出来ますか?

19:デフォルトの名無しさん
09/08/25 02:01:10
>>18
CWnd::GetWindowText には下記の二つがある。前者を使えばいい。
int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount) const;
void GetWindowText( CString& rString) const;

exp.
TCHAR sz[128];
GetWindowText( sz, 128);





20:デフォルトの名無しさん
09/08/25 02:10:38
>>19
レスありがとうございます
例でTCHARとなっているところはcharでも問題ないですよね・・?
また、LPTSTRが引数になるということは、エディットボックスの中身がcharポインタに入るってイメージでいいのでしょうか?
すみません勉強不足で変な表現があるかも知れませんが

21:デフォルトの名無しさん
09/08/25 02:28:13
>>20
プロジェクトの設定で Unicode 文字セットを使っていないなら char でいい。
「Unicode 文字セットを使用する」にしている場合は char は使えない。

>エディットボックスの中身がcharポインタに入る
まあ、そんな感じのイメージ。難しく言うと、「エディットボックスの中身が、配列 sz の先頭要素のアドレスが示すメモリエリアに入る」

22:デフォルトの名無しさん
09/08/26 09:14:48
FormViewにボタンやMSFlexGridを配置しました。
このFormViewを印刷するにはどうしたら良いですか?


23:デフォルトの名無しさん
09/08/26 10:59:21
普通のFormViewと同じようにどうぞ。

24:デフォルトの名無しさん
09/08/26 21:56:36
>>22です
>>23
ボタンをどう印刷すれば良いのか、全く解りません。
MSFlexGridについては、pDCを使って線とテキストで
あたかもMSFlexGridをそのまま印刷してるような感じに出来る事は解ったのですが・・・
よろしくお願い致します



25:デフォルトの名無しさん
09/08/26 22:47:15
>>25
pDCを使って線とテキストで描く。
あるいはそれ用のビットマップリソースを用意して貼り付ける。

26:25
09/08/26 22:48:14
って、自分に言ってどーする。^^;
>>25>>24 へのリプライ。

27:デフォルトの名無しさん
09/08/28 16:38:44
 

28:名無しさん@そうだ選挙に行こう
09/08/30 12:22:49
・・・行ってきた♪

29:デフォルトの名無しさん
09/09/04 10:12:20
 

30:デフォルトの名無しさん
09/09/07 17:57:10
すいません質問があります.
VC++のダイアログ形式でプログラムしているのですが
下記のプログラムで
myDLG.DoModal()
を行うと最初からあったOKボタンを押してもプログラムが死に切っていないようなのですが
どのようにすればいいのでしょうか.
ググったら無限ループとか永久に待機してるとかっぽかったんですが解決法が良く分かりませんでした.

プログラム開始→OKボタン 普通に終了する
プログラム開始→ボタン8→ファイル選ぶ→OKボタン ダイアログは消えるがプログラムは完全に死んでないみたい

といった状況です.

void CtestDlg::OnBnClickedButton8()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。

//ファイルダイアログを表示してファイル指定する
CFileDialog myDLG(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"AVIファイル(*.AVI)|*.AVI||");
if(myDLG.DoModal() != IDOK)return;
}

31:デフォルトの名無しさん
09/09/07 18:42:07
>>30
おそらく問題は、示されたコード以外の場所にある

32:30
09/09/07 18:57:41
if(myDLG.DoModal() != IDOK)return;
をコメントアウトすると問題なく動いていたのでここがだめなのかと思っていたのですが…
ダイアログウィンドウがきえてもプログラムが終了しきれてないのはどういったのが考えられるのでしょうか

33:30
09/09/07 19:11:50
さすがにそれはエスパーすぎるか…
んーなんなんだろ…
そして何故かボタンをダブクリしても関数つくれなくなった…クラスウィザードとかいうのが立ち上がる…

34:デフォルトの名無しさん
09/09/07 19:27:17
>ダイアログウィンドウがきえてもプログラムが終了しきれてない
何を根拠として、こう判断したのかな?

35:デフォルトの名無しさん
09/09/07 19:30:39
>>34
画面下部のウォッチと出力のウィンドウが残ったまま
タスクマネージャでみるとtest.exeが起動中
の2点からです.

そして今ダイアログのボタンとか配置する画面で
ボタンをクリックして右のプロパティのところを雷マーククリックして管理イベント開きたいのに
そこが真っ白になってて操作できないという新しい問題が…
作ったボタンダブルクリックしてもMFC クラスウィザードとかいうのが立ち上がるし…

36:デフォルトの名無しさん
09/09/07 21:25:48
>>35
プロジェクトのフォルダにある
*.ncb
*.suo
*.user
を一度削除してみろ。

37:デフォルトの名無しさん
09/09/07 22:17:51
MFCは良く知らんけど、Win32APIではモーダルダイアログの終了には
return の前に EndDialog を明示的に呼び出す必要がある。
これはモーダルダイアログのウィンドウプロシージャはOSの内部にあるからだ。
(アプリケーションのウィンドウプロシージャがアプリ自身の中にあるのと異なるという意味ネ)

で、MFCにもCDialog::EndDialogがあり、OKとキャンセルではデフォルトで呼ばれるけど
それ以外の場所から終わるときにはこれを呼ぶ必要があるとmsdn様が…

38:デフォルトの名無しさん
09/09/07 22:21:55
あと、ちょっと思ったけど、IDOK っていう定数マクロが TNOK って見えちゃうこと、よくあるよね?

39:デフォルトの名無しさん
09/09/08 16:33:28
>>36
消したら関数の追加などはできるようになりましたありがとうございます.

>>37
OK キャンセル などのボタンは最初に出来ているものでやってます.
ダイアログの×をクリックしても終わらないみたいです.

40:デフォルトの名無しさん
09/09/08 16:44:12
そのtest.exeが残ってるときにデバッグの中断して
スタックトレースみるとどうなってるよ?

41:デフォルトの名無しさん
09/09/08 16:59:51
スタックトレースってどうやってみるんでしょうか?
VS.NET 2005ですが…

google-glogとかいうのいれなきゃむりなんかな?

42:デフォルトの名無しさん
09/09/08 17:02:00
・・・まさか 『実はそのダイアログはモードレスでした』 なんてオチじゃないだろうなあ。

43:デフォルトの名無しさん
09/09/08 17:12:03
特にいじってないはずなのでモーダルだと思います.

2つファイル名取得して画像の合成とかやってるんですが
画像の合成の関数とかは普通に動くんですよね.
ただダイアログのOKボタン押してもexeが終わらないと….

44:デフォルトの名無しさん
09/09/08 17:18:44
>2つファイル名取得して画像の合成とかやってるんですが
>画像の合成の関数とかは普通に動くんですよね.

問題なのはこのあたり以降のコトだろうから、>>31 だと言っている。
回答者はエスパーじゃないんだぞ。

45:デフォルトの名無しさん
09/09/08 17:47:05
今試しにファイルネームの読み込みを
上にかいたようなものでなく
最初からプログラムにかいておいて上記の関数を呼び出さないでやってみると
処理が終わった後OKボタンをクリックすると無事にexeが終了しました.

ファイルネーム取得関数になんかしらあるとしか思えないのですが…

んでもってファイルネーム取得関数を後半部分コメントアウトして
どの行を行うと終了しないかやってみたところ

if(myDLG.DoModal() != IDOK)return;

を書くと終了しなくなってしまうようでした….

46:デフォルトの名無しさん
09/09/08 17:54:57
if(myDLG.DoModal() == IDOK) だった場合はどう処理しているのか?
>>30 にはそのあたりのことが書かれていないんだが。

47:デフォルトの名無しさん
09/09/08 17:55:56
void CtesthaloDlg::OnBnClickedButton7()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。

//ファイルダイアログを表示してファイル指定する
CFileDialog myDLG(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"AVIファイル(*.AVI)|*.AVI||");
@
}
void CtesthaloDlg::OnBnClickedButton6()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。

filename1=("C:\\Documents and Settings\\…\\videocamera3.avi");
filename2=("C:\\Documents and Settings\\…\\videocamera4.avi");
       gousei(filename1,filename2);
}
ならOKで@のところにif(myDLG.DoModal() != IDOK)return;をいれると終了しないと言った感じ

なんか複合的に問題が発生してそうでエスパーじゃなきゃむりそうですね…
一回プロジェクト作り直してみて確認してみようかな


48:デフォルトの名無しさん
09/09/08 17:58:05
>>30 のコードをそのままコピペして試したけど、ウチでは何の問題もないよ。

49:デフォルトの名無しさん
09/09/08 18:02:33
>>46
今はコメントアウトされてます
本来なら画像を取り込んでピクチャーコントロールに表示する感じです.

>>48
やっぱりDoModalの問題じゃなさそうですね…
プロジェクト作り直してやってみます

50:デフォルトの名無しさん
09/09/08 18:29:06
もう意味が分からなくなってしまった.

新しいプロジェクトで
>>30作る
終了できた!(ボタン1)
二つ目のボタン作る
こっちでも>>30まではできたので画像読み込みもやる
やっぱ終了しない…
>>30まで戻すが何故か終了せず
いやな予感してボタン1を試してみるとボタン1も終了しなくなってた

なんだろう.なんかデバック情報が変な事になるんだろうか
ボタン1については出来た後いじってないのになぁ
エスパーじゃないと無理そうなのであきらめることにします.

51:デフォルトの名無しさん
09/09/08 18:37:15
そうだね。君の言っていることをすべて理解するのはエスパーじゃないと無理そう。

52:デフォルトの名無しさん
09/09/08 19:31:39
付き合ってくださった方ありがとうございました.

53:デフォルトの名無しさん
09/09/09 12:00:35
スタックトレースはVC++だと呼び出し履歴とかの名前であるだろ

54:デフォルトの名無しさん
09/09/09 18:58:50
VC++.net 2002で猫でもわかるに掲載されているサンプルコードをビルドすると
リンクエラーとなるのですがなぜでしょうか?
#include <afxwin.h>
class CMyWindow : public CFrameWnd
{
public:
CMyWindow();
};

CMyWindow::CMyWindow()
{
Create(NULL, "猫でもわかるMFC", WS_OVERLAPPEDWINDOW);
}

class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};

BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMyWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMyApp MyApp;
エラー
error LNK2019: 未解決の外部シンボル __endthreadex が関数 "void __stdcall AfxEndThread(unsigned int,int)" (?AfxEndThread@@YGXIH@Z) で参照されました。
error LNK2019: 未解決の外部シンボル __beginthreadex が関数 "public: int __thiscall CWinThread::CreateThread(unsigned long,unsigned int,struct _SECURITY_ATTRIBUTES *)" (?CreateThread@CWinThread@@QAEHKIPAU_SECURITY_ATTRIBUTES@@@Z) で参照されました。


55:デフォルトの名無しさん
09/09/09 19:19:16
>>54
プロジェクトの設定が間違っている。

56:54
09/09/09 21:21:08
>>55
有難うございました

57:54
09/09/09 21:38:46
、「ファイル」「新規作成」「プロジェクト」で 「Win32 Application」を選択して
アプリケーションの設定でWindowsアプリケーション、空のプロジェクトで設定しているのですが
どこが間違いなのでしょうか?

58:デフォルトの名無しさん
09/09/09 21:45:18
>>57
おまえウザイな。
自分で勉強するこ覚えろよ、屑

59:デフォルトの名無しさん
09/09/09 21:48:44
>>57
参考にしている「猫」のページに書いてある。

60:54
09/09/09 21:59:11
>>59
見落としてました。有難うございました!

61:デフォルトの名無しさん
09/09/09 22:23:41
afxbeginthreadでAとBを生成しました。
AでnewしたデータをBに渡して、Bが使い終わったらBの中でdeleteしています。
そうするとBがdeleteした時にheapエラーで落ちるのですが。
どうしてなのか、全く解りません。
Aの中でdeleteしているような個所やB内で2度deleteを実行しているような所
初歩的なバグはありません。

教えて下さい

62:デフォルトの名無しさん
09/09/09 22:45:01
悪い例
A:「作ったよ」
B:「ありがとう。・・・使い終わったから削除するね♪」
A:「・・・私が作ったのに勝手に削除しないでよ!この甲斐性なしっ!」

良い例
A:「作ったよ」
B:「ありがとう。・・・使い終わったよ♪」
A:「ん、じゃ削除するねっ」

63:デフォルトの名無しさん
09/09/09 23:08:38
ホントこのAで作ったもんをBで削除するプログラムを書こうって奴の気がしれない
ふつーに特になんの経験もなく気持ち悪いと思わないのか?
センスねぇなマジでw

これ結構経験ある奴でもやるんだよね

manko(new chinko);

みたいにnewで作ったもんしか引数うけつけねーようなクラス書くキチガイ
ポインタで渡すと中で強引にdeleteしようとしやがるのw

なんでこんなもん作るんだマジでw
センス0野郎の書くPGは本当にわからないw

64:デフォルトの名無しさん
09/09/09 23:12:50
マウスをドラッグ&ドロップするとき
新しいGDIオブジェクトを生成したとき

…などなど、MFC(というよりWin32APIのせいなんだろうが)は
RAIIの原則をしばしば無視する。
だからその感覚が染み付いている人は
マルチスレッドについても
作る場所と壊す場所が別々で当たり前と感じてしまうのかもしれない。

っていうか、MFCはC++的に見るとキモい使わせ方するライブラリ多いよね。

65:デフォルトの名無しさん
09/09/09 23:20:55
>>61
バグがあるんじゃね?

>>62
組み込みでOS使ってたりするとタイミングとか生存期間が非常にしびやな時が多くて
タスク同士の同期をとってたりすると、もうグダグダな〜時が多いから
悪い例の方を使う事が多い

ウィンドウズの場合は、new、deleteする代わりにvectorとかStringとか使って
データの完コピする場合が多いからね〜





66:デフォルトの名無しさん
09/09/09 23:32:29
確かに組込みでは、ポインタを渡して相手に全てをほおりなげる場合が多いね。
ウィンドウズも昔はCPU、ソフトが非力だったから相手に後処理を任せて終わりと
昔からの流れが残ってるんだと思ってる。
マルチ・スレッド/タスクで、相手が使い終わったのを待ったりとか
意識しようとすると無駄な時間が多くなる。


67:デフォルトの名無しさん
09/09/09 23:47:51
うろ覚えでなんだが、会社の新入りがこんなコードを書いてきた。
--
if (pCombo->getCurSel()) {
pCombo->setCurSel(pCombo->getCurSel() - 1);
pCombo->deleteString(pCombo->getCurSel() + 1);
} else {
pCombo->setCurSel(pCombo->getCurSel() + 1);
pCombo->deleteString(pCombo->getCurSel() - 1);
}
--
私みたいにXlibの時代から書いている人間にとって、値を取得してからセットして
もう一回取得するなんてどう見ても待たされそうな処理はなんとももにょってしまう。
それも然り乍ら、なんとも胡乱な振る舞いをさせようとすることよ。
彼奴の頭の中を覗いてみたくもあり、覗きたくなくもあり。

68:デフォルトの名無しさん
09/09/10 00:05:55
63が、特になんの経験もない事はよく解ったwwwwwww

69:デフォルトの名無しさん
09/09/10 00:20:59
>>62
まともな経験がある人ならば、どれが良くてどれが悪いとは安易には言えないはず。
どこで誰がどう削除するかはそのシステムに合わせてインターフェースを
きっちり決めとけば良い話。

A:「頼まれていた会議の書類を作成して、印刷しておきました。」
B:「ありがとう」

(B会議終了)

B:「書類返すよ」
A:(てめーで、捨てろや死ね)


70:デフォルトの名無しさん
09/09/10 00:32:49
その例は、Bに「まともな経験」がないだけの話。

71:デフォルトの名無しさん
09/09/10 00:35:43
62=70


72:デフォルトの名無しさん
09/09/10 00:48:48
結局はモジュール間で決めとけば、どうでも良い
俺はくみこみ知らんが、ポインタ投げて終了の仕組みも作る時もある
こっちはもう使わないのに相手の顔色見ながら、返却待ちのタイミングを
伺うなんてアホらしい

以上、終了


73:デフォルトの名無しさん
09/09/10 01:03:21
すみません、>>61です
色々とお騒がせして、申し訳ございません

私の考えは、>>72さんと同じ考えでした
それぞれが非同期で動いてる場合、同期をとる仕組みを入れるのが面倒ですし
もう必要ないから、B側で削除してもらっていました

もう少し詳しく言うとスレッドが10個ほどあり、使った奴が削除すると言った仕組みで
動いています
AはBに渡す
Bは使わないならCへ、CはDへと・・・
だからこそ、使った人に削除して貰いたかったのです

それとvectorの話が出ていましたが、vectorとかを使ってデータをコピーしても
構わないと言えば構わないのですが
データサイズが大きい時はそれなりのサイズになってしまうので
データをコピー(newして代入)なんて言う無駄な処理とメモリのフラグメンテーションを
起こすような処理はさせたくなかったのでポインタでやってました


74:デフォルトの名無しさん
09/09/10 06:35:29
>>72
>こっちはもう使わないのに
かどうかはわからないよね?
もし、使いたくなっとしても使わないんじゃなくて使えない状態じゃん
しかも、それがわかるのは組んだ自分だけだろ?
下手糞実装ってことは認識して使えよ

75:デフォルトの名無しさん
09/09/10 08:56:32
MFCだったらdelete this が常識

76:デフォルトの名無しさん
09/09/10 18:36:15
>>53
呼び出し履歴のことでよかったんですか教えてくださってありがとうございます.

ntdll.dll!7c94e514()
[下のフレームは間違っているか、または見つかりません。ntdll.dll に対して読み込まれたシンボルはありません。]
ntdll.dll!7c94df5a()
kernel32.dll!7c8025cb()
kernel32.dll!7c802532()
ole32.dll!769f5532()
ole32.dll!769e3551()
ole32.dll!769e34c1()
ole32.dll!769d4ecc()
msvcr80.dll!78132bd9()
ole32.dll!76984212()
> highgui110.dll!_CRT_INIT(void * hDllHandle=0x10000000, unsigned long dwReason=4038497417, void * lpreserved=0x00000001) 行 412 + 0x9 バイト C
highgui110.dll!__DllMainCRTStartup(void * hDllHandle=0x10000000, unsigned long dwReason=0, void * lpreserved=0x00000000) 行 512 + 0x8 バイト C
highgui110.dll!_DllMainCRTStartup(void * hDllHandle=0x10000000, unsigned long dwReason=0, void * lpreserved=0x00000001) 行 462 + 0x11 バイト C

上から数行だとこんな感じで highfui110〜の3行が黒文字,他灰色文字になってました.
.dllばっかりならんでてよくわからないですが

77:デフォルトの名無しさん
09/09/10 19:06:41
>>76
だからなんだよ。
いい加減、ウザイから氏ね

78:デフォルトの名無しさん
09/09/10 22:38:32
>>72
音声のRTPパケットだから二度と使わないし、使いたくなる事は100%ありえない
使いたい頃に使ったら、プロトコルに違反するし、音声がめちゃくちゃになる

二度と使えないのは、仕様書にしてあるから、チーム全員知ってる
なんで、そんなに自分の考えが完璧だなんて、ゴリ押しするんだ
お前はどんだけ偉いんだ
どうせ、お前みたいな奴なんて、そこらへんの派遣野郎だろ

79:デフォルトの名無しさん
09/09/11 11:00:37
Producer - Consumer Pattern だと、 Producer で new, Consumer で delete するのが素直。

80:デフォルトの名無しさん
09/09/13 15:47:55
>>74て、アホだね
生きてて恥ずかしくないの??
早く死ねば良いのに
一番自分が下手くそなのにWWWWWWWWWWWWWWWWWWW

81:デフォルトの名無しさん
09/09/13 16:26:24
>>80
(訳:論破されちゃった!くやしい!ビクッビクッ!)


82:デフォルトの名無しさん
09/09/15 12:13:25
CScrollViewのOnInitialUpdate()でCToolTipCtrlクラスをm_cToolTipCtrl.Create( this );
ってやると落ちる。。。
これってダメ?

83:デフォルトの名無しさん
09/09/15 12:18:51
>>82
OnInitialUpdateが呼ばれるのは一度だけじゃない。
よって、何度も作ろうとするからエラーになる。

84:デフォルトの名無しさん
09/09/15 12:26:37
>>83
ありがとう。
なるほどねー…。
久々にMFCやったから気づかなかった。。。

とりあえず
if( !cToolTipCtrl )
{
m_cToolTipCtrl.Create( this );
}
ってしたらいけた!

85:デフォルトの名無しさん
09/09/16 17:04:34
Visual Studio 2005 Pro/Visual C++/MFCで開発をしています。

IPアドレスコントロール(CIPAddressCtrl)の背景色を変更したいのですが、
CIPAddressCtrlのサブクラスとしてCMyIPAddrCtrlを作成し、
以下のようにコンストラクタとOnCtlColorをオーバーライドしても、
背景の一部の色しか変更できません(リンク先の画像を参照ください)。

CMyIPAddrCtrl::CMyIPAddrCtrl()
{
m_Brush.CreateSolidBrush(RGB(255, 0, 0)); // m_Brushはヘッダーで「CBrush m_Brush;」と宣言済み
}

BEGIN_MESSAGE_MAP(CMyIPAddrCtrl, CIPAddressCtrl)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()

HBRUSH CMyIPAddrCtrl::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CIPAddressCtrl::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetBkColor(RGB(0, 255, 0));
pDC->SetTextColor(RGB(0, 0, 255)); // 試しにテキスト色も変更しています
return m_Brush;
}

結果:URLリンク(nukkorosu.80code.com)

上記画像で白色になっている部分の色を変更するにはどうしたらよいでしょうか?

86:デフォルトの名無しさん
09/09/16 21:16:40
一寸試してみたけど、結局OnPaintをオーバーライドするしかないっぽい。
まあ、普通のテキストボックスに変えてしまうのが一番だろうね。

87:デフォルトの名無しさん
09/09/16 21:26:08
>>85
IP アドレスコントロール は複数のウィンドウからできているので、そのコードでは
子ウィンドウであるエディットコントロールの部分しか変更できない。

白い部分の色を変えるには OnPaint() をオーバーライドして自前で背景を塗りつぶすしかないが、
このときは数値の間にあるドットも自前で描画する必要がある。

>m_Brush.CreateSolidBrush(RGB(255, 0, 0)); // m_Brushはヘッダーで「CBrush m_Brush;」と宣言済み
>pDC->SetBkColor(RGB(0, 255, 0));

・・・背景色と背景ブラシの色が違うなんて。

88:87
09/09/16 21:29:43
>>86
すまん、かぶったね。

>普通のテキストボックスに変えてしまうのが一番
そう、それが一番。

89:デフォルトの名無しさん
09/09/17 00:48:35
他プロセスのリストコントロールに表示されている数値を監視するプログラムを作ってます。

ぐぐったらVirtualAllocExとLVM_GETITEMTEXTメッセージを組み合わせれば良いとわかったので、以下を繰り返して取得しています。

相手ウィンドウのHWNDからpidを求め、PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITEでOpenProcessする
 ↓
VirtualAllocExで、アドレス指定はNULL、MEM_COMMIT、PAGE_READWRITE、サイズは文字列バッファ(64バイト固定長)+sizeof(LVITEM)ぶんのメモリを確保

ローカル変数でLVITEM変数を宣言、ゼロクリアした後以下を代入
iItem,iSubItem←必要なマス目の座標(いつも同じ場所)
 pszText←上記確保したメモリ+sizeof(LVITEM)
 cchTextMax←64

そのLVITEM変数のポインタから確保した先頭アドレスにWriteProcessMemoryする
 ↓
LVM_GETITEMTEXTをSendMessageする
 ↓
確保したメモリの先頭+sizeof(LVITEM)を64バイトReadProcessMemoryして文字列ゲット
 ↓
確保した先頭アドレスを指定、MEM_RELEASEにてVirtualFreeExする
 ↓
プロセスハンドルをCloseHandleする

実際、おおむねこれで取得できているのですが、数十回ほど取得を繰り返すと相手側が「Visual C++ RunTime Error! Abnormal Program Termination」と表示して落ちてしまいます。取得するたびSleep(100)などしてみましたが駄目でした。どなたか解決策をご存知ないでしょうか?

90:デフォルトの名無しさん
09/09/17 01:17:53
>>89
自分の書いた処理内容をよく見て、デバッガで追え。
悪いのはおまえだ。

91:85
09/09/17 10:29:06
>>86>>87
ご回答ありがとうございます。
挙動から入力部分のウィンドウの下にもう一個ウィンドウがあるように
見えたのですが、やっぱりそうだったのですね…。

OnPaintのオーバーライドまでするとなるとちょっと手間なので、
おっしゃるとおりテキストボックスで実装してみたいと思います。

> ・・・背景色と背景ブラシの色が違うなんて。
このほうが何を書いたらどこが変わるかわかりやすいかなぁと思ったので(^^;
実際には同じ色で塗りつぶします。

92:85
09/09/17 20:25:10
85です。ちょっと気になったのでOnPaint()のオーバーライドに挑戦してみました。
あまり考えずに>>85に下記のコードを追加したら、それっぽいのができました。

BEGIN_MESSAGE_MAP(CMyIPAddrCtrl, CIPAddressCtrl)
ON_WM_CTLCOLOR()
ON_WM_PAINT()
END_MESSAGE_MAP()

void CMyIPAddrCtrl::OnPaint()
{
CPaintDC dc(this);

CRect rect;
GetClientRect(&rect);
dc.FillSolidRect(rect, RGB(255, 255, 0));

int w = rect.Width() / 4;
for (int i = 1; i < 4; i++) {
dc.SetPixel(w * i + 1, 11, RGB(0, 0, 0));
dc.SetPixel(w * i + 1, 12, RGB(0, 0, 0));
}
}

これでなんとか目的の動作を組み込めそうです。本当にありがとうございました!

93:デフォルトの名無しさん
09/09/17 21:03:24
そしてディフォルトじゃない色の設定にしている環境で阿呆を見ると。
あーフォントサイズもやばいかなw

94:デフォルトの名無しさん
09/09/18 01:16:05
> int w = rect.Width() / 4;
もうちょっと真面目に計算すべしw

>dc.SetPixel(w * i + 1, 11, RGB(0, 0, 0));
>dc.SetPixel(w * i + 1, 12, RGB(0, 0, 0));

RGB( 0,0,0) → ::GetSysColor( COLOR_WINDOWTEXT)

95:デフォルトの名無しさん
09/09/25 16:11:36
AfxSetAllocStop の使い方を超知りたいのに、MSDNに載ってないってどういうことよ^^;;;

96:デフォルトの名無しさん
09/09/25 16:26:21
>>95
_CrtSetBreakAlloc() を呼んでいるだけだから、使い方はそっちを参照すればよろし。

97:デフォルトの名無しさん
09/09/25 16:39:54
>>96
おぉ、すばらしい!載ってました!
サンクスです。^^

98:デフォルトの名無しさん
09/09/28 12:34:57
SetTimer()でセットしたタイマを
残り時間を保持したまま一時停止や再開する方法はありますでしょうか。

別のダイアログをDoModal()で出して待っている最中も
WM_TIMERが発生するようなので、その間はタイマを止めておきたいのですが、
いったんKillTimer()で止めてしまうと待ち時間が戻ってしまい、
タイミングによっては延々と発生しない状態になってしまいます。

99:デフォルトの名無しさん
09/09/28 13:02:50
>>98
もっとも簡単な方法は、DoModal() する前にある種のフラグをたててタイマー処理を回避し、
制御が戻ってくればタイマー処理を復帰させればいい。

CMyDialog dlg;
m_bDisableTimer = TRUE;
dlg.DoModal();
m_bDisableTimer = FALSE;


CxxWnd::OnTimer( ...)
{
   if ( m_bDisableTimer) return;

   // ToDo...
}


100:98
09/09/28 15:15:03
>>99
ありがとうございます。
やっぱりそういう方法になるのですね。

この場合もダイアログ表示のタイミングによっては
ToDoのところまで行かない状態が続いてしまいますが、
タイマでやっている以上は避けられないのかな。

101:デフォルトの名無しさん
09/09/28 16:22:33
>この場合もダイアログ表示のタイミングによっては
>ToDoのところまで行かない

ダイアログが表示された時点( WM_INITDIALOG を処理する時点)で、
m_bDisableTimer = TRUE; にする。

102:デフォルトの名無しさん
09/09/28 21:21:33
久々に見たが、>>74のアホ具合が際立っててワロタ
>>74は、ハヨー死ね、

103:デフォルトの名無しさん
09/09/29 00:43:13
>>100
タイマー+カウンターでやる、という手もある。
例えば5000msなら500ms×10カウントとか。
で、OnTimerはこんな感じで。

if ( (counter += (counter < 10)) < 10 ) return;
if ( m_bDisableTimer ) return;
// なんか色々処理
counter = 0;

WM_TIMER直後かつ500ms以内にダイアログを開きなおす、
とかやらなければ実行されるはず。

104:98
09/09/29 09:28:18
>>101
>>103

ありがとうございます。
自腹でカウンタ処理をやれば、一時停止に近いことはできますね。

タイマ自体を一時停止する方法は無さそうですし、
タイマ+モーダルダイアログって、
やってることはモードレスダイアログっぽくなってしまうんですね。

うかつにメッセージボックスも出せないってことだったのか。

105:デフォルトの名無しさん
09/09/29 09:36:41
残り時間を保持とか言ってるから根本的に勘違いしてる。

106:デフォルトの名無しさん
09/09/29 14:12:42
>>104

↓ 知ってる?

The WM_TIMER message is a low-priority message.
The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue.

107:デフォルトの名無しさん
09/10/05 20:56:34
皆様に質問です。

Visual Studio 2008 MFC FeaturePackを調査していますが、
追いきれない箇所があったので投稿します。

MFCのSDIで作成したフレームワークで
CFrameWndのメンバにm_wndMenuBar(CMFCMenuBar型)ってのがあります。

これから、m_wndMenuBar.GetHMenu()でメニューハンドルを取得し
DeleteMenu、EnableMenuItem、ModifyMenuなど
今までどおりCMenuと同等な操作をしても、
表示されているメニューバーに変化が無いのです。

何かやり忘れの処理とかあるんでしょうか?
それとも、そういうものなんでしょうか?

※たとえば、DeleteMenuの実行結果はTRUEを返し、
メニューバー[表示(V)]→[ツールバーとドッキング ウィンドウ(T)]→[カスタマイズ...]の
カスタマイズダイアログのコマンドからは消えていますが、
メニューバーの一覧からは消えないのです・・・

何か、コツがあるんでしょうか?
知っている方、情報を願います・・・

108:デフォルトの名無しさん
09/10/05 21:40:23
>>107
CMenuをいじった後で、CMFCMenuBar::CreateFromMenuで戻してやると反映するけど。

109:107
09/10/05 23:53:12
たとえば、CMainFrame::OnCreateの最後に
{


HMENU hMenu = m_wndMenuBar.GetHMenu();
if (hMenu){
BOOL bRet = ::DeleteMenu(hMenu, ID_EDIT_CUT, MF_BYCOMMAND);
m_wndMenuBar.CreateFromMenu(hMenu);
}

と入れてみたけど変化なし。
OnCreate時じゃダメなんですかね?

110:デフォルトの名無しさん
09/10/06 00:08:43
>>109
ほんと馬鹿は始末に負えないな。
ここまで教えてもらって、なんで自力で解決しようとしないのか。
できない馬鹿だからこそ質問を繰り返すんだろうが、そんな自分は屑だと自覚しろ。

111:デフォルトの名無しさん
09/10/06 00:25:45
>>109

>BOOL bRet = ::DeleteMenu(hMenu, ID_EDIT_CUT, MF_BYCOMMAND);

言っておくが、ポップアップメニューの項目を削除したいなら CMFCMenuBar をいじってもダメ。
CMFCPopupMenu::RemoveItem() を使う。

112:デフォルトの名無しさん
09/10/06 00:35:19
でもわからんでもないな
ホントMFCって意味不明なとこあるものな
正直、はじめはなんかのサンプルをコピペして作っていくしかないと思うな
んでメッセージの流れとか覚えたらそういうのやっとチョボチョボ手が出せるようになる

1度動くもんとコードを誰かに一致させてもらわない限り
人に聞くしかねぇだろうな
俺もサンプル漁るたびにそう思うわ
自分でヘルプ読みながら研究すると大抵糞くだらないことでも1日作業

このフレームワークだりぃよw
最近、VBでは楽にできるらしいエクセルなんかの機能を組み込め的要求がウゼェ

113:デフォルトの名無しさん
09/10/06 02:06:36
>>112
ドキュメントも読めない、サンプルソースもおえないアフォは氏ねば?
ヘルプ読みで1日とか、調べ方もしらないんじゃその方がいいだろ。

114:デフォルトの名無しさん
09/10/06 08:00:34
過去そうやって偉そうなこと言ってて
いざやらせてみると時間かかる人ばっかりだったからお前も似たようなもんだと思う(笑)
微妙なところで時間くうだろ?

115:107
09/10/08 08:20:16
CWinAppEx::CleanState()を実行したら反映されました。
どうも、メニューカスタマイズ情報とか保持してるようですね・・・

みなさまありがとうございます

116:デフォルトの名無しさん
09/10/13 22:10:53
>>112
オートメーション?
であれば、MFC関連ドキュメント探すよりVBAのヘルプ見た方が速いよ

117:デフォルトの名無しさん
09/10/14 23:29:27
日本語版MSDN読んでる限りはMFCは躓きの連続だろうね。
英語版と比べると情報省きすぎ。^^;;;;;;;;;;;;;;;;;;;;;オコルゾ

118:デフォルトの名無しさん
09/10/15 02:10:21
>>117
英語版読みなさい^^;;;;;;;;;;;;;

119:デフォルトの名無しさん
09/10/15 11:30:20
たいていのことはソース読めばわかる

120:デフォルトの名無しさん
09/10/15 21:02:37
ドキュメント・ビュー・アーキテクチャを使っている場合で、読み書きする
ファイルの拡張子を設定するには、どのような方法があるでしょうか?


121:デフォルトの名無しさん
09/10/15 21:13:36
CDocument は、ドキュメントの新規作成、読み込み、保存のような標準の操作をサポートします。
フレームワークは、CDocument で定義されたインターフェイスを使って、ドキュメントを操作します。

122:デフォルトの名無しさん
09/10/15 21:47:49
>>120

CWinApp::OnFileOpen() と CDocument::OnFileSaveAs() を
好きなようにオーバーライドすりゃいい。

123:デフォルトの名無しさん
09/10/15 23:11:51
>>120
ワークスペース新規作成時のメニューをよく観察する事

>>122
CDocument::OnFileOpen()と CDocument::OnFileSaveAs()じゃね?


124:122
09/10/16 00:11:13
>>123
>CDocument::OnFileOpen()

残念だが、こういうメソッドはない。
CDocManager::OnFileOpen() と書きたかったのかもしれないが、
これとて、ファイルオープンダイアログを表示して得られたファイル名を CWinApp::OpenDocumentFile() に
渡しているだけなので、CWinApp::OnFileOpen() 内でこの操作をすれば、回り道する必要は何もない。

125:デフォルトの名無しさん
09/10/16 00:14:34
いつもダイアログベースでドキュメントクラスなんて使ったことねーけど
なんかいいことあるの?

126:デフォルトの名無しさん
09/10/16 01:31:36
void PleaseReadExplanation()
{
  『ドキュメント/ビュー アーキテクチャが適さない場合もあります。たとえば、次のような場合です。
  ・C で記述された Windows 対応のアプリケーションを移植していて、アプリケーションにドキュメント/ビューのサポートを
   追加することよりも、移植作業自体を完了することの方が先である場合。
  ・簡単なユーティリティを作成していて、ドキュメント/ビュー アーキテクチャは不要と判断できる場合。
  ・元のコードで既にデータ管理とデータ表示が混在している場合。』
}

MFCのドキュメント・ビュー・アーキテクチャがいい悪いは別にして、
MVC的な手法のほうがコードがごちゃごちゃしなくていい場合も多々。

127:デフォルトの名無しさん
09/10/16 06:21:17
CDocTemplate
アプリケーションはサポートするドキュメントの型それぞれに 1 つのドキュメント テンプレートを持ちます。
たとえば、アプリケーションがスプレッドシート (表計算) とテキストのドキュメントをサポートしていれば、
アプリケーションは、2 つのドキュメント テンプレート オブジェクトを持ちます。
それぞれのドキュメント テンプレートは、対応する型のすべてのドキュメントの作成、管理を行います。

ドキュメント テンプレートは、ドキュメントの型とともに使われるリソース
(メニュー、アイコン、アクセラレータ テーブルなど) の ID を保持します。
ドキュメント テンプレートは、またドキュメントの型についての付加情報を持つ文字列も持っています。
これらは、ドキュメントの型の名前 (例 : "Worksheet")、ファイルの拡張子 (例 : ".xls")、そしてオプションで、
ファイル マネージャや OLE などのユーザー インターフェイスで使われる文字列などを含みます。

128:デフォルトの名無しさん
09/10/16 06:27:19
そんなアプリねーよーなぁ?w
VCだって設計微妙だしなw
ええーwそこでこの構造使うの〜?w的なw

129:デフォルトの名無しさん
09/10/16 14:08:29
CMap<CString, LPCTSTR, CString, LPCTSTR> と CMapStringToString って、
やってることは結局まったく同じですか?
それとも、効率や安全などの面でこっちを使うべきとかありますか?

130:デフォルトの名無しさん
09/10/18 17:49:00
MFCは慣れればすんごい便利なんだよな。ウチみたいに組み込み系で
UI付きツール作ってくれってときにね。いろんなC++のSDK使うから
C#とかも使えない。

それよりも困ってるのがリソースかな。特にアイコン。
もっとカッコいいのとか、統一されたデザインとか要求されて困る。
ここはアニメーションさせてくれとか言われると泣きたくなる。

みんなはどうしてる?有料でもいいんでビジネス用途で使える
アイコン集ってものはないかな?ぐぐればいろいろ出てくるけど
どうにも種類が足りなくて。

131:デフォルトの名無しさん
09/10/18 18:28:44
>>130

種類は豊富なんだが、商用利用となると・・・。
URLリンク(www.iconspedia.com)


132:デフォルトの名無しさん
09/10/18 19:40:45
具満タンとかイラ満タンとかなら商利用可能じゃよ。

133:デフォルトの名無しさん
09/10/19 01:23:09
>>131
ここは知らなかったな〜。ありがと。

>>132
パッケージは販売終了してるね。絵 単品高すぎる。

URLリンク(jp.infragistics.com)

ここのがなんかパッケージでなんかよさげなんだけど、サンプル見ると
同じアイコンにショートカット矢印みたいのが付いたのも含めて数に
カウントしてるみたいなんで、11000種類って書いてあっても実際には
1/10くらいなんだけろうなって感じがする。

134:デフォルトの名無しさん
09/10/20 19:53:46
>>125
使い捨てツールを作る場合に便利だな。あんまし余計な事を考えなくて済む。
本体となるとさすがに自作ライブラリを優先するけど。

135:デフォルトの名無しさん
09/10/20 22:10:55
2010でスタンダードエディションなくなるってさー。
今までupg15kで便利なMFCが使えてたけど
これからはupg55k必要。ますます絶滅方向だ。

136:デフォルトの名無しさん
09/10/23 14:38:26
CClientDC dc(this)でクラスを作り、
デストラクタでリリースされるにもかかわらず、
this->ReleaseDC(&dc);としたらどうなりますか?

逆にリークの原因になったりしますか?

137:デフォルトの名無しさん
09/10/23 15:23:09
試せばわかるので質問するよーなことではないと思うが、いちおう応えておく。

答はNO。
デストラクタでの ::ReleaseDC() が失敗するだけ。

138:デフォルトの名無しさん
09/10/26 01:39:34
CDialogを親クラスに持つクラスで、OnPaint()以外の場所でdcを取得したいときはどうすればいいんでしょうか?

139:デフォルトの名無しさん
09/10/26 02:07:56
GetDC()、ReleaseDC()。
CWnd::GetDC, CWnd::ReleaseDC

140:デフォルトの名無しさん
09/10/26 02:23:37
CDC *pDC=CWnd::GetDC();
CWnd::ReleaseDC(pDC);
とするとコンパイルできるのですが、実行するとエラーが出てしまい困ってるんです。

141:デフォルトの名無しさん
09/10/26 02:35:00
そのエラーの原因は別のところにある

142:デフォルトの名無しさん
09/10/26 10:09:16
CWnd::GetDC()という書き方は・・・
スタティックな関数じゃないんだし、CDialogはCWndの派生クラスだし
そのままGetDC()と書けるだろう

143:デフォルトの名無しさん
09/10/26 20:36:50
むすどん読んだ限りではGetDCはvirtualじゃないから
理屈としてはCWnd::GetDC()でも通るんじゃないか?
実験してないけど。w



144:デフォルトの名無しさん
09/10/26 21:04:24
>通るんじゃないか?

通るよ。だから、あえてそこは指摘せずに「原因は別にある」と書いた。

145:デフォルトの名無しさん
09/10/27 21:40:39
WS_EX_APPWINDOWの属性を持つウィンドウで、
最小化したときに右下では無く、左下にアニメーションさせることって可能?

なんかコツあるんですかね?

146:デフォルトの名無しさん
09/10/27 21:58:52
それやってるのMFCなのか?

147:145
09/10/27 22:02:06
ごめん逆
左下を右下への間違い

148:145
09/10/27 22:11:10
>>146
MFCでいじっています。
MFCのCMainFrame::OnSize(UINT nType, int cx, int cy)にて、
苦戦中。


149:デフォルトの名無しさん
09/10/28 08:38:29
SetWindowPlacementでできる

150:デフォルトの名無しさん
09/10/28 09:53:22
タスクバーを右にしてるオレの環境だと左下にいかないけど

151:デフォルトの名無しさん
09/10/28 09:54:33
そもそもタスクバーにある最小化したアプリの場所にアニメーションするな、Vistaだけど

152:デフォルトの名無しさん
09/10/28 11:17:28
CMainFrameの拡張ウィンドウスタイルで
WS_EX_APPWINDOWを外し、WS_EX_TOOLWINDOWを加える

んで、最小化する手前で

// タスクバーのハンドル
HWND hTaskbar = ::FindWindow(_T("Shell_TrayWnd"), NULL);
// タスクトレイのハンドル
HWND hTasktray = ::FindWindowEx(hTaskbar, NULL, _T("TrayNotifyWnd"), NULL);

hTasktrayにGetWindowRect使えば位置がわかる。
※隠れていてもその位置が求まる。

あとはGetWindowPlacementで現在値を取得し、
WINDOWPLACEMENTのptMinPositionを差し替え、
flagsにWPF_SETMINPOSITIONをセット。
SetWindowPlacementで更新って感じ



153:デフォルトの名無しさん
09/11/04 23:22:17
質問です、文字列を扱う場合MFC使いの皆さんは、 またはchar* なのでしょうか?
std::string は使わない派ですか?

154:デフォルトの名無しさん
09/11/04 23:25:13
訂正です
質問です、文字列を扱う場合MFC使いの皆さんは、CString またはchar* なのでしょうか?
std::string は使わない派ですか?


155:デフォルトの名無しさん
09/11/05 10:02:51
CString使う前提で設計されてる

156:デフォルトの名無しさん
09/11/05 10:15:00
MFCを使う関数では大抵CStringで済ませるが、文字列処理をする関数ではstd::stringを使う。

157:デフォルトの名無しさん
09/11/05 10:42:57
おいらはCStringでstlは使わないに統一 サイズ可変配列もCArray<>とかCTypedPtrArray<>とかで
まぁ個人で作ってるものだからだけど

158:デフォルトの名無しさん
09/11/06 19:01:20
>>154です
レスサンクスです
stl を多用したtemplate 非MFCのライブラリがあるのですが
そのライブラリへCString を渡す場合、何か注意すべきところがあれば教えて頂けないでしょうか?

159:デフォルトの名無しさん
09/11/06 20:01:16
渡さないほうが良い
stringへのらっぱー書く方が良い


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4332日前に更新/103 KB
担当:undef