■MFC相談室 mfc21d.dll■

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc20d.dll■
http://pc12.2ch.net/test/read.cgi/tech/1230219816/
2デフォルトの名無しさん:2009/08/22(土) 14:37:12
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(VS.80).aspx
3デフォルトの名無しさん:2009/08/22(土) 16:31:30
>>1乙FC
4デフォルトの名無しさん:2009/08/22(土) 16:45:11
>>1さん、お疲れ様です(><;)
5デフォルトの名無しさん:2009/08/22(土) 17:29:24
まさかのdat落ちいちおつ
6デフォルトの名無しさん:2009/08/22(土) 18:11:22
MFCなんてまだ需要あるの?
7デフォルトの名無しさん:2009/08/23(日) 07:38:55
重要性はかなり低くなったね。

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

実際、MFCの関連書籍も大半は6.0でとまっていて
もう7.0以降にはほとんど需要がない事実を物語っている。
8デフォルトの名無しさん:2009/08/23(日) 09:53:10
7.0以降でCStringが急激に強まった事実が殆ど知られていのは一寸悲しい。
未だにA2Wとか書いてそうだ。

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

VS2010以降もやる気満々らしいし。開発チームの暴走発言かもしれないけどw
ttp://blogs.msdn.com/dd_jpn/archive/2008/12/04/9174764.aspx
9デフォルトの名無しさん:2009/08/23(日) 12:45:39
個人的なことを言えば、.NET とか C# とかいった新しいものをマスターする時間がない & もったいないのでMFCを使っているのが現状。
ATL/WTL にも興味はあるが、やはりマスターするには時間的なものが・・・。

もっとも、単純なプログラムは なんちゃってMFC 的な独自のクラスを使って書いている。
実質 100KB 程度の実行ファイルが MFC をスタティックリンクしただけで 3MB超になるんじゃ、どっちが主役かわからないもの。(笑)
10デフォルトの名無しさん:2009/08/24(月) 00:36:02
漏れの親父がパソコン30万だして買ったけど
なんもできんので、機能をごく必要なものに限って、
ブラウザとメーラーとワープロつくってやったよ。

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

すれ汚しスマソ。
11デフォルトの名無しさん:2009/08/24(月) 06:59:10
>>9
afxcontrolbars.h はずせばそんな巨大なサイズにならないんじゃない?
12デフォルトの名無しさん:2009/08/24(月) 19:59:49
>>9
3MB超はデバッグビルドだべ?リリースでも1Mぐらいあるけど
まぁ最近の環境だと昔ほど気にする必要がなくてよいかなよいかな
13デフォルトの名無しさん:2009/08/24(月) 20:13:41
リボンインターフェース用のリソース入れちゃうからでかくなるんじゃないの?
14デフォルトの名無しさん:2009/08/24(月) 20:40:48
button = new CButton[button_num];
button[0].Create(・・・);

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

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

>>14
ビューのメッセージマップにON_BN_CLICKEDで出来るんじゃない?
16デフォルトの名無しさん:2009/08/24(月) 21:05:22
WM_NOTIFYで通知受け取って捌くしかないんじゃね?
BN_CLICKEDとかボタンから親ウィンドウに通知してくる
ボタンコントロールはWM_NOTIFYじゃなくてWM_COMMANDだったかもしれん

またはCButtonの派生クラス作ってBN_CLICKEDマップして自前で通知送る
17デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/08/25(火) 01:49:26
エディットボックスから文字列を取得する際、
GetWindowTextを使うと思うんですが、データ型は必ずCStringになってしまうのでしょうか?
ここでCharを使う事って出来ますか?
19デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/08/25(火) 02:10:38
>>19
レスありがとうございます
例でTCHARとなっているところはcharでも問題ないですよね・・?
また、LPTSTRが引数になるということは、エディットボックスの中身がcharポインタに入るってイメージでいいのでしょうか?
すみません勉強不足で変な表現があるかも知れませんが
21デフォルトの名無しさん:2009/08/25(火) 02:28:13
>>20
プロジェクトの設定で Unicode 文字セットを使っていないなら char でいい。
「Unicode 文字セットを使用する」にしている場合は char は使えない。

>エディットボックスの中身がcharポインタに入る
まあ、そんな感じのイメージ。難しく言うと、「エディットボックスの中身が、配列 sz の先頭要素のアドレスが示すメモリエリアに入る」
22デフォルトの名無しさん:2009/08/26(水) 09:14:48
FormViewにボタンやMSFlexGridを配置しました。
このFormViewを印刷するにはどうしたら良いですか?
23デフォルトの名無しさん:2009/08/26(水) 10:59:21
普通のFormViewと同じようにどうぞ。
24デフォルトの名無しさん:2009/08/26(水) 21:56:36
>>22です
>>23
ボタンをどう印刷すれば良いのか、全く解りません。
MSFlexGridについては、pDCを使って線とテキストで
あたかもMSFlexGridをそのまま印刷してるような感じに出来る事は解ったのですが・・・
よろしくお願い致します

25デフォルトの名無しさん:2009/08/26(水) 22:47:15
>>25
pDCを使って線とテキストで描く。
あるいはそれ用のビットマップリソースを用意して貼り付ける。
2625:2009/08/26(水) 22:48:14
って、自分に言ってどーする。^^;
>>25>>24 へのリプライ。
27デフォルトの名無しさん:2009/08/28(金) 16:38:44
 
28名無しさん@そうだ選挙に行こう:2009/08/30(日) 12:22:49
・・・行ってきた♪
29デフォルトの名無しさん:2009/09/04(金) 10:12:20
 
30デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/09/07(月) 18:42:07
>>30
おそらく問題は、示されたコード以外の場所にある
3230:2009/09/07(月) 18:57:41
if(myDLG.DoModal() != IDOK)return;
をコメントアウトすると問題なく動いていたのでここがだめなのかと思っていたのですが…
ダイアログウィンドウがきえてもプログラムが終了しきれてないのはどういったのが考えられるのでしょうか
3330:2009/09/07(月) 19:11:50
さすがにそれはエスパーすぎるか…
んーなんなんだろ…
そして何故かボタンをダブクリしても関数つくれなくなった…クラスウィザードとかいうのが立ち上がる…
34デフォルトの名無しさん:2009/09/07(月) 19:27:17
>ダイアログウィンドウがきえてもプログラムが終了しきれてない
何を根拠として、こう判断したのかな?
35デフォルトの名無しさん:2009/09/07(月) 19:30:39
>>34
画面下部のウォッチと出力のウィンドウが残ったまま
タスクマネージャでみるとtest.exeが起動中
の2点からです.

そして今ダイアログのボタンとか配置する画面で
ボタンをクリックして右のプロパティのところを雷マーククリックして管理イベント開きたいのに
そこが真っ白になってて操作できないという新しい問題が…
作ったボタンダブルクリックしてもMFC クラスウィザードとかいうのが立ち上がるし…
36デフォルトの名無しさん:2009/09/07(月) 21:25:48
>>35
プロジェクトのフォルダにある
*.ncb
*.suo
*.user
を一度削除してみろ。
37デフォルトの名無しさん:2009/09/07(月) 22:17:51
MFCは良く知らんけど、Win32APIではモーダルダイアログの終了には
return の前に EndDialog を明示的に呼び出す必要がある。
これはモーダルダイアログのウィンドウプロシージャはOSの内部にあるからだ。
(アプリケーションのウィンドウプロシージャがアプリ自身の中にあるのと異なるという意味ネ)

で、MFCにもCDialog::EndDialogがあり、OKとキャンセルではデフォルトで呼ばれるけど
それ以外の場所から終わるときにはこれを呼ぶ必要があるとmsdn様が…
38デフォルトの名無しさん:2009/09/07(月) 22:21:55
あと、ちょっと思ったけど、IDOK っていう定数マクロが TNOK って見えちゃうこと、よくあるよね?
39デフォルトの名無しさん:2009/09/08(火) 16:33:28
>>36
消したら関数の追加などはできるようになりましたありがとうございます.

>>37
OK キャンセル などのボタンは最初に出来ているものでやってます.
ダイアログの×をクリックしても終わらないみたいです.
40デフォルトの名無しさん:2009/09/08(火) 16:44:12
そのtest.exeが残ってるときにデバッグの中断して
スタックトレースみるとどうなってるよ?
41デフォルトの名無しさん:2009/09/08(火) 16:59:51
スタックトレースってどうやってみるんでしょうか?
VS.NET 2005ですが…

google-glogとかいうのいれなきゃむりなんかな?
42デフォルトの名無しさん:2009/09/08(火) 17:02:00
・・・まさか 『実はそのダイアログはモードレスでした』 なんてオチじゃないだろうなあ。
43デフォルトの名無しさん:2009/09/08(火) 17:12:03
特にいじってないはずなのでモーダルだと思います.

2つファイル名取得して画像の合成とかやってるんですが
画像の合成の関数とかは普通に動くんですよね.
ただダイアログのOKボタン押してもexeが終わらないと….
44デフォルトの名無しさん:2009/09/08(火) 17:18:44
>2つファイル名取得して画像の合成とかやってるんですが
>画像の合成の関数とかは普通に動くんですよね.

問題なのはこのあたり以降のコトだろうから、>>31 だと言っている。
回答者はエスパーじゃないんだぞ。
45デフォルトの名無しさん:2009/09/08(火) 17:47:05
今試しにファイルネームの読み込みを
上にかいたようなものでなく
最初からプログラムにかいておいて上記の関数を呼び出さないでやってみると
処理が終わった後OKボタンをクリックすると無事にexeが終了しました.

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

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

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

を書くと終了しなくなってしまうようでした….
46デフォルトの名無しさん:2009/09/08(火) 17:54:57
if(myDLG.DoModal() == IDOK) だった場合はどう処理しているのか?
>>30 にはそのあたりのことが書かれていないんだが。
47デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/09/08(火) 17:58:05
>>30 のコードをそのままコピペして試したけど、ウチでは何の問題もないよ。
49デフォルトの名無しさん:2009/09/08(火) 18:02:33
>>46
今はコメントアウトされてます
本来なら画像を取り込んでピクチャーコントロールに表示する感じです.

>>48
やっぱりDoModalの問題じゃなさそうですね…
プロジェクト作り直してやってみます
50デフォルトの名無しさん:2009/09/08(火) 18:29:06
もう意味が分からなくなってしまった.

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

なんだろう.なんかデバック情報が変な事になるんだろうか
ボタン1については出来た後いじってないのになぁ
エスパーじゃないと無理そうなのであきらめることにします.
51デフォルトの名無しさん:2009/09/08(火) 18:37:15
そうだね。君の言っていることをすべて理解するのはエスパーじゃないと無理そう。
52デフォルトの名無しさん:2009/09/08(火) 19:31:39
付き合ってくださった方ありがとうございました.
53デフォルトの名無しさん:2009/09/09(水) 12:00:35
スタックトレースはVC++だと呼び出し履歴とかの名前であるだろ
54デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/09/09(水) 19:19:16
>>54
プロジェクトの設定が間違っている。
5654:2009/09/09(水) 21:21:08
>>55
有難うございました
5754:2009/09/09(水) 21:38:46
、「ファイル」「新規作成」「プロジェクト」で 「Win32 Application」を選択して
アプリケーションの設定でWindowsアプリケーション、空のプロジェクトで設定しているのですが
どこが間違いなのでしょうか?
58デフォルトの名無しさん:2009/09/09(水) 21:45:18
>>57
おまえウザイな。
自分で勉強するこ覚えろよ、屑
59デフォルトの名無しさん:2009/09/09(水) 21:48:44
>>57
参考にしている「猫」のページに書いてある。
6054:2009/09/09(水) 21:59:11
>>59
見落としてました。有難うございました!
61デフォルトの名無しさん:2009/09/09(水) 22:23:41
afxbeginthreadでAとBを生成しました。
AでnewしたデータをBに渡して、Bが使い終わったらBの中でdeleteしています。
そうするとBがdeleteした時にheapエラーで落ちるのですが。
どうしてなのか、全く解りません。
Aの中でdeleteしているような個所やB内で2度deleteを実行しているような所
初歩的なバグはありません。

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

良い例
A:「作ったよ」
B:「ありがとう。・・・使い終わったよ♪」
A:「ん、じゃ削除するねっ」
63デフォルトの名無しさん:2009/09/09(水) 23:08:38
ホントこのAで作ったもんをBで削除するプログラムを書こうって奴の気がしれない
ふつーに特になんの経験もなく気持ち悪いと思わないのか?
センスねぇなマジでw

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

manko(new chinko);

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

なんでこんなもん作るんだマジでw
センス0野郎の書くPGは本当にわからないw
64デフォルトの名無しさん:2009/09/09(水) 23:12:50
マウスをドラッグ&ドロップするとき
新しいGDIオブジェクトを生成したとき

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

っていうか、MFCはC++的に見るとキモい使わせ方するライブラリ多いよね。
65デフォルトの名無しさん:2009/09/09(水) 23:20:55
>>61
バグがあるんじゃね?

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

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



66デフォルトの名無しさん:2009/09/09(水) 23:32:29
確かに組込みでは、ポインタを渡して相手に全てをほおりなげる場合が多いね。
ウィンドウズも昔はCPU、ソフトが非力だったから相手に後処理を任せて終わりと
昔からの流れが残ってるんだと思ってる。
マルチ・スレッド/タスクで、相手が使い終わったのを待ったりとか
意識しようとすると無駄な時間が多くなる。
67デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/09/10(木) 00:05:55
63が、特になんの経験もない事はよく解ったwwwwwww
69デフォルトの名無しさん:2009/09/10(木) 00:20:59
>>62
まともな経験がある人ならば、どれが良くてどれが悪いとは安易には言えないはず。
どこで誰がどう削除するかはそのシステムに合わせてインターフェースを
きっちり決めとけば良い話。

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

(B会議終了)

B:「書類返すよ」
A:(てめーで、捨てろや死ね)
70デフォルトの名無しさん:2009/09/10(木) 00:32:49
その例は、Bに「まともな経験」がないだけの話。
71デフォルトの名無しさん:2009/09/10(木) 00:35:43
62=70
72デフォルトの名無しさん:2009/09/10(木) 00:48:48
結局はモジュール間で決めとけば、どうでも良い
俺はくみこみ知らんが、ポインタ投げて終了の仕組みも作る時もある
こっちはもう使わないのに相手の顔色見ながら、返却待ちのタイミングを
伺うなんてアホらしい

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

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

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

それとvectorの話が出ていましたが、vectorとかを使ってデータをコピーしても
構わないと言えば構わないのですが
データサイズが大きい時はそれなりのサイズになってしまうので
データをコピー(newして代入)なんて言う無駄な処理とメモリのフラグメンテーションを
起こすような処理はさせたくなかったのでポインタでやってました
74デフォルトの名無しさん:2009/09/10(木) 06:35:29
>>72
>こっちはもう使わないのに
かどうかはわからないよね?
もし、使いたくなっとしても使わないんじゃなくて使えない状態じゃん
しかも、それがわかるのは組んだ自分だけだろ?
下手糞実装ってことは認識して使えよ
75デフォルトの名無しさん:2009/09/10(木) 08:56:32
MFCだったらdelete this が常識
76デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/09/10(木) 19:06:41
>>76
だからなんだよ。
いい加減、ウザイから氏ね
78デフォルトの名無しさん:2009/09/10(木) 22:38:32
>>72
音声のRTPパケットだから二度と使わないし、使いたくなる事は100%ありえない
使いたい頃に使ったら、プロトコルに違反するし、音声がめちゃくちゃになる

二度と使えないのは、仕様書にしてあるから、チーム全員知ってる
なんで、そんなに自分の考えが完璧だなんて、ゴリ押しするんだ
お前はどんだけ偉いんだ
どうせ、お前みたいな奴なんて、そこらへんの派遣野郎だろ
79デフォルトの名無しさん:2009/09/11(金) 11:00:37
Producer - Consumer Pattern だと、 Producer で new, Consumer で delete するのが素直。
80デフォルトの名無しさん:2009/09/13(日) 15:47:55
>>74て、アホだね
生きてて恥ずかしくないの??
早く死ねば良いのに
一番自分が下手くそなのにWWWWWWWWWWWWWWWWWWW
81デフォルトの名無しさん:2009/09/13(日) 16:26:24
>>80
(訳:論破されちゃった!くやしい!ビクッビクッ!)
82デフォルトの名無しさん:2009/09/15(火) 12:13:25
CScrollViewのOnInitialUpdate()でCToolTipCtrlクラスをm_cToolTipCtrl.Create( this );
ってやると落ちる。。。
これってダメ?
83デフォルトの名無しさん:2009/09/15(火) 12:18:51
>>82
OnInitialUpdateが呼ばれるのは一度だけじゃない。
よって、何度も作ろうとするからエラーになる。
84デフォルトの名無しさん:2009/09/15(火) 12:26:37
>>83
ありがとう。
なるほどねー…。
久々にMFCやったから気づかなかった。。。

とりあえず
if( !cToolTipCtrl )
{
m_cToolTipCtrl.Create( this );
}
ってしたらいけた!
85デフォルトの名無しさん:2009/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;
}

結果:ttp://nukkorosu.80code.com/img/nukkorosu11151.png

上記画像で白色になっている部分の色を変更するにはどうしたらよいでしょうか?
86デフォルトの名無しさん:2009/09/16(水) 21:16:40
一寸試してみたけど、結局OnPaintをオーバーライドするしかないっぽい。
まあ、普通のテキストボックスに変えてしまうのが一番だろうね。
87デフォルトの名無しさん:2009/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));

・・・背景色と背景ブラシの色が違うなんて。
8887:2009/09/16(水) 21:29:43
>>86
すまん、かぶったね。

>普通のテキストボックスに変えてしまうのが一番
そう、それが一番。
89デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/09/17(木) 01:17:53
>>89
自分の書いた処理内容をよく見て、デバッガで追え。
悪いのはおまえだ。
9185:2009/09/17(木) 10:29:06
>>86>>87
ご回答ありがとうございます。
挙動から入力部分のウィンドウの下にもう一個ウィンドウがあるように
見えたのですが、やっぱりそうだったのですね…。

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

> ・・・背景色と背景ブラシの色が違うなんて。
このほうが何を書いたらどこが変わるかわかりやすいかなぁと思ったので(^^;
実際には同じ色で塗りつぶします。
9285:2009/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デフォルトの名無しさん:2009/09/17(木) 21:03:24
そしてディフォルトじゃない色の設定にしている環境で阿呆を見ると。
あーフォントサイズもやばいかなw
94デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/09/25(金) 16:11:36
AfxSetAllocStop の使い方を超知りたいのに、MSDNに載ってないってどういうことよ^^;;;
96デフォルトの名無しさん:2009/09/25(金) 16:26:21
>>95
_CrtSetBreakAlloc() を呼んでいるだけだから、使い方はそっちを参照すればよろし。
97デフォルトの名無しさん:2009/09/25(金) 16:39:54
>>96
おぉ、すばらしい!載ってました!
サンクスです。^^
98デフォルトの名無しさん:2009/09/28(月) 12:34:57
SetTimer()でセットしたタイマを
残り時間を保持したまま一時停止や再開する方法はありますでしょうか。

別のダイアログをDoModal()で出して待っている最中も
WM_TIMERが発生するようなので、その間はタイマを止めておきたいのですが、
いったんKillTimer()で止めてしまうと待ち時間が戻ってしまい、
タイミングによっては延々と発生しない状態になってしまいます。
99デフォルトの名無しさん:2009/09/28(月) 13:02:50
>>98
もっとも簡単な方法は、DoModal() する前にある種のフラグをたててタイマー処理を回避し、
制御が戻ってくればタイマー処理を復帰させればいい。

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


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

   // ToDo...
}
10098:2009/09/28(月) 15:15:03
>>99
ありがとうございます。
やっぱりそういう方法になるのですね。

この場合もダイアログ表示のタイミングによっては
ToDoのところまで行かない状態が続いてしまいますが、
タイマでやっている以上は避けられないのかな。
101デフォルトの名無しさん:2009/09/28(月) 16:22:33
>この場合もダイアログ表示のタイミングによっては
>ToDoのところまで行かない

ダイアログが表示された時点( WM_INITDIALOG を処理する時点)で、
m_bDisableTimer = TRUE; にする。
102デフォルトの名無しさん:2009/09/28(月) 21:21:33
久々に見たが、>>74のアホ具合が際立っててワロタ
>>74は、ハヨー死ね、
103デフォルトの名無しさん:2009/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以内にダイアログを開きなおす、
とかやらなければ実行されるはず。
10498:2009/09/29(火) 09:28:18
>>101
>>103

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

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

うかつにメッセージボックスも出せないってことだったのか。
105デフォルトの名無しさん:2009/09/29(火) 09:36:41
残り時間を保持とか言ってるから根本的に勘違いしてる。
106デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/10/05(月) 21:40:23
>>107
CMenuをいじった後で、CMFCMenuBar::CreateFromMenuで戻してやると反映するけど。
109107:2009/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デフォルトの名無しさん:2009/10/06(火) 00:08:43
>>109
ほんと馬鹿は始末に負えないな。
ここまで教えてもらって、なんで自力で解決しようとしないのか。
できない馬鹿だからこそ質問を繰り返すんだろうが、そんな自分は屑だと自覚しろ。
111デフォルトの名無しさん:2009/10/06(火) 00:25:45
>>109

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

言っておくが、ポップアップメニューの項目を削除したいなら CMFCMenuBar をいじってもダメ。
CMFCPopupMenu::RemoveItem() を使う。
112デフォルトの名無しさん:2009/10/06(火) 00:35:19
でもわからんでもないな
ホントMFCって意味不明なとこあるものな
正直、はじめはなんかのサンプルをコピペして作っていくしかないと思うな
んでメッセージの流れとか覚えたらそういうのやっとチョボチョボ手が出せるようになる

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

このフレームワークだりぃよw
最近、VBでは楽にできるらしいエクセルなんかの機能を組み込め的要求がウゼェ
113デフォルトの名無しさん:2009/10/06(火) 02:06:36
>>112
ドキュメントも読めない、サンプルソースもおえないアフォは氏ねば?
ヘルプ読みで1日とか、調べ方もしらないんじゃその方がいいだろ。
114デフォルトの名無しさん:2009/10/06(火) 08:00:34
過去そうやって偉そうなこと言ってて
いざやらせてみると時間かかる人ばっかりだったからお前も似たようなもんだと思う(笑)
微妙なところで時間くうだろ?
115107:2009/10/08(木) 08:20:16
CWinAppEx::CleanState()を実行したら反映されました。
どうも、メニューカスタマイズ情報とか保持してるようですね・・・

みなさまありがとうございます
116デフォルトの名無しさん:2009/10/13(火) 22:10:53
>>112
オートメーション?
であれば、MFC関連ドキュメント探すよりVBAのヘルプ見た方が速いよ
117デフォルトの名無しさん:2009/10/14(水) 23:29:27
日本語版MSDN読んでる限りはMFCは躓きの連続だろうね。
英語版と比べると情報省きすぎ。^^;;;;;;;;;;;;;;;;;;;;;オコルゾ
118デフォルトの名無しさん:2009/10/15(木) 02:10:21
>>117
英語版読みなさい^^;;;;;;;;;;;;;
119デフォルトの名無しさん:2009/10/15(木) 11:30:20
たいていのことはソース読めばわかる
120デフォルトの名無しさん:2009/10/15(木) 21:02:37
ドキュメント・ビュー・アーキテクチャを使っている場合で、読み書きする
ファイルの拡張子を設定するには、どのような方法があるでしょうか?
121デフォルトの名無しさん:2009/10/15(木) 21:13:36
CDocument は、ドキュメントの新規作成、読み込み、保存のような標準の操作をサポートします。
フレームワークは、CDocument で定義されたインターフェイスを使って、ドキュメントを操作します。
122デフォルトの名無しさん:2009/10/15(木) 21:47:49
>>120

CWinApp::OnFileOpen() と CDocument::OnFileSaveAs() を
好きなようにオーバーライドすりゃいい。
123デフォルトの名無しさん:2009/10/15(木) 23:11:51
>>120
ワークスペース新規作成時のメニューをよく観察する事

>>122
CDocument::OnFileOpen()と CDocument::OnFileSaveAs()じゃね?
124122:2009/10/16(金) 00:11:13
>>123
>CDocument::OnFileOpen()

残念だが、こういうメソッドはない。
CDocManager::OnFileOpen() と書きたかったのかもしれないが、
これとて、ファイルオープンダイアログを表示して得られたファイル名を CWinApp::OpenDocumentFile() に
渡しているだけなので、CWinApp::OnFileOpen() 内でこの操作をすれば、回り道する必要は何もない。
125デフォルトの名無しさん:2009/10/16(金) 00:14:34
いつもダイアログベースでドキュメントクラスなんて使ったことねーけど
なんかいいことあるの?
126デフォルトの名無しさん:2009/10/16(金) 01:31:36
void PleaseReadExplanation()
{
  『ドキュメント/ビュー アーキテクチャが適さない場合もあります。たとえば、次のような場合です。
  ・C で記述された Windows 対応のアプリケーションを移植していて、アプリケーションにドキュメント/ビューのサポートを
   追加することよりも、移植作業自体を完了することの方が先である場合。
  ・簡単なユーティリティを作成していて、ドキュメント/ビュー アーキテクチャは不要と判断できる場合。
  ・元のコードで既にデータ管理とデータ表示が混在している場合。』
}

MFCのドキュメント・ビュー・アーキテクチャがいい悪いは別にして、
MVC的な手法のほうがコードがごちゃごちゃしなくていい場合も多々。
127デフォルトの名無しさん:2009/10/16(金) 06:21:17
CDocTemplate
アプリケーションはサポートするドキュメントの型それぞれに 1 つのドキュメント テンプレートを持ちます。
たとえば、アプリケーションがスプレッドシート (表計算) とテキストのドキュメントをサポートしていれば、
アプリケーションは、2 つのドキュメント テンプレート オブジェクトを持ちます。
それぞれのドキュメント テンプレートは、対応する型のすべてのドキュメントの作成、管理を行います。

ドキュメント テンプレートは、ドキュメントの型とともに使われるリソース
(メニュー、アイコン、アクセラレータ テーブルなど) の ID を保持します。
ドキュメント テンプレートは、またドキュメントの型についての付加情報を持つ文字列も持っています。
これらは、ドキュメントの型の名前 (例 : "Worksheet")、ファイルの拡張子 (例 : ".xls")、そしてオプションで、
ファイル マネージャや OLE などのユーザー インターフェイスで使われる文字列などを含みます。
128デフォルトの名無しさん:2009/10/16(金) 06:27:19
そんなアプリねーよーなぁ?w
VCだって設計微妙だしなw
ええーwそこでこの構造使うの〜?w的なw
129デフォルトの名無しさん:2009/10/16(金) 14:08:29
CMap<CString, LPCTSTR, CString, LPCTSTR> と CMapStringToString って、
やってることは結局まったく同じですか?
それとも、効率や安全などの面でこっちを使うべきとかありますか?
130デフォルトの名無しさん:2009/10/18(日) 17:49:00
MFCは慣れればすんごい便利なんだよな。ウチみたいに組み込み系で
UI付きツール作ってくれってときにね。いろんなC++のSDK使うから
C#とかも使えない。

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

みんなはどうしてる?有料でもいいんでビジネス用途で使える
アイコン集ってものはないかな?ぐぐればいろいろ出てくるけど
どうにも種類が足りなくて。
131デフォルトの名無しさん:2009/10/18(日) 18:28:44
>>130

種類は豊富なんだが、商用利用となると・・・。
http://www.iconspedia.com/
132デフォルトの名無しさん:2009/10/18(日) 19:40:45
具満タンとかイラ満タンとかなら商利用可能じゃよ。
133デフォルトの名無しさん:2009/10/19(月) 01:23:09
>>131
ここは知らなかったな〜。ありがと。

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

ttp://jp.infragistics.com/netadvantage/icons.aspx#Overview

ここのがなんかパッケージでなんかよさげなんだけど、サンプル見ると
同じアイコンにショートカット矢印みたいのが付いたのも含めて数に
カウントしてるみたいなんで、11000種類って書いてあっても実際には
1/10くらいなんだけろうなって感じがする。
134デフォルトの名無しさん:2009/10/20(火) 19:53:46
>>125
使い捨てツールを作る場合に便利だな。あんまし余計な事を考えなくて済む。
本体となるとさすがに自作ライブラリを優先するけど。
135デフォルトの名無しさん:2009/10/20(火) 22:10:55
2010でスタンダードエディションなくなるってさー。
今までupg15kで便利なMFCが使えてたけど
これからはupg55k必要。ますます絶滅方向だ。
136デフォルトの名無しさん:2009/10/23(金) 14:38:26
CClientDC dc(this)でクラスを作り、
デストラクタでリリースされるにもかかわらず、
this->ReleaseDC(&dc);としたらどうなりますか?

逆にリークの原因になったりしますか?
137デフォルトの名無しさん:2009/10/23(金) 15:23:09
試せばわかるので質問するよーなことではないと思うが、いちおう応えておく。

答はNO。
デストラクタでの ::ReleaseDC() が失敗するだけ。
138デフォルトの名無しさん:2009/10/26(月) 01:39:34
CDialogを親クラスに持つクラスで、OnPaint()以外の場所でdcを取得したいときはどうすればいいんでしょうか?
139デフォルトの名無しさん:2009/10/26(月) 02:07:56
GetDC()、ReleaseDC()。
CWnd::GetDC, CWnd::ReleaseDC
140デフォルトの名無しさん:2009/10/26(月) 02:23:37
CDC *pDC=CWnd::GetDC();
CWnd::ReleaseDC(pDC);
とするとコンパイルできるのですが、実行するとエラーが出てしまい困ってるんです。
141デフォルトの名無しさん:2009/10/26(月) 02:35:00
そのエラーの原因は別のところにある
142デフォルトの名無しさん:2009/10/26(月) 10:09:16
CWnd::GetDC()という書き方は・・・
スタティックな関数じゃないんだし、CDialogはCWndの派生クラスだし
そのままGetDC()と書けるだろう
143デフォルトの名無しさん:2009/10/26(月) 20:36:50
むすどん読んだ限りではGetDCはvirtualじゃないから
理屈としてはCWnd::GetDC()でも通るんじゃないか?
実験してないけど。w

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

通るよ。だから、あえてそこは指摘せずに「原因は別にある」と書いた。
145デフォルトの名無しさん:2009/10/27(火) 21:40:39
WS_EX_APPWINDOWの属性を持つウィンドウで、
最小化したときに右下では無く、左下にアニメーションさせることって可能?

なんかコツあるんですかね?
146デフォルトの名無しさん:2009/10/27(火) 21:58:52
それやってるのMFCなのか?
147145:2009/10/27(火) 22:02:06
ごめん逆
左下を右下への間違い
148145:2009/10/27(火) 22:11:10
>>146
MFCでいじっています。
MFCのCMainFrame::OnSize(UINT nType, int cx, int cy)にて、
苦戦中。
149デフォルトの名無しさん:2009/10/28(水) 08:38:29
SetWindowPlacementでできる
150デフォルトの名無しさん:2009/10/28(水) 09:53:22
タスクバーを右にしてるオレの環境だと左下にいかないけど
151デフォルトの名無しさん:2009/10/28(水) 09:54:33
そもそもタスクバーにある最小化したアプリの場所にアニメーションするな、Vistaだけど
152デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/11/04(水) 23:22:17
質問です、文字列を扱う場合MFC使いの皆さんは、 またはchar* なのでしょうか?
std::string は使わない派ですか?
154デフォルトの名無しさん:2009/11/04(水) 23:25:13
訂正です
質問です、文字列を扱う場合MFC使いの皆さんは、CString またはchar* なのでしょうか?
std::string は使わない派ですか?
155デフォルトの名無しさん:2009/11/05(木) 10:02:51
CString使う前提で設計されてる
156デフォルトの名無しさん:2009/11/05(木) 10:15:00
MFCを使う関数では大抵CStringで済ませるが、文字列処理をする関数ではstd::stringを使う。
157デフォルトの名無しさん:2009/11/05(木) 10:42:57
おいらはCStringでstlは使わないに統一 サイズ可変配列もCArray<>とかCTypedPtrArray<>とかで
まぁ個人で作ってるものだからだけど
158デフォルトの名無しさん:2009/11/06(金) 19:01:20
>>154です
レスサンクスです
stl を多用したtemplate 非MFCのライブラリがあるのですが
そのライブラリへCString を渡す場合、何か注意すべきところがあれば教えて頂けないでしょうか?
159デフォルトの名無しさん:2009/11/06(金) 20:01:16
渡さないほうが良い
stringへのらっぱー書く方が良い
160デフォルトの名無しさん:2009/11/06(金) 20:09:24
>>158
そのライブラリがconst char * を受け取るならそのまま渡していいと思う。
そのライブラリがstd::stringを受け取るなら、std::stringのラッバを用意した方がいい。
161デフォルトの名無しさん:2009/11/06(金) 21:07:22
>>154 です
ありがとう。
162デフォルトの名無しさん:2009/11/07(土) 08:11:44
>>154です。おはようございます、
ラッパークラスを意識して書いたことが無いので、勘違いをしている可能性があるので
駄目出し、及びご指導お願いします。
/**
* @brief  std::stringからCString(MFC)へ変換
* @date  2009/11/7
* @param[in] std::string str
* @return  str.c_str()
*/
class ConvertToCString {
public:
 ConvertToCString() : str_("") {}
 const CString operator()(std::string str) const {return str.c_str();}
private:
 std::string str_;
};
/**
* @brief  CString(MFC)からstd::stringへ変換
* @date  2009/11/7
* @param[in] CString cstr
* @return  static_cast<LPCTSTR>(cstr)
*/
class ConvertTostring {
 ConvertTostring() : cstr_("") {}
 const std::string operator()(CString cstr) const {return static_cast<LPCTSTR>(cstr);}
private:
 CString cstr_;
};
163デフォルトの名無しさん:2009/11/07(土) 10:43:16
おかしいな?
std::string str = "CString_convert";
CString cstr = ConvertToCString(str);

cstr = "std;;string_convert";
str = ConvertTostring(cstr);
こうすると
error C2440: '初期化中' : 'ConvertToCString' から 'ATL::CStringT<BaseType,StringTraits>' に変換できません。
何処が悪いのでしょうか?
CString cs("Hello");
std::string s((LPCTSTR)cs);

std::string ss("Hello");
CString ccs(ss.c_str());
これは動くので、簡単にできると思ったんですが・・・・
164デフォルトの名無しさん:2009/11/07(土) 15:08:39
>>163
一応、↓で出来るとは思うが、どうせ c_str() の呼び出しか LPCTSTR へのキャストで済むんだから、
わざわざクラスまで作る必要はないと思う。
コードを見た感じだと、Unicode文字セットを使っている訳ではないようだし。

class ConvertToCString {
public:
 ConvertToCString(std::string str) : str_(str) {}
 operator CString() const {return str_.c_str();}
private:
 std::string str_;
};

class ConvertTostring {
public:
 ConvertTostring(CString cstr) : cstr_(cstr) {}
 operator std::string() const {return static_cast<LPCTSTR>(cstr_);}
private:
 CString cstr_;
};
165デフォルトの名無しさん:2009/11/07(土) 18:33:27
>>164
ありがとう、やっぱり勘違いしていました^^;
>わざわざクラスまで作る必要はないと思う。
そうですね、自分もそう思います、ただ一点お聞きしたいのですが
ラッパークラスのイメージといいますか、認識はこのような感じでいいのでしょうか?
166デフォルトの名無しさん:2009/11/07(土) 23:34:49
お前は物事の一部だけを見て
すべてを分かったつもりになる香具師なのか?
167デフォルトの名無しさん:2009/11/07(土) 23:48:47
一を聞いて十を知る、それがわたしです。
168デフォルトの名無しさん:2009/11/07(土) 23:59:58
一を聞いて十を知ったつもりになる、の間違いでは?
169デフォルトの名無しさん:2009/11/08(日) 00:02:11
おまえは俺の何を知っているのだ。
170デフォルトの名無しさん:2009/11/08(日) 23:19:35
CWinAppExでレジストリを使わないようにする方法ある?
171デフォルトの名無しさん:2009/11/09(月) 10:14:27
自動生成されるコードの該当部分を消せばいい
172デフォルトの名無しさん:2009/11/09(月) 16:13:44
InitInstanceのあの1行さえ消せばIniファイルが使われるようになる
173デフォルトの名無しさん:2009/11/09(月) 18:08:05
余談でCWinAppExで追加されたCleanStateメソッドってのがある。
MFC Feature Packの影響で、レジストリ情報との差異による問題とかでてきたら、
コマンドラインとかで呼び出せる様にした方がいいかもね。

(それこそ、InitInstanceのあの1行の次の行あたりで)
174デフォルトの名無しさん:2009/11/09(月) 23:46:57
オーナードローでXPやvistaのような外観のボタンにするにはどうしたらいいでしょうか?
175デフォルトの名無しさん:2009/11/10(火) 00:24:48
 
176デフォルトの名無しさん:2009/11/10(火) 00:27:01
>>174
::OpenThemeData() でテーマハンドルを取得したのち、::DrawThemeBackground() でパーツを描画する。
177デフォルトの名無しさん:2009/11/10(火) 15:19:08
VC2005でMFCで画面つくってますが
ボタンを押したときにOnButtonで呼ばれる処理を
ボタン押し続けで連続処理させるいい方法ありませんか?
178デフォルトの名無しさん:2009/11/10(火) 15:34:31
ボタン関係のメッセージで可能
179デフォルトの名無しさん:2009/11/10(火) 15:55:05
>>178
具体的にどんか感じですか?
ボタン押し続けだと1回しかメッセージきませんよね??
連続にできるってことですか?
180デフォルトの名無しさん:2009/11/10(火) 15:58:53
タイマー起動して押してある間、適当なメッセージ送りつづけるとか。
181デフォルトの名無しさん:2009/11/10(火) 16:09:22
>ボタン押し続けで連続処理させるいい方法

(1) ボタン押す→WM_LBUTTONDOWNがボタンに飛んでくる。
(2) ボタン放す→WM_LBUTTONUPがボタンに飛んでくる。

→(1) のタイミングでタイマなりを動かして、一定間隔で親にWM_COMMANDを送る。
→(2) のタイミングでタイマを切る。

ボタンを押さえたままウィンドウが非アクティブになるとWM_LBUTTONUPは飛んでこないから
それなりに工夫は必要。


182デフォルトの名無しさん:2009/11/10(火) 16:21:20
タイマー等で自分で実装するしかないんですね
もう少しスマートな方法があるといいんですが…
183デフォルトの名無しさん:2009/11/10(火) 16:23:31
>>177
ttp://www.codeproject.com/KB/buttons/autorepeat.aspx
評価は微妙だし、非アクティブ対応も甘そうだし、キーボードにも対応していなさそうだけど、
>>181の実装例。
184デフォルトの名無しさん:2009/11/10(火) 16:32:43
>>183
見たところ、確かに非アクティブ対応は甘いね。
OnLButtonUp() では、ReleaseCapture() だけ実行すればいい。

その他の処理は WM_CAPTURECHANGED を捕まえて、そこで実行する。
185デフォルトの名無しさん:2009/11/10(火) 16:34:46
PeekMessageを使ってWM_LBUTTONDOWNのみNOREMOVEなループの中で処理したらどうだ?
割り当て可能なすべてのアイドル時間がボタンダウンのために処理されるから
ものすごい勢いだぞ^^
186デフォルトの名無しさん:2009/11/10(火) 17:14:52
押した時と離した時しかメッセージ発生しないから
タイマー嫌なら離したメッセージが来るまで永遠にループさせるしかないな。
187デフォルトの名無しさん:2009/11/10(火) 17:22:44
キーみたいにリピート設定できた気がするんだが忘れ散った
188デフォルトの名無しさん:2009/11/10(火) 17:30:10
ゲームマウスでも買って好きなように設定して使え。
189デフォルトの名無しさん:2009/11/10(火) 17:47:58
キーボードもハードの方でタイマー使ってるようなもんだしな
190デフォルトの名無しさん:2009/11/10(火) 18:33:10
MFCがサポートしてない機能はスレ違い
191デフォルトの名無しさん:2009/11/10(火) 23:06:24
Win32APIスレで聞いた方が良いと思う
192デフォルトの名無しさん:2009/11/12(木) 16:03:27
CListなどのPOSITION値って、
その値を取ったあとに追加や削除などの操作を行っても
当初の場所を指す値としてずっと有効のままなのでしょうか?

それとも、CWnd::GetDlgItem()などのように
どこかのタイミングで無効になるのでしょうか?
193デフォルトの名無しさん:2009/11/12(木) 17:25:25
動かさなければ同じ場所に留まり続けると思うが。GetDlgItem()もまた然り。
194デフォルトの名無しさん:2009/11/13(金) 09:34:20
> 動かさなければ同じ場所に留まり続けると思うが。

これはMSDNのどこかに明示されていますでしょうか?

「ブックマークとして使うと、リスト内の位置を保持できます」
という説明はあるのですが、要素を追加したり、
他の要素を削除をしても対象要素のPOSITION値自体は変わらないものなのか、
そのへんの記述を見つけられません。

> GetDlgItem()もまた然り。

CWnd::GetDlgItem()の説明には
「返されるポインタは、一時的なポインタです。
後で使用するために保存しておくことはできません。」
と書いてあり、実際、アイドル時だかどこかで無効になります。
ダイアログクラス内にDDXメンバとして実体があれば常に有効かもしれませんが。
195デフォルトの名無しさん:2009/11/13(金) 10:28:18
>POSITION 型の変数はリストのキーとして使います。

だからキーが使えなくなったらキーの意味ないだろ
心配ならソースついてるんだからMFCソース読めよ
196デフォルトの名無しさん:2009/11/15(日) 23:32:01
ダイアログベースで、ファイルを指定したフォルダにコピーするソフト
を作っています。(ウォークマンにmp3をランダムに転送するため)

SHFileOperationAを使ってコピーを行っているのですが、
ダイアログにコピー処理を書いているので、コピー中にダイアログの操作ができません。
コピーの時間が30〜60分と長いので、もどかしいです。


コピー中もダイアログの操作ができるようにするにはどうすればいいでしょうか?
(コピー用のスレッドを作って、そこでコピー処理をすればいい?
197デフォルトの名無しさん:2009/11/16(月) 00:17:39
yes we can
198デフォルトの名無しさん:2009/11/16(月) 12:31:39
これで君もワーカースレッド使いにレベルアップだ
199デフォルトの名無しさん:2009/11/16(月) 13:46:35
お茶くみとコピーばかりはもう飽きた!
200デフォルトの名無しさん:2009/11/16(月) 13:54:24
ボタンにビットマップを設定し、
ビットマップの白色に部分は透過させて表示したいので
ネットで調べた結果以下のプログラムを描いてみましたが
透過になってくれません
何か間違っていますか?正しい方法を教えてください
環境はXPのVS2005(MFC)です

COLORMAP cm;
cm.from = RGB(255,255,255);
cm.to = GetSysColor(COLOR_3DFACE);
m_bmp.LoadMappedBitmap(IDB_BITMAP, 0, &cm, 1);
m_btn.SetBitmap(m_bmp);
201デフォルトの名無しさん:2009/11/16(月) 15:35:40
お頼み申しageます
202デフォルトの名無しさん:2009/11/16(月) 17:18:10
自己対応メモ
VS2008でメニューのフォントが変だったので悩んだ。

http://takabosoft.com/20090812235606.html
にて書いている人がいたが、この人の方法だとOnCreateの時点ではフォント情報が取得できず、メニューが化ける。
http://blog.csdn.net/codewarrior/archive/2008/09/11/2911209.aspx
にて書いている方法なら正しく表示された。

MFCがBCGControlBarを使うようになったから、その対応も使えるのだな。
203デフォルトの名無しさん:2009/11/16(月) 17:23:33
正しく表示されたコード
m_wndMenuBar.Createのあとで、

LOGFONT logfont = {0};
::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &logfont, 0);
CMFCMenuBar::SetMenuFont(&logfont);
204デフォルトの名無しさん:2009/11/16(月) 18:55:37
>201
たまたま見つけたコードを意味もわからずいじって見たけど動きません。
だったら関わるだけ時間の無駄。
205デフォルトの名無しさん:2009/11/16(月) 20:18:38
>>200
そのコードは、透過ではなく特定の色をボタン表面の色に変更して載せてるだけ。
透過させたかったらCButton::SetImageListを使え。
これならVista以降の徐々に色の変わるようなボタンでも正しく透過で描画される。
206デフォルトの名無しさん:2009/11/17(火) 14:20:07
>>202
>この人の方法だとOnCreateの時点ではフォント情報が取得できず、メニューが化ける。

WINVER >= 0x0600 に設定して、そのプログラムを Vista 以前の環境で実行すると
::SystemParametersInfo( SPI_GETNONCLIENTMETRICS,,,) が失敗するというのは知ってる?
207デフォルトの名無しさん:2009/11/17(火) 21:32:59
>>196
そのとおり、コピー用スレッドを作れば良い。

また、一個一個が小さいコピーをたくさんやっているなら、
コピーの合間にメッセージループをはさむ方法もある。

メッセージループの具体形はぐぐれば出てくる。
208デフォルトの名無しさん:2009/11/18(水) 17:37:27
スタティックコントロールでCenterImageしてるんですが
その場合は\rつけても改行されてくれません
改行可能なCenterImageって方法ありませんか?
余白を設定できたりも考えましたが見つかりません
オーナードロー以外でなにかいい案ありましたら
お願いします
209196:2009/11/18(水) 22:16:48
なんとか、スレッドで処理させることで、コピー中もダイアログを操作できるようにできました。
ありがとうございました。


>>198
裏で処理をさせるのをワーカースレッドっていうんですね。


>>207
コピーの時にOS標準のコピーダイアログを出したかったので
SHFileOperationAを使ってのコピーです。
コピーは全部SHFileOperationAに任せますので、メッセージループは使いませんでした。
210デフォルトの名無しさん:2009/11/19(木) 19:13:35
MFCでも.NETアプリ動くようにしてくれればいいのにね。
211デフォルトの名無しさん:2009/11/19(木) 19:14:42
C#の方が簡単。どの環境でも動く…

MFCで作るのがいやんなるよ…
212デフォルトの名無しさん:2009/11/25(水) 19:14:32
リソースとして埋め込んだリッチテキストファイルをRichEditCtrlに読み込ませようとして苦戦しております
外部ファイルの読み込みに関してはEDITSTREAMのコールバック関数を設定して出来ましたが、リソースからRTF形式で読み込むのは難しいのでしょうか?
213デフォルトの名無しさん:2009/11/25(水) 19:33:37
LockResourceしてデータを取り出せば良いんじゃね?
214デフォルトの名無しさん:2009/11/25(水) 19:45:46
>>212

HRSRC hResInfo = ::FindResource( AfxGetInstanceHandle(), MAKEINTRESOURCE( IDF_RICHTXT), RT_HTML);
HGLOBAL hResData = ::LoadResource( AfxGetInstanceHandle(), hResInfo);
DWORD dwData = ::SizeofResource( AfxGetInstanceHandle(), hResInfo);

LPVOID lpData = ::LockResource( hResData);
CString strBuf( reinterpret_cast<TCHAR*>( lpData), dwData/sizeof(TCHAR));

m_wndRichEdit.SetWindowText( strBuf);
215デフォルトの名無しさん:2009/11/25(水) 20:17:37
エクスプローラでファイルを詳細表示したときにファイル一覧の上に「名前」「サイズ」といった
区切りが表示され、その表示幅を自分で変更できたりしますが、この機能は標準で付いてる
ものなのでしょうか?
使ってるヴァージョンはVisual C++.net Version2003です

やりたい事はテキストファイルの一覧を表示して、その幅を自分で調整したいと考えています。
_____________________
| 名前  |  電話番号  | 住所        |
| 山田   03-xxxx     東京都xxxx

最初から表示されているダイヤログエディタのコントロールを見ても使える様な物が
見つからないので、後から追加できるものなのかそれとも自分で作らなければならない
物なのでしょうか?
216デフォルトの名無しさん:2009/11/25(水) 20:54:40
手元にVS2008しかないからそれで説明すると、
そのコントロールは「List Control」という表記なっている。
プロパティでViewを「レポート」に変更すると、そのようなヘッダの付いた表示形式になる。
VS2003でも大体同じような感じだったと思う。
試しに張ってみて、黄・赤・緑とかのアイコンが表示されるならそれでほぼ間違いない。
そういえば、このアイコンはVC4から殆ど変わらないよなあ。
217デフォルトの名無しさん:2009/11/25(水) 21:13:19
>>216
List Controlに欲しい機能が付いておりました。
ただ追加した時点では色のアイコンがあるだけで、それらしい機能は
持っていないと思ってしまっていました。
レポートに変更したら上の方に区切りの付いたバーが表示されました。

ありがとうございます。
218デフォルトの名無しさん:2009/11/26(木) 19:42:26
>>213
>>214
返答が遅くなりましたが無事読み込ませることが出来ました、ありがとうございます
てっきりリッチテキストそのままだと読み込めないものだと思っていたので意外でした
219デフォルトの名無しさん:2009/11/26(木) 21:09:36
>>62
A:「作ったよ」
B:「ありがとう。こっちで作ったのにコピーさせてもらうね」
A:「ん、じゃとりあえずBの仕事が終わるまで待ってるね」

B:「ありがとう。終わったよ〜」
A:「ん、じゃこっちの仕事も終了するねw」
B:「じゃあAの仕事が終わったらこっちで作ったものは削除するね〜」
A:「こっちはもちっと仕事があるから終わったら削除するよ〜」
B:「あれ、いつの間にやらCStringのヒープニオイタモノガコワレテr」

orz

220219:2009/11/26(木) 21:10:39
(windows ce用アプリ)
221デフォルトの名無しさん:2009/11/26(木) 21:14:43
A:「作ったよ」
B:「ありがとう。こっちで作ったのにコピーさせてもらうね」

A:「・・・ああん、バカ。コピーするならポインタじゃなくて実体をコピーしてよん」
222デフォルトの名無しさん:2009/11/29(日) 10:43:51
なにそれ、エロい
223デフォルトの名無しさん:2009/11/29(日) 16:28:22
えっ
224デフォルトの名無しさん:2009/11/29(日) 18:00:15
えっ
225デフォルトの名無しさん:2009/11/29(日) 18:25:59
                    , - , -─ - 、
                   /:::::::::::::::::::::::::::::::::`‐、
                 /::::::::::::::::::::::::::::::::::::::::::::::\
                /::::::::::;:ィ::::::::';:::::::::::`ヽ::::::::::::::ヽ
                ,'::::::;':::/ l:::i::::::ヽ:::\:::::::';:::::::::::::::',
                  i:::l::::i:/  ';:::';:::::::',\::ヽ:::::::::::☆:::
                l::l::;イ__, ヽ、ト、::::ヽ、\:',ヽ〃l::::::
                  ';l l::l      ` ‐-   l:::::l::::::  こ、ここ、これ読んで下さいっ!
                 l::::l == 、    ,.ィ== l:::::l:::::::::
                 l:::::li //////////// l:::::l::::::::::
               , -ーl::::lヽ、  r....::´`ヽ /l:::;'> 、:::::
           , -ー 、'´`ヽl::::l// ` ‐-r‐ァ' ´ ,':/ー、  ';
            /  , ノ `   l::::l   li /ニく /⌒ヽ  \.i
        , └ '´  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ / ノ__  ',  ,イ:
      /     \ (⌒⌒)       ,  └ '´ /   i/
    /            ヽ / ー '       /  /,.イ
   ∠ __                    /  / /
          ̄ ̄ ̄ ̄ ̄─── -------/-‐'´ /
226デフォルトの名無しさん:2009/11/29(日) 18:52:05
      ィ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙t,
     彡;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ
     イ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r''ソ~ヾ:;;;;;;゙i,
     t;;;;;;;リ~`゙ヾ、;;;;;;;;;;;;;;;;;;;;ノ    i,;;;;;;!      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ゙i,;;;;t    ヾ-‐''"~´_,,.ィ"゙  ヾ;;f^!   / お嬢ちゃん、ここはMFCの相談室だぜ。
     ト.;;;;;》  =ニー-彡ニ''"~´,,...,,.  レ')l. <   その手紙をMFCで書いて出直しな。
     t゙ヾ;l   __,, .. ,,_   ,.テ:ro=r''"゙ !.f'l.   \_______________
      ヽ.ヽ ー=rtσフ= ;  ('"^'=''′  リノ                          
    ,,.. -‐ゝ.>、 `゙゙゙゙´ ,'  ヽ   . : :! /
 ~´ : : : : : `ヽ:.    ,rf :. . :.: j 、 . : : ト、.、
 : : : : : : : : : : ヽ、  /. .゙ー:、_,.r'゙: :ヽ. : :/ ヽ\、
  :f: r: : : : : : : : !丶  r-、=一=''チ^  ,/   !:: : :`丶、_
  : /: : : : : : : : :! ヽ、  ゙ ''' ''¨´  /   ,i: : : l!: : : : :`ヽ、
 〃: :j: : : : : : : ゙i   `ヽ、..,,__,, :ィ"::   ,ノ:: : : : : : : : : : : :\
 ノ: : : : : : : : : : :丶   : : ::::::::: : : :   /: : : MFC : : : : : : : :\
CPaneDialog派生させたオブジェクトをドッキングで使ってるんだが、
何故かボタンコントロールだけディスエーブルされるのは、仕様?バグ?
チェックボックスとかは全く問題ないんだが・・・・OnCreate()内でEnaqbleWindowやっても
効果無し。MFCのソース
バックグラウンドの更新も変だ・・・・ダイアログアイテムにちゃんとメッセージがポストされてない気がする。

2008で拡張されたMFCは便利だけど、どうも問題が多いし、肝心な情報が公開されてない
気がする。いい加減にM$は、開発環境ぐらいソースを全公開して欲しいよ。w
228デフォルトの名無しさん:2009/12/01(火) 09:02:48
>>227
ダイアログバーのときは、コマンドハンドラやON_UPDATE_COMMAND_UIが無いと
ボタンは無効になってたけど、それとは関係無いですか?
>>228
それだ!!ありがとうございます。ボタンの件はそれでした。
230デフォルトの名無しさん:2009/12/02(水) 14:23:20
ダイアログバーはメッセージマップがMainFrame側に実装される謎仕様とかあったな
231デフォルトの名無しさん:2009/12/04(金) 16:51:04
リストコントロールについて質問です。
レポート形式で使用しています。(VC2005)

(1)
リスト行数100で1ページ表示5行で
現在10ページ目の1番目の項目が選択されています。
この状態で一度全ての項目を削除し再入力して
新たに10ページ目の1番目の項目を選択させたいので
SetItemStateなどで選びなおしました。
しかし、10ページ目の1番目が選択されているようですが
表示は1ページ目になっています。
これを10ページ目にしたくてSetScrollPosをしましたが
うまくいかず、表示が変になります
どうやったら10ページ目の表示にできるのでしょうか?

(2)
拡張スタイルにLVS_EX_GRIDLINESを使用していますが
スクロールしたときにグリッドラインの残像が残ってしまいます
この残像を綺麗にけすのはどうしたらいいのでしょうか?
232デフォルトの名無しさん:2009/12/04(金) 17:01:29
>どうやったら10ページ目の表示にできるのでしょうか
CListCtrl::EnsureVisible()

>この残像を綺麗にけすのはどうしたらいいのでしょうか
ウチでは残らないけど? 何か変わったコトしてない?
233デフォルトの名無しさん:2009/12/04(金) 19:56:54
俺も昔LVS_EX_GRIDLINESで残像が残った記憶があるな。
市販アプリでも普通に残像が残っていたので、環境依存なのかもなあ。
昔なった時は、IE3.x時代のだからMSもまともにサポートする気無いのか、
という程度に思っていたのだけど。.NETだと自前で正しく描画していたし。
234デフォルトの名無しさん:2009/12/07(月) 09:06:09
>>231
2はOSのバグの問題と同じかも。

http://support.microsoft.com/kb/813791
昔ブックマークしていた場所で、ページ自体は無くなってるけど、
このアドレスでググると同じ問題の書き込みがいくつか残ってた。
235231:2009/12/08(火) 13:26:25
返事がおくれてすみません

1は232で解決しました
2は画面のプロパティのデザインで治りました
236231:2009/12/08(火) 14:11:12
来客が来て途中送信してしまいました。
改めて、

返事がおくれてすみません

1は232で解決しました
2は画面のプロパティのデザインの効果の
 次のアニメーション効果をメニューとヒントに使用するのチェックを外すと
 治りました。

ありがとうございました。
237デフォルトの名無しさん:2009/12/09(水) 15:29:32
CButton でクイックされたらそのまま凹んだまま、押しボタンのように動きにしたいのですが、
(もう一度クリックすると元に戻る) どのようなコードでできるでしょうか?
238デフォルトの名無しさん:2009/12/09(水) 15:45:59
>>237
チェックボックスのスタイルをBS_PUSHLIKEにすればいいかも
239237:2009/12/09(水) 18:10:21
>>238
ありがとうございます。 ためしてみますm(_ _)m
240デフォルトの名無しさん:2009/12/09(水) 22:48:44
エラーで困っているので助けてください。

error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2019: 未解決の外部シンボル "public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ) が
関数"public: virtual int __thiscall CprototypeApp::InitInstance(void)"(?InitInstance@CprototypeApp@@UAEHXZ) で参照されました

とエラーが出ていますが、原因がわからず困っています。

同じソースを別の人の環境で実行すると何もエラーも出ずにコンパイル・リンカーが通ります。
私も昨日までは通っていましたが、コーディングを設定ファイル?とかがおかしくなってしまったのか、
昨日のデータを使ってもリンカーエラーが出て困っています。

環境として、
自分   VisualStadio 2008 VC++(MFC)
別の人  VisualStadio 2008 VC++(MFC)

本当に困っています。何か知っている方がいらっしゃったら力を貸してください。
241デフォルトの名無しさん:2009/12/09(水) 23:02:46
出力ファイルを全て消してリビルドしる。
C/C++関係はそれで解決することが良くある。
242240:2009/12/10(木) 00:07:23
>>241
出力ファイルとは、Solution内のDebugフォルダ内のことをさすのでしょうか?
昨日から勉強を始めたため、ほんとにわからないことが多くてすみません。
243デフォルトの名無しさん:2009/12/10(木) 22:12:26
MFCにライブラリパスが通ってないんだろ。

ライブラリパスはソースではなく、コンパイラの設定だから
PCが変われば設定が違う可能性がある。

ちょっと2008が手元にないんでアレだが2005で見ると
ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ→ライブラリファイル
で設定できる。2008も似たようなもんだろ。

その設定をコンパイルが通るやつに合わせてみろ。
244デフォルトの名無しさん:2009/12/10(木) 22:23:09
何だマルチだったのか
245デフォルトの名無しさん:2009/12/11(金) 10:27:42
CWnd使ってVSの入力候補みたいな小窓を表示させたいんだけど、
popupで表示して小窓がアクティブ状態になると、メインウィンドウが
非アクティブ状態になってしまいます。小窓がアクティブ状態になっても
メインウィンドウがアクティブ状態を失わないようにするにはどうしたら良いですか?
246デフォルトの名無しさん:2009/12/11(金) 12:49:33
WS_EX_PALETTEWINDOW
247デフォルトの名無しさん:2009/12/11(金) 16:52:41
>>246
レスありがとう。ただ、WS_EX_PALETTEWINDOW指定しても、メインウィンドウが
非アクティブになってしまいます。何か他の設定が悪いのかも?

ダイアログベースで以下のような感じ

//CtestAppの中でウィンドウ登録
WNDCLASSEX wndclass;
wndclass.lpszClassName = L"TESTWINDOW";
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = DefWindowProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = m_hInstance;
wndclass.hbrBackground = ::CreateSolidBrush(::GetSysColor(COLOR_BTNFACE));
wndclass.lpszMenuName = NULL;
wndclass.hIcon = LoadIcon(IDI_APPLICATION);
wndclass.hCursor = LoadCursor(IDC_ARROW);
wndclass.hIconSm = LoadIcon(IDI_APPLICATION);
RegisterClassEx(&wndclass);

//ボタン押された時にウィンドウ表示
void CtestDlg::OnBnClickedButton1()
{
CRect cr;
GetWindowRect(&cr);
m_cwnd.CreateEx(WS_EX_PALETTEWINDOW, L"TESTWINDOW", L"", WS_VISIBLE | WS_POPUP, cr.left, cr.top, 50, 50, GetSafeHwnd(), NULL, NULL);
}
248デフォルトの名無しさん:2009/12/11(金) 19:16:14
戻してやればいいだけの気がするけど
MFCなんだからドッキングツールバーのソースでも読んで勉強すればいいよ
249デフォルトの名無しさん:2009/12/12(土) 01:15:06
ツールウィンドウで作るんじゃなかったっけ?
250デフォルトの名無しさん:2009/12/12(土) 01:42:47
#define WS_EX_PALETTEWINDOW   (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
251245:2009/12/12(土) 09:54:12
とりあえずソース読んで勉強してみます。レスしてくれた人たちありがとう。
252デフォルトの名無しさん:2009/12/12(土) 10:12:06
メインウィンドウは非アクティブでいいんじゃね?
手持ちのアプリの動作でいうと
VC6はアクティブがどうであろうとメインもツールウィンドウもアクティブになりっぱなしでおかしい
VC2008はアクティブによってメインもツールウィンドウもちゃんと切り替わる
ってなってる

俺もツールウィンドウ作ったときにメッセージのやり取りがおかしくなったときに
VC6みたいにアクティブになりっぱなしになったことあるから
VC6ってバグりっぱで放置してあるだけだと思う
253245:2009/12/12(土) 12:39:18
>>252
確かにVS2008だとアクティブ状態が移動しますね。ただ、作りたいのがツールウィンドウではなく、
VS2008で例えると、入力候補ウィンドウみたいなヤツなんです。これポップアップで出ますが、
フォーカスが移っても、親ウィンドウのアクティブ状態は変化ないですよね。

248さんが言ってた”戻せばいい”というのをヒントに、親ウィンドウの
WM_NCACTIVATEとWM_ACTIVATEAPPで細工したら希望通りの動作になりました。
254デフォルトの名無しさん:2009/12/12(土) 13:11:45
WS_EX_NOACTIVATEは使えないか?
255デフォルトの名無しさん:2009/12/15(火) 15:00:48
どなたかXPでマルチモニタ環境のあるかたに試していただきたいのですが、

VS2005やVS2008でダイアログベースのプロジェクトを作り、
標準で用意される2つのダイアログ(メインとバージョン情報)に
「サイズ変更枠」と「最大化ボタン」のプロパティをセットしてビルド。

デバッグ開始し、メインダイアログを最大化。

特に問題無い。

そのままバージョン情報ダイアログを出してこっちも最大化。

セカンダリモニタにほんのちょっとウィンドウ枠がはみ出る。

という現象が発生するのですが、
他のかたの環境でも発生しますでしょうか。
256デフォルトの名無しさん:2009/12/15(火) 19:46:45
特に問題無い
257デフォルトの名無しさん:2009/12/15(火) 20:26:08
>>256
あれ、発生しませんか。
社内ではXPマシンすべてで発生するんです。
同じモニタだから、ハードウェア的な問題なんだろうか。
ありがとうございます。
258デフォルトの名無しさん:2009/12/16(水) 18:28:00
画面端同士で同じ場所参照してそうな仕様だな
それだと他のウィンドウでも同じ現象が出るか
259ぷれ:2009/12/16(水) 23:51:16
はじめまして、画像ビューアを作ろうと思っているのですが
CWinthreadにCScrollView派生クラスのハンドルを渡してスレッド側から、
CScrollViewのOnPrepareDC(&dc)をコールすると以下でエラーが発生します。

CWnd::AssertValid()
 CHandleMap* pMap = afxMapHWND();
 ASSERT(pMap != NULL);//<--ここでエラー

どうすれば問題解決するでしょうか。
よろしくお願いします。(関連するソースは以下)

CThreadxxx ::CThead(HWND hwnd)
{
m_pMainWnd = AfxGetMainWnd();
m_pView = (CScrollViewxxx*)CWnd::FromHandle(hwnd);
}

int CThreadxxx ::Run()
{
 while (WaitForSingleObject(m_hEventKill, 0) == WAIT_TIMEOUT){
  if(m_hWndView){
   CClientDC dc(m_pView);
   m_pView->OnPrepareDC(&dc);
   m_pView->Render(&dc);//計算描画処理(重い)
  }
 }
}
260デフォルトの名無しさん:2009/12/17(木) 08:52:31
MFCのドキュメント・ビューアーキテクチャ関数はワーカースレッドから呼ぶとエラーになるものあるんだよね
ワーカースレッドからはユーザーメッセージ定義してメッセージハンドラで凌いでた
SendMessage()で渡せばメインスレッドで処理されて帰ってくる
261ぷれ:2009/12/17(木) 09:20:35
>>269回答ありがとうございます。
メッセージで処理してみましたが遅くなってしまいました。
早くする方法はありますでしょうか?ソースは↓みたいな感じです。
int CThreadxxx ::Run()
{
 if(m_hWndView)
 {
  PostMessage(m_hWndView,WM_USER_START_RENDER, 0, 0);
  if(WaitForSingleObject(m_hEventEndRender,10000) == WAIT_TIMEOUT));
  {
   return ;
 }
}

BOOL CScrollViewxxx::PreTranslateMessage(MSG* pMsg)
{
 CDC *pDC = NULL ;
 CClientDC dc(this);
 switch (pMsg->message){
  case WM_USER_START_RENDER:
  OnPrepareDC(&dc);
  SetOrigin(&dc);
  Render(&dc);
  //m_pThreadRender:スレッド
  SetEvent(m_pThreadRender->m_hEventEndRender);
  break;
 }
}


262デフォルトの名無しさん:2009/12/17(木) 10:25:02
Render()はワーカースレッドに置いたままでいいんじゃないのか?
こんなイメージ

int CThreadxxx::Run()
{
while(WaitForSingleObject(m_hEventEndRender,10000) == WAIT_TIMEOUT)){
if(m_hWndView){
CClientDC dc(m_pView);
m_pView->SendMessage(WM_USER_START_RENDER, 0, (LPARAM)(CDC*)&dc)) //制御待たせるためにSendMessage
  m_pView->Render(&dc);
}
}
}

LRESULT CScrollViewxxx::WindowProc(UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch (pMsg->message){
  case WM_USER_START_RENDER:
{
ASSERT_KINDOF(CDC, lParam);
CDC* pDC((CDC*)lParam);
if(pDC->GetSafeHdc() != NULL) {
OnPrepareDC(pDC);
SetOrigin(pDC);
}

return 0;
}

return CView::WindowProc(msg, wParam, lParam);
}
263ぷれ:2009/12/17(木) 11:33:51
>>262ありがとうございます。
早速試してみます。
264ぷれ:2009/12/17(木) 12:58:42
>>262 試してみましたがまだ遅いです。メッセージ処理を改良すべきだとは思うのですが何か案はございますでしょうか?
試したソースはこんな感じです。
int CThreadxxx::Run()
{
if(m_hWndView)
{
CClientDC dc(m_pView);
m_pView->SendMessage(WM_USER_START_RENDER, 0, (LPARAM)(CDC*)&dc);
CRenderInfo renderInfo;
m_pView->Render(&dc);
SetEvent(m_hEventStop);
}
}

LRESULT CGdsView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
CDC* pDC = (CDC*)lParam;
switch (message)
{
case WM_USER_START_RENDER:
ASSERT_KINDOF(CDC, pDC);
if(pDC->GetSafeHdc() != NULL)
{
OnPrepareDC(pDC);
SetOrigin(pDC);
}
return 0;
default:
break;
}
return CScrollView::WindowProc(message, wParam, lParam);
}
265ぷれ:2009/12/17(木) 13:01:47
↓見たいな処理をどこかに入れ込めばいいと思うのですがどのタイミングに埋め込むべきか
判断に迷ってます。
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if(msg.message == WM_USER_START_RENDER)
{
CDC* pDC = (CDC*)lParam;
ASSERT_KINDOF(CDC, pDC);
if(pDC->GetSafeHdc() != NULL)
{
OnPrepareDC(pDC);
SetOrigin(pDC);
}

}else{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
266デフォルトの名無しさん:2009/12/17(木) 20:12:13
ワーカースレッドでDIBを作らせれば済む話じゃないの?
何か無駄に話を難しくしているように見えるぞ。
267デフォルトの名無しさん:2009/12/19(土) 11:16:15

クラス A
CListBox m_listA

クラス B
CListBox m_listB

クラス C
fnCommon()


クラスA、クラスBの処理が共通なので、
クラスCの関数を共通処理関数としようと思っています・

クラスCの関数に、クラスAのm_listAなどのメンバを引数に渡せなくて
困っています。どうやればいいでしょうか?


クラスAの処理
{
クラスC: :fnCommon( m_listA );
}

クラスCの処理
クラスC::fnCommon( ClistBox a)
{
a.set・・・();
}

ではうまくいきませんでした、どうすれば別のクラスのメンバを引数として渡せるのでしょうか?
最近はじめたばかりでググっても解決策が見つかりません。
よろしくお願いします。
268デフォルトの名無しさん:2009/12/19(土) 12:11:08
>>267
ポインタを渡す、もしくは、CListBoxの派生クラスを作ってそこで処理する。
ClassC::fnCommon(&m_listA);
クラスC::fnCommon(CListBox* a)
{
a->set・・・();
}

CMyListBoxクラス内にfnCommon関数を宣言・定義
クラスAの処理
CMyListBox m_listA;
m_listA.fnCommon();
Windowsのコントロールって複数のウィンドウで同時に共用できないんでしたっけ?
具体的にはCPropertySheetで作成したコントロールを複数のCPropertyPageに貼りつけて
共用するとか。これができると、CListCtrlやCTreeCtrlやカスタムコントロールで便利なもんで・・・・
試しにやってみたら1枚目には貼れるのですが、2枚目以降は駄目でした。(表示されない。エラー
は無し。)
270デフォルトの名無しさん:2009/12/19(土) 22:05:05
コントロールはただのウインドウだからどこにでも張り付くし、後から移動することも可能。
271デフォルトの名無しさん:2009/12/19(土) 22:20:50
左側のツリーで右側のプロパティページを切り替えるのはよくあるな
>>270 >>271
サンクス。OnSetActive()の段階でコントロールにSetParent()したらイベントが行く様に
なったんだけど、開始ページ以外のCTreeCtrlの文字が表示されない。(マウスクリックすると
表示される。)コントロールにUpdateWindow()などしても更新されないから、更新イベントが
CTreeCtrl内のコントロールに行き渡ってないみたいだ・・・・
273268:2009/12/21(月) 00:01:39
>>267
親切にありがとうございました。
無事解決しました。
274デフォルトの名無しさん:2009/12/23(水) 00:06:53
MFC SDI のプログラムで、このように取得したドキュメントの文字を、CString 型の変数に取得し、
配列へ格納したいのですがどうしたらできますでしょうか
CxxxDoc *pDoc = (CxxxDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
275デフォルトの名無しさん:2009/12/23(水) 00:52:33
>このように取得したドキュメントの文字を

どのように取得したって?
取得できてないじゃん。
276デフォルトの名無しさん:2009/12/23(水) 01:06:20
>>257
>>254です、
一応これでエディットビュー のドキュメント(テキスト)が
取得できるようになったのですが、このままでは256 文字がべたで配列に代入されてしまいます
一行づつ取得して、配列へ格納するにはどうしたらいいでしょうか?
CxxxDoc *pDoc = (CxxxDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
void* P = m_viewList.GetHead();
char buf[_MAX_PATH];
CEdit* pE;
pE = (CEdit*) P;
pE->GetWindowTextA((LPTSTR)buf,_MAX_PATH);
277デフォルトの名無しさん:2009/12/23(水) 05:42:00
一行づつ切り分けて取得して、配列へ格納する。Enterの文字列で切り分ければ良い。
278デフォルトの名無しさん:2009/12/23(水) 08:41:46
1行の読み込みを、
pE->GetLine(i, (LPTSTR)buf);
として、得ることにしたのですが、当然のことながら、改行コード以降にゴミが入っています
sizeof(buf); とかstrlen(buf); でサイズを得たいのですが上手く行きません
目的のデータ(文字列+改行コード)を得るコードを教えてもらえませんか?
279デフォルトの名無しさん:2009/12/23(水) 09:11:09
CEditのメンバ一覧に目を通す時間すらないとは大変ですね。
あと、CEdit::GetLine(nIndex, lpszBuffer)は
lpszBufferの中身の先頭WORDにバッファ長が入っていることが前提だ。
280デフォルトの名無しさん:2009/12/23(水) 09:55:09
CEditはCString と相性いいから簡単に扱えたはずだけど
わざわざ手間がかかるやり方でやってないか?
行数がとてつもなく多いとか、効率考えて普通と違う方法でやろうとしてるならいいけど
281デフォルトの名無しさん:2009/12/23(水) 10:43:27
どうもみなさん、thxですこんな感じでできましたが、もう一息です、pE->ReplaceSel(result.c_str());で置換をしているのですが
置換後の文字列を置換前の文字列の位置に上書きしたいのですが、今のままだと、置換前、置換後の文字列両方表示されています、どこがおかしいでしょうか?
>>280
CString を使いたいのですが、<boost/regex.hpp> が使いたいので、文字列は*char かstd::string の方がベターなのです

char szBuf[256];
const int nRow = pE->GetLineCount();
for(int nIdx = 0; nIdx < nRow; ++nIdx) {
// テキストデータ取得。
const int iSize = pE->GetLine(nIdx, szBuf, sizeof(szBuf) - 1);
szBuf[iSize] = '\0';
reg_ex = "<.*?>";
result = re.RegularTagReplace(szBuf, reg_ex);// <boost/regex.hpp> でHTML タグを削除している
const int end = pE->GetWindowTextLength();
pE->SetSel(end, end); // 一番最後に持ってくる
result += "\r\n";
pE->ReplaceSel(result.c_str());
}
282デフォルトの名無しさん:2009/12/23(水) 12:22:33
いちいち質問しないと解決しない問題とは思えないが
283デフォルトの名無しさん:2009/12/23(水) 14:09:55
pE->SetSel(0, 0);
とかやってみるができないorz
284デフォルトの名無しさん:2009/12/23(水) 15:18:25
全然関係ないけど、行単位でTAGを取り除く意味あるのか?
HTMLは特別な場合を除いて改行を無視するから
TAGのカッコの途中で改行が入ったりしてる場合もあるわけだが
285デフォルトの名無しさん:2009/12/23(水) 16:37:33
>>284
行単位でタグを取り除くのには、他に目的があります、改行の必要な部分は、あとで
<br> をつけます、しかし上手くいかんな・・・
286デフォルトの名無しさん:2009/12/23(水) 18:47:25
>>281です
他で聞いてみます。
287デフォルトの名無しさん:2009/12/27(日) 23:43:33
質問です。

いろんなファイル形式の画像ファイル(特に48bitカラー)を読み込んで、データストリーム
(ピクセルごとのRGB情報)を取得したいと思ってます。

いまはGDI+のImageクラスで画像ファイルを開いて、Image.SaveでIStreamにデータ
ストリームをコピーした後、IStream.Writeでunsigned char[]にコピーするというコードを
試しているんですが、IStreamからunsigned char[]へのコピーがうまくいきません。
Writeの返り値はOkになってるし、コピーされたバイト数も正しいのに、配列は全て
0が入っているという状態です。

考えられる原因は何でしょうか?
あるいはもっと確実な方法があれば、お教えいただけると助かります。
288デフォルトの名無しさん:2009/12/28(月) 00:31:42
>>287
IStream::Writeは、IStreamに書き出す、という意味だぞ。
取り出すならIStream::Read。引数の型で気付かなかったのか?
289デフォルトの名無しさん:2009/12/28(月) 01:01:41
>>288
ありがとうございます。
明日試してみます。
290デフォルトの名無しさん:2009/12/30(水) 01:43:31
VisualStudio2010のMFCってもう仕様変わらなそうかな。
主力は.netだろうしRCやRTMに向けてはそっちの調整だろうな。
リボンアプリの案件が来てて困ってる。2010はデザイナが付いてるし、
βで作っても問題なさそうな気がする。そう思いたいだけなんだけどね。
納期は5月だからβで作ったのを引き継げればいいのだが・・・。
291デフォルトの名無しさん:2009/12/30(水) 01:47:52
>リボンアプリの案件

需要あんのか
292デフォルトの名無しさん:2009/12/30(水) 02:02:55
OfficeはOffice2007、2010で始めて触りましたって人や
Win7が始めて使ったWindows(ペイントなんかがリボンアプリ)ですって人が大勢を占めるようになったら
需要としては結構出てきそう。
市販アプリでもPerfectDiskなんかは既にリボンUI採用してるね。
293デフォルトの名無しさん:2009/12/30(水) 02:10:15
見た目の問題っぽい。客先は来年末までにWindows7にするみたいだし、
Officeも2010にもするらしいから、見た目を同じにしたいらしい。
個人的には今までのツールバーみたいに、他の処理と無関係なアイコンが
並ばなくていいという点だけは評価できる。ツールバー消したりとか
しなくていいし。機能別にタブみたいなグループでまとめちゃえばいいし。
ただ無駄に高さを取るのがどうしても馴染めない。
294デフォルトの名無しさん:2010/01/02(土) 20:34:39
馬鹿は使うな!

以上!
295デフォルトの名無しさん:2010/01/05(火) 08:20:54
VC6から2008に以降したら文字列でえらい苦労した。
出来上がったソフトを他のPCで動かそうとしたら起動せず、
イベントログでSideBySideエラーになっていた。
他の人に送ったらマニフェストがどうたらこうたらとか・・・
わけわかんないのでもう一台のPCでコンパイルしようとしたらエラーが出る。
そうか、ExpressにはMFCが入っていないんだね。

最近、自分が浦島太郎に思えることが多いですよ・・・
296デフォルトの名無しさん:2010/01/05(火) 11:41:56
MFC付きの有料のを買えばいいだけですよ。
297デフォルトの名無しさん:2010/01/05(火) 19:12:30
VC6のランタイムはXP以降ならOS標準で入っているからな。
まあ2008の場合はWinSxSへのコピーのみでマニフェストでアクセス、
という今までと違う変則的な方法だから解り難くてもしようがない。
不評だったのか、2010ではシステムフォルダにもコピーされる仕様に戻るらしい。
298デフォルトの名無しさん:2010/01/06(水) 09:16:31
VC2008でMFCダイアログベースなどのプロジェクトを作ると、
メッセージマップのところに
//}}AFX_MSG_MAP
というものが入っているのですが(閉じるほうのみ)、
これってVC6などでClassWizardのために入っていたものですよね?
VC2008でもなにか意味のあるものなのでしょうか?
それともテンプレートの残骸?
299デフォルトの名無しさん:2010/01/06(水) 10:02:34
ISAPIフィルタでレスポンスの内容を編集したく
OnSendRawData()ではレスポンスを返さないようにするために
pRawData->cbInData = (DWORD)0;
pRawData->cbInBuffer = (DWORD)0;
として
OnEndOfRequest()で
pfc->WriteClient()
で編集した内容を返そうとしています。
しかし、OnSendRawData()で
pRawData->cbInData = (DWORD)0;
pRawData->cbInBuffer = (DWORD)0;
を入れるとOnEndOfRequest()でWriteClient()をしてもレスポンスが
返されません。
なぜこのような結果になるのでしょうか?
300299:2010/01/06(水) 10:11:46
わかりました。
WriteClient()を呼ぶとOnSendRawData()が発生するんですね。
301デフォルトの名無しさん:2010/01/25(月) 14:38:28
CInternetSessionのメンバの
GetFtpConnectionとかでタイムアウトを設定できないでしょうか?

302デフォルトの名無しさん:2010/01/25(月) 23:15:39
試したことないから知らんけど設定自体はあるね
303デフォルトの名無しさん:2010/02/03(水) 01:38:21
ミューテックスオブジェクトについて、質問です。
環境は、VC6でMFCダイアログベースです。

2つのアプリケーションAとBを作っているのですが、
以下の処理をそれぞれ追加します。
A:ボタン押下でBをミューテックスオブジェクトを使って排他的に呼出す。
B:ミューテックスオブジェクトを保持。

@Aにあるボタン押下でBだけは呼出せたのですが、ミューテックスオブジェクトを
使って排他的な呼出し方にする方法が分かりません。
ABでミューテックスオブジェクトを保持する方法が分かりません。

自アプリケーション の2重起動禁止の場合、CreateMutexを使っていたのですが、
上記の場合、AとBをどのようにすればいいでしょうか?どなたか宜しくお願いします。
304デフォルトの名無しさん:2010/02/03(水) 08:01:24
>>303
Aからボタン押下でBを起動、
ただし以前Aから起動した事のあるBが残っている場合は
新たに起動はしない、ってことでOK?
そういうのだったら、B起動時にそのプロセスハンドルを残しておいて、
次のボタン押下時にGetExitCodeProcessで以前起動したプロセスが終了したか確認、とか。
手動でならBを複数起動できる、という必要性がないならBの二重起動禁止で十分だけど。
305デフォルトの名無しさん:2010/02/03(水) 10:08:47
CStringArrayのシリアライズ化で、ファイル保存はできたのですが、
これを読み込んでCStringArrayに再格納できませんでした。どのようにすればいいのでしょうか?


//シリアライズ
CStringArray aBuf;

aBuf.Add( _T("aaa") );
aBuf.Add( _T("bbb") );
aBuf.Add( _T("ccc") );

CFile f;
BOOL bRet = f.Open( _T("hoge.txt"), CFile::modeCreate | CFile::modeWrite );
if( bRet == FALSE) {
return true;
}
// アーカイブを作成
CArchive ar( &f, CArchive::store );
TRY {
aBuf.Serialize( ar );
}
CATCH_ALL(e) {
ar.Close();
f.Close();
return 0;
}
306デフォルトの名無しさん:2010/02/03(水) 11:52:32
>>305
読み込むほうのソースを出さないと誰もわからない。
307305:2010/02/03(水) 15:41:45
>>306

失礼しました。
サンプルをみて書いたのですが、以下のコードになります。


try{
CStringArray m_saMyArray;
CFile in(_T("hoge.txt"), CFile::modeRead);
CArchive ar(&in, CArchive::load);
CString buffer;
m_saMyArray.SetSize(0);
for(int i = 0; ar.ReadString(buffer); i++) {
m_saMyArray.Add(buffer);
}
ar.Close();
in.Close();
} catch(CFileException e)
{
AfxMessageBox(_T("Read Error !!"));
}

ar.ReadString(buffer)で bufferにすべてのデータが格納されました。
根本的に、読込み方法が間違っているのでしょうか?
ご教授おねがいしますm(_ _)m
308デフォルトの名無しさん:2010/02/03(水) 16:25:07
>>307
CStringArray::Serialize()で保存したものは
CStringArray::Serialize()で読み込まないとダメ。

> CString buffer;
> m_saMyArray.SetSize(0);
> for(int i = 0; ar.ReadString(buffer); i++) {
> m_saMyArray.Add(buffer);
> }

m_saMyArray.Serialize(ar);
309305:2010/02/03(水) 18:14:02
>> 308

ありがとうございます(><
ためしてみます。。
310303:2010/02/05(金) 21:42:09
>>304
GetExitCodeProcessを使ってやってみます。
ありがとうございました。
311デフォルトの名無しさん:2010/02/06(土) 13:24:05
CToolBarのボタンのイメージはリソースからしか設定できないみたいなんですが、
iconファイル(拡張子ico)を読み込んでイメージを設定する方法ってありますか?
サイトアイコン(favicon.ico)をダウンロードして、動的にツールバーボタンにイメージ登録するようなことがやりたいのです。
312デフォルトの名無しさん:2010/02/06(土) 14:06:52
>>311の件の自己レスです。
icoファイルから読み込む方法は下記のようにできることが分かりました。

HICON hIcon;
ICONINFO iconinfo;
ExtractIconEx(_T("favicon.ico"), 0, NULL, &hIcon, 1);
GetIconInfo(hIcon, &iconinfo);
m_toolbar.SetBitmap(iconinfo.hbmColor);
DestroyIcon(hIcon);

しかしこれでは1種類のアイコンイメージしか使えません。
複数のイメージを使いたい場合は、横方向に連結した1個のbitmapを作る必要があるようです。
どうやって連結するかはまだ分かりませんが、ものすごい不便ですね。
313デフォルトの名無しさん:2010/02/06(土) 15:36:47
コントロールは汎用的に作られてるから
気に入らなかったら自作すればいい。
314デフォルトの名無しさん:2010/02/06(土) 15:45:38
TBBUTTON配列受け取るAddButtons()とかなかったっけ?CToolBarCtrlだったか?
315デフォルトの名無しさん:2010/02/06(土) 18:02:15
>>314
CToolBarCtrlというのがあったんですか。
これだとAddBitmap()で1個ずつ追加できそうですね。
ありがとうございました。
316デフォルトの名無しさん:2010/02/08(月) 16:28:36
C#のsplitContainerなどに相当するコンテナクラスはC++(MFC)にありますでしょうか?
317デフォルトの名無しさん:2010/02/08(月) 16:54:48
ウインドウが表示されてるかどうかわかる方法ありますか?
IsShowみたいなのが欲しいです
CWndには無いようです
318デフォルトの名無しさん:2010/02/08(月) 16:59:38
>>317
CWnd::IsWindowVisible
319316:2010/02/08(月) 17:05:26
自己解決しました
WTLにありますね
320317:2010/02/09(火) 09:49:26
>>318
ありとがう
できました
321デフォルトの名無しさん:2010/02/12(金) 05:57:29
MFCで、
CWnd;;OnSysKeyDonwではAltのみのキーも拾うのに
CWnd::OnSysKeyUpでは拾わないのはなぜなんだぜ・・・

AltのみのUPイベントを拾うにはどうすればいいですか、
教えてエロい人
322デフォルトの名無しさん:2010/02/12(金) 09:31:03
あーPreTranslateMessageか・・・
いきなりの質問ですが・・・
Visual Studio 2008の拡張MFCで、CDockablePaneのタブ付きウィンドウ内に
上下分割ウィンドウ(VisualStudioのClass Viewみたいな)って作れます
か?タブウィンドウにする前にドッキング出来ちゃえば簡単に作れそうな
気はするのですが、DockToWindow使ってみても駄目でした。

結局ドキュメントの更新無し=不備なままで2010が出そうですね。
何だかいい加減だなぁ。
324デフォルトの名無しさん:2010/02/14(日) 12:00:38
>上下分割ウィンドウ(VisualStudioのClass Viewみたいな)って作れますか?

作れる。ただし自前。
325デフォルトの名無しさん:2010/02/18(木) 22:35:50
google-perftoolsをMFCから利用できる方法はないだろうか。
new、deleteが早くなって便利そうなんだけど。
ttp://d.hatena.ne.jp/kiwamaru/20090127/1233044005
を参考にreleaseでは機能するみたいだけど、debugでは
#define new DEBUG_NEW
を外してもダメみたい。
326デフォルトの名無しさん:2010/02/20(土) 12:17:01
ダイアログベース、オーナードローでボタン描画してるんですが
構成プロパティ - 文字セットが「Unicode文字セット〜」
だとOnDrawItem関数でlpDrawItemStruct->itemActionが
ODA_SELECTを返してこない理由わかる人いますか?

OS:Xp,Vista,Windows7
環境:vs2008
.Net FrameWork:2.0〜3.5
以上の環境で再現できました。
327デフォルトの名無しさん:2010/02/20(土) 13:27:36
>>326
Comctl32の6.0以降とそれ以前で挙動が違う、というのが正解。
stdafx.hを見てみればそのからくりが分かる。
328326:2010/02/20(土) 16:50:43
>>327
stdafx.h見てみました。
そういうことだったのですね。
ありがとうございました。
329デフォルトの名無しさん:2010/02/24(水) 11:31:37
関数ではなくクラスをエクスポートするMFC標準DLLを作る場合、
AFX_MANAGE_STATE(AfxGetStaticModuleState())は
エクスポートされたクラスのすべてのメンバ関数に入れることになるのでしょうか?
メンバ関数の中でダイアログなどのリソースを使う箇所があります。

クラス自体はMFCのクラスを派生させたものではないので、
拡張DLLではなく標準DLLを選びました。
330デフォルトの名無しさん:2010/02/25(木) 19:13:15
すみません。
CWndを継承して新しく定義したウインドウをCDialogの子ウインドウとして作成しましたが、
ウインドウに対するキー入力メッセージが正常に送られません。
このウインドウをクリックしてから矢印キーを押すと、
親のCDialogに一緒に貼り付けたリストボックスにフォーカスが移って選択が上下してしまいます。
新しいウインドウのイベント関数を色々オーバーライドして調べると、矢印キーを押すと同時に何故かKillFocusが呼ばれていました。
何が原因でしょうか。
331330:2010/02/25(木) 20:40:07
試行錯誤の結果、OnGetDlgCode()でSetFocus()を呼び出すことで解決できました。
なんかよくわかりませんが、解決しました。
失礼しました。
332デフォルトの名無しさん:2010/02/25(木) 21:01:32
>>331
OnGetDlgCode()まで調べたのなら、そこでSetFocus()なんて強引なことをせずに、
DLGC_WANTARROWS や DLGC_WANTCHARS を設定すればよいと思う。
333デフォルトの名無しさん:2010/02/25(木) 21:34:55
>>332
クリック時に何が呼び出されるか手当たり次第に関数をオーバーライドして試してたので、
OnGetDlgCodeがそのものズバリの関数だったとは気づきませんでした。
DLGC_WANTARROWSで正常に出来ました。ありがとうございました。
334デフォルトの名無しさん:2010/03/06(土) 15:21:17
FeaturePackの解説本ってさすがに出ないかねぇ。
335デフォルトの名無しさん:2010/03/09(火) 11:24:04
MFC解説VisualStudio2010対応ってタイトルにした本のほうが売れそうだ。
問題はMFCという言葉で買う人がどれくらいいるかだw
336デフォルトの名無しさん:2010/03/09(火) 11:39:06
Visual C++ 2005でMFCアプリを開発してます。

Macのアプリケーションにあるようなドロワーを
Windowsでやるにはどういう形がやりやすいでしょうか?
こんな感じのダイアログから出たり入ったりするGUIです。
http://images.google.co.jp/images?q=Mac%20%E3%83%89%E3%83%AD%E3%83%AF%E3%83%BC

モードレスダイアログやフローティングダイアログバーを試しましたが、
サブウィンドウのような外見がいやなのと、位置制御などが面倒です。
モードレスダイアログの場合はフォーカスがそっちに移るのも困りもの。

見た目、挙動ともによい方法があったら教えてください。
337デフォルトの名無しさん:2010/03/09(火) 12:47:57
MFCで提供されていない機能がほしかったらMFC以外で探すか自作するしかない。
要するにスレ違い
338デフォルトの名無しさん:2010/03/10(水) 11:01:35
>>337
確かにそのとおりですね。ご指摘ありがとうございました。
339デフォルトの名無しさん:2010/03/15(月) 10:00:07
MFCを使用したプログラムで
CoInitializeEx()を使うとエラーが出てしまいます…

普通のWin32コンソールプログラムだと以下でなんの問題もないのですが

#define _WIN32_DCOM

CoInitializeEx(0, COINIT_MULTITHREADED);

MFCプログラムだと、以下の定義エラーが出てしまいます…

error C2065: 'CoInitializeEx' : 定義されていない識別子です。
error C2065: 'COINIT_MULTITHREADED' : 定義されていない識別子です。

どうぞご教授下さいm(__)m
340デフォルトの名無しさん:2010/03/15(月) 10:03:16
include し忘れだろ
341デフォルトの名無しさん:2010/03/15(月) 10:12:34
>>340
ちょっと書き方が悪かったですね…

コンソールプログラムだと、以下でOKなんですが
#define _WIN32_DCOM
#include <comdef.h>

CoInitializeEx(0, COINIT_MULTITHREADED);

MFCアプリだと、この上述のコードではエラーになるんです…
何故なんでしょうか?
342デフォルトの名無しさん:2010/03/15(月) 10:39:15
include し忘れだろ
343デフォルトの名無しさん:2010/03/15(月) 10:44:23
>>342
すみません… 具体的に何か教えていただけませんか?
よろしくお願いしますm(__)m
344デフォルトの名無しさん:2010/03/15(月) 10:45:22
>>341
_WIN32_DCOMをプロジェクト設定に書くかstdafx.hの上のほうに持って行く
345デフォルトの名無しさん:2010/03/15(月) 10:58:23
>>344
stdafx.hの上ではダメでしたが、
プロジェクト設定に書いたら見事OKでした!
ありがとうございます!助かりました!

本当にいい人だ。 うぅ (/Д`)・゜・。
346デフォルトの名無しさん:2010/03/15(月) 11:18:59
stdafx.hの中という手はあるがな
347デフォルトの名無しさん:2010/03/15(月) 11:22:28
>>345
上ってどこに書きました?
#include <stdafx.h>より上の行ではなく、stdafx.h内の上のほうですよ。
自分の環境では、afx〜.hのインクルードより上に書けば大丈夫でしたが。
348345:2010/03/15(月) 13:18:45
>>347
ああ、なるほど、そうでしたか。
それは勘違いしてました。ご指摘ありがとうございます。
349デフォルトの名無しさん:2010/03/15(月) 13:54:37
AfxOleInit()の説明だとmfcプロジェクトはマルチで初期化は無理ってあったが裏技があったのか
350デフォルトの名無しさん:2010/03/15(月) 17:40:12
MFCで作るMDIアプリのメニューの有効/無効の切替を教えてくださいな

ドキュメントなしのとき→IDR_MAINFRAMEのメニュー
ドキュメントが開かれているとき→IDR_MYFILE(仮)のメニュー

このIDR_MYFILEに含まれるメニューの有効/無効を切り替えたいんだけど、
GetMenu()->EnableMenuItem( ID_MENU_IN_IDR_MYFILE(仮), MF_GRAYED )
みたいなことしても反映されません。なぜ??
351デフォルトの名無しさん:2010/03/15(月) 17:48:55
>>350
ON_UPDATE_COMMAND_UIに任せるべきかと。
352デフォルトの名無しさん:2010/03/15(月) 17:56:00
>>350
サンクス
とりあえずそれでググってくる
353デフォルトの名無しさん:2010/03/15(月) 20:18:54
ツールバーのボタンとかメニューの項目は、
暇な時(OnIdle)に項目の状態を更新できるコールバックを呼び出してくれるからな。
外側から明示的に状態を更新することはあまり無い。
354デフォルトの名無しさん:2010/03/15(月) 20:49:58
Editコントロールを0文字にしたときに出る
"整数を入力してください"ってーのがクソうざいんだけど
355デフォルトの名無しさん:2010/03/15(月) 21:57:00
EM_LIMITTEXTが0文字を受け付けない仕様だから諦めろ。
356デフォルトの名無しさん:2010/03/16(火) 09:04:49
>>354
エディットボックスにintを関連付けなければよい。
357デフォルトの名無しさん:2010/03/16(火) 11:10:58
CButton でボタンをスイッチのように、クイックすると凹んだ状態、もう一度クイックすると元に戻るように
したいのですが、どうすればよいでしょうか?
358デフォルトの名無しさん:2010/03/16(火) 11:20:08
クリックだろ
チェックボックスにしてPushLikeにするのがいいかも
359デフォルトの名無しさん:2010/03/16(火) 21:04:05

猫でもわかるらしいのですが、わたしは分からないので
教えてください。
http://homepage2.nifty.com/c_lang/mfc/mfc_01.htm
のMFCプログラムをVC2008でビルドし、実行するとすぐにVS画面へ戻ってしまいます。

プログラムがすぐ終了している感じです

どうすれば、WINDOWを表示できるのですか?
360デフォルトの名無しさん:2010/03/16(火) 21:05:59
>>359
break pointしかけてデバックしてみろや
361デフォルトの名無しさん:2010/03/16(火) 21:13:29
煽るだけの奴って、技術的な話からは逃げてるんでしょ?
362デフォルトの名無しさん:2010/03/16(火) 21:42:56
こぴぺ乙
363デフォルトの名無しさん:2010/03/16(火) 22:18:27
猫でもは時間の無駄にしかならないと思う。
364デフォルトの名無しさん:2010/03/16(火) 22:20:58
煽るだけ、答えねぇやつばっかw
かわいそうだから・・・

/D "_WINDOWS"

でOK
365デフォルトの名無しさん:2010/03/16(火) 23:11:22
MDIでプログラムしているんですが、各子ウィンドウでメッセージが来ない間、
ウィンドウ別にCWinApp::OnIdleのように処理をするようにしたいのですが、
何か方法なないでしょうか?
単純に思いついた方法はCWinApp::OnIdleで各子ウィンドウを調べて一つずつ
処理させるくらいしか思いつきませんでした。
各子ウィンドウにスレッド処理させる方法も考えたのですが、案件の仕様で
ダメなので使えません。
366デフォルトの名無しさん:2010/03/17(水) 09:23:18
>>365
アイドル時の処理というのがどの程度の頻度なのかにもよるけど、
定期的にというものなら、タイマじゃダメ?
367デフォルトの名無しさん:2010/03/17(水) 09:34:57
windowが増えたら増えた分だけたくさん仕事ができるんならあれだけど、
ウインドウごとにアイドル調べる意味がわからん。
各子ウィンドウにスレッドじゃないんだから中の人はひとりなんだろ
368357:2010/03/17(水) 10:05:09
>>358
ありがとうございます。
CButtonのスタイルをPushLikeにしてみて、それで無理そうならチェックボックスに変更してみます
369デフォルトの名無しさん:2010/03/17(水) 10:22:39
>368
MFCならFeature Packも視野に入れるといい。
370デフォルトの名無しさん:2010/03/17(水) 10:37:21
へこんだボタンなら大昔から普通にあるけど
371256:2010/03/17(水) 13:02:45
>>365 DocView使ってるなら
UINT __cdecl CMyEditApp::OnIdleWT(LPVOID pParam) // ワーカースレッド
{
    POSITION pos(theApp.GetFirstDocTemplatePosition());
    CDocTemplate* pdt(theApp.GetNextDocTemplate(pos));
    CMyDoc* pDoc;

    if(pdt == NULL || (pos = pdt->GetFirstDocPosition()) == NULL)
    {
      ml.Unlock();
      continue;
    }

    while(pos != NULL)
    {
      pDoc = (CMyDoc*)pdt->GetNextDoc(pos);
      pDoc->OnIdleWT();
    } // 改行がおおすぎますだとー!
372371:2010/03/17(水) 13:09:06
名前に勝手に数字が・・・256さんごめんよ
ソース結構削ってるから脳内補完してね
theApp::OnIdle()とExitInstance()からSetEventで起きるワーカースレッドでwhile(1)の中をWaitforMulti〜してます
373デフォルトの名無しさん:2010/03/17(水) 14:26:59
>>372
>256さんごめんよ

>>256
374デフォルトの名無しさん:2010/03/17(水) 20:37:16
ワロタw何たる偶然w
375デフォルトの名無しさん:2010/03/17(水) 21:50:48
アプリ起動したときに、タスクバーに表示される物?を右クイックして
表示させたメニュー(CMenu)てどうやって取得しますか?

GetSystemMenu()だと思ってたらとれなかった
376デフォルトの名無しさん:2010/03/17(水) 21:55:19
また君か
377デフォルトの名無しさん:2010/03/17(水) 22:14:10
CMFCRibbonEditでエディットを作成したんですけど、ReadOnlyになっています。
Enableさせるにはどうしたらいいでしょうか?
378365:2010/03/18(木) 00:49:36
なるほど。いろいろ方法がありますね。
DocViewは使ってないんですが、少し実験してみます。
ありがとうございます。
379デフォルトの名無しさん:2010/03/18(木) 16:20:40
.netのフォームコントロール(グラフ関係のコントロール)
をMFCダイアログ上に持ってきて使うとか可能ですか?・
VS2008を使ってます
宜しくお願いします
380デフォルトの名無しさん:2010/03/18(木) 17:16:35
可能じゃなかったらVCで.netやる意味がないだろ
381デフォルトの名無しさん:2010/03/19(金) 08:17:22
具体的にはどうやるんでしょうか?
MFCと.netじゃあ言語が違いますし
DLL?とか使うんでしょうか?
382デフォルトの名無しさん:2010/03/19(金) 08:39:23
Windows フォーム コントロールをホストする
383デフォルトの名無しさん:2010/03/19(金) 09:06:30
ありがとうございます
Windows フォーム コントロールをホストでぐぐったら
CWinFormsDialogっていうのがあるみたいですね
ただ、これはマネージドC++?ってやつですね
未経験で動くか不安ですがやってみます
384デフォルトの名無しさん:2010/03/27(土) 23:08:16
CHtmlViewで更新をかけたときに読み込みのため一瞬白い画面になるのですが、
完全に読み込みが終了したときに再描画をするにはどうすればいいでしょうか?

Visual C++ 2005
385デフォルトの名無しさん:2010/03/27(土) 23:32:43
自前でDCに描画すれば?
386デフォルトの名無しさん:2010/03/28(日) 03:16:01
CWnd::LockWindowUpdateじゃだめか?
387デフォルトの名無しさん:2010/03/28(日) 16:04:29
CListCtrlで選択状態となった、選択状態が変化したってことをしるには
どのメッセージを受け取るの?
388デフォルトの名無しさん:2010/03/28(日) 16:21:34
>>387
ON_NOTIFY メッセージで LVN_ITEMCHANGED をキャッチする
389デフォルトの名無しさん:2010/03/29(月) 00:22:23
>>386
ありがとうございます!やってみます!
390デフォルトの名無しさん:2010/03/29(月) 00:58:25
>>388
ありがとうございます。
391デフォルトの名無しさん:2010/03/29(月) 20:14:21
CFormViewにCPropertySheetをCreateし、CPropertyPageをAddPage
してそのPage内にエディット、ボタンなどのコントロールを配置しました。

ボタンが押されたことをCFormViewがで知りたいので、イベントハンドラウィザード
でCFormViewにOnBnClickedButton11を追加しましたが
OnBnClickedButton11が呼ばれません。

お分かりになる方、ご助言願います。

Visual Studio 2008
392デフォルトの名無しさん:2010/03/29(月) 20:58:44
子(ボタン)が押されたコトを知ることができるのは親(ボタンのあるページ)だけ。
だから、それを曾祖母さんに知らせるのは親の役目。
393デフォルトの名無しさん:2010/03/29(月) 22:46:07
親が曾祖母さんに知らせるのはどうやればいいのですか?
子から曾祖母さんのCWnd*は取得できて、曾祖母さんのメソッドをコールするために
曾祖母さんのヘッダをincludeしたら、循環参照でビルドできないんで、
他に通知する術はありますか?
394デフォルトの名無しさん:2010/03/29(月) 22:58:09
>循環参照でビルドできない
前方宣言すりゃよかろ。

>他に通知する術はありますか?
曾祖母さんのCWnd*が取得できてるなら、曾祖母->SendMessage(「押されちゃったよ〜ん」)してもよかろ。
ナニゴトにも会話は大事。
「押されちゃったよ〜ん」は WM_APP+1 でよかろ。
395デフォルトの名無しさん:2010/03/31(水) 23:26:06
ワーカースレッドの実装例をネットで調べてると、
ダイアログクラス内のメンバをいじる重い処理をワーカースレッドにする際、
AfxBeginThreadにthisを渡しているものをよく見かけるんだけど、
これって、CWndオブジェクトをスレッドを跨いで使っていることにはならない?
396デフォルトの名無しさん:2010/04/01(木) 04:59:16
スレッドを跨いで使っちゃいけないとでも?
397デフォルトの名無しさん:2010/04/01(木) 08:06:31
http://msdn.microsoft.com/ja-jp/library/h14y172e(VS.80).aspx
「通常、スレッドは自分自身が作成した MFC オブジェクトしかアクセスできません。」

上のような説明を読む限りは、動かないのではと思うのだけど。
398デフォルトの名無しさん:2010/04/01(木) 08:53:50
わざわざ「通常」と断ってるんだから、当然そうでないやり方があるということ
399デフォルトの名無しさん:2010/04/01(木) 12:16:01
まぁ、日本語の理解力がこの程度じゃ、PG能力も知れてるわな。
つか、痴れてるかw
400デフォルトの名無しさん:2010/04/01(木) 21:53:00
CListCtrlでLVNI_SELECTED もしくは LVNI_FOCUSEDが立ってるItemの検索って
GetNextItem(-1,LVNI_SELECTED|LVNI_FOCUSED);
でいいですか?

401デフォルトの名無しさん:2010/04/02(金) 10:44:42
なぜ試さんのか
402デフォルトの名無しさん:2010/04/03(土) 03:13:04
VisualC++2008
MDI

リボンにエディットボックスをつけようと思い、
MainFrameのInitializeRibbonでpPanel->Add(new CMFCRibbonEdit(IDC_RIBBON, 200) );
としていますが、実行してみるとエディットはありますが、グレイになっています。
どうすれば、エディットを使用できるようになるのでしょうか?
403デフォルトの名無しさん:2010/04/09(金) 16:25:43
vs2010 のVC++ 新機能

・MFC FeaturePack 機能をリソースエディタで使える
・リソースエディタにリボンデザイナーの追加
・インテリセンス機能の大幅改善(1行入力した時点でコンパイルエラーを指摘)
・ClassWizard をVC6 形式で復活
・Find 機能の大幅拡張

これは買いだな

404デフォルトの名無しさん:2010/04/09(金) 16:37:28
>・インテリセンス機能の大幅改善(1行入力した時点でコンパイルエラーを指摘)

1行でよかった。もし1字だと使いもんにならん。w
405デフォルトの名無しさん:2010/04/09(金) 19:39:18
CMFC〜関係使用時のレジストリ強制使用仕様はどうなったの?
ベータ版ではまだダメだったけど。
406デフォルトの名無しさん:2010/04/09(金) 21:26:12
CDC::DrawTextでこの表示横幅とこの文字列で縦何ドット必要になるかって
自分でシコシコ計算するの?なんか便利なメンバある?
407デフォルトの名無しさん:2010/04/09(金) 21:27:39
>>403
>・ClassWizard をVC6 形式で復活

Ctrl+W!!
408デフォルトの名無しさん:2010/04/09(金) 21:29:53
>>406
DT_CALCRECT
409デフォルトの名無しさん:2010/04/09(金) 22:58:58
>>408
即レスありがとー。教えてもらったのでうまく出来ました。
410デフォルトの名無しさん:2010/04/10(土) 00:15:47
CComboBoxをオーナードローをやってるんですが、
リソースエディタでのデザイン時より、実行時のほうの高さが高いんですけど
なんでですか?
411デフォルトの名無しさん:2010/04/10(土) 00:30:44
仕様です。
412デフォルトの名無しさん:2010/04/10(土) 01:24:05
>>410
フォントの違い
413デフォルトの名無しさん:2010/04/10(土) 18:53:14
親ダイアログを閉じたときに子ダイアログを全部閉じるにはどうすればいいですか?
414デフォルトの名無しさん:2010/04/10(土) 19:15:45
DestroyWindow
415デフォルトの名無しさん:2010/04/11(日) 17:24:18
特に何もしなくても親が閉じたら子も閉じるはず
416デフォルトの名無しさん:2010/04/12(月) 18:54:22
CWnd派生クラスが、任意のタイミングで、自分自身のスタイルに依存せずに
「いま自分自身にスクロールバーが表示されているか(グレー化も含む)」を
知る方法はありますか?

スクロールバー領域も含めたクライアント領域のサイズが欲しいのですが、
GetClientRect()はスクロールバー領域は含まれないので、
「表示されているときにはGetSystemMetrics(SM_CXVSCROLL)の値を加える」
という処理を付けたいのです。
417デフォルトの名無しさん:2010/04/12(月) 19:19:28
>>416
>自分自身のスタイルに依存せず
の意味が不明だが、WS_VSCROLLが付加されているかどうかを調べればよいのでは?
418デフォルトの名無しさん:2010/04/12(月) 19:38:29
>>417
これでよかったのですね。
WS_HSCROLLやWS_VSCROLLって、作成時に使うものであって、
SetScrollInfo()でスクロール幅をいじって表示状態が変わったときに
勝手に連動して切り替わってくれるものではないと思ってました。
ありがとうございます。
419デフォルトの名無しさん:2010/04/14(水) 02:05:24
Direct2Dに対応したMFCって出る予定ある?
例えばDirectWriteに対応したCEditDWクラスとか。
420デフォルトの名無しさん:2010/04/14(水) 13:46:48
ない。
421デフォルトの名無しさん:2010/04/15(木) 15:47:33
VS2008でMFCやってます
リストBOXをクリック(又はダブルクリック)したら
小窓を出すようにしたいのですがうまくいきません
リスト項目が存在しててクリックした場所が
項目の上にあれば問題ないのですが
項目が無いところをクリックしても無反応です。
ハンドラは以下のを使ってます。
ON_LBN_DBLCLK
ON_LBN_SELCHANGE

項目が無いところをクリックしても
小窓が出るようにするうまい方法ありませんか?

422デフォルトの名無しさん:2010/04/15(木) 15:53:23
>>421
CListBoxを派生してWM_LBUTTONDBLCLKあたりを自分で処理すればよいかと。
423デフォルトの名無しさん:2010/04/15(木) 15:55:36
「小窓」などというワケのわからん独自の単語を使わないように。

リストボックスをリストコントロールに変えれば、お望みのことができる。
424デフォルトの名無しさん:2010/04/15(木) 16:11:13
親側で処理は不可能ですか;;
ちょっと小窓開くだけの処理で派生とかしたくない;;
425デフォルトの名無しさん:2010/04/15(木) 19:31:19
リストコントロール用のLBN_*じゃなくて
コモンコントロール汎用のNM_CLICKとかで対応できるんじゃないか?
426デフォルトの名無しさん:2010/04/15(木) 19:32:35
>ちょっと小窓開くだけの処理で派生とかしたくない

。。。
427デフォルトの名無しさん:2010/04/17(土) 18:18:50
VS2008でMFCを使用しています。
CMFCPropertyGridCtrl内のプロパティの値が変化したときのメッセージを
受け取ろうと思って以下のコードを入れてみたのですが、
プロパティを変更しても呼ばれないです・・・


メッセージマップ
BEGIN_MESSAGE_MAP(CPropertiesWnd, CDockablePane)
  (中略)
  ON_MESSAGE(AFX_WM_PROPERTY_CHANGED, &CPropertiesWnd::OnChangePropList)
END_MESSAGE_MAP()

int CPropertiesWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
  (中略)
  // CMFCPropertyGridCtrlの作成
  m_wndPropList.Create(WS_VISIBLE | WS_CHILD, rectDummy, this, ID_PROP_LIST)
  (中略)
}

LRESULT CPropertiesWnd::OnChangePropList(WPARAM wParam, LPARAM lParam)
{
  プロパティ変更時の処理
}
428427:2010/04/17(土) 18:27:20
途中で投稿してしまいました。 申し訳ないです。
CMFCPropertyGridCtrl内のプロパティ値が変更されたときのメッセージを
受け取る方法は無いのでしょうか?
ご教授お願いします・・・。
429デフォルトの名無しさん:2010/04/17(土) 18:40:36
ON_MESSAGE()の2番目の引数って'&'いるんだっけ?
430デフォルトの名無しさん:2010/04/17(土) 19:29:36
>>429
2005から自動でこうなる
431デフォルトの名無しさん:2010/04/17(土) 22:11:59
>>428
CMFCPropertyGridCtrlを派生させ、
仮想関数ValidateItemData内で
CMFCPropertyGridPropertyのポインタpPropから必要な値を取得し処理をする。
432427-428:2010/04/18(日) 01:04:04
>>431
派生先で処理を書いたらできました。
ありがとうございました!
433デフォルトの名無しさん:2010/04/18(日) 17:21:50
ダイアログベースで作成したアプリに最小化ボタンを追加したくwwwを探すと
WS_MINIMIZEBOXを設定すればいいらしいのですが、Createされた後に
このフラグをセットするにはどうすればいいのですか?
434デフォルトの名無しさん:2010/04/18(日) 17:36:58
なんでCreateされた後なの?
リソースエディタで設定すればいいだけじゃないの?
何かのタイミングで最小化ボタンを追加するの?
435デフォルトの名無しさん:2010/04/18(日) 17:53:28
>>434
プロパティウィンドウにありましたね
お手数おかけしました。

ありがとうございました。
436デフォルトの名無しさん:2010/04/19(月) 22:32:44
SDIウインドウの子にCEditを表示して使っているのですが、
例えばアクセラレータキーで[A]キーを使用していると、Aの文字が打てなくなります。
これでは困るので、一時的にアクセラレータキーを無効にする方法を相談したいです。
わかる方いらっしゃいましたらどうかご教示お願いします。
437デフォルトの名無しさん:2010/04/19(月) 22:38:37
>例えばアクセラレータキーで[A]キーを使用していると

これが間違い。Ctrl+A とかにする。
438デフォルトの名無しさん:2010/04/19(月) 22:43:46
>>437
ありがとうございます。
一応[A]キーってのは極端な例のつもりだったのですが、
WM_CHARで使うキーは避けるしかないということなんですね。
439デフォルトの名無しさん:2010/04/20(火) 17:24:57
使う方だってこれから押すキーがショートカットなのか入力なのか
常に気にしてなきゃいけなくなるだろう
440デフォルトの名無しさん:2010/04/20(火) 22:14:21
>>436
メインウィンドウのPreTranslateMessage()で。
CFrameWnd::PreTranslateMessage()のソースを読めば分かる

>>421
ついでに、そちらも派生したくないのであればPreTranslateMessage()でいける。
441デフォルトの名無しさん:2010/04/20(火) 22:28:00
PreTranslateMessage?
442デフォルトの名無しさん:2010/04/20(火) 22:41:22
>>441
何か疑問でも?
443デフォルトの名無しさん:2010/04/21(水) 09:32:25
デフォルト状態ではリターンやエスケープでダイアログが閉じるけど
複数行のedit上にフォーカスある時はリターンで閉じないだったかな
みんなリターンやエスケープで閉じないよう直してるから忘れた。
444デフォルトの名無しさん:2010/04/21(水) 15:45:11
ES_WANTRETURNスタイルつけないと複数行でもいくよ
445デフォルトの名無しさん:2010/04/22(木) 02:33:24
CStringに円マークが入れれません

CString str(_T("\"));
とするとコンパイルエラーなるから

CString str(_T("\\"));
としたら、本当に2つ入っている・・・
446デフォルトの名無しさん:2010/04/22(木) 03:13:55
CString str(_T("\x5c"));
447デフォルトの名無しさん:2010/04/22(木) 03:53:41
知ったか乙
448デフォルトの名無しさん:2010/04/22(木) 07:58:45
VS2010で試したら、「\\」で一つしか入っていなかったぞ。
確認方法自体が間違っていないか?デバッガで中身を覗いてみろ。
449デフォルトの名無しさん:2010/04/22(木) 23:44:43
CFormViewやCPaneDialogに子ダイアログを置いているのですが、
その子ダイアログの中のコントロールにフォーカスがある状態だと、
ALTを押してもメニュー(CMFCMenuBar)に移ってくれません。
さらに、逆にメニュー表示中にそれらのコントロールをクリックすると、
メニューが消えないままフォーカスが移ってしまいます。

CFormViewやCPaneDialog自身に置いてあるコントロールからだと
ちゃんと動くのですが、このへんの仕組みに詳しいかたはいらっしゃいませんか?
450デフォルトの名無しさん:2010/04/23(金) 00:32:20
CListCtrlにLVS_EX_DOUBLEBUFFERを設定しようと
SetExtendedStyleを実行してますが、設定されていないようです。
spy++で確認

なぜですか?
451デフォルトの名無しさん:2010/04/23(金) 10:35:53
CFormViewだって子ダイアログだろ
というか子ダイアログだとか置くだとかどうにでも取れる表現だな
452デフォルトの名無しさん:2010/04/23(金) 21:14:28
>>450
確認方法が間違っているから。
ウィンドウの拡張スタイルとLVS_EX_???とは無関係。
453デフォルトの名無しさん:2010/04/23(金) 21:39:44
>>450
これで確認してみては?
CListCtrl::GetExtendedStyle
454デフォルトの名無しさん:2010/04/23(金) 21:49:01
>>450
LVS_EX_DOUBLEBUFFERはcomctl32のバージョン6からのものだから
manifestでバージョン6のものが適用されているかどうか確認してみ。

あと、「LVS_EX_DOUBLEBUFFER」がちゃんと設定されていても
spy++のバージョンによっては拡張スタイル欄に出てこないものがある。
VC2008付属のspy++(ver9.00.30729)ではちゃんと出るが、
例えばVC6付属のspy++(ver6.00.8168)では出ない。
VC6のは新しいスタイルができる前のものなんだから当然のこと。
455デフォルトの名無しさん:2010/04/24(土) 17:46:10
マルチスレッドのプログラミングで質問です。
プログラムの概要は、社内LANの複数のIPアドレスに対し、
スレッドを複数立てて順番にpingを打ち、対象アドレスの生死を判定するものです。
IPアドレスは概算で3000件以上で、それを50個ほどのスレッドを立てて
順番に処理していく事を想定しています。
pingを打つ処理はクラス化してあり、クラス構築時にDLLのハンドルを渡し、
pingを打つ関数は、アドレスを文字列で渡し、結果をintで返します。
このクラスオブジェクトをスレッドに持たせて実行したいと考えてます。

スレッドの挙動としては、起動したらICMPの初期化をし、一覧からIPアドレスを引き取り、
pingを打って結果を格納し、また次のアドレスへと進んでいきます。
そして、全てが終わったら自殺するものを想定しています。
また呼び出し側では、処理状況をダイアログのブログレスバーに表示し、
全てのスレッドが終了したら開始前の状態に戻ります。
中止ボタンを押せば、その時点で全てのスレッドを終了させます。

このようなスレッドの実装方法を教えてください。
環境はVC6です。

なお、セキュリティ管理の都合上、Vector等で探してきた既存ツールの使用は禁止です。
456デフォルトの名無しさん:2010/04/24(土) 17:59:17
pingはよろしくない
arpにしよう
457デフォルトの名無しさん:2010/04/24(土) 18:07:38
一つのIPアドレスにpingを打つ処理を一つのタスクと考えて、
pingを打つ処理を担当する50個のスレッドを生成。
スレッド側は新しいタスクの取得しては応答を戻し、
新しいタスクが無い時は終了する。
コントローラ側は全スレッドが完了したら作業終了と判断する。
こんな感じ?
458299:2010/04/24(土) 18:58:26
C#で作ればいいのに
459デフォルトの名無しさん:2010/04/24(土) 19:00:52
そんな素人が思いつきで作った方法で突っ走る前に
既存のまともなネットワーク管理ツールがどうやってるかぐらい調べた方がいい。
460デフォルトの名無しさん:2010/04/24(土) 19:29:15
社内LANならそういうやり方はあり得ないよな
本気でそういう方法がよけりゃスパムメール送るツールでも参考にすればいい。
461デフォルトの名無しさん:2010/04/25(日) 03:02:27
遅かれ早かれ本物の管理者から苦情が来て禁止される
462デフォルトの名無しさん:2010/05/16(日) 07:33:09
VS2010からまたMFCが面白いことになりそうだね
今は前より選択肢が増えてるから最盛期には及ばないかな?
ツールはMFC派な俺には楽しみな限り
資料とかいっぱい出てくれると最高なんだが
463デフォルトの名無しさん:2010/05/16(日) 08:12:44
MFCがバージョンアップするなら.netを駆逐できるか
464デフォルトの名無しさん:2010/05/16(日) 15:52:03
.netなんかのマネージドコードとは別の方向へ特化して進化するみたいだからどうだろう?
Vistaや7なんかの新世代OS向けの
最新機能を備えたネイティブアプリを開発する上では強力なツールにはなりそうだ
465デフォルトの名無しさん:2010/05/16(日) 23:53:57
CEditViewベースでドキュメントビューMDIアプリを作成してます
標準で作成される
ウィンドウメニューの「新しいウィンドウを開く」の挙動を
VisualStudioと同じように現在のビューと同じ内容のウィンドウを開くにしたいのですが
とりあえず泥臭い方法ですが
void CMainFrame::On*******()
{
// 現在アクティブなドキュメントとヴューを取得
CMDIChildWnd* pActiveChild = MDIGetActive();
CDocument* pDocument = pActiveChild->GetActiveDocument() ;
CView* pView = pActiveChild->GetActiveView() ;

// 現在のビューのテキストを取得
int ndx = pView->GetWindowTextLength()+1;
wchar_t *buff = new wchar_t[ndx] ;
pView->GetWindowText(buff, ndx) ;

// ドキュメントに新しいビューを追加し有効にする
CDocTemplate* pTemplate = pDocument->GetDocTemplate();
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
pTemplate->InitialUpdateFrame(pFrame, pDocument);

// 新しく開かれたビューにテキストを書き込む
pView = pFrame->GetActiveView() ;
pView->SetWindowText ( buff ) ;
pView->UpdateData() ;
delete [] buff ;
}
と実装したのですが
もう少しスマートな方法ないですか?
標準で用意されててもいいような気もするのですが・・・
466デフォルトの名無しさん:2010/05/17(月) 12:59:10
わざわざコピーペしてるぐらいだから片方を編集したらもう一方も更新するんだろ
チュートリアルにスプリッタでそういう仕様のサンプルがあった
467デフォルトの名無しさん:2010/05/17(月) 23:05:45
// 現在のビューのテキストを取得
>int ndx = pView->GetWindowTextLength()+1;
>wchar_t *buff = new wchar_t[ndx] ;
>pView->GetWindowText(buff, ndx) ;

CEdit::GetHandle()を使えば、バッファを用意しなくてすむ・・・程度かな。
468デフォルトの名無しさん:2010/05/22(土) 17:01:06
CCtrlView* pView = (CCtrlView*)GetActiveView() ;
みたいなダウンキャストをしてもちゃんと動いてるっぽいんですが
MFCではそれが安全なように設計されてると考えてOKですか?
それとも危険な場合がありますか?
469デフォルトの名無しさん:2010/05/22(土) 17:17:26
曰く、

MFC がサポートする CObject の実行時型指定機構では、マクロ DECLARE_DYNAMIC、IMPLEMENT_DYNAMIC、
DECLARE_DYNCREATE、IMPLEMENT_DYNCREATE、DECLARE_SERIAL、IMPLEMENT_SERIAL を使います。
これらのマクロは、実行時の型チェックによって安全なダウンキャストを保証します。
470デフォルトの名無しさん:2010/05/26(水) 15:30:04
Visual Studio .NET 2003を使ってリストコントロールを操作してるのですが、
以下の関数がビルド時にエラーになって使えないのですが、原因がなにかわからないでしょうか?

: error C2039: 'SetSelectedColumn' : 'CListCtrl' のメンバではありません。

GetItemCount()などは問題なく使えているんですが、SetSelectedColumnやSetViewが
上のエラーが出てしまいます。

自分のマウスによる操作以外でアイテムを選択状態にしたいのですが、
上の関数以外を使って実現することってできるのでしょうか?
471デフォルトの名無しさん:2010/05/26(水) 15:39:52
>>470

#define _WIN32_WINNT 0x0501
472デフォルトの名無しさん:2010/05/26(水) 16:02:15
>>471
ビルドは_WIN32_WINNTの変更だけでは更にエラーがでたので、
stdafx.hにある4つを書き換えることでエラーは消えたのですが、SetSelectedColumnを
つかっても選択状態になることはありませんでした。
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
#define _WIN32_WINDOWS 0x0501
#define _WIN32_IE 0x0501

べつのキーワードでググったら使える関数(SetItemState)が見つかったので、問題は
解決しました。ありがとうございました。
473デフォルトの名無しさん:2010/06/01(火) 16:24:24
MFCのCIpAddressCtrlのGetAddressが返す値と
inet_addrが返す値がちがうんですけどどういうことですか?
どのように使用してますか?

例えば”127.0.0.1”の場合
GetAddressは0x7f000001
inet_addrは0x0100007f
を返します
474デフォルトの名無しさん:2010/06/01(火) 17:02:03
>>473
inet_addrはビッグエンディアンで返すから。
ntohlとかで変換する。
475デフォルトの名無しさん:2010/06/01(火) 17:05:04
というか、socket系はその関数群で完結したらそのまま使えるよ
他のライブラリと行ったり来たりするから変換が必要になる
476デフォルトの名無しさん:2010/06/02(水) 07:09:37
初歩的な質問でもうしわけありません。
CFileDialogを使用中にカレントディレクトリが変わらないようにする方法ってありますか?
OFN_NOCHANGEDIRを指定した場合、ファイル選択後に元に戻るのは確認しましたが
選択中はどうしても選択しているフォルダにかわってしまいました。


477デフォルトの名無しさん:2010/06/02(水) 08:06:19
もう少し分かり易い日本語で頼む
478デフォルトの名無しさん:2010/06/02(水) 08:24:53
MFCのみで起きる問題ならCFileDialogのソース見て対策考えるか
CFileDialogやめて直にapi呼べばいい。
479デフォルトの名無しさん:2010/06/02(水) 08:30:28
api側のGetOpenFileNameが変更してるのか
ならMFC関係ないな
480デフォルトの名無しさん:2010/06/02(水) 10:57:52
カレントディレクトリに頼る実装に問題が・・・
481デフォルトの名無しさん:2010/06/02(水) 12:57:24
>>480
ヴァカは氏ねば? コモンダイアログ使ったことないだろ、雑魚PGが。

>>476
呼ぶ前にGetCurrentDirectory、呼んだ後にSetCurrentDirectory。
482デフォルトの名無しさん:2010/06/02(水) 13:03:44
・・・。
483デフォルトの名無しさん:2010/06/02(水) 13:35:12
>481
質問者が
OFN_NOCHANGEDIRを指定した場合、ファイル選択後に元に戻る
と言ってるからそんなことしても意味ないだろ
484デフォルトの名無しさん:2010/06/02(水) 14:05:15
>>481
質問者がOFN_NOCHANGEDIRも出してるのに
それすらも知らないとはw
それとも3行以上の文章は読めないとか
485デフォルトの名無しさん:2010/06/02(水) 14:08:13
>>476
>CFileDialogを使用中にカレントディレクトリが変わらないようにする

具体例を示せ。
どういう状況のとき、どうしたいのか。
486デフォルトの名無しさん:2010/06/02(水) 18:45:50
Qtとどっちが使いやすいですか?
487デフォルトの名無しさん:2010/06/02(水) 20:09:53
慣れている方。
488デフォルトの名無しさん:2010/06/02(水) 23:31:05
MFCのソースって今公開されてるの?
VC6の時はついてたけど。今はどこにあるのかな?
489デフォルトの名無しさん:2010/06/03(木) 00:00:20
HDDの中
490デフォルトの名無しさん:2010/06/03(木) 00:15:55
VS2010でもきちんとインストールされているぜ。
というか入っていなかった日には非難轟轟だな。
491デフォルトの名無しさん:2010/06/03(木) 00:28:58
ChtmlViewを使っているのですが、URLを指定して表示させたものに対して、
LineToなどで線を引いいたりするにはどうすればいいでしょうか?
492491:2010/06/03(木) 00:29:39
すみません、書き忘れました
VC++2005です
493デフォルトの名無しさん:2010/06/03(木) 14:48:26
         し!     _  -── ‐-   、  , -─-、 -‐─_ノ  M
  小 M     // ̄> ´  ̄    ̄  `ヽ  Y  ,  ´     )  F え
  学 F     L_ /                /        ヽ  C  |
  生 C     / '                '           i    マ
  ま が    /                 /           く !? ジ
  で 許    l           ,ィ/!    /    /l/!,l     /厶,
  だ さ   i   ,.lrH‐|'|     /‐!-Lハ_  l    /-!'|/l   /`'メ、_iヽ
  よ れ   l  | |_|_|_|/|    / /__!__ |/!トi   i/-- 、 レ!/   / ,-- レ、⌒Y⌒ヽ
  ね る   _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ      ,イ ̄`ヾ,ノ!
   l の  「  l ′ 「1       /てヽ′| | |  「L!     ' i'ひ}   リ
    は   ヽ  | ヽ__U,      、ヽ シノ ノ! ! |ヽ_、ソ,      ヾシ _ノ _ノ
-┐    ,√   !            ̄   リ l   !  ̄        ̄   7/
  レ'⌒ヽ/ !    |   〈       _人__人ノ_  i  く            //!
人_,、ノL_,iノ!  /! ヽ   r─‐- 、   「      L_ヽ   r─‐- 、   u  ノ/
      /  / lト、 \ ヽ, -‐┤  ノ  キ    了\  ヽ, -‐┤     //
ハ キ  {  /   ヽ,ト、ヽ/!`hノ  )  モ    |/! 「ヽ, `ー /)   _ ‐'
ハ ャ   ヽ/   r-、‐' // / |-‐ く    |     > / / `'//-‐、    /
ハ ハ    > /\\// / /ヽ_  !   イ    (  / / //  / `ァ-‐ '
ハ ハ   / /!   ヽ    レ'/ ノ        >  ' ∠  -‐  ̄ノヽ   /
       {  i l    !    /  フ       /     -‐ / ̄/〉 〈 \ /!
494デフォルトの名無しさん:2010/06/03(木) 19:14:07
あ〜普通にMFCのソースインストールされてるね。
気がつかなかった。
495デフォルトの名無しさん:2010/06/05(土) 16:31:59
リストコントロールで例えば10個ほどアイテムがあり、5番目を上から2番目に
移動させたい場合に用意されている関数で実現する方法ってないでしょうか?

ググってもソートはあるのですがアイテム単体での移動をしてる例題が
ありませんでした。

左の表示を右のように並べ替えたい。
0001 テストデータ1 サンプル1  0001 テストデータ1 サンプル1
0002 テストデータ2 サンプル2  0005 テストデータ5 サンプル5
0003 テストデータ3 サンプル3  0002 テストデータ2 サンプル2
0004 テストデータ4 サンプル4  0003 テストデータ3 サンプル3
0005 テストデータ5 サンプル5  0004 テストデータ4 サンプル4


itemMove(5,2)みたいに出来ればいいのですが・・・

ごり押しで書き換えれば実現できそうですが、内容のコピーの処理時間が無駄に
成りそうなので挿入1回で済む方法があればと思いまして。
496デフォルトの名無しさん:2010/06/05(土) 16:38:18
リストビューコントロールならいちいち移動しなくても可能
497デフォルトの名無しさん:2010/06/06(日) 01:49:17
>>495
ググりかたが悪いんだろ。いや、悪いのは頭か。
ドラッグで順番入れ替えるサンプルとか見たことないのか、この低脳。
498デフォルトの名無しさん:2010/06/06(日) 03:31:46
オーナーデータで処理すればコピーは発生しないよ。
コントロールに全部任すのは楽だけど、いろいろ拡張したいときに
不便になるからオーナーデータがお勧め。
499デフォルトの名無しさん:2010/06/06(日) 11:15:08
MFC、VS無償版で使えないからキライ
500495:2010/06/06(日) 17:20:35
なんか難しく考えすぎてました・・・
挿入はInsertItemのアイテムのインデックス値を指定してやれば可能でした。

最初のリストを作ったときはアイテム数をインデクス値にして最後に追加する処理をしていたので、
思い込みでリストの最後にしか追加されないと思って、この関数は全くチェックしていませんでした。
501デフォルトの名無しさん:2010/06/06(日) 19:14:34
>>500
難しいとかじゃなくて、センスのなさだろ。
ふつうに考えて、どこに挿入するかなんて、指定できて当然。
そういうことに頭の回らない、ヴァカさ加減を自覚しろ。
502デフォルトの名無しさん:2010/06/07(月) 01:05:09
>>500
質問してみてから自分なりの回答に気がつくパターンだな。
まぁ慣れだ。いろいろ試してみるといい。
503デフォルトの名無しさん:2010/06/15(火) 20:33:12
イベントハンドラを追加しようとすると
表示がグレーになって追加できません。

他のプロジェクトはできるのですが、、、
プロジェクトファイルが壊れちゃったんでしょうか?
504デフォルトの名無しさん:2010/06/15(火) 20:34:04
そのイベントを受け取らないんだろ
505デフォルトの名無しさん:2010/06/15(火) 20:39:08
すみません自己解決しました
ncbファイル消したら治りました。。。クソVSめ。。。

506デフォルトの名無しさん:2010/06/16(水) 12:00:05
CStringとかでGetLengthで文字数をかえしますが
これをバイト数で返す方法ありますか?
大文字小文字混在文字列だと単純に×2にもできませんよね??
507デフォルトの名無しさん:2010/06/16(水) 12:28:53
GetLength() * sizeof (TCHAR)
でどう?
UNICODEの時は単純に文字数×2だし
マルチバイトの時はGetLength==バイト数だし
508デフォルトの名無しさん:2010/06/17(木) 07:32:58
リストコントロール.SetView(LV_VIEW_DETAILS)
ってやってもレポートビューになりません。
509デフォルトの名無しさん:2010/06/17(木) 08:51:15
リソースエディタをいじったらOKでした
510デフォルトの名無しさん:2010/06/20(日) 19:06:49
VC6でテキストの文字をコピーしたバッファを操作したいのですが
どのような関数を使用するのか教えてください。
511デフォルトの名無しさん:2010/06/20(日) 19:25:17
>>510
クリップボードの内容を弄りたい、って事でOK?
MFCに拘るなら、
COleDataObject::AttachClipboardでデータを持って来たり、
COleDataSource::SetClipboardでデータをセットしたりとか、
そんな感じかと。
512デフォルトの名無しさん:2010/06/20(日) 20:00:44
>>511 ありがとうございました。
513デフォルトの名無しさん:2010/06/23(水) 23:18:48
514デフォルトの名無しさん:2010/06/23(水) 23:48:00
>>506
BOOL bDefault=FALSE;
size_t nSize = WideCharToMultiByte(CP_ACP, 0, szData/*データ*/, -1, NULL, 0, NULL, &bDefault);
でどう?
515名無しさん@そうだ選挙に行こう:2010/07/11(日) 17:09:28
タブコントロールでタブをクリックしたときに、
そのタブが前に来ないようにするのってどうやんの?
516名無しさん@そうだ選挙に行こう:2010/07/11(日) 20:16:52
まるちんこ
517名無しさん@そうだ選挙に行こう:2010/07/11(日) 23:12:41
300x300pxのピクチャコントロールについて、
・→――


というデフォルトの座標系を


・→――


このように変換したいと考えています。
(原点を左上隅から、(左隅、コントロール中央)に移動し、Y軸を反転させる)
pDC->SetViewportExt(300, -300);
pDC->SetViewportOrg(0, 300/2);
とやってみましたが、Y軸は反転せず、ピクチャコントロールの
上半分も描画されない状態です。どなたか解決方法ご教示お願いします。
518デフォルトの名無しさん:2010/07/12(月) 02:59:11
日本語でおk
519デフォルトの名無しさん:2010/07/12(月) 03:41:23
WM_TIMERを使って、参考URLにあるタイマーをつくろうと思っているのですが、
WM_TIMERがどうしても見つかりません。どこにあるのでしょうか?
よろしくお願いします。

環境:VC++ 2008, MFC

参考URL:http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/program/C/DialogBase/control/timer/index.htm
520デフォルトの名無しさん:2010/07/12(月) 19:43:33
リストビューのアイテムにツリーを使うことってどうすればできますか?
ググってみるとVisual Studioのウォッチウィンドウ云々と出てくるのですが、
まさにそういったことがしたいのです。
ヒントでもよいので、教えていただけると嬉しいです。


>>519
VC++ならクラスビューで、クラスを選択してプロパティ。
プロパティビューの中でメッセージボタンをクリックするとWM_TIMERがあるはずです。
521デフォルトの名無しさん:2010/07/12(月) 20:05:52
522デフォルトの名無しさん:2010/07/12(月) 20:12:17
そうです。
色んなサイト見てみたのですけど、
「自前で」と書かれてるものばかりで困ってしまったもので。
523デフォルトの名無しさん:2010/07/12(月) 20:14:51
おお。ソースファイルがあるのですね。失礼しました。
読んでみます。
ありがとうございます。
524デフォルトの名無しさん:2010/07/16(金) 15:46:11
IPアドレスの変更をアプリで無理でしょうか?
525デフォルトの名無しさん:2010/07/16(金) 16:55:40
>>524
おまえの脳みそじゃ無理だな
526デフォルトの名無しさん:2010/07/16(金) 18:53:59
address transfer か
527デフォルトの名無しさん:2010/07/16(金) 20:44:24
netsh
528デフォルトの名無しさん:2010/07/21(水) 08:15:40
>>525
わからないならレスすんなよ
529デフォルトの名無しさん:2010/07/21(水) 13:30:54
そう書けば教えてもらえると思ったら甘いよ
530デフォルトの名無しさん:2010/07/21(水) 13:34:26
どっかのスレでソース貼ってあったのを見覚えがある
531デフォルトの名無しさん:2010/07/21(水) 13:38:58
ip helper apiでググレばおk
532デフォルトの名無しさん:2010/07/21(水) 13:47:46
MFCじゃないし
533デフォルトの名無しさん:2010/07/23(金) 16:23:27
Windows7 でシャットダウンや再起動を中止させる方法を教えてください。
OnQueryEndSession で FALSE を返しても画面が暗くなり、
終了しないプログラム一覧が表示されてしまいますが、これを回避したいです。
534デフォルトの名無しさん:2010/07/23(金) 16:32:45
>>533
MFC関係ないし。
なんとなく文面もムカつくから、スレチとだけ言っておく。
535デフォルトの名無しさん:2010/07/23(金) 16:35:45
何がお前をむかつかせるのか
536デフォルトの名無しさん:2010/07/23(金) 16:41:36
この暑さのせいだな。
537sage:2010/07/28(水) 07:20:24
キーボードアクセラレーターのTranslateAcceleratorが生成した
WM_COMMAND内で、どのアクセラレーターが押されたのか
判別する方法ってない?
もしくは、アクセラレーターに付属のパラメーターをつけて、
WM_COMMANDで取得する方法。

ユーザーが動的に追加していくコマンドとして
一つのCOMMANDを複数のアクセラレーターで共有しているので、
それぞれを判別したい。
538デフォルトの名無しさん:2010/07/28(水) 13:29:56
wParamのhighをまだ使ってないならそれで
使ってるなら、lParamでアクセスできるようにして入れるとか?
539537:2010/07/28(水) 14:22:33
アクセラレーターの場合、wParamの上位ワードは1で固定らしい。
lParamは0だった。
540デフォルトの名無しさん:2010/08/05(木) 15:02:35
CListCtrlを継承して作っているのですが、

PreCreateWindow を上書きしてもコールされません。
OnCreateも駄目でした。

クラス内で生成時にスタイルを設定させたいのですが
どうやればいいのでしょうか?

541デフォルトの名無しさん:2010/08/05(木) 20:25:51
DDX_CONTROLでアタッチしている予感。
あれは、既に作成済みのコントロールに対してサブクラス化することで、
派生クラスにメッセージをルーティングしているだけだから。
普通にCreateから始めるしか無いんじゃないか?
542デフォルトの名無しさん:2010/08/07(土) 15:07:34
どうしても担当者がやれやれうるさかったらリストをリソースにスタイル数分貼り付けて
目的のスタイルのものを表示してアクティブにしてやれば解決だぜ
543デフォルトの名無しさん:2010/08/12(木) 19:50:31
CAsyncSocket使ってメールチェッカー作りたいんだけど、非同期ソケットだと順番バラバラで脳みそ軽く膿んだ。
この場合CAsyncSocketをCSocketみたいな同期クラスに作り直して使った方がいいんだろうか?(CSocketは嫌)
「非同期ソケットでいけるだろ」とか「同期ソケットでマルチスレッドの方が簡単だろ」とかアドバイスよろしく。
544デフォルトの名無しさん:2010/08/13(金) 19:12:41
>>543
普通に非同期でいけるだろ。
そもそも同期ソケットでマルチスレッドとか、複数アカウントを同時にチェックしたいとか
そういうことか? せいぜい数個のアカウントならどっちでもいいだろ。アフォか。
545デフォルトの名無しさん:2010/08/13(金) 20:23:50
このまま非同期で続ける事にしたよ。レスありがと。
546デフォルトの名無しさん:2010/08/19(木) 06:22:11
てすと。
547デフォルトの名無しさん:2010/08/28(土) 14:56:25
シングルダイアログのプログラムを新規作成するときに
最小化ボタンを付けるのを忘れてしまいました、後から追加することはできないのでしょうか?
548デフォルトの名無しさん:2010/08/28(土) 15:26:30
>>547
事故解決シマスタ
549デフォルトの名無しさん:2010/09/10(金) 20:09:23
すんません、いろんなキーワード(CListCtrl、改行、Multiline、リストビュー、オーナードロー)
などでググったんだけどわからなかったから教えてください。

CListCtrlのサブアイテムのテキストを複数行にして、
セル(?)の高さも適切に調節したいんだけど、やる方法はありますか?
550デフォルトの名無しさん:2010/09/10(金) 21:48:26
>>549
事故解決シマスタ
551デフォルトの名無しさん:2010/09/11(土) 02:31:44
オーナードローしかないな
オーナードローのやり方がわからないって話か?
552デフォルトの名無しさん:2010/09/11(土) 08:10:28
わざわざMFC限定スレで質問してるから
MFCのみでやりたいんじゃないか
553デフォルトの名無しさん:2010/09/12(日) 00:57:17
>>549
サンプルなんて、普通に見つかるじゃん。
それとも、英語はダメなヴァカ?
554デフォルトの名無しさん:2010/09/13(月) 20:50:18
CAsyncSocketを使用して、TCPサーバを作成しています。
複数のクライアントからの接続を受付られるようにしようとしてます。
1対1で通信できるところまでは作成できました。
OnReceiveで、受信できる準備ができたことはわかるが、どのソケットから受信可能なのか
知る方法はありますか?複数との通信の場合は、どのようにしたらいいのでしょうか?
555デフォルトの名無しさん:2010/09/13(月) 20:53:11
1対1が複数
556デフォルトの名無しさん:2010/09/13(月) 21:05:44
>>554
クライアントからの接続要求は、
Acceptメソッドで別々のCAsyncSocketに振り分ける事になると思うのだが。
何か作り方を間違っていないか?
557デフォルトの名無しさん:2010/09/13(月) 21:40:15
>>556
作り方は間違ってないだろ。
複数セッションの概念は理解してなさそうだが。
558デフォルトの名無しさん:2010/09/13(月) 22:56:49
554です。自己解決しました。
CAsyncServerDlgクラスで CArray<CServerASock*> m_lstcSockをメンバに持たせること。
OnAcceptで、クライアントと通信するソケットを配列に追加する。
CServerASock::OnReceiveで以下のようにソケット自身も渡す。

void CServerASock::OnReceive(int nErrorCode)
{
//if (m_dlgP) m_dlgP->OnReceive(nErrorCode); //修正前
if (m_dlgP) m_dlgP->OnReceive(this, nErrorCode); //修正後

CAsyncSocket::OnReceive(nErrorCode);
}
このようにしてみると、CAsyncServerDlgで管理するソケット配列と受信できるソケット
との対応が取れるようになり、うまくいきました。
559デフォルトの名無しさん:2010/09/17(金) 10:09:29
MFCでVC2005を使ってます
ハンドラを追加しようとしたら
コード要素’XXXX’が読み取り専用であるため、追加削除操作は実行できません
と、エラーになります。
いろいろネットで探して解決策をやってみました
・関連するソースを閉じる
・ncbファイルを削除する
しかし、どれをやっても解決しません
手動で追加できなくもないですがかなり不便です
どうか解決策しってたら教えてください
560デフォルトの名無しさん:2010/09/17(金) 10:13:13
メッセージの言ってる通り、読み取り専用なんじゃないか?
561デフォルトの名無しさん:2010/09/17(金) 10:32:37
2008だけど宣言だけ残ってたりするとそんなメッセージでるな。
562559:2010/09/17(金) 11:05:19
すいません
色々いじってたら治りました
恐らくxxxxのヘッダファイルをプロジェクトに
登録してなかったから見たいです
#includeで読んでたから大丈夫かと思ったんですが
VS側からみるとヘッダどこ?って感じだったんだと思います
563デフォルトの名無しさん:2010/09/17(金) 14:28:12
VS2005です。

ダイアログの中にリストコントロールを置いておいて、
セルをクリックするとエディットコントロールが起動するって機能を作っています。

このときのエディットコントロールはCEditを継承したもの(CMyEditとします)です。
このエディットは複数行OKであり、Enterキーにより改行させるところまでは実装しました。
改行キーが押されたときに、テキストの高さからRectを計算し、MoveWindowしています。

現状、このコントロールは、改行を増やしていっても、
親ウィンドウ(この場合はリスト)の最下部より下には表示できません。
これをなんとか、親ウィンドウ高さに関係なく、エディットコントロールの高さを決めることはできませんか?

1つだけ、試したみた方法がありますがうまくいきませんでした↓↓

CreateのときにWS_CHILDを指定していると親ウィンドウの内部にしか表示できない、
という情報を見つけたので、CreateExを使ってWS_POPUPを指示してCreateしようとしましたが、
エラーが発生しました(戻り値0)。下のように書きました。

myEdit.CreateEx(0, "EDIT", 0, WS_POPUP|ES_MULTILINE.(略), rect, parent, -1);
564デフォルトの名無しさん:2010/09/17(金) 15:26:13
親なしでコントロール出したことないな
別にウインドウ出してそこにコントロール貼るのが普通な気がする
565デフォルトの名無しさん:2010/09/17(金) 15:48:58
なんでググらないんだ? キーワードが分からんのか?
根本的な部分で、Windowsプログラミングを理解してない気がするが、
MFCとかC#とか、Win32 APIを直に使った経験がないからそうなるんだろうか。
いまどきProgramming Windowsを読めとはいいにくいが、ネット上での情報収集ぐらいできんものか。
566デフォルトの名無しさん:2010/09/17(金) 15:55:06
>>564
なるほど、最悪それで回避可能かもしれません

>>565
ググッたか→4時間ぐらい戦った
Win32 API→経験なし

MFC経験だったそんなにないけど、やらなきゃいけないんですよ。
CreateExのやり方調べたり、自作クラスをRegisterしてみたりもしましたよ。
でもたどり着けなかったんです。

そんなに言うならきっと経験豊富だと思うので
キーワードだけでも教えてくれるとうれしいなぁ
567デフォルトの名無しさん:2010/09/17(金) 15:58:36
Code Project、codeGuruで一発で出てくるんじゃね?
568デフォルトの名無しさん:2010/09/17(金) 16:21:41
>>566
たとえば、ツリービュー、リストビューのラベル編集。
ツールバーのサブメニューだったり、ドロップダウンリストのリスト部だったり。
イベントを受けて、領域を決めて、ウインドウを表示する。
表示内容は異なるが、やってることは全部一緒。ラベル編集はともかく、他のは親のサイズに関係なく表示できてるでしょう?
(ラベル編集でもできるけど)
569デフォルトの名無しさん:2010/09/17(金) 16:26:03
>>566
追記:使うのはPOPUPであってる
570デフォルトの名無しさん:2010/09/17(金) 16:35:40
>>569
いや、MFCならクラスだからスタイルなんか気にせずCEditだろ。
ttp://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c1077
571デフォルトの名無しさん:2010/09/17(金) 16:38:53
>>568-569
実は今回修正しているソースにリストから起動するコンボボックスがあるので見てみました。
確かに、コンボボックスは親のサイズに関係なく描画できていました。
ただ、そのコンボボックスのCreateにはWS_CHILDを使っているし、
特別なことをやっているようには見えませんでしたが…

POPUPだということなので(ありがとうございます)、さらに調べてみます。
572デフォルトの名無しさん:2010/09/17(金) 16:44:01
コンボボックスも親のサイズに関係するよ
はみ出るのはドロップダウンだけ
573デフォルトの名無しさん:2010/09/17(金) 16:49:21
test
574571:2010/09/17(金) 16:51:48
>>572
あー、そういえばCBS_DROPDOWNでした。
ではそいつは参考にはならないってことですね
575デフォルトの名無しさん:2010/09/17(金) 16:52:42
コンボボックスのドロップダウンリストなんかは、デスクトップを親にしてるけどな。
576デフォルトの名無しさん:2010/09/17(金) 16:54:32
鸚鵡返しは嫌われる例
577571:2010/09/17(金) 19:07:27
今週は詰んだわ。また来週やります。
もし、心優しい誰かが、ここ見ればすぐわかるからてめぇで読めやっつって
どこか教えてくれると最高。

では、ひとまずお世話んなりました
578デフォルトの名無しさん:2010/09/17(金) 19:28:54
579デフォルトの名無しさん:2010/09/17(金) 21:01:26
>>563
なんか難しく考えすぎてないか?
親をリストコントロールにしてるから、コントロールの領域でクリップされてるんだろ?
親の指定をダイアログにしてやれば解決するよ。試してみれ。
580563:2010/09/17(金) 23:10:49
親子関係がダイアログ→リスト→エディットってなってるとこを、
ダイアログ→エディットになるようにしてみたけど、確かだめだったような…
ちなみにエディットはリストがcreateしています。

せっかくアドバイスいただいたとこ申し訳無いのですが、
確認できないので、また来ます。
581デフォルトの名無しさん:2010/09/18(土) 08:38:05
>>580
ダイアログを親にしたところで、結局そのダイアログの外には出せないよ。
582デフォルトの名無しさん:2010/09/18(土) 08:58:04
そういうのやったことないな。
参考になるサイトない?
583デフォルトの名無しさん:2010/09/18(土) 09:20:19
popup(またはダイアログ)のサイズを子供のサイズに合わせて変えるしかない
584デフォルトの名無しさん:2010/09/18(土) 14:20:29
>>580
VS2010で調べてみたが、nIDに-1を指定しているのが原因っぽい。
Win32レベルでエラー返しているので2005でも事情は変わらないかと。
WS_POPUPだと、この引数はメニューハンドルと解釈されるので、
こんなメニューハンドル知らね、ってところなんじゃないか?
585デフォルトの名無しさん:2010/09/18(土) 14:30:35
>>581
リストコントロールでクリップされる→ダイアログを親に
これだけ分かってりゃ、そんなこと言われなくても分かるだろ。ヴァカが。
ダイアログでのクリップを避けるなら、デスクトップを親にして、ダイアログの
移動にあわせてMoveWindow。
他人の揚げ足とるぐらいしか能(脳だな)がないなら、部屋から出てくるなよ。
586デフォルトの名無しさん:2010/09/18(土) 15:01:21
なんで燃え上がっちゃうのかワケわからん
587デフォルトの名無しさん:2010/09/18(土) 15:26:05
>>586
ヒント:自炎
588デフォルトの名無しさん:2010/09/19(日) 13:01:00
MFCは今後衰退していく?
589デフォルトの名無しさん:2010/09/19(日) 13:23:02
中の人の趣味で進化は続いていくよ、
というか、最近の拡張は全部趣味でやっているとしか思えんw
590デフォルトの名無しさん:2010/09/19(日) 13:32:04
Windowsのデバイスドライバを作る場合MFCは活躍するの?
591デフォルトの名無しさん:2010/09/19(日) 15:15:45
MFC使ったデバドラなんてたぶんこの世にないと思う
592デフォルトの名無しさん:2010/09/19(日) 15:32:38
インストールや設定その他で使うんじゃないか?
593デフォルトの名無しさん:2010/09/19(日) 17:14:29
それはドライバとは言わない
594デフォルトの名無しさん:2010/09/23(木) 18:08:11
ユーザーがOKボタンを押さなくても
メッセージボックスを閉じるにはどうしたらいいでしょうか?
595デフォルトの名無しさん:2010/09/23(木) 18:41:07
時間きめればいい
596デフォルトの名無しさん:2010/09/24(金) 15:25:50
MFCで作ったプログラムですけどおかしな現象があります
4台の最近買ったサーバー機(WindowsServer2008-32bit)があります
そのうち3台は買ってきたそのままで、1台は自分でクリーンインストールしなおしました。
ここに同じプログラムを起動してfor文の重い処理を走らすと
クリーンしたPCだけまともな速さで動いて他の3台は遅すぎです
処理が動いてない時は0%なので他のプログラムが邪魔してるようにも思えず
どうしてこんなに処理速度に影響がでてるんでしょうか?
CPUはXeon E3110 3GHzです
このような現象を知っていたら解決策を教えてください
597デフォルトの名無しさん:2010/09/24(金) 16:27:25
フォアグラウンド優先かバックグラウンド優先かの選択がある
598デフォルトの名無しさん:2010/09/24(金) 16:52:38
ウィルスバスターが入ってるんだ
599デフォルトの名無しさん:2010/09/24(金) 17:13:21
全てバックグラウンド優先になってますが変更しても効果なしでした
ウイルス対策ソフト関係は入ってないです
もう、全Pcインストールし直しを考えてます
全然原因がわからない
600デフォルトの名無しさん:2010/09/24(金) 17:18:53
質問の仕方を勉強し直せ
601デフォルトの名無しさん:2010/09/24(金) 18:38:36
MFC関係ないだろ
MFCがプログラムの全部の動きを仕切ってるとでも思ってるのか?
602デフォルトの名無しさん:2010/09/24(金) 18:59:32
起動してるプロセスとかサービスとか全部比較しろよな
603デフォルトの名無しさん:2010/09/24(金) 19:12:02
サポートセンターへ
604デフォルトの名無しさん:2010/09/24(金) 22:13:51
>>601
MFCで作ったプログラムで問題が出ていると書いてある
つまるMFCを使わないプログラムなら差が出ないのかどうかをはっきりさせろ
605デフォルトの名無しさん:2010/09/28(火) 11:27:57
MFCで作りましたアプリについてですが。
VCのセットアッププロジェクトであるPCにソフトを入れました。
その時のアイコンが気に入らなかったので作りなおして
新たにソフトを入れ直しました。
その後に、デスクトップに手動でショートカットを作ったら
デスクトップ上だけ前のアイコンに変わりました。
前のアイコンを保持していたexe等はアンインストール&完全削除してるのに
なぜ前のアイコンが出てくるんでしょうか。
最新のexe内には前のアイコンは保持されてません
恐らくWindowsが保持してる?気がするんですが
Windowsが保持してるアイコン情報削除する方法ありますか?
606デフォルトの名無しさん:2010/09/28(火) 11:33:28
ありますが、鼬害です。
607デフォルトの名無しさん:2010/09/28(火) 11:36:55
Windowsの問題と思ってるのにMFCスレで質問する意図がわからん
608デフォルトの名無しさん:2010/09/28(火) 11:41:12
>>605
再起動
609デフォルトの名無しさん:2010/09/28(火) 12:05:45
【マジレス】超初心者の質問に答えるスレ127【エスパー】
http://hibari.2ch.net/test/read.cgi/win/1283383900/
610デフォルトの名無しさん:2010/09/28(火) 12:25:13
>>605
アイコンキャッシュをクリア
611デフォルトの名無しさん:2010/09/28(火) 13:00:33
>>610
クリアして再起動してもダメでした
午後もつぶれそう
612デフォルトの名無しさん:2010/09/28(火) 13:26:47
Windowsは時々OSの再インストールするのがいいらしいよ
613デフォルトの名無しさん:2010/09/28(火) 14:09:45
605
自己解決しますた
614デフォルトの名無しさん:2010/09/28(火) 16:42:55
質問先でいろいろやり取りがあって解決したのを見て
こっち来たら自己解決って、、、吹いた

騙り?
615デフォルトの名無しさん:2010/09/30(木) 13:58:33
VS2005のMFCでMDIにして、最近はやりのタブ切り替えがドキュメントごとにできるようになる?

中古でVS2005買うかもしれないので・・
616デフォルトの名無しさん:2010/09/30(木) 14:34:48
できるかと聞くなら、できると答える。
が、2008 or 2010の方がいいな。
617デフォルトの名無しさん:2010/09/30(木) 16:25:08
>>616
オヌヌメは2008か2010ですか。ありがとうございます。
私のPCは2008Expのソースを保存するたびに固まるので
2005にしたいんです(;ω;)

できると聞いて、うれちんこ☆
618デフォルトの名無しさん:2010/09/30(木) 17:06:08
出来ると言ってるだけで簡単に出来るとは言ってない。
ここでこんな質問をしてる時点でほぼ不可能だとは思うが・・・。
619デフォルトの名無しさん:2010/09/30(木) 17:15:02
MFC使うつもりなら2008もExpじゃないんだよね?
だったら2008か2010のがいいし、2008Sp1以降なら
ウィザードでクリックするだけでタブ付きMDIが出来上がるw
620デフォルトの名無しさん:2010/10/01(金) 21:19:31
>>619
ぽっくんのDDR1512MBのマシンじゃ、2008は固まってしまうんです><;
621デフォルトの名無しさん:2010/10/02(土) 01:19:47
>>620
家のPCもDDRの1.5GBだが、x64Win7+VS2010を動かせているぞ。
……とかボケてみたり。環境は嘘じゃないけど。
622デフォルトの名無しさん:2010/10/02(土) 10:29:20
自助努力
623デフォルトの名無しさん:2010/10/04(月) 10:48:24
MFCを使ってファイルに高速にアクセスする方法ないでしょうか?
自分で考えたのはファイルサイズ分のメモリを動的に確保して
ファイルの内容をごそっとメモリに展開します。
そして、CMemFileか何かにメモリを割り付けて
ファイルのごとくアクセスするってやり方です。
もっと簡単に出来そうな方法ありますでしょうか?
VSは2005です

ちなみに読ませたいファイルはテキストファイルで
カンマ区切りで情報が格納されています。
したがってfgetsで1行1行読み込ませています
行が10万行とかあるので読み込むのに
20秒とかかかってしまいます。
3秒くらいでサクッと読めたら嬉しいです
624デフォルトの名無しさん:2010/10/04(月) 11:32:49
・HDDにアクセスするときは一行ずつ読まずに固定サイズで読み込む
  (シークタイムとヘッダ移動の発生回数を減らす)

プログラム的な解決ではないが、
・Ramphantomを入れる
・SSDを使う
625デフォルトの名無しさん:2010/10/04(月) 12:42:04
「VC++で、CFileを使ったファイルの一気読み、一気書き」
でぐぐるといいと思う
626デフォルトの名無しさん:2010/10/04(月) 13:07:28
カンマ区切りなら1バイトずつ頭から最後まで見ることになるから
結局時間かかるよ
627623:2010/10/04(月) 13:24:29
みなさんありがとうございます。

626さんのおっしゃるとおりで実はカンマ区切りの処理を取り込むのに
処理全体の95%近く処理時間がかかっていました。
ファイル読み込みだけにしたら1秒もかからず起動しました。
カンマ区切りの読み取り部分を高速化してみます。
628デフォルトの名無しさん:2010/10/04(月) 17:33:29
バイナリデータにしてヘッダ情報に読みたいデータの番地を書いておいて
fseekで一発で飛べるようにしろよ
629デフォルトの名無しさん:2010/10/04(月) 17:55:42
>>628
単純なテキストををバイナリに変更要求するとか、おまえセンスなさすぎ
630デフォルトの名無しさん:2010/10/04(月) 18:03:51
>>629
10万行とか続いた時点で単純なテキストじゃねーよすでにw
631デフォルトの名無しさん:2010/10/04(月) 19:04:01
えっ?
632デフォルトの名無しさん:2010/10/04(月) 21:09:55
>>631
経験が少ないとわかんないんだろ?
大量にデータが増えたときにかなり多くのリスクも入ってしまっているから
データが少ないときと同じように管理したって駄目なんですぅー(笑)
ハイ、残念♪
633デフォルトの名無しさん:2010/10/04(月) 21:41:23
>>632
残念なのはおまえの頭だ。
データ量のリスクとかアフォかと。
おまえが考えるシステムってのは、さぞや穴と虫だらけなんだろうなw
634デフォルトの名無しさん:2010/10/04(月) 21:49:05
>>633
横から突っ込むけど
今回の場合ってテキストでやるよりバイナリでやったほうがメリット多いんじゃないの?
10万行もあって処理速度が大事なのにテキストでやり続けるメリットは何?
635デフォルトの名無しさん:2010/10/04(月) 22:08:12
なんか論点がずれてるな。
>>623が求めるのは、高速なファイルアクセス処理であって、データの変換は必要ない。
コンバートしてから処理するより、普通に考えたらそのままテキストで処理した方が速いよな。
バイナリにしろとか言ってる馬鹿は、全体の処理時間を考えてないだろ。

特に制限がないなら、いったんデータを全部メモリに読み込んでそれから処理。
これでいいんじゃね?
636デフォルトの名無しさん:2010/10/04(月) 22:21:50
>>635
リリース時に決まっているデータであれば
はじめからバイナリにしておいたほうがよくないか?
そこの仕様は>>623には書いてないが・・・
637デフォルトの名無しさん:2010/10/04(月) 22:22:14
つーか、高々10万行で何がたがた言っているんだ?
精々数10MBだろ。普通に一括読み込みするだけじゃん。
638デフォルトの名無しさん:2010/10/04(月) 22:32:01
バイナリ厨はなにこだわってるの?
>>623を読む限り、なんども処理するから高速化したいんだろう? (違ってたらアレだが)
どう考えても>>637が正解としか思えん。
時間コストが、(変換+処理)<(テキストベタ処理)にならん限りバイナリにするメリットが
まったくないわけだが。
639デフォルトの名無しさん:2010/10/04(月) 23:12:19
>>638
テキスト10MBを読む(1文字ずつ処理すると)とPC固まるぞ
文字列処理は結構重い
自分でやってみた経験がないなら黙ってたほうがいいとおもうけどね
640デフォルトの名無しさん:2010/10/04(月) 23:14:41
PCが固まるってwwwwwww
641デフォルトの名無しさん:2010/10/04(月) 23:15:28
>>640
やったことないんでしょ?
黙ってろよ
642デフォルトの名無しさん:2010/10/04(月) 23:15:43
マルチスレッドも知らないカスかw
643デフォルトの名無しさん:2010/10/04(月) 23:17:52
>>640
たかが数十MBを1byteづつ処理したってPC固まったりしねぇよw
PCもプログラムのヘボそうだが、一番ヘボいのは脳味噌だなwww
644デフォルトの名無しさん:2010/10/04(月) 23:33:49
>>643
はい、やったことないのバレバレ
なんだかんだいって重くなんだよ
てめーが想定してんのは10万行のデータをなんの比較・加工もしねーで
領域に格納した場合だけしか脳みそにねーだろ?
普通によくある処理をしただけでも1MBだって3秒は動かないね
645デフォルトの名無しさん:2010/10/04(月) 23:41:55
>>644
残念だったな。経験してるよ普通になw
アニメーション付き3Dのモデルデータのコンバータなんか作ったことあるか?
テキスト形式の.xで100MBぐらいのやつを処理すると、まさにそんな感じだ。
PCが固まる? おまえとおまえのpgが糞だからだお? www
これ以上恥かく前にキエロよな?
646デフォルトの名無しさん:2010/10/04(月) 23:45:46
>>645
ハイハイ、やってみてからいってねw
647デフォルトの名無しさん:2010/10/04(月) 23:54:48
100万行程度なら日常的にawkで処理しているんだが。
まさか、Cでawkより重くなるほど器用なプログラムの話がしたいわけでもあるまいに。
648デフォルトの名無しさん:2010/10/05(火) 00:08:00
>>647
例を出すにしても
100万行のテキストファイルとか頭悪いな
649デフォルトの名無しさん:2010/10/05(火) 00:11:27
今のエクセルでも限界まであとちょっとってところだな
650デフォルトの名無しさん:2010/10/05(火) 06:57:21
パース処理よりvectorとかCArrayに領域確保なしに突っ込んでるから遅いとかじゃないのか?
651デフォルトの名無しさん:2010/10/05(火) 07:10:38
>>650
そんなアフォなことしねーよ
652デフォルトの名無しさん:2010/10/05(火) 07:27:21
>>627
テキストでトークン分解してるのが遅いんでしょ?
早くはできないと思う
653デフォルトの名無しさん:2010/10/05(火) 07:33:34
んなばかな。初心者が自前で分解しようとするから遅いんだろ。
654デフォルトの名無しさん:2010/10/05(火) 23:03:10
CStringのGetBuffer()って引数ありと無しの二つありますけど、
無い方を使うとヒープが壊れる事があったりして困ります。
両者の違いって何ですか?
調べてみても引数無の方は情報が無くって・・・
655デフォルトの名無しさん:2010/10/05(火) 23:44:42
>>654
ソース見ろよ、大馬鹿糞野郎
656デフォルトの名無しさん:2010/10/10(日) 03:14:36
別cppファイルの別クラスからIDC_EDIT1に値を入れようしています。

下記コードで▼hogehoge.cppのEditChange()を呼び出すと、
関数内で呼ばれる別クラス関数CHogeDlg::ChangeEdit1の
edit1->SetWindowText(text);
の部分でEXEが落ちてしまいます。(コンパイルは出来る)

同じCHogeDlgクラス内からChangeEdit1を呼んだ時は
問題なく値が挿入されるのですが…。

あとedit1->SetWindowText(text);の一文を消して
代わりにAfxMessageBox(text);の一文を入れてやると、
別クラスから呼んでもtextの中身がメッセージボックスで表示されるので、
別クラスからの呼び出し方に問題があるわけではなさそうです。
どなたかアドバイスいただけますでしょうか。

■hogeDlg.hのpubulicに
void ChangeEdit1(char* text);

●hogeDlg.cppに
#include "HogeDlg.h"
void CHogeDlg::ChangeEdit1(char* text){
CEdit* edit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
edit1->SetWindowText(text);}

▼hogehoge.cppに
#include "HogeDlg.h"
void HogeHoge::EditChange(){
CHogeDlg cdd;
char* t="unko";
cdd.ChangeEdit1(t);}
657656:2010/10/10(日) 03:17:15
長くなりますがhogeDlg.hの内容を書き出しておきますね、こんな感じです。

#pragma once
#include "afxwin.h"
#define WM_NOTIFYICON (WM_USER+1)

class CHogeDlg : public CDialog{
public:
CHogeDlg(CWnd* pParent = NULL); // 標準コンストラクタ
enum { IDD = IDD_Hoge_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート

private:
NOTIFYICONDATA m_Icon;

protected:
HICON m_hIcon;
afx_msg HRESULT OnNotifyIcon(WPARAM wPram, LPARAM lParam);
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()

public:
afx_msg void OnBnClickedStart();

protected:
virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);

public:
void ChangeEdit1(char* text);
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);};
658デフォルトの名無しさん:2010/10/10(日) 07:46:40
>>656
>CHogeDlg cdd;
が違う。
あとMFCなんだからCString使えば?
659デフォルトの名無しさん:2010/10/10(日) 09:02:49
ダイアログクラスのインスタンスへのポインタを渡してやらなきゃ無理。
CHogeDlgのインスタンスを持っているクラスか関数からHogeHogeクラスのインスタンスに何らかの形で引き渡すか、
いっそのことアプリケーションクラスから辿れるように作るか。
660デフォルトの名無しさん:2010/10/10(日) 09:33:59
何をやりたいのか知らないけど、
例えば、ファイルを読んで、何か編集処理をして、結果をeditへ表示
みたいな処理だとすると

1 dialogクラスで領域を確保
2 dialogクラスからファイルを読む外部ルーチンを呼ぶ
3 dialogクラスから編集用の外部ルーチンを呼ぶ
4 dialogクラスで結果をeditへ表示

2と3を外部ルーチンでやるとしても
外部からeditを触る必要はないと思うんだけど
どういう考えで外からeditを触ろうとしているのかな?
661デフォルトの名無しさん:2010/10/10(日) 13:44:03
>>658
>>659
> ダイアログクラスのインスタンスへのポインタを渡してやらなきゃ無理

とのことなので
CHogeDlg* cdd=new CHogeDlg;
cdd->ChangeEdit1(t);

あるいは
void (CHogeDlg::*pChangeEdit1)(char*) = &CHogeDlg::ChangeEdit1;
CHogeDlg cdd;
CHogeDlg* pCdd = &cdd;
(pCdd->*pChangeEdit)(t);

のように書いてみたいんですがIDC_EDIT1に代入できませんでした

>>660
>外部からeditを触る必要はないと思うんだけど

実際にIDC_EDIT1に値を代入する部分(SetWindowText)はCHogeDlgクラスに書いてあるので
そもそも外部から触っているという意識はありませんでした…
意図はネットワーク越しに変数が動的に送られてくるのでダイアログクラス外からアクセスした方が簡単だったからです。
頓珍漢な答えになっているかも知れませんが。
662デフォルトの名無しさん:2010/10/10(日) 14:00:32
なんつーか、VB的な発想は捨てて、一度真面目にC++の講習を受けた方がよさそうな気がする。
そんな行き当たりばったりの書き方じゃいつか破綻するぞ。
663656:2010/10/10(日) 14:10:07
下記サイトを参考にCHogeDlg側にもメンバ関数ポインタをダイレクトに定義し、
メンバ関数へのアドレスを得て、ポインタにセットしたのですが、
やはりSetWindowTextの部分でEXEが落ちます…

http://kuronuko.com/genericcpp/memberpointer.html
664デフォルトの名無しさん:2010/10/10(日) 14:33:22
CHogeDlg* cdd=new CHogeDlg;
cdd->CreateDialog(IDD_DIALOG??);
cdd->ShowWindow(SW_SHOW);
(cdd->GetDlgItem(IDC_EDIT1))->SetWindowText("abc");
cdd->UpdateData(FALSE);

こんな感じでどうだ?
665デフォルトの名無しさん:2010/10/10(日) 14:39:23
UpdateData(FALSE)だと戻ってしまうので、削除
orz
666656:2010/10/10(日) 15:40:22
>>664
別クラスのhogehoge.cppからIDC_EDIT1への値の代入までやってしまう方法ですね、なるほど

resourse.hを見てIDD_HOGE_DIALOGに変更してUpdateData(FALSE)を削除してやってみましたが、

マクロ 'CreateDialogA' に指定された実引数の数が少なすぎます。
'CreateDialogParamA' : 'CHogeDlg' のメンバではありません。

のエラーが出ました
667デフォルトの名無しさん:2010/10/10(日) 16:41:31
668デフォルトの名無しさん:2010/10/10(日) 16:43:32
MFCの基本なので、
モードレスダイアログ
あたりでぐぐってくれ。
cdd->CreateDialog(XXXX)

cdd->Create(this)


必要なくなったら、下記も忘れずにな。
cdd->DestroyWindow();
delete cdd;
669デフォルトの名無しさん:2010/10/10(日) 22:14:49
>>668
ありがとうございます!
なるほどモードレスダイアログかあ
670デフォルトの名無しさん:2010/10/16(土) 15:14:37
RichEditCtrl 上のテキストの位置およびサイズ取得方法を教えてください。 すみませんクレ厨で…
671デフォルトの名無しさん:2010/10/29(金) 19:39:42
VS2010 でコンパイルされた全ての単体 MFC アプリケーションに脆弱性が存在
http://slashdot.jp/security/10/10/28/2224214.shtml
672デフォルトの名無しさん:2010/10/29(金) 19:48:33
XP以前はシステムにdwmapi.dllが無い為に、
通常の検索ルートを通ってしまうわけか。
673デフォルトの名無しさん:2010/11/02(火) 19:05:46
すみません、基本的な質問ですが、

CString a[10];
char b[10][256];

lstpcpy(b[0],a[0]);
でa[0]="abc"の値がb[0]にコピーされません。
何か問題ありますでしょうか?他の方法がありましたら教えていただけますようお願いします。
674デフォルトの名無しさん:2010/11/02(火) 19:10:01
デバッガで確認
675デフォルトの名無しさん:2010/11/02(火) 19:17:08
>>673
lstpcpyはlstrcpyの間違いと思える。
そうなら、引数に渡すものが違う。lstrcpyの第二引数はLPCTSTR。
他人が書いた関数を使わせてもらうのだから、こっちがそれに合わせなければならない。
CStringにoperator LPCTSTRがあるのでそれ使う。
「CString LPCTSTR」でググると説明いっぱい出るよ。
676デフォルトの名無しさん:2010/11/02(火) 19:21:41
>>675
lstrcpy なら自動的に型変換(operator LPCTSTR)が呼び出されるんじゃないの?
677デフォルトの名無しさん:2010/11/02(火) 19:24:05
>>673
ウォーニングが出てませんか?
678デフォルトの名無しさん:2010/11/02(火) 19:31:25
コピーの前にちゃんとa[0]に"abc"が入ってる?
b[0]に入ってないってのは何で確認してる?
679673:2010/11/02(火) 19:32:45
レスありがとうございます。
はいlstrcpyの間違いです。VS2005ですが、ワーニングは出てません。
デバッガで関数は実行されるのですが、値が入りません。
680デフォルトの名無しさん:2010/11/02(火) 19:35:39
Release ビルド? Debug ビルド ?
681デフォルトの名無しさん:2010/11/02(火) 19:37:17
大抵こういうのって書いてないところに問題があったりするんだよな・・・。
きちんと全部そのまま書けばいいのに・・・。
682デフォルトの名無しさん:2010/11/02(火) 19:37:25
>>678

はい値は入ってます。
関数実行後、第一引数に値が入ってません。
うまく動かなかったので、デバッグモードでステップ運転で確認してます。
683673:2010/11/02(火) 19:39:35
>>680
デバッグビルドです。
684デフォルトの名無しさん:2010/11/02(火) 19:44:37
CString a[10];
TCHAR b[10][256];
a[0] = _T("abc");
lstrcpy(b[0], a[0]);
MessageBox(b[0]);
これをそのままコピーして実行して"abc"と表示されれば問題なし。
他の部分に問題がある。
685質問者:2010/11/02(火) 19:48:19
ありがとうございます。
家にはデバッグ環境がないため、明日会社で実行してみます。
686デフォルトの名無しさん:2010/11/02(火) 23:31:49
>>673
この程度の内容なら
 MFCをサポートするコンソールアプリケーションを新規に作って、
 問題を単純化したソースを作成し、
 ソース全文を貼り付ける。
 エラーや警告が出ればその内容を示す。
 異常だとした判断基準や、出力結果などを示す。
ことは簡単に出来そう。
多くのケースで、
 問題を単純化したソースを作成
の段階で自己解決する。
掲示板で聞くより速くて効率的。
687デフォルトの名無しさん:2010/11/13(土) 23:57:48
Microsoft Web Browser ActiveXコントロールを
ダイアログベースアプリケーションで使っています。
ExecWB関数にOLECMDID_FINDを使うとページ内検索ウィンドウが出るところまで来ました。
この検索ウィンドウを閉じたことを知りたいのですが、どうしたらいいでしょう。
コールバック関数を設定してあげればいいとは思うのですが、設定する関数がどれなのか、
どこなのか、理解出来ていません。どうかご教示願えませんでしょうか。
688デフォルトの名無しさん:2010/11/20(土) 00:35:26
vs2008でVC#だと、ツールボックスに沢山コンポーネントがありますが、
VC++MFCだとちょっとしかありませんよね

VC++ってWindowsアプリケーションを作成するには不向きなのですか?
689デフォルトの名無しさん:2010/11/20(土) 00:41:51
後発のC#を売るには、C#の機能を上げて、C++の機能を下げるしかあるまい。
690デフォルトの名無しさん:2010/11/20(土) 00:48:57
そうだよ不向きだからC#で作るのがいいよ
691デフォルトの名無しさん:2010/11/20(土) 11:03:54
VS2008SP1入れたか?
訳判らん位MFCクラスが一気に増えるぞ。
692デフォルトの名無しさん:2010/11/20(土) 11:24:43
不向きというわけではない
基本的にすべてのアプリをネイティブで作れる
たとえると、C++ & MFC は一昔前のアセンブラみたいなもので、
C#/VB はRAD の延長だな

生産性も、経験豊富でなれたやつな人なら C#に負けない
ただ、欠点は習得(実用レベルを作るまで)にえらい時間がかかること
だから、新人教育には使わない -> MFC 人口は減るという運命にある
しかし無くなることはない
なぜなら、ネイティブアプリを作るほぼ唯一の手段だから


693デフォルトの名無しさん:2010/11/20(土) 14:58:56
>>692
> なぜなら、ネイティブアプリを作るほぼ唯一の手段だから
"ほぼ"を考慮しても言いすぎ。
694デフォルトの名無しさん:2010/11/20(土) 18:12:28
MFCは糞
大事なことなのでもう一度言う
MFCは糞
695デフォルトの名無しさん:2010/11/20(土) 22:19:45
でも、.NETよりはましだな

あの、ポトペタ環境がどうもなじめない
下手な奴一緒だと、メインフォームで数千行なんてコード書いてきそうw
696デフォルトの名無しさん:2010/11/20(土) 22:23:57
>>695
数千行のmain()とどっこいどっこいではないかと。
697デフォルトの名無しさん:2010/11/21(日) 05:13:41
下手な奴が触るとユーザーインターフェースとビジネスロジックがごっちゃになるのは
C#もMFCも同じだな。
698デフォルトの名無しさん:2010/11/21(日) 10:09:52
MFCをちゃんと使えるやつは、C#もちゃんと使えるけど、
むしろかゆいところに手が届かずに不便さを感じる。

C#から入ってしまったやつには、MFCを使いこなすのはほぼ無理。
699デフォルトの名無しさん:2010/11/21(日) 13:56:54
MFCもダイアログベースで充分ポトペタじゃないか?

C#も.netが用意してないことはDllImport("user32")でSendMessage()とかなっちゃうのがなぁ。
ListViewのスクロールが見つからなくてぐぐって結局SendMessage(LVM_SCROLL)。
なんかがっかり。台無し。
700デフォルトの名無しさん:2010/11/21(日) 14:57:17
CListCtrl::Scroll
リスト ビュー コントロールの内容をスクロールします。
701デフォルトの名無しさん:2010/11/21(日) 17:46:48
702デフォルトの名無しさん:2010/11/21(日) 21:46:09
>>698
MFCをちゃんと使えるやつが、C#を使う理由がわからん
703デフォルトの名無しさん:2010/11/21(日) 21:48:40
どんなにMFCを使いこなせていてもC#で作れる物ならC#の方が生産性高いから
704デフォルトの名無しさん:2010/11/21(日) 21:54:50
>>703
それは、C++やMFCが使いこなせていない証拠
705デフォルトの名無しさん:2010/11/21(日) 21:55:55
MFCを使って色々アプリ作ってるが、
全然"MFCをちゃんと使"ってない自信がる。
つーか"C++すらちゃんと使"ってねぇな。
706デフォルトの名無しさん:2010/11/21(日) 21:58:35
>>704
そう思うのはC#を使いこなせていない証拠
707デフォルトの名無しさん:2010/11/21(日) 22:03:50
>>706
C#なんて使いこなせてもなんのやくにもたたん
次VSでは外されるんだからw
708デフォルトの名無しさん:2010/11/21(日) 22:07:44
>>707
話しがズレててアホにしか見えないけど、C#が時期VSから外れるってマジ?
709デフォルトの名無しさん:2010/11/21(日) 22:22:17
表現の自由は大切だよね。
710デフォルトの名無しさん:2010/11/21(日) 22:28:59
次VSで外されるの意味が分からんのだけど誰か教えて。
711デフォルトの名無しさん:2010/11/21(日) 23:21:55
まず、VSとは何か?

ここからつめていったほうがいいとおもう
712デフォルトの名無しさん:2010/11/21(日) 23:58:17
MFC vs C#
713デフォルトの名無しさん:2010/11/22(月) 00:00:22
C#で出来るならC#でいいだろ。MFCを選ぶ理由が無い。まぁスレ違いだが。
714699:2010/11/22(月) 09:52:28
>>701
それなの?
ってか単純にSendMessage(LVM_SCROLL)を置き換えてもスクロールしないんだけど、
なんかやりようがあるのかな。
CListCtrl::Scroll相当のものなら名前「Scroll」にしそうだけど。
ってスレ違いだね。C#スレ行くわ。
715デフォルトの名無しさん:2010/11/23(火) 08:32:30
毎回思うんだけど
MSはサンプルコード書けよな
ドキュメントなんていっくら詳しく書いたって動作がわからなきゃ意味ねーんだっつの

通常のとCEで違うコード書かなきゃいけないとか普通にやりやがるし
それ、やるんだったらサンプルコード書けと
716デフォルトの名無しさん:2010/11/23(火) 10:07:43
動作は実行してからのお楽しみです(キリ
717デフォルトの名無しさん:2010/11/23(火) 12:37:20
MFCがサンプルの代わりになってる面はあるな
718デフォルトの名無しさん:2010/11/23(火) 12:57:00
MSDNもサンプルあるけど、MSのサンプルコードって汚いよね。
外人のセンスってこうなのかってよく思う。
719デフォルトの名無しさん:2010/11/24(水) 18:22:57
英語版のMSDNは割とサンプルコード載ってない?
日本語版のMDSNはクソみたいなページだらけだけど。
720デフォルトの名無しさん:2010/11/24(水) 18:35:19
載ってるか載ってないかじゃなくて汚いって話だろ
721デフォルトの名無しさん:2010/11/24(水) 22:02:34
>715 は載ってないと言ってるように見えるけど
722デフォルトの名無しさん:2010/11/24(水) 22:40:25
>>719がアンカーも知らないお客様だから悪い
723デフォルトの名無しさん:2010/11/26(金) 11:30:57
タイトルバーの右上にある、ウィンドの最大化(サイズの復元)のボタンを押したときの動作と同じことを
自作のボタンでやりたいのですが、SendMessageなどで簡単に実装可能でしょうか?
724デフォルトの名無しさん:2010/11/26(金) 12:40:47
可能
725デフォルトの名無しさん:2010/11/26(金) 17:39:41
>>715
ドキュメントはいくら詳しくても動作の理解の助けにはならない、の意か?

サンプルが欲しいのは、どっちの理由
・実際のコードの方が解説より分かりやすい
・コピペで自分のプログラムに取り込める方が役に立つ
726デフォルトの名無しさん:2010/11/26(金) 19:55:24
>>725
>・実際のコードの方が解説より分かりやすい
これ
実際に動くために必要なコードがわからない場合が多い
〜メッセージ処理中にやらないと動作しないとか
そういう暗黙的な取り決めが多すぎ
727デフォルトの名無しさん:2010/11/27(土) 09:19:31
書いてある意味が判らなくて結局メーカーのソースに当たって見たら
実は記事の方が出鱈目でしたっていう日経新聞みたいな
728デフォルトの名無しさん:2010/11/27(土) 17:57:23
プログラムがどういう仕組みで動いているのか洞察する能力が要求される
技術文書に書いてないカラクリてんこ盛り

MFCは特にその傾向が強い
MFC使いになるのが難しいのはその辺に原因がありそう
729デフォルトの名無しさん:2010/11/27(土) 18:12:34
生のWin32APIを便利なフレームワークにした訳でもなく
ただブラックボックスにして使い難くしただけの糞クラス
730デフォルトの名無しさん:2010/11/27(土) 18:13:25
>>726
俺今、技術文書書いてる所
詳しく解説しようと思っているが、サンプルも沢山入れるようにしよう
731デフォルトの名無しさん:2010/11/27(土) 18:32:39
MFCは昔からソース付けてるじゃねえか。
そういうのはブラックボックスとは言わない。
まあソースが無かったらキレていただろうけどw
732デフォルトの名無しさん:2010/11/27(土) 18:38:22
ほとんどはMFC経由でWin32API呼んでるだけで、
仕組みも何もやってることは同じだから説明するまでもないんだよ
特にわかりにくいと思われる部分はちゃんと解説あったはず。
733デフォルトの名無しさん:2010/11/27(土) 19:28:14
>>730
あんまり詳しい解説入れられても動くコードがないとこのまわりはさっぱりわからない
逆に動くコードさえあったらあんまり解説はいらない
面倒だからといって他の機能もはいったごった煮サンプルを作られると
今度はどの要素がその注目部分を動かしているのか特定できない
734デフォルトの名無しさん:2010/11/27(土) 19:39:51
それはあほすぎる
735デフォルトの名無しさん:2010/11/27(土) 20:35:33
今たまたま通知領域(タスクトレイ)にアイコンを登録するアプリを作っていたんだ。
それで気付いたんだが、explorerが再起動したら通知領域に再登録しないといけないんだよな。
市販アプリでもそれをしていないのがあって、タスクトレイに無いのに気付かず最小化すると二度と復旧できないと言う。
おまけに、登録してあるときに強制終了されるとアイコンが残骸として残ってしまうし。
そう言う、所謂TIPSだらけなのがMFCのいやらしいところだよね。
736デフォルトの名無しさん:2010/11/27(土) 21:07:09
MFCは何か独自な方法でやってるということか
737デフォルトの名無しさん:2010/11/27(土) 22:41:32
.NETのSystem.Windows.Forms.NotifyIconのような実装は、
MFCに標準で含まれていなかったと思うのだが。
738デフォルトの名無しさん:2010/11/27(土) 23:05:59
単にMFCでプロジェクト作っただけなのに
MFCとほとんど関係ないC言語の質問するやつとかいるから
そういうたぐいの人間かもしれない。
739デフォルトの名無しさん:2010/11/27(土) 23:29:37
つーか、SDKで書いている人間にとってはWellKnownなのに、MFCを使っている人間は知らない類の話は多いな。
740デフォルトの名無しさん:2010/11/28(日) 08:37:31
うんこなう
741デフォルトの名無しさん:2010/11/28(日) 13:28:51
windows7でAeroにしたら
リボンバー使ったウィンドウの外枠の表示がおかしくなるんだが
どうにかならん?
742デフォルトの名無しさん:2010/12/04(土) 12:43:39
質問です。
作画の全てをOnDrawでやると動作がモッサリしてしまうので、
下記の処理にしています。
 1.ViewのコンストラクタでCDCとCBitmapのオブジェクトを作成し、
 2.必要な時にCDCとCBitmapを書き直す。
 3.OnDrawでは用意された上記CBitmapを貼り付ける処理だけを行う。
 4.ViewのOnDestroyでCDCとCBitmapのオブジェクトを削除する。
上記処理に何か問題ありますか?
問題あるとしたらどういった問題でしょうか?
色んなサイトを見ると、
 "使い終わったCDC,CBitmapはすぐに削除しなさい"
見たいな事が書かれているので、上記処理をやって良いのかどうか迷っています。
743デフォルトの名無しさん:2010/12/04(土) 13:22:20
>>742
CDC絡みは、Win9x系でシステム全体の共有DCの使える数の制限がきつかったからだな。
WinNT系はメモリ量に制限されるだけだから、直ぐ解放とかは特に不要。
ただ、毎回GetDCしたところで大したコストにならない気もするけど。
CBitmapはViewが閉じられる時に使い終わったと解釈できるから、
そのやり方で問題ないかと。頻繁に生成・削除を繰り返すものじゃないし。
744デフォルトの名無しさん:2010/12/05(日) 22:46:08
>>743
どうも。
CBitmapはそれでOK。
CDCはそれでもまず問題ないが、
毎回作り直しても大した負荷にならんから、
作業が終わったら破棄するのがあえて言えば無難。
って感じですかね。
745デフォルトの名無しさん:2010/12/13(月) 16:50:53
MFCを使いたいわけじゃなく、
基板(チップ)のサンプルがMFCベースでした。

Expressエディションでコンパイルできなくて困ってまつorz
746デフォルトの名無しさん:2010/12/13(月) 17:09:55
UIにMFC使ってるだけで
基板とやりとりする部分はMFCだろうが何だろうが関係ないはず
747デフォルトの名無しさん:2010/12/13(月) 17:32:48
スタンダードエディションを買えばおk
748デフォルトの名無しさん:2010/12/13(月) 22:40:21
Expression Studioにくっつてくるやつか。
Expression Studioも前バージョンは3万円くらいだったはずなのに
現バージョンは1200万円くらいするんだっけ?高いなー。忘れたけど。
749デフォルトの名無しさん:2010/12/15(水) 00:47:14
ACの方がお得だが?
別ににんしょうなんてないし
750デフォルトの名無しさん:2010/12/31(金) 09:02:25
おまえが馬鹿っていってる八割以上の人間も
少なくともおまえよりは優秀なんだが。

751デフォルトの名無しさん:2010/12/31(金) 09:07:01
公務員乙
752デフォルトの名無しさん:2010/12/31(金) 16:46:23
他人を貶めることで相対的に自分の地位を上げようとする人はそれが意図的であれ無意識であれその人が愚かなだけだって誰かが言ってた。
753デフォルトの名無しさん:2010/12/31(金) 17:33:02
2chは愚か者の溜まり場だから何を言っても無駄
754デフォルトの名無しさん:2010/12/31(金) 23:15:20
♪おいで金と銀の器を抱いて
♪罪と罰の酒を飲もうよ
♪ここは愚か者 の酒場さ
755デフォルトの名無しさん:2011/01/04(火) 18:45:19
MFCて拙速で作った失敗作なんだろ
756デフォルトの名無しさん:2011/01/06(木) 12:16:05
MSのことだからじっくり作っても失敗してると思うよ
757デフォルトの名無しさん:2011/01/11(火) 10:45:51
20〜30個のコントロール(CStatic,CButtonなど)を、EnableWindow()で有効無効を同時に切り替える処理を作って
いるのですが、ボタンすべてが一斉に切り替わって欲しいところで、パラパラと目で見てわかる程度の速度で
切り替わる結果になってしまっています。
 これを一気に切り替えるか、最低でも速度を上げたいと考えているのですが、CWnd::Invalidate()などを利用して
もうまくいってくれません。
 Aero(というか、パフォーマンスオプションの視覚効果)が邪魔をしているのではないかという当たりをつけたのですが、
これを、当該処理中だけ切り替えるなどの方法、またはそうまでしなくても速く切り替えを行う方法などはありますでしょうか?

 環境はWindows 7 Pro、Visual Studio 2008で、動作実施を行う対象はXP〜7までとなっています。
758デフォルトの名無しさん:2011/01/11(火) 11:18:59
>>757
ダイアログ自身のSetRedraw()で行けるかも
759757:2011/01/11(火) 12:44:09
>>758
> ダイアログ自身のSetRedraw()で行けるかも

 それも思いついて試したのですが、やはりだめでした。
症状が出ているのが開発用のノーパソで、現在のところはほかのマシンでは同様にならないので大きな
問題とは認識されていないのですが、実際に動かす環境で起こるのは可能な限り避けたいところなのです。
760デフォルトの名無しさん:2011/01/11(火) 12:58:58
プロパティシートでダイアログ切り替えがスムーズなら
頭使えば可能なはずだし、無理ならマシンの問題
761デフォルトの名無しさん:2011/01/12(水) 21:35:27
その手の実装で、タブコントロールを使ったことがある
同時に有効・無効にしたいコントロールを一つのタブに乗せる
762デフォルトの名無しさん:2011/01/13(木) 15:52:06
CTabCtrlにそんな機能ないだろ
763デフォルトの名無しさん:2011/01/15(土) 11:44:43
MFCでActiveXコントロールを作成していますが、
「安全マーク」のつけ方がわかりません。

「IObjectSafety」を実装すればよい、という記述は見つけましたが、
実際どうするかわかりませんでした。

ご教授いただけないでしょうか?

ATLでやる場合の情報は見つけたのですが、MFCは見つけられませんでした。。
764デフォルトの名無しさん:2011/01/15(土) 12:10:30
そんなやつが作ったの怖くて使えないよ
765デフォルトの名無しさん:2011/01/15(土) 13:31:22
>>763
それにぴったりのを見つけたからリンク貼っとく。
http://abilify.web.fc2.com/ActiveX/IObjectSafety.htm
昔作ったことがあったのに、もう完全に記憶から抜け落ちているなあ……
766デフォルトの名無しさん:2011/01/19(水) 09:57:42
CPaneDialogをドッキング状態で、リサイズできなくする方法を
ご存知でしたら教えていただけないでしょうか。
過去ログで、CanBeResizedをオーバーライドすればいいような
ことが書いてあったので、やってみたんですけどリサイズ出来
てしまうんです。
767デフォルトの名無しさん:2011/01/20(木) 08:00:49
>>766
Create()時にAFX_CBRS_RESIZEを付けてないですか?
768デフォルトの名無しさん:2011/01/20(木) 11:16:07
>>767
付けてました。というかデフォルトでAFX_DEFAULT_DOCKING_PANE_STYLE
を渡していました。
AFX_CBRS_RESIZEとAFX_CBRS_FLOATをはずすとリサイズしなくなりました。
ありがとうございました。
769デフォルトの名無しさん:2011/01/28(金) 22:15:58
猫でもわかるプログラミングを見ながらSDKでちょこちょこ動かしてますが、
MFCやる時、少しは役に立つもの?それとも、もう時代遅れ?

家のPC環境でMFC動かせないのだが、少しは近いことやろうと思うんだけど・・
770デフォルトの名無しさん:2011/01/28(金) 22:17:41
Windows APIを知っているとMFCを理解するのに役立つけど
その前に、MFCはC++前提なのでC++を理解することのほうが
Windows APIを理解するよりもずっとむつかしーあるよ。
771デフォルトの名無しさん:2011/01/28(金) 22:42:40
Win32APIは現役
MFCのがアナクロ
772デフォルトの名無しさん:2011/01/28(金) 23:04:27
なるほど〜

猫プログラミングのC++も並行してやってるけど、C++を先に固めた方が良さそうすね
773デフォルトの名無しさん:2011/01/28(金) 23:22:40
C〜C&Win32API〜C++〜C++&Win32API〜MFC
ではMFCにたどり着く頃には爺になっちゃうよ

C〜C/C++(ベターC)&Win32API〜C#orJava〜MFC
がオススメ
774デフォルトの名無しさん:2011/01/29(土) 00:14:27
C#にいったら帰ってこない気がするぜ
775デフォルトの名無しさん:2011/01/29(土) 00:29:33
C++をBetter Cとしてしか使わないなら
C++なんてめんどい言語勉強するより
C#やJava学んだほうがずっと早いし有意義だよ。
776デフォルトの名無しさん:2011/01/29(土) 00:38:13
いまどき MFC にこだわる香具師は情報弱
777デフォルトの名無しさん:2011/01/29(土) 09:02:53
MFCはexpressにつかないからなー
778デフォルトの名無しさん:2011/01/29(土) 21:19:19
MFCにこだわりすぎるのも問題だが、検証もしないで新しいものに飛びつくヤツも困る。
ウチは組み込み系だからツール作るのにMFCは結構ありがたい。
必要ないときはC#使うけど。
779デフォルトの名無しさん:2011/01/29(土) 21:53:19
もうMFCの時代はとっくに終わってるんだが
780デフォルトの名無しさん:2011/01/29(土) 23:03:32
代わりに何がいいのん?
.netとかあんまり手間変わらんかったよ
781デフォルトの名無しさん:2011/01/29(土) 23:33:54
>>779
仕事で使うんだからしょうがないべさ
782デフォルトの名無しさん:2011/01/30(日) 00:47:38
>>778
組み込み系は、Cのライブラリとか使う事もザラにあるから、
MFCは割と気軽に組み込めてお手軽で良いよな。
大方がAPIのラッパー程度な設計なのが逆に役立つ。
783デフォルトの名無しさん:2011/02/04(金) 17:12:50
じりじりと俺の中で
マイクロソフトに対する評価が下がっていく…。

さっさとアナウンスしろや。
784デフォルトの名無しさん:2011/02/04(金) 17:41:33
全然違うところに書き込んでた
ごめん
785デフォルトの名無しさん:2011/02/06(日) 14:15:47
質問です。
VisualStudio2005でダイアログベースのMFCアプリケーションを作っているのですが、
同一のコードから簡略版と高級版の両方をビルドできるようにしたいと考えて、stdafx.h
の中にフラグ(#define MY_FLAG)を書いておき、切り替えの必要な場所はそのフラグの
有無でビルド時に書き換わるようにしました(#ifdef MY_FLAG〜#endifでくくった)。
それはそれで機能しているんですが、以下の3つについてはこの方法で切り替える事が
できずにいます。

・生成される実行ファイルの名前(=プロジェクト名)
・生成される実行ファイルのアイコン(=IDR_MAINFRAMEで指定されているアイコン)
・生成される実行ファイルを右クリックした際の詳細情報(=VS_VERSION_INFO)

これらも同様の方法で切り替えるようにするべくresource.hや.rcファイルにも#ifdef〜を
手で書き込んでみたのですが、これらは頻繁にVisualStudioによって書き換えられて
しまうため、すぐに#ifdef節が消されてしまってうまく機能させることができません。
何かよい方法は無いでしょうか。
786デフォルトの名無しさん:2011/02/06(日) 15:04:19
makefile にする
787デフォルトの名無しさん:2011/02/06(日) 17:34:02
>>785
*.rcの方は専用の記述方法があったと思う。TEXTINCLUDEとかそんなタグだったかと。
その辺りの記述をよく見て味噌。
788デフォルトの名無しさん:2011/02/06(日) 19:12:22
>>786-787
ありがとうございます。
試してみることにします。
789デフォルトの名無しさん:2011/02/06(日) 21:27:33
あとで書き換えられる場所と
書き換えられない場所がちゃんとあr
790デフォルトの名無しさん:2011/02/07(月) 23:32:39
MFCってあんまりC++のSTLとか使われないよね?
基本的なクラスの概念が分かっていればOkな気がするんだが
791デフォルトの名無しさん:2011/02/07(月) 23:33:00
>>785ですが、解決したのでご報告。

.rcファイルはresディレクトリ直下の.rc2ファイルをincludeしてて、これはVisualStudioに
変更されたくないリソースを記述する場所として用意されているようです。>>789さんの
言うところの書き換えられない場所ということですね。

試しに、.rcファイルのIconセクションとVersionセクションを、コメント書きのキャプションごと
カット&ペーストで.rc2に移植したところ、VisualStudioのリソースビュー上ではIconフィルタ
とVersionフィルタが丸々無くなりましたが、ビルドされるアプリケーションで元のリソースの
構成が崩れることはありませんでした。つまりVisualStudioによっては触れないが、ビルドに
はきちんと反映されるということです。そこで>>785の#ifdef〜#endifを用いたところ、思惑通り
に機能させることができました(ただし、フラグの書いてある場所を.rc2からも参照させる必要
があるため、フラグを書くためだけのヘッダーファイルを別に作って、stdafx.hと.rc2の両方に
includeさせる必要がありましたが)。

この方法ではアイコンとVS_VERSION_INFOの切り替えのみ対応することができ、依然として
実行ファイル名の切り替えは出来ませんが、そのくらいだけなら手動でも問題ないので、
これにて解決としたいと思います。お騒がせいたしました。
792デフォルトの名無しさん:2011/02/07(月) 23:57:39
>>790
STLがまともに実装されていない時代にベースが開発されてるからね。
互換性の意味でもテンプレート化はされていない。

さらに、VC自体がテンプレートの動作がおかしいというのもある。
VCは名前解決のルールからしておかしいので
テンプレートメタプログラミングとかやると、動かないことがしばしば。
793デフォルトの名無しさん:2011/02/08(火) 14:32:05
プロジェクトの構成新規につくればいいだろう。
デフォルトでは出力ファイル名は $(projectname).exe だから
プロジェクトのプロパティで
それを好きな名前に変えればいい。

リソースの ifdef で使う定義も
リソースコンパイルのコマンドラインへの追加で対応すればいい。
/d "***"
794デフォルトの名無しさん:2011/02/08(火) 22:21:43
>>792
なるほど。そんな時代的な背景が有ったとは・・。
795デフォルトの名無しさん:2011/02/09(水) 09:40:09
20年くらい前の話だぬ
796デフォルトの名無しさん:2011/02/09(水) 22:06:17
>>793
試してみました。

まず>>791で作ったフラグ用ヘッダーファイルのincludeを取り除き、現在のプロジェクト構成を
元にして新しいプロジェクト構成を新規作成し、そのプロパティに以下の変更を加えました。

・[C/C++]→[コマンドライン]の「追加のオプション欄」に「/D "MY_FLAG"」を書き加えた。
・[リソース]→[コマンドライン]の「追加のオプション欄」に「/d "MY_FLAG"」を書き加えた。
・出力ファイル名を書き換えた。

これにより、VisualStudioのツールバー上で構成を切り替えるだけでビルドの内容を切り替える
ことができるようになりました。これは全くもって自分が欲していたとおりの結果です。お教え
いただき、本当にありがとうございました。
797デフォルトの名無しさん:2011/02/12(土) 09:05:42
>>794
VC4〜6あたりで開発していたころは、
MFCと相性悪いという理由でSTLは会社から禁止されていたな。
798デフォルトの名無しさん:2011/02/13(日) 21:51:13
タブコントロールの、ビラビラ(アイテム名表示部分)を除く表示領域ってどうやって取得すんの?
CTabCtrl::AdjustRectでもビラビラを含んだ領域でしか取れないよね?
手動で適当にrect.top+=20したりするしかないの?
799デフォルトの名無しさん:2011/02/14(月) 15:28:21
タブコントロールは何で「タブ」コントロールと言う名前なのか小一時間(ry
800デフォルトの名無しさん:2011/02/14(月) 16:39:47
"タグ"の読み間違いがそのまま定着
801デフォルトの名無しさん:2011/02/14(月) 16:56:00
「タグ」と「タブ」の区別ができないやつがほんとにいるから始末に負えない。
802デフォルトの名無しさん:2011/02/14(月) 17:46:04
そうは言うがな大佐、TCN_SELCHANGEのハンドラで最前面に表示する
子ダイアログを切りかえる実装方法だと、子ダイアログを表示する位置を
合わせるのに、ビラビラ以外の表示領域を取得しないわけにはいかんだろう。
803デフォルトの名無しさん:2011/02/14(月) 18:01:25
まだわかってないとか大丈夫か?
ググればいくらでも出てくるだろ?
804デフォルトの名無しさん:2011/02/14(月) 18:28:31
あんまり小陰唇の俗語を連呼しないでくれないか。恥ずかしいじゃないか
805デフォルトの名無しさん:2011/02/14(月) 23:05:49
びらびら
806デフォルトの名無しさん:2011/02/22(火) 21:41:47.56
MFCのDestructElements関数について教えて欲しいんですけど、
これってVS2008では廃止??
今後廃止予定だから
推奨されないだけで機能としてはまだ使えるんですかね?

807デフォルトの名無しさん:2011/02/23(水) 08:07:19.03
>>806
http://support.microsoft.com/kb/318734/ja
新規で使おうとか考えないほうが身の為だと思う。
というか、VS2010のMFCだとこの関数呼び出しの箇所がコメントアウトされているぞ。
機能するかどうかすら怪しい。
808デフォルトの名無しさん:2011/02/23(水) 10:11:01.87
>>807
コメントアウト・・・。
ってことは。
これに代わる機能があるからそっち使ってね。
ってこと?
探したけどそれすらもないような。

とゆーか、配列の解放ってVSでコンパイルしたときに
デストラクタとして自動生成され・・・ない?
809デフォルトの名無しさん:2011/02/23(水) 19:26:53.08
普通に対象クラスのデストラクタが呼び出せるようになったから、とかじゃないか?
Visual C++6.0以前は、テンプレート絡みが色々怪しいところも多いし。
810デフォルトの名無しさん:2011/02/24(木) 17:04:00.42
MFCのCWinFormsDialogつかって
フォームコントロールを画面表示させようとしてます
コントロール側には3Dグラフを描画します。
MFC側からグラフ用のデータを渡したいんですが
どのようにして渡すんでしょうか?
渡す周期は500msくらいです。
VS2008使ってます。

普通のダイアログ画面が相手ならSet関数でメモリ渡しするんですけど
MFCとフォームコントロールとプロジェクトが別になってます
811デフォルトの名無しさん:2011/02/25(金) 09:58:59.73
ソケット通信
812810:2011/02/25(金) 14:59:20.24
普通にCWinFormsDialogのGetControlで
関数渡し出来ました
813デフォルトの名無しさん:2011/02/27(日) 21:53:44.27
ダイアログに貼り付けたCTabCtrlって他のコントロールみたく自動で表示してくれないんですか?
814813:2011/02/27(日) 22:55:28.51
自己解決しました失礼しました
groupboxが原因でした(Zオーダーの問題かな?)
815デフォルトの名無しさん:2011/03/01(火) 00:25:55.74
ちょっとはまったので助言をおくれ。

時刻コントロールの背景色を変更したいのだが、
WinXPでは色が変わっているのだが、Win7では変わらなかった。

Win7でもちゃんと背景色が変わるようにするにはどうしたらいいのか……

以下、ソース

CDateTimeCtrlEx : CDateTimeCtrl

BOOL CDateTimeCtrlEx::OnEraseBkgnd( CDC* pDC )
{
BOOL bRet = CDateTimeCtrl::OnEraseBkgnd( pDC );

CRect rect;
GetClientRect( &rect );
pDC->FillSolidRect( &rect. RGB( 0, 255, 0 );

return bRet;
}
816デフォルトの名無しさん:2011/03/01(火) 12:56:20.82
>>815
ビジュアルスタイルを外す
817デフォルトの名無しさん:2011/03/02(水) 11:17:08.64
親子Dialogがあって子Dialog上のスクロールバーのl処理を
親Dialogでやりたいんですけど良い方法ありますか?
子のHScrollの引数を親にSendMessageする感じですか?
直接親のHScrollにかけたらうれしいんですが
スクロール関数が呼ばれないようです
818デフォルトの名無しさん:2011/03/02(水) 21:37:45.59
CWndから派生させて作ったものをツールバーに置いてみました。
しかしここから何かアクションを起こしてもビュークラスに対して
ON_COMMAND
を発生させることはできません。
WM_COMMANDとCN_COMMAND使えばできるように見えたのですが、
うまく行きませんでした。どのようにすればいいのでしょう?
819デフォルトの名無しさん:2011/03/05(土) 19:13:44.53
初心者の質問で申し訳ございません。
演習で「afxcoll.h」というファイルが必要でして自PCに存在せず
ググるとMFC クラスなるものの中にあるようなのですが、
MFC クラスはどうやったらダウンロード出来るのでしょうか?
無料でインストールできるものなんでしょうか?

お手数ですがご教授のほどよろしくお願い致します。
820デフォルトの名無しさん:2011/03/05(土) 19:16:55.31
821819:2011/03/05(土) 19:34:32.78
>>820
ご教授ありがとうございます。
ご指摘いただいた場所は実は見つけていて、
コピーして入れたんですが、次から次にヘッダが要求されて
エラーの嵐で・・・

MFC自体売り者らしいので買わないととてもじゃないけど
無理ですかね。。JNIの演習なんですけど。。
822デフォルトの名無しさん:2011/03/05(土) 21:39:56.95
afxcoll.hってMFCの昔のコレクションクラスだろ。
大した機能は無いから、必要最小限のクラスとメソッドをでっち上げるのも
一つの手じゃないか?
シリアライズとか使っていたら少々面倒だけど。
823デフォルトの名無しさん:2011/03/06(日) 03:28:23.48
MFCって、32bit用と64bit用に、
それぞれ別々にあるの?

MFC自体のソースコードからして
完全に別物としてあるの?
824デフォルトの名無しさん:2011/03/06(日) 09:28:51.48
ソースコードレベルならほぼ共通かと。
完全に別物とか正気の沙汰じゃない。
DLLはOSの仕様上別々に用意しないと話にならないな。
825818:2011/03/07(月) 23:03:27.96
メッセージをメインフレームに送ってました。
MDIで作ってたので子フレームに送信したらいけました。
失礼しました。
826デフォルトの名無しさん:2011/03/15(火) 10:52:12.58
ipodtouch版アプリ mfc買ったんですけど 基本一緒ですよね?


827デフォルトの名無しさん:2011/03/18(金) 06:01:43.06
ポップアップメニュー上でミドルクリックを検出するにはどうすればいい?
828デフォルトの名無しさん:2011/03/25(金) 18:40:44.51
ダイアログアプリ上のエディットボックスに、CString::Format()で書式化した数値を
SetWindowText()で表示しようとしています。
このとき文字列中の数値で、小数点を揃えて出すために、以下のような書式を組みました。

CString str;
double a=100.05;
double b=10.1;
double c=1.0;
double d=1000.11
str.format("%4.2f\n%4.2f\n%4.2f\n4.2f\n", a, b, c, d);

これをSetWindowText()したところ、小数点の位置が揃いませんでした。
ダイアログのOnShowWindow()中で、エディットボックスに対してフォントの指定を行い、
固定ピッチフォントを指定したりしたのですが、フォントは変わっているにもかかわらず、
数値の部分だけ、数値の前に入ってほしいスペースの数が変わらないままです。
(コピペでチェックして、スペースの数自体が少ないことを確認)

フォントの指定は以下の通りです。
logfont.lfCharSet = DEFAULT_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = DEFAULT_QUALITY;
logfont.lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
::_stprintf_s(logfont.lfFaceName, LF_FACESIZE, _T("%s"), _T("MS ゴシック"));//フォント名

 どこかに見落としがありますでしょうか? また、他に確認すべき項目はありますでしょうか?
829デフォルトの名無しさん:2011/03/26(土) 09:05:43.49
>>828
"%4.2f"というのは、全体で4文字、そのうち小数点以下に2文字という意味。
830デフォルトの名無しさん:2011/03/26(土) 10:05:53.96
>>829
 ………!? チェックしてみます!!
831デフォルトの名無しさん:2011/04/14(木) 23:39:14.38
4月13日の「MFC ライブラリの脆弱性により、リモートでコードが実行される」の更新をすると、
「スタティックライブラリでMFCを使用する」にした場合、今までより実行ファイルのサイズが大きくならない?
もうこれは諦めるしかない?以前のように小さくする方法はない?

ちなみに今回の更新についてのページ。
http://www.microsoft.com/japan/security/bulletins/ms11-025e.mspx
832デフォルトの名無しさん:2011/04/15(金) 07:16:05.30
3倍くらいでかくなった。
ついでにWin2000で動かないバイナリになった!
833デフォルトの名無しさん:2011/04/15(金) 11:50:56.95
CWinAppExを使ったプロジェクトでは変わらないね。
まぁ元々サイズがでかいけど。
834デフォルトの名無しさん:2011/04/20(水) 07:55:03.26
>>832
ユーザーのMFCが更新されただけで動かなくなるから
2000切ったわ
835デフォルトの名無しさん:2011/04/27(水) 09:51:55.40
 質問です。
 VS2008で、ダイアログアプリケーションのリソースをDLLに分離し、
AfxSetResourceHandle()で読み込む、という手順を取ろうとしています。
(DLLはリソースのみ、リンカで/NOENTRY指定)

 DLLのロード、AfxSetResourceHandle()まではうまくいくのですが、
メインとなるダイアログ上にタブコントロールを作り、その上にダイアログを
貼り付けようとするところで失敗してしまいます。

BOOL CMyApp::InitInstance()
{
  HINSTANCE hinst;

  hinst = LoadLibrary(_T("Resource.dll"));
  ASSERT(hinst);
  AfxSetResourceHandle(hinst);  ←ここは成功する
 ……

BOOL CMy3Dlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  bRet = TRUE;
  if(this->m_MyTabPage1.Create(CTabMyPage1::IDD, this) == 0){bRet = FALSE;}  ←ここで失敗
  if(this->m_MyTabPage2.Create(CTabMyPage2::IDD, this) == 0){bRet = FALSE;}  ←ここも失敗
 ……

 これ以外のリソースについては全て読み込まれているようなのですが、ここだけ失敗してしまいます。
リソースの分離以前は正しく動作しており、何が問題なのか想像がつかない状態です。
 なにをどうしたら良いか、教えてください。
836デフォルトの名無しさん:2011/05/05(木) 16:02:12.33
win7 64bit, vs2005でmfcにてopenGLでピクチャボックスに描画をしています。
xp 32bitではピクチャボックスをBitBltにて画像保存できたのですが、
win7、64bitでは保存はできるのですが、保存した画像になにも表示されていません。
(シングルディスプレイでも)

どうすれば、キャプチャできるようになるでしょうか。
837デフォルトの名無しさん:2011/05/06(金) 03:28:52.00
勉強する
838デフォルトの名無しさん:2011/05/13(金) 03:46:24.05
>>836
OpenGLはよく分からないけど、テクスチャに描画して、
そのテクスチャを保存してはどうだろうか。
画面に出したい場合はそのテクスチャを貼り付けた
四角形ポリゴンを描画すればいい気がする。
839デフォルトの名無しさん:2011/05/13(金) 06:51:20.14
>>831-834
↓でサイズとWin2Kの問題解決するみたい
http://hibari.2ch.net/test/read.cgi/tech/1290969016/229,241
840デフォルトの名無しさん:2011/05/15(日) 18:51:11.32
mfcのよいとこはかわらないとこ
841デフォルトの名無しさん:2011/05/26(木) 10:47:36.05
ダイアログベースのサイズ変更不可で作成し、ウィンドウサイズを横幅801以上縦幅601以上にしたアプリ。
これをディスプレイ解像度800×600の状態で起動した後、ディスプレイ解像度を大きなサイズ(例:1280×1024)に変更すると、アプリがめっちゃ大きなサイズになってしまいます。
OnInitDialogで取得したウィンドウサイズを保持しておいて、OnWindowPosChangingの引数WINDOWPOS構造体のcxとcyを修正してやると現象は抑えられるのですが、いまいちスマートでない気がします。
何か原因をご存知の方いらしたら教えてください。

ちなみに、Win7でもXPでも起きます。
842デフォルトの名無しさん:2011/05/26(木) 16:40:25.40
>>841
原因は知らないけどOnWindowPosChanging()の先頭に以下を追加すればいいと思う。
lpwndpos->flags |= SWP_NOSIZE;
843デフォルトの名無しさん:2011/05/26(木) 17:35:03.98
>>842
なるほど。
確かに、cx、cyを無視で良いですね。
ありがとうございます。
これでスッキリしました。
844デフォルトの名無しさん:2011/05/31(火) 13:12:05.85
MFCもがんばるなあ。もう15年くらい?

これからも、がんばってください。
845デフォルトの名無しさん:2011/06/01(水) 18:27:32.03
プログラムのダイアログ内でウェブブラウザを表示したくて
IEコンポーネントを埋め込んでいるのですが、
OSにインストールしているIEがバージョン9.0なのに、
IEコンポーネント内のIEのバージョン判定をすると7.0になっています。
IEコンポーネント内のIEのバージョンは、何に基づいて決まるのでしょうか?
この問題で非常に悩んでいますので、教えてください。
846デフォルトの名無しさん:2011/06/01(水) 19:54:39.03
MFCと何の関係が?
と思いつつ、これが参考になるかもしれないし、ならないかもしれない。
http://social.technet.microsoft.com/Forums/ja-JP/internetexplorerja/thread/d830909f-350e-4ad9-9e7c-0efb866c2c85/
847デフォルトの名無しさん:2011/06/12(日) 03:18:27.25
CPaneDialogでビットマップ貼ったら、CStaticは通常の方法で透過でき
たんだが、チェックボックスなどの他のコントロールのテキストの
バックグラウンドが透過できない。ブラシをビットマップにすると
ちゃんと全てのコントロールのバックグラウンドがビットマップで塗られる。
m_beBackgroundをNULL_BRUSHでクリエイトすると透過せずに、デフォルトのバック
グラウンドカラーが塗られる。これはバグかなぁ。
どなたか解決した方いますか?透過が使えないのは非常に不便ですね。
848デフォルトの名無しさん:2011/06/13(月) 10:43:31.08
>>847
コントロールの透過は実際に透過してるわけではなくて背景色で
塗りつぶしているからね。
だからNULL_BRUSHで透過しないのはある意味「仕様」になる。
849デフォルトの名無しさん:2011/06/13(月) 15:00:33.81
>>848
CStaicの場合もそういう動作になるなら仕様なんだけどね。
相変わらず仕様が統一されてないのが何とも・・・
850デフォルトの名無しさん:2011/06/13(月) 16:45:38.41
>>849
CStaticが特別だと思うべきでは?
昔からそうなってるんだから「相変わらず」も何もないと思うけど。
だから、『ある意味「仕様」』と書いたんだけど。
まあ、その「仕様」がクソなのは間違いないな。
851デフォルトの名無しさん:2011/06/13(月) 20:44:08.81
16ビット時代の仕様に今更。
まあ、MSに倣って自前で用意するのが一番なんだろうな。
852デフォルトの名無しさん:2011/06/14(火) 10:13:51.32
順序は不要で、値の存在だけを高速に確認できる集合を用意したいんですが、
MFCだとCMapのKEYに値を詰め込んでいく方式になりますか?
VALUEにあたるものはなにもないので、ちょっと変な感じもするのですが。
853デフォルトの名無しさん:2011/06/14(火) 10:30:51.85
>>852
C++0xかboostのunordered_set
順序付きならstd::set
854デフォルトの名無しさん:2011/06/14(火) 12:31:50.75
わざわざMFCスレで質問してるんだからMFC限定でやれよ
855 忍法帖【Lv=5,xxxP】 :2011/06/14(火) 12:45:32.29
データ管理まで心中することもないだろ。
856デフォルトの名無しさん:2011/06/14(火) 14:16:45.79
ここはMFCスレ
857デフォルトの名無しさん:2011/06/14(火) 15:42:14.41
MFCプロジェクトを作るとき、
「スタティックリンクライブラリでMFCを使用する」にして
プロジェクト作ると、デバッグ出力に

SXS: Invalid parameter(s) passed to FindActCtxSection*()
   dwFlags = 0x00000001
   ReturnedData = 002BF750
      ->cbSize = 0

って、感じのメッセージが5つくらい出るんだけど、なにこれ?
一応動作してるぽいから気にしなくて良いのかもしれんが・・・

環境は、Win7 64bit VS2008 pro SP1
858デフォルトの名無しさん:2011/06/14(火) 17:53:45.80
859デフォルトの名無しさん:2011/06/14(火) 22:35:46.44
知ってるとは思うけど、4月の月例で公開されたものより新しいのが出てる。

FIX: Multithreaded MFC application may stop responding in Windows
that has an MUI language pack installed if the application is developed in Visual Studio 2008
http://support.microsoft.com/kb/2495003
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=34190
860デフォルトの名無しさん:2011/06/15(水) 08:36:48.99
Microsoft Visual Studio 2008 Service Pack 1 MFC セキュリティ更新プログラム
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=e6a8e024-12ee-43d5-9aae-4c721505d6df


4月公開の更新を置き換え。
861857:2011/06/15(水) 12:17:59.79
>>858-860
ありがとう。

今月の定例のWindowsアップデートで、 >>860の更新入ってた。
それいれたらメッセージ出なくなりました。
862デフォルトの名無しさん:2011/06/21(火) 22:24:45.51
MFCってちょっと込み入ったUIを作ろうとすると
とたんに難しく感じるのは私だけ?
863デフォルトの名無しさん:2011/06/22(水) 08:27:48.14
いいえ、その「ちょっと」の基準は違えど、誰もが感じるところでしょう。
864デフォルトの名無しさん:2011/06/22(水) 09:52:59.87
何でやっても同じじゃね?
865デフォルトの名無しさん:2011/06/26(日) 08:27:36.69
いえ、C#だとコーディングレスでそこそこまでのUIは作れますよ
866デフォルトの名無しさん:2011/06/26(日) 14:07:23.15
何使ったって用意されてるものをそのまま使うなら同じようなもんだし
無いものを構築するならどれもそこそこ大変だろ
867デフォルトの名無しさん:2011/06/26(日) 15:05:13.56
>>864
mfcは.netやvclと違って、win32を機能ごとに纏めただけで、抽象化度合いが低いから、より理解はし難い
gui部分もほとんど手入力
868デフォルトの名無しさん:2011/06/27(月) 08:48:48.48
自分自身で「Foundation」って言ってるし。
869デフォルトの名無しさん:2011/06/27(月) 16:46:38.34
でもMFCが使えるようになれば自分を神と思える
870デフォルトの名無しさん:2011/06/27(月) 16:55:05.60
まわりの人からは邪神扱いだけどな
871デフォルトの名無しさん:2011/06/27(月) 23:20:21.39

イミフ
872デフォルトの名無しさん:2011/06/28(火) 00:05:32.16
>>870
それはあんたの神レベルが低いだけ
高レベルなら、まわりから神扱い
873デフォルトの名無しさん:2011/06/28(火) 00:43:46.03
MFCわからんから使うな言われる場合がある。
そんな職場はSTLもわからん屑の集まり。
874デフォルトの名無しさん:2011/06/28(火) 00:47:39.52
>>873
今ならともかく、10年前とかは何で作ってたんだよ。その現場は。。。
昔は客の方から指定されて嫌でも使わざるを得なかったはずだが。。。
875デフォルトの名無しさん:2011/06/28(火) 07:53:08.89
未だにMFC4.2の顧客とか。
876デフォルトの名無しさん:2011/06/30(木) 21:48:06.42
mfcって、グリットコントロールもないのね・・・
しかも、Viewっていうものも、ウィンドウに1つしかおけないし、しょぼい
エディットや、リスト程度・・・

これじゃ、大したアプリつくれなくないですか?

もしかしてMFCって初心者?
877デフォルトの名無しさん:2011/07/01(金) 00:46:21.92
>>876
.netではどうか知らんが、昔はvbのコンポーネントはvcとmfcで開発されてた
878デフォルトの名無しさん:2011/07/01(金) 06:59:56.55
昔のを引きずってるならともかく、今からMFCやるの?
879デフォルトの名無しさん:2011/07/01(金) 09:00:30.74
用意されたライブラリにないから「出来ない」って言う奴は
素晴らしいライブラリがあっても大したアプリは作れないと思う。
880デフォルトの名無しさん:2011/07/01(金) 09:48:07.38
>876
View1個という制約はないよ
881デフォルトの名無しさん:2011/07/01(金) 09:54:33.42
http://www.sleipnir-wiki.jp/index.php?%CD%D1%B8%EC%BC%AD%C5%B5
MFC 【えむ-えふ-しー】[名]
Windowsアプリケーション開発用のクラスライブラリの一種で、
Microsoftから提供されているMicrosoft Foundation Classのこと。

SleipnirはMFCを使って作られている。
882デフォルトの名無しさん:2011/07/01(金) 12:52:05.99
POPUP "サブメニュー"
BEGIN
  MENUITEM "コマンド1", ID_COMMAND1
  MENUITEM "コマンド2", ID_COMMAND2
END

MFCのアプリケーションで上記のようなサブメニューがあって、
コマンド1もコマンド2もグレー化すべき状態のときに、
親メニュー内の"サブメニュー"のポップアップ項目自体(IDなし)を
グレー化する方法がMSDNのどこかに書いてあった記憶があるのですが、
どなたか憶えていらっしゃいませんでしょうか。
883デフォルトの名無しさん:2011/07/02(土) 02:07:40.46
nPopUpPos == POPUP "サブメニュー" の位置

  pMenu->EnableMenuItem(nPopUpPos,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);

のこと?
884デフォルトの名無しさん:2011/07/04(月) 00:17:04.49
MFCでEXCELみたいな、編集可能なグリッドコントロールってないのかしらん?
885デフォルトの名無しさん:2011/07/04(月) 00:18:22.83
編集可能なだけなら、ListViewから作ってもすぐじゃん
886デフォルトの名無しさん:2011/07/04(月) 08:50:34.38
>>883
それを、メニューの位置関係に依存せずに
ID_COMMAND1などのCCmdUI更新時のタイミングで行う方法が
どこかに書いてあったと思ったのですが、勘違いですかね。
887デフォルトの名無しさん:2011/07/06(水) 07:39:50.75
CListCtrlを派生させて、CYListCtrlというコントロールを作成しました
このコントロールをViewとして使用した場合はどうすればいいのですか?

CListCtrlのCListViewみたいに使いたいです。
888デフォルトの名無しさん:2011/07/06(水) 07:55:34.29
CYListCtrへのポインタにcastすれば、終わりじゃん

なに言ってんの?
889デフォルトの名無しさん:2011/07/06(水) 12:09:36.28
>>888
はぁ?
890デフォルトの名無しさん:2011/07/06(水) 13:27:24.44
CListCtrlと書いてある部分をCYListCtrlにするだけだな
891デフォルトの名無しさん:2011/07/07(木) 00:12:27.52
>>890
馬鹿のやり方だな。
CViewからの派生クラスに、メンバでCYListCtrを持たせて使うのが常道だろ。
ググればその手のサンプルもあるし、少しは勉強しろよ屑。
892デフォルトの名無しさん:2011/07/07(木) 00:33:33.29
VS2008 sp1以降ならプロジェクト形式をVisual StudioにすればCMFC〜系はそうやって使ってあるよね。
CMFCListCtrlとかCMFCTreeCtrlとか。
893デフォルトの名無しさん:2011/07/07(木) 13:04:04.22
>>888とか>>890って、ダイアログベースしか作ったこと無いんじゃないの?w
894デフォルトの名無しさん:2011/07/07(木) 13:44:42.26
No109: CEditViewでCEdit派生クラスを使うには
http://www.geocities.co.jp/Hollywood-Kouen/2198/
895デフォルトの名無しさん:2011/07/07(木) 15:15:05.76
アドバイスお願いします。
VB6のプログラムをMFCに移植するにあたって、
画面上のオブジェクト(コントロール)の、座標とかテキストとかフォント設定とかを頻繁に弄るわけですが、
VBではプロパティで値を入出力する仕組みになっていて、例えば座標は
m_edit.Left = 10
m_edit.Top = 10
m_edit.Width = 100
m_edit.Height = 100
みたいに書けるわけです。

しかしMFCでは

RECT r;
r.left = 10;
r.top = 10;
r.bottom = 110;
r.right = 110;
m_edit.MoveWindow(&r);

みたいに書かないといけません。
移植の効率と、ミスをなくすために、
”プロパティ”を後から多重継承で実装できるようなインターフェースクラスのサンプルってどこかにないでしょうか?
896名無し募集中。。。:2011/07/07(木) 15:44:00.15
void MoveControl( CWnd*ctrl, int left, int top, int width, int height)
などの移植用の関数を作ればいいんじゃないカナ
あとMFCと多重継承は相性が悪いのでやめたほうがいいと思う
897デフォルトの名無しさん:2011/07/07(木) 16:07:09.17
>>895では移植のややこしさがイマイチ伝わらなかったかもしれません。
例えば、VBで下のように一行で書けるものを移植するには、

m_edit.Width = m_edit.Width + 10

MFCでは、

RECT r;
m_edit.GetWindowRect(&r);
r.right += 10;
m_edit.MoveWindow(&r);

というように、結構見た目が違うようなソース変更を強いられる訳です。

VC++にも一応propertyの実装があって、
http://msdn.microsoft.com/en-us/library/yhfk0thd(v=vs.80).aspx

それを使ってCWnd派生のコントロールをすべてVBと同じインターフェースで操作できるようにすることも
可能っぽいので聞いてみました。
898デフォルトの名無しさん:2011/07/07(木) 16:41:01.07
手作業じゃなくて、プログラム、スクリプト、マクロ等で自動化すればいい
899895:2011/07/07(木) 18:03:06.66
試しに作ってみた多重継承用のプロパティインターフェースクラスがうまく機能しました。
ほぼVBのソースコードのまま移植できることが確認できました。
感動です。
MFCのボタン、エディット、コンボボックス、チェックボックス、ダイアログ・・・etcの各クラスに
多重継承して使っていこうと思います。
900デフォルトの名無しさん:2011/07/07(木) 18:31:30.70
移植つうかVBライクでコーディングしたいだけなんだろ
自己満足なソースだと他の人が保守しにくいんだよな
901デフォルトの名無しさん:2011/07/08(金) 13:09:27.38
>>896
MFCのクラスはすべてCObjectからの派生なので、MFCクラス同士の多重継承ができないというだけで、
相性が悪いわけではない。
「なんかよく分からないけど多重継承したらコンパイルエラーが出た。相性悪いなぁ。」
とか言ってる人は、多重継承を根本的に理解していない。
902デフォルトの名無しさん:2011/07/08(金) 14:52:38.37
>>901
揚げ足取りみたいですまんが、すべてではない。
程度の低い馬鹿ほど、こういう情報を確認もせずに信じ込んで他へ垂れ流すので気をつけて欲しい。
903名無し募集中。。。:2011/07/09(土) 05:06:22.78
多重継承を前提に設計されていないMFCでも多重継承は可能。ただし手間はかかる。
http://msdn.microsoft.com/ja-jp/library/62x3wzxy(v=vs.80).aspx
それらをひっくるめて(>>895程度の移植で効率とかミスと言う人のレベルを合わせて)相性と表現した
904デフォルトの名無しさん:2011/07/09(土) 14:28:44.76
MFCはWin32APIに皮を被せただけのド変態ヤッツケクラス群だから。
MSが本当にやりたかったのはC#とかだろう。

新しいことが覚えられないお爺ちゃんプログラマが、ほとんどC言語の感覚でMFCを使うケースが多い。
だから「MFCで多重継承?そんなの邪道wwwwwwつか保守しにくいwwwww」と脊髄反射してしまう。
905デフォルトの名無しさん:2011/07/09(土) 16:59:50.70
最初からmfc使う必要ないだろ
906デフォルトの名無しさん:2011/07/09(土) 23:20:36.65

こいう奴らって大抵は、MFCに挫折した奴がおおいよねw
907デフォルトの名無しさん:2011/07/10(日) 10:11:17.39
MFCは訳あって使ってるが、画面関係以外は極力STLを使ってるよ。
CStringって気持ち悪いし、C○○Arrayとか何それ?vecor使えよって。
908デフォルトの名無しさん:2011/07/10(日) 12:39:50.62
CStringだけ使いたいという話はよく聞く
909デフォルトの名無しさん:2011/07/10(日) 14:39:04.65
CStringArrayとかの非テンプレートベースのコレクションクラスの話なら、
あれは互換用に残してあるだけの旧クラスだから。
配列ならCArrayかCTypedPtrArrayを使うのが普通。
まあSTLが大体機能する今となっては、vectorでも一向に構わないと思うが。
910デフォルトの名無しさん:2011/07/10(日) 17:16:29.11
プロジェクトをUnicodeでビルドするとき、CStringはUnicodeを扱うことになるだろ?
でもUnicodeとMBCSを同じプログラムの中で両方とも使いたい場合もあるのよ。
STLならstringとwstringで明確に共存できるけど、CStringの場合はどうなってしまうのか意味不明。
911デフォルトの名無しさん:2011/07/10(日) 17:27:27.97
>>910
CStringA と CStringW で使い分ければいいんじゃないの?
ttp://msdn.microsoft.com/ja-jp/library/5bzxfsea(v=vs.80).aspx
912デフォルトの名無しさん:2011/07/10(日) 17:40:58.83
ああそんなのがあったのかw
913デフォルトの名無しさん:2011/07/10(日) 20:51:24.69
C#でいうところのdatagridviewってないの?
914デフォルトの名無しさん:2011/07/10(日) 20:53:14.27
CListViewじゃダメなの?
915デフォルトの名無しさん:2011/07/10(日) 21:20:30.19
バージョンとかわからんけど、MSGridとかMSDataGridとかMSFlexGridとかついてないか?
MS純正でなくても良ければ売り物も有るし、codeguruとかにfreeでなかったかな。
916デフォルトの名無しさん:2011/07/10(日) 21:51:11.53
MFCにないものはスレ違い
917デフォルトの名無しさん:2011/07/10(日) 22:39:55.11
CEditViewでCEdit派生クラスを使うには ?
918デフォルトの名無しさん:2011/07/11(月) 19:53:47.43
普通に動的にCreate()するだけでは?
919デフォルトの名無しさん:2011/07/12(火) 21:48:07.93
SetWindowExtとSetViewportExtってどう違うのですか?
920デフォルトの名無しさん:2011/07/13(水) 01:04:59.98
>>919
http://msdn.microsoft.com/en-us/library/dd145045(v=VS.85).aspx
使い分けるというより、両方を呼び出した結果で座標変換を行う感じ。
921デフォルトの名無しさん:2011/07/13(水) 01:09:12.08
>>920
解決
922デフォルトの名無しさん:2011/07/14(木) 13:32:24.15
ダイアログアプリのエディットボックス(リードオンリー)の文字色を、行ごとに任意で変える方法を探しています。
どこかにサンプルがあったと思ったのですが、ググっても見つからずに困っています。
たしかCEditの派生でやってたと思うのですが……ご存じの方、教えていただけたら幸いです。
923片山博文MZ:2011/07/14(木) 14:02:34.37
>>922 WM_ERASEBKGNDメッセージで。行の高さはGetTextMetricsで調べてね
924 忍法帖【Lv=25,xxxPT】 :2011/07/15(金) 13:33:40.99
>WM_ERASEBKGNDメッセージで。

どうやって?
なんとかmzは馬鹿だと思っていたが、間抜けだったのか。
925デフォルトの名無しさん:2011/07/16(土) 01:05:38.07
VC++MFCって是非はともかく、やっぱりこれができなきゃ一人前のWindowsプログラマとは
言えないって風潮ないですか?

.NETなんてインタプリタみたいなwのなんてできてもって感じ
926デフォルトの名無しさん:2011/07/16(土) 01:49:49.76
ないない。
MFCに関しては、それが客に求められていない限り、できれば避けて通った方がいい。
Win32APIをMSDNのヘルプを見て使える程度の知識があれば十分。
927デフォルトの名無しさん:2011/07/16(土) 12:30:00.82
>>925

2、3年前まではその通りだった
今じゃ過去のメンテや特殊なケース以外はないな
新規プロジェクトはほぼ.NETの方向にいっとる
要は使えるレベルのMFC使いが少ないことが原因

なぜ少ないか?
 習得に時間がかかりすぎるから
つまり、MFCは非効率な開発体系ということを認識したMSが
.NET の方へ誘導している
言語人口は減る一方で増えることはない
かつてのCOBOLの運命にあるな


928デフォルトの名無しさん:2011/07/16(土) 13:20:41.61
けど、Windowsでネイティブを作成しようとしたら
事実上はデファクトスタンダードであることに疑問を挟む余地はない
929デフォルトの名無しさん:2011/07/16(土) 13:51:19.59
ネイティブである必要がなくなってきたんだよな
930デフォルトの名無しさん:2011/07/16(土) 13:57:47.59
ネイティブよりマネージを選択する理由が分からん
931デフォルトの名無しさん:2011/07/16(土) 14:27:55.11
ただこれだけは言える

MFCを習得したやつは、どの言語も短期間で習得できる
なぜなら、どの言語もMFCよりもはるかに簡単だから
932デフォルトの名無しさん:2011/07/17(日) 11:05:10.54
クラスライブラリと言語を比較するのってどうなの?
933デフォルトの名無しさん:2011/07/17(日) 11:40:22.04
Javaの言語仕様は全部把握しているのに
標準付属のライブラリの使い方は全然分からない奴がいたら面白いなあ。
934デフォルトの名無しさん:2011/07/17(日) 13:33:30.27
おれはその口だな。
ライブラリはオンラインマニュアルないと使えないわ。
935デフォルトの名無しさん:2011/07/17(日) 17:02:50.56
まあ、言わんとしてる事は分かるけどね
c++も難解
mfcも難解

だから、他の言語やクラスライブラリ覚えるのは楽になる
(と言うか、mfc覚えないで済むなら覚えなくて良い)
936922:2011/07/19(火) 07:57:37.84
>>924
やっぱむりだよねぇ? 別の物と勘違いしてるんじゃ無いかと……

連休中、英語の技術文書も検索してみたけど見つからなかった……
答え知ってる方、教えてください……orz
937 忍法帖【Lv=28,xxxPT】 :2011/07/19(火) 10:26:02.89
RichEditBoxってなかったっけ?
938デフォルトの名無しさん:2011/07/19(火) 10:33:55.34
ttp://www.codeguru.com/
ttp://www.codeproject.com/
リードオンリーならリストボックスのが手っ取り早いとは思うけどな。
939デフォルトの名無しさん:2011/07/19(火) 11:27:57.47
サブクラス化してたら何でもできるけど、一発でを期待してるなら
別の手段考えたほうがいいね
940デフォルトの名無しさん:2011/07/19(火) 12:46:20.56
MFC関係ない
941デフォルトの名無しさん:2011/07/19(火) 21:50:15.65
てすと
942デフォルトの名無しさん:2011/07/19(火) 21:52:17.29
VC2010Proです。
MFC でPictureControlを使ってPNG画像を表示させてるのですが
下の画像みたいに、PictureControlのアイコン部分だけ描画されなくて困ってます。
解決方法があれば教えてください。

http://freedeai.saloon.jp/up/src/up6224.png

943デフォルトの名無しさん:2011/07/19(火) 22:01:39.37
どうやってPNGを描画しているか書かないと答えようが無い
944942:2011/07/19(火) 22:07:00.41
失礼。

CStatic m_PCAboutImage;
CImage m_ImageAbout;

LoadFromResourceGraphic( IDB_PNG1, _T("PNG"), AfxGetInstanceHandle(), &m_ImageAbout );

これで、OnCreate時にリソースから画像を取得して

HDC hDC = m_PCAboutImage.GetDC()->GetSafeHdc();
m_ImageAbout.BitBlt( hDC, 0, 0, 600, 150, 0, 0, SRCCOPY );

これで、OnPaint時描画してます。
945デフォルトの名無しさん:2011/07/19(火) 22:39:52.58
偶々それっぽく描画されているだけな予感。
StaticコントロールはCS_PARENTDCだから、
親のクライアントに直接描画するのと殆ど変わらないし、
その上にStaticコントロールの描画が重ねられた結果、
描画されないように見えている、ってオチじゃね?
946デフォルトの名無しさん:2011/07/19(火) 23:25:13.81
(0, 0, 600, 150)ってのはどこから来たの?
決め打ちならPictureControlを使う意味があるの?
OnPaint時ってメインダイアログの?
なら直接メインダイアログに描画すればいいんじゃないの?
947デフォルトの名無しさん:2011/08/09(火) 22:41:56.83
CDialogのモーダルダイアログは
SendMessage(WM_CLOSE)でも
EndDialog(IDCANCEL)でも閉じるのに
CFileDialogのモーダルダイアログだと閉じないんですが、
どうすれば閉じられるでしょうか?
948デフォルトの名無しさん:2011/08/10(水) 09:10:44.37
>>947
CFileDialogというクラスの正体は、ファイルダイアログ内の子ダイアログなので、
CFileDialogのGetParent()に対してSendMessage()なりEndDialog()なりを行う。
949デフォルトの名無しさん:2011/08/20(土) 16:57:19.34
CToolBarCtrlについて質問です。

このコントロールは、AddBitmap(), AddString(), AddButtons()という順番でボタンを追加していくのですが、
追加されたボタンを削除することはDeleteButton()でできます。
しかしAddBitmap(), AddString()で追加されたイメージや文字列を削除する方法がありません。
これはコントロールオブジェクトそのものをdeleteしないとダメなんでしょうか。
950デフォルトの名無しさん:2011/08/21(日) 16:29:30.65
MFC初心者です。
DoModal()を読んだ後に、子ダイアログのエディットボックスへ
1から100までカウントアップを表示させたものを作りたいです。

方法を教えてください。よろしくお願いします。
951デフォルトの名無しさん:2011/08/21(日) 16:32:21.83
好きなようにやればいいと思うけど、
どの辺で引っかかってるの?
952デフォルトの名無しさん:2011/08/21(日) 19:48:13.61
>>951
イベントハンドラなしに動かしたいと考えてます。
OnInitDialogでの処理では駄目だと思うのですが、
何を使ったらよいのか分からない状態です。

便利なクラスとかサンプルなどを教えて頂けると幸いです。
よろしくお願い致します。
953デフォルトの名無しさん:2011/08/22(月) 11:57:12.76
>>950
タイマーで経過表示でもしたいのか?
何故OnInitDialog()ではダメだと思ったのか?
954デフォルトの名無しさん:2011/08/22(月) 14:21:39.65
ダイアログの外からの指示でかきかえたいのか、
ダイアログの中だけで完結してもいいのか、

とか聞こうと思ったんだけど、イベントハンドラとか
言ってるってことは、実行中に画面書き替えたいとか
そういうこと?
InvalidateしてUpdateWindowするとか、
DoEventみたいなことしたいなら、
{MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
AfxGetThread()->PumpMessage();
}}
呼ぶとかしてみては
955デフォルトの名無しさん:2011/08/22(月) 16:19:57.18
MFCが(に限らないだろうが)嫌いなのは、MS独自のtypedefが多すぎ。

おまいらは社内規格で良いだろうが、それにつき合わされる外部の
人間はウンザリ。もう、いいかげんにしろと。
956デフォルトの名無しさん:2011/08/22(月) 16:28:05.27
スレ違いだ。消えろ
957デフォルトの名無しさん:2011/08/22(月) 16:37:32.53
いやだ。廃棄物のお前にいわれたくねw
958デフォルトの名無しさん:2011/08/22(月) 18:07:08.87
952です。
>>953
子ダイアログでプログレスバーみたいなものを作りたいためです。
OnInitDialog()では、処理はするけど1,2,3・・・99,100のように順々に表示されず、いきなり100が子ダイアログ表示されるのではないのでしょうか。
そのため、OnInitDialog()では駄目だと思いました。間違ってたらすいません。

>>954
私はダイアログの中だけで完結させたものを作りたいと考えてます。
子ダイアログ生成後に画面を書き換えるという操作をしたいと考えてます。
InvalidateしてUpdateWindowするというのと、DoEventについて調べてみようと思います。

アドバイスありがとうございました。
959デフォルトの名無しさん:2011/08/24(水) 23:30:48.92
>>958
OnInitDialogの中でSetTimerでタイマーセットして、
OnTimerでカウントアップすればいいんじゃないの?
960 忍法帖【Lv=38,xxxPT】 :2011/08/25(木) 09:48:54.27
もしかして:
モードレスダイアログ?
つーか、MFCだからポップアップウインドウか。
961デフォルトの名無しさん:2011/08/29(月) 18:43:55.64
初期表示の際にピクチャーコントロールの上に図形を描写するには
どうすればいいでしょうか。
962デフォルトの名無しさん:2011/08/29(月) 19:19:52.96
もっと詳細を書かないと分からないよ。

ビットマップを貼りたいだけなら
・リソースにビットマップを追加する
・リソースエディタでTypeをビットマップにする
・Imageに追加したビットマップのIDを指定する
で出来る。
プログラム内部で色々な図形を書きたいならオーナー描画を勉強すべし。
(その場合ピクチャーコントロールは忘れていい)
963デフォルトの名無しさん:2011/08/29(月) 22:32:02.79
>>962
ありがとうございます
ピクチャーコントロールはできてるんですが
その上に図形を描写したいんです。
964デフォルトの名無しさん:2011/09/03(土) 15:34:11.78
画面のちらつきについて質問

あるダイアログにスタティックテキストとリストコントロール載せてるんですが、
スタティックテキストの内容を1秒に1回更新していて結構ちらつきます。
このちらつきを抑えるためにダイアログにWS_EX_COMPOSITEDっていうウィンドウスタイル指定してるんですが、
この方法だと、リストコントロールのヘッダ以外が描画されなくなってしまいます。
なんかいい方法ありますか?

環境
Vista
VC2008 Pro
965デフォルトの名無しさん:2011/09/03(土) 19:50:17.86
>>964
普通だと内容更新は即再描画に繋がっているから、
WM_SETREDRAW+InvalidateRectで描画をWM_PAINTまで遅延させてみたらどう?
DWMが何か空気呼んでうまくやってくれそうな気がしないでもない。
966デフォルトの名無しさん:2011/09/05(月) 06:10:11.94
ドッキングダイアログってまだないの?.netでも良いの無かったな
967デフォルトの名無しさん:2011/09/05(月) 07:59:24.56
SDIでCMDIChildWndを作りたいんだけど無理っぽいです
968デフォルトの名無しさん:2011/09/05(月) 13:17:09.20
MDI自体はMFCとは無関係だから
作ろうと思えばいつでも作れる
969デフォルトの名無しさん:2011/09/06(火) 05:59:48.91
MFCプロジェクトをVisual Studio上で作成しました。

何もしなくても、アプリケーションの再起動時にCDockablePaneの状態やスタイルやリボンの状態が復元されるのですが
この情報の保存先はどこにあるのでしょうか?
970デフォルトの名無しさん:2011/09/06(火) 06:45:03.37
レジストリ
971964:2011/09/06(火) 07:14:17.47
>>965
ありがとうございます。
試してみます。
972969:2011/09/06(火) 08:24:47.15
>>970
みつかりまんた
あんがと
973デフォルトの名無しさん:2011/09/09(金) 00:26:56.08
VisualStudio2010と2008のMFCは違うのか。
再起動マネージャとかちょっと試してみたいな。
2008用に更新パッケージとかないのかな。
974デフォルトの名無しさん:2011/09/10(土) 09:28:08.33
MFC で新規プロジェクトを作成すると、StdAfx.hができますが
このファイルの目的は何で、何が記述されているんですか?
975デフォルトの名無しさん:2011/09/10(土) 09:58:30.99
>>974
そのままヘッダーファイル読めば良いじゃん
mfcの理解が深まるぞ
976デフォルトの名無しさん:2011/09/10(土) 14:24:19.10
Visual Studio 2010 です。
 MFC でDLLを作りたいです、しかしダイアログなどは必要ありません、このようなMFC のDLL の作り方なのですが、これでいいでしょうか?

新規プロジェクト→Win32 コンソール アプリケーション→アプリケーションの設定より下記の項目にチェックを入れる

アプリケーションの種類
コンソールアプリケーション

追加のオプション
空のプロジェクト

共通ヘッダーファイルを追加
MFC
977デフォルトの名無しさん:2011/09/10(土) 14:31:40.65
一点間違えてました

アプリケーションの種類
☓コンソールアプリケーション
○DLL
です
978デフォルトの名無しさん:2011/09/10(土) 23:33:27.39
それでいいです
979デフォルトの名無しさん:2011/09/12(月) 12:14:01.15
CHtmlEditViewって、GUI操作でブラウザ画面?の文字や画像をDeleteしたりできますか?
980デフォルトの名無しさん:2011/09/12(月) 18:28:47.23
    _, ,_  | | | ||
ヤダァ(`Д´(ω・´川)<おばさんが君の布団でオナラしてあげるよ
| ̄ ̄ ̄ ̄ ̄ ̄ ゙̄|
|  | ̄ ̄ ̄ ̄|  |
|  |  @  @|  |
|  |@  @  |  |
|  |____|  |
|__________|


(⌒ ⌒;:゙:ヽ.' 。    /.    ゚
从 `(´⌒;`:;ノ:人;;⌒`:" / 从 。
.(´;(´⌒(;・"⌒`);/`):';⌒`)`)。.' ゚
。((;;; _, ,_). | | | ||" :';))’: (⌒ ⌒;:゙:
  (`Д´(ω;´川) ゚(⌒ ;:゙。:ヽ.'/)
| ̄ ̄ ̄ ̄ ̄ ̄ ゙̄|`):';⌒`)`)。.' ゚
|  | ̄ ̄ ̄ ̄|  |⌒`).(´;(´⌒(;・"⌒`);
|  |  @  @|  | ブボボ!ブボボボボボボボボボボボボ!!!
|  |@  @  |  |⌒`) :; 从 )
|  |____|  |(⌒)) \ ))
|__________| ヽ
981デフォルトの名無しさん:2011/09/14(水) 08:54:23.66
MFCの32bitアプリがあります。

64bitに移行するのは可能ですか?
982デフォルトの名無しさん:2011/09/14(水) 09:04:13.46
変なことしてなきゃ64bitOSでも動作するだろ
983デフォルトの名無しさん:2011/09/14(水) 14:26:54.32
CMDIChildWnd ではなく、CWnd (あるいはCMainFrameのような) 上に、(Splitterのある2ペインの)分割Windowを作成したいのですが、可能ですか?
MDIとは無縁のただの分割ウィンドウを作りたいだけなのですが、サンプルはMDIのものばかりで、どのように実現すればよいのかよく分かりませんでした

というより、Splitterの付いた(汎用?)2ペインウィンドウの作成方法を教えてください。お願いします。
984デフォルトの名無しさん:2011/09/14(水) 15:03:45.52
CSplitterWnd 使うやつでいいのかな?
985デフォルトの名無しさん:2011/09/14(水) 15:45:38.55
プロジェクトを作るとき、アプリケーションの種類をシングルドキュメントにし、
プロジェクト形式をWindows エクスプローラにすれば要望通りのものになるかと。
986983:2011/09/15(木) 12:11:08.62
>>984-985
プロジェクト時にシングル&エクスプローラー形式のソースを見た所、
CMainFrame上に
CSplitterWnd m_wndSplitter; を配置し、
OnCreateClient 上にて
CreateStatic(this, 1, 2);
CreateView(0, 0, RUNTIME_CLASS(CHogeView), CSize(100,100), pContext);
CreateView(0, 0, RUNTIME_CLASS(CFugaView), CSize(100,100), pContext);
とすることで望み通りに動きました
ありがとうございました。
987983:2011/09/15(木) 12:12:11.12
CreateView(0, 0, RUNTIME_CLASS(CHogeView), CSize(100,100), pContext);
CreateView(0, 1, RUNTIME_CLASS(CFugaView), CSize(100,100), pContext);
ちょっとミスしたので訂正しときます。
988デフォルトの名無しさん:2011/09/15(木) 18:02:13.12
OS:Windows7
開発環境:VisualStudio2005

回答お願いします。
MFCのエディットコントロールにログを吐き出すプログラムを作ってみました。
大量のログを表示させると途中で止まってしまいます。
なので100行毎に古いログを消すと言う処理を入れてみたのですが上手く行きません。
どうすれば良いか誰か教えて下さい。

引数:エディットボックスに表示する文字列(可変長で\0終端)

CEdit m_EdLogMsg;
void testDlg::__printf_s(CHAR szMsgBuffer[])
{
UINT EditMax; // テキストの最大値
// エディットボックスに表示できる最大バイト数を取得する
EditMax = m_EdLogMsg.GetLimitText();

// 100行を超えたら古いログを消す(本当はEditMax Byteを超えた場合に古いログを消したい)
if(m_EdLogMsg.GetLineCount() > 100){
printf("Log Over.\n");
m_EdLogMsg.SetSel(0, 1);
m_EdLogMsg.Clear();
}
// カーソルを最後に移動させる
m_EdLogMsg.SetSel( EditMax, EditMax, FALSE );

m_EdLogMsg.ReplaceSel(szMsgBuffer,0);
m_EdLogMsg.ReplaceSel("\n",0);
}
989デフォルトの名無しさん:2011/09/15(木) 18:08:46.62
プロジェクト作成時に追加できる出力ペインを使ってみるとかは?
990デフォルトの名無しさん:2011/09/15(木) 18:36:55.40
回答お願いしますとか、むかつく聞き方だな
自分で調べろ、屑
991名無し募集中。。。:2011/09/15(木) 18:52:51.66
MFC相談室 mfc22d.dll
http://hibari.2ch.net/test/read.cgi/tech/1316080347/l50

■忘れた><
992デフォルトの名無しさん:2011/09/15(木) 19:48:19.88
>>990
988ではないがそんなに気になるか?
単に質問か解答を区別して書き込んでるだけだと思うのだが
993デフォルトの名無しさん:2011/09/15(木) 22:22:49.11
>>988
どこまでを古いログと見なすつもりなんだ?
994デフォルトの名無しさん:2011/09/15(木) 22:24:08.12
>>988
この手の質問で「上手く行きません」ってよく書くけど、どこがどううまくいかないか書けば答えやすいのに・・・。
それはともかく、ツッコミどころ満載だけど、
100行超えたとき全部クリアするなら、SetWindowTextで設定すれば良いんじゃないの?

>m_EdLogMsg.SetSel(0, 1);
>m_EdLogMsg.Clear();
の意味わかってる?
995 忍法帖【Lv=40,xxxPT】 :2011/09/15(木) 22:26:21.67
>>988
>void testDlg::__printf_s(CHAR szMsgBuffer[])
中身と逸脱した糞みたいな関数名だな。
996デフォルトの名無しさん:2011/09/15(木) 23:24:02.32
以前windowsのメモ貼でどれぐらいのサイズまで扱えるか実験したけど
editコントロールの上限(0x7FFFFFFE)越えるサイズでも大丈夫だった。
自前で メモリ用意すればいけるみたい
997デフォルトの名無しさん:2011/09/15(木) 23:51:56.26
>>993
一行増える度に一番古い行を一行消す様にしたいです。
998デフォルトの名無しさん:2011/09/15(木) 23:56:38.38
ListViewのほうがよさそう
999デフォルトの名無しさん:2011/09/16(金) 00:09:37.61
un
1000デフォルトの名無しさん:2011/09/16(金) 00:09:52.37
ko
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。