MFC相談室 mfc22d.dll

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

■MFC相談室 mfc21d.dll■
http://hibari.2ch.net/test/read.cgi/tech/1250919279/l50
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(v=VS.100).aspx
2デフォルトの名無しさん:2011/09/15(木) 19:41:23.34
MFC リファレンス(専ブラ用)
http://goo.gl/PQkAC
3デフォルトの名無しさん:2011/09/15(木) 19:46:09.28
http://msdn.microsoft.com/ja-jp/library/d06h2x6e%28v=VS.100%29.aspx

まぁこれでもいけるんですけどね
そろそろしつこいから消えますねノシ
4デフォルトの名無しさん:2011/09/18(日) 00:38:47.20
環境は VS2010 use MFC / Windows 7です。

DLL 側でグローバル変数をこのように定義しています
__declspec(dllexport) extern CString hoge[4];

EXE 側でその変数をこのように定義しています
__declspec(dllimport) CString hoge[4];

ビルドすると下記の警告が出てしまいます、そして実行すると、

「xxx.exe の 0x00fa807b でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xfffffff4 を読み込み中にアクセス違反が発生しました。」
経験的に、このエラーの場合アクセスバイオレーションの可能性が高いと思うのですが
グローバル変数のインポート、エクスポートの仕方は間違っていないでしょうか?

警告の内容:
warning C4273: 'hoge' : dll リンクが一貫していません。
'hoge' の前の定義を確認してください
5デフォルトの名無しさん:2011/09/18(日) 02:02:09.56
>>4
日本語を勉強して理解できるようになったら、該当するエラーコードをドキュメントで調べる。
それができたら、該当エラーを修正する。
馬鹿は氏ね。
6デフォルトの名無しさん:2011/09/18(日) 14:17:26.20
VC6で作成したリソースファイルをVC10は利用できますか?
7デフォルトの名無しさん:2011/09/18(日) 14:30:02.01
使えるけど馬鹿には無理かも
8デフォルトの名無しさん:2011/09/18(日) 21:00:35.58
>>6
使える。
VisualStudio2010持ってないなら評価版落として試してみるといいよ。
9名無し募集中。。。:2011/09/18(日) 21:48:03.42
ただし評価版はMFCが使えないんだけどな
10デフォルトの名無しさん:2011/09/18(日) 21:55:11.75
>>9
使えないのはEEだろ、馬鹿が
11名無し募集中。。。:2011/09/18(日) 22:35:13.95
Ouch!
12デフォルトの名無しさん:2011/09/19(月) 00:15:03.37
試用期間があるだけ
MFCが使えないののはEEのほうじゃないのか
13デフォルトの名無しさん:2011/09/19(月) 00:45:09.34
>>12
直前のレスすら読まない、おまえが一番使えない
14デフォルトの名無しさん:2011/09/19(月) 23:14:37.52
別に使われてない
15デフォルトの名無しさん:2011/09/21(水) 19:55:08.93
>>13
バカは黙れ
16デフォルトの名無しさん:2011/10/14(金) 12:31:49.04
VS2005、SDIにてエクスプローラの詳細風の画面を作成中です。
ツリービューの方は表示できたのですが、リストビューが上手く表示できません。
Insertcolumnにてカラムを追加して、戻り値は正常なのですが、
追加後にgetcolumnすると戻り値がfalseになっている状態です。
解決方法んを教えていただけないでしょうか?
17デフォルトの名無しさん:2011/10/14(金) 14:24:24.83
ソースを出さずにバグを指摘しろとエスパー募集
18デフォルトの名無しさん:2011/10/14(金) 18:59:00.79
LVCOLUMNの中身を真面目に初期化していないとかじゃね?
19デフォルトの名無しさん:2011/10/14(金) 19:57:48.56
16です。
ソースがなくて申し訳ないです。
下記のページ丸写しと考えて下さい。
http://www.g-ishihara.com/mfc_sd_03.htm

現状として、新しくプロジェクトを作成したときは上手くできたのですが、
分割ウインドウにしたらできませんでした。
20デフォルトの名無しさん:2011/10/14(金) 20:15:36.37
>>19
ちまちまエラーの確認する位ならさっさと例外投げろや糞が、とか思ってしまった。
というか、GetColumnの呼び出しがそのページのどこにも無い件について。
21デフォルトの名無しさん:2011/10/14(金) 20:32:17.56
Getcolumnに関しては、insert後にチェックとして私が追加しました。
ソースの変更はそこのみです。
22デフォルトの名無しさん:2011/10/14(金) 20:38:48.49
で、cchTextMaxを設定しないまま、
フラグもそのままに呼び出した、と。
23デフォルトの名無しさん:2011/10/14(金) 22:18:32.03
はい。
でも文字列を設定すれば必要ないのではないのですか?
24デフォルトの名無しさん:2011/10/15(土) 07:49:33.26
最大文字数を負の値で指定されても対応に困るだろ?
デバッグ環境だと0xCCで埋められているだろうから、
-858993460文字にでもなってるんじゃねw
25デフォルトの名無しさん:2011/10/15(土) 13:46:25.74
なるほど。
じゃあ新しくプロジェクトを作成して出来たのは
たまたまだったと言うことですね。
26デフォルトの名無しさん:2011/11/22(火) 07:49:51.88
質問です。

VS2005で作ったダイアログベースのプログラムなんですが、
プログラム起動時に表示されるダイアログから新しい別の
ダイアログをDoModal()で表示させる際に、元のダイアログを
ShowWindow(SW_HIDE)で非表示にしています。
しかしこのプログラムをWindows7上で実行した場合、たとえ
ShowWindow(SW_HIDE)でいったんは非表示にできたとしても、
タスクバー上のプログラム名をクリックしたりした場合などに、
非表示にしたはずのダイアログが表示されてしまいます。
これを防いで非表示のままにする方法について、、あるいは、
システムがこのようにダイアログを勝手に表示させようとする
時にプログラム側で呼び出されているハンドらか何かについて、
お教えいただけないでしょうか。
27デフォルトの名無しさん:2011/11/22(火) 09:28:42.54
>>26
7での動作は知らないけれど、
親を隠した状態で子をモーダルで出したいということであれば、
自分はよくSetWindowRgn()を使ってる。

SetWindowRgn(CreateRectRgn(0, 0, 0, 0), TRUE);
別のダイアログ.DoModal();
SetWindowRgn(NULL, TRUE);
28デフォルトの名無しさん:2011/11/22(火) 20:29:25.73
>>27
その方法でできました。Windows7でも問題なく非表示を維持
できるようです。ありがとうございました。

関連して新しい質問なのですが、現在のダイアログから別の
ダイアログをDoModal()で表示したとき、その拡張スタイルに
WS_EX_APPWINDOWが指定されていれば、タスクバー上に
新しいダイアログのボタンが表示されるので、それを押して
最小化することができますが、しかし同時にタスクバー上の
ボタンが元ダイアログと新ダイアログとで別々に2つ表示されて
しまいます。
逆に、新ダイアログについてWS_EX_APPWINDOWの指定が
外れていれば、タスクバー上のボタンは元ダイアログのもの
1つだけしか表示されませんが、そのボタンを押しても最小化
することができなくなります。
タスクバー上のボタンを1つだけ表示させて、かつそのボタンを
押すことで新しいダイアログを最小化できる方法は無いでしょうか?
ModifyStyleExで元のダイアログのほうからWS_EX_APPWINDOWを
取り除くことも試してみましたが、うまく機能しませんでした。
29デフォルトの名無しさん:2011/11/23(水) 16:09:42.12
CFrameWndExにドッキングしたCPaneDialog派生のウィンドウ
サイズを固定にすることってできますか?

CFrameWndExに固定サイズのダイアログバーが付けれれば他の
方法でも良いのですが。
30デフォルトの名無しさん:2011/11/29(火) 22:05:50.67
アプリケーションを最小化して元に戻すときのイベントって何があるんでしょうか?

最小化したときにタスクバーをクリックしても
元のサイズに戻らなくなってしまう不具合が出てしまって
現在対処中です

元のサイズに戻すイベントがどれかわからずまったく修正のしようがない状態です
31デフォルトの名無しさん:2011/11/29(火) 22:09:57.46
Googleで調べてみたところ

// 元のサイズに戻す
AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND, SC_RESTORE);

こんなコードがヒットしたので「RESTORE」でプロジェクトを検索したところ何もヒットしませんでした。
32デフォルトの名無しさん:2011/11/30(水) 10:14:45.40
自分で追加しないとプロジェクトには何もないでしょう
33デフォルトの名無しさん:2011/11/30(水) 19:07:21.63
>>30
WM_SIZEのwParam見れ
34デフォルトの名無しさん:2011/12/01(木) 07:55:06.52
CStringに書式指定(%-04dとか%sとか)を含む文字列が含まれている場合、
その書式指定の部分だけを抽出した部分文字列を得る良い方法ってありますか?

自分でも、'%'が出てこないかFindして出てきた位置の次に最初に'd'や's'が出てくる位置を
それぞれ見つけてきて、その位置の間の長さが最も短くなる部分文字列を取ればいい、
というアルゴリズムは思いつきますが、書式指定子('d'や's')をきちんと網羅できてないと
バグの原因になるのではないかと思い、もしかすると同じコードを今後も流用する可能性が
あることを考えると、より安全確実に実施できる方法が関数として既に用意されているなら
それを利用したいと考えています。

何か良い方法があればご教授ください。
35デフォルトの名無しさん:2011/12/01(木) 08:18:17.34
書式指定の部分はprintfなんかと同じ方法でいいと思うけど
何が問題なのか意味不明
36デフォルトの名無しさん:2011/12/01(木) 08:37:22.03
えーと'%-04d'とかを、(引数が代入されないままの)そのままその部分だけ取得したい、ということです。
37デフォルトの名無しさん:2011/12/01(木) 09:44:49.41
>>34
なんでそこだけを抽出したいの?
全ての書式指定子を網羅的に扱いたいならprintf()(の下請け)がやっている筈の構文解析をやるしかなくなるけど。
例えば、"%2$*1$lld"みたいなものも扱うのかって問題もあるし。
38デフォルトの名無しさん:2011/12/02(金) 07:54:32.78
>>37
書式指定を含む文字列に引数を代入する場合、単に代入するだけじゃなくて
変換もかかるので、その引数が代入された後にどういう部分文字列になる
のかを見たい、というのが目的で、具体的には、書式指定を含む任意の
文字列とそこに代入されるべき可変個数引数が与えられた時に各引数の
代入された後の姿(部分文字列)をCStringArrayに格納したい、というのが
直接的にやりたいことです。そのために元の文字列の書式四手が現れる
位置(とその個数)を予め知っておきたい、ということです。
39デフォルトの名無しさん:2011/12/02(金) 10:23:41.35
VC持ってるならCRTのソースが入ってるでしょ
解析すればよろし
40デフォルトの名無しさん:2011/12/02(金) 10:29:15.05
>>38
なんだかよく判らんが、変換前と変換後を比較すればいいんじゃないのか?
41デフォルトの名無しさん:2011/12/02(金) 12:49:55.30
それはそれで大変でしょ
変換前と変換後が一緒だったら検出出来ないし
"%s"が"%s"に置き換わったら無理
42デフォルトの名無しさん:2011/12/02(金) 20:32:49.53
>>39
見てみたところ crt/src/output.c と crt/src/input.c に記述されている
_output と _input という関数が、それぞれprintf系とscanf系の実体の
ようで、いずれも愚直に1文字ずつポインタをずらし値をチェックしていき
書式指定を抽出しようとする泥臭い処理になってました。
ここのチェックの処理が関数として独立してくれていればそれを利用して
コードを書くこともできるんですが、現時点では残念ながらこれらの処理を
まるまるコピペして使うしかなさそうです。
43デフォルトの名無しさん:2011/12/06(火) 13:35:24.63
VC2008でXPを使用しています。
MFCアプリでOnPaintで描画をしている以下の2つのケースで
ケースAの方だけ描画がされなくなります。
処理はちゃんと走っているのに
最初はちゃんとひょうじされているのに
回数を重ねるとまったく表示されなくなります。
いったいなぜなんでしょうか?同じプログラムに見えるのに。。。

ケースA
for(i = 0;i < 30;i++)
{
pFont = (CFont *)dc.SelectObject(&font);
dc.DrawText(...略);
dc.SelectObject(pFont);
}


ケースB
pFont = (CFont *)dc.SelectObject(&font);
for(i = 0;i < 30;i++)
{
dc.DrawText(...略);
}
dc.SelectObject(pFont);
44デフォルトの名無しさん:2011/12/06(火) 14:30:52.31
再現する最小コードを貼るべき
45片山博文MZ ◆0lBZNi.Q7evd :2011/12/06(火) 14:55:23.54
>>28 モードレスダイアログ
46デフォルトの名無しさん:2011/12/06(火) 15:20:57.90
>>43
フォントオブジェクトの寿命。
47デフォルトの名無しさん:2011/12/06(火) 15:41:56.43
>最初はちゃんとひょうじされているのに
>回数を重ねるとまったく表示されなくなります。
GDIオブジェクトのリークが怪しい
48デフォルトの名無しさん:2011/12/06(火) 22:01:26.55
>>43
なんか、そこだけじゃなくて、その外側に問題がありそうな希ガス。
49デフォルトの名無しさん:2011/12/08(木) 13:53:05.97
VC2005のバグじゃないかと思うんだけど、OnBnSetfocusButtonに入ってこない。
再現させるプロジェクトの作成は簡単。

1.MFCアプリをダイアログベースで新規作成。
2.ダイアログにButton1を載せる。
3.そのButton1を右クリックで、「イベントハンドラの追加」→BN_SETFOCUSを選んで、「追加して編集」。
4.OnBnSetfocusButton1()ができるので、そこにMessageBoxでも書いておく。

これで実行するとダイアログ上には、OK、キャンセル、Button1の3つのボタンがあり、
タブキーでフォーカスを移動していってButton1がフォーカスされても、OnBnSetfocusButton1()の中の処理が実行されない。

これは明らかなバグだよね?
このバグはCButtonだけで、CEditの場合はうまくいくんだ。
50片山博文MZ ◆0lBZNi.Q7evd :2011/12/08(木) 13:54:50.22
>>49 BS_NOTIFYスタイルが必要。
51デフォルトの名無しさん:2011/12/08(木) 14:07:58.82
>>50
おお!
感謝します!
52片山博文MZ ◆0lBZNi.Q7evd :2011/12/08(木) 14:10:17.46
>>51 リファレンスに記載済み。今度質問するときは確認しな。
53デフォルトの名無しさん:2011/12/08(木) 14:15:17.59
BS_NOTIFY つけてる?
54デフォルトの名無しさん:2011/12/19(月) 11:26:22.88
質問です。
ロケールを動的に変更する方法ってありますか?
例えばAfxMessageBox("・・・", MB_YESNO)を実行した際のダイアログ上の
ボタン表示を「Yes/No」だったり「はい/いいえ」だったりと変更したいのですが。
55デフォルトの名無しさん:2011/12/19(月) 13:48:02.54
モードレスダイアログの場合、コンストラクタの「CWnd* pParent」って意味あります?
Createでも指定させるなら、このコンストラクタは無意味ですよね?
56デフォルトの名無しさん:2011/12/19(月) 19:08:09.09
突然失礼します。
下記のコードを記述し、WindowsXP及びWindows7で同様のファイルを指定したところ
XPでは正常に動作しますが、7ではファイルを開くことができません。
どなたか原因が分かる方いらっしゃいましたらご教授お願いします。

If(!file.open(fn, CFile::modeRead|CFile::typeBinary)) return FALSE
57デフォルトの名無しさん:2011/12/19(月) 19:36:20.03
とりあえずCFileExceptionを受け取るようにしてみたら?
58デフォルトの名無しさん:2011/12/19(月) 19:40:10.03
>>55
モードレスダイアログの場合は、
引数無しのコンストラクタを使う決まりになっている。
59デフォルトの名無しさん:2011/12/19(月) 19:54:52.76
>>57
ご返信ありがとうございます。
CFileExceptionの値は2になっており、どうやらファイルが存在しないというエラーのようです。
具体的には、フォルダダイアログからファイルを選択しているにも関わらず、m_strFileNameのフォルダ名部分が書き変わらないようなのです。
当該現象はXPでは発生しておりません。
なぜWindows7でのみ発生するのでしょうか。
使用環境は両OS共にVisual Studio2008です。
何か心当たりがある方、宜しくお願いします。

60デフォルトの名無しさん:2011/12/19(月) 20:40:25.63
>>59
m_strFileNameって何?
ファイル名はCFileDialog::GetPathName()で取得したの?
61デフォルトの名無しさん:2011/12/20(火) 09:13:40.83
>>58
ということは、ダイアログクラスを新規に作った際に勝手に用意される
「CWnd* pParent = NULL」のコンストラクタは、
モードレスダイアログとして使うクラスのときには、
消してしまって構わないということですよね。
62デフォルトの名無しさん:2012/01/05(木) 05:47:42.07
CDialogを継承したCHogeDialogクラスがあります。
これは、リソースのID(IDD_HOGE)が指定されています。
ダイアログリソースの中には、IDOK IDCANCEL IDC_HOGELIST(List Control) の3つがあります
変数の追加にて、IDC_HOGELISTに関しては m_listCtrl を指定しました。

CHogeDialog dialog(this);
// この辺りに、 dialog.m_listCtrl.InsertItem のようなことをしたいのですが、
// これだと Debug Assertion Failed! と言われてしまいます。
dialog.DoModal();

ダイアログを表示する前にIDC_HOGELISTにアクセスしたり内容を追加するにはどうすればいいでしょうか?
よろしくお願いします。
63デフォルトの名無しさん:2012/01/05(木) 06:20:14.11
>>62
モーダルダイアログとして使う以上、コントロールが作られるのはDoModalのタイミング。
アクセサ経由等でメンバ変数に予め内容を入れておいて、
WM_INITDIALOGのタイミングで生成されたコントロールにセットするのが一般的かと。
6462:2012/01/06(金) 01:36:10.66
>>63
動かない理由、納得しました。
クラスに独自の変数を持たせて、
クラスの内部からWM_INITDIALOG時にそのデータを反映させることで対応しようと思います。
適切な助言、どうもありがとうございました。
65デフォルトの名無しさん:2012/01/09(月) 16:36:04.05
ウィザード生成したMFCアプリケーションについてです。
他はいじらずにCMainFrameにて、OnCreateの末端辺りにDragAcceptFiles();を追加して、
デバッグ時にファイルをアプリケーションにドラッグ&ドロップした時に
Debug Assertion Failed!と表示されて落ちてしまいます。
その時には、下のような記述があります。
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\appui.cpp Line:88

ドラッグドロップに対応したいのに、エラーで落ちてしまっています。
このエラーの対処法ご存じでしたら教えてください。
66デフォルトの名無しさん:2012/01/09(月) 17:45:26.51
>>65
Document-Viewを使わないで生成するとそうなるみたいだな。
既定の流れだとDocument-Viewありきな作りみたいだから、
自前のWM_DROPFILESハンドラを書くのが一番手っ取り早い。

今回は偶々直ぐ判ったけど、VSのバージョンやウィザードでの設定で
生成されるコードが大分変わるから、次からは質問時に一緒に書いておいた方が良いよ。
67デフォルトの名無しさん:2012/01/09(月) 17:54:50.47
>>66
現状での不具合のようなものなのですね。

OnDropFiles(HDROP hDropInfo)にて、
CFrameWndEx::OnDropFiles(hDropInfo); を呼ぶ代わりに
DragFinish(hDropInfo); を呼ぶことで対処したいと思います。
それと、次回から環境を書くようにします。
どうもありがとうございました。
68デフォルトの名無しさん:2012/01/10(火) 09:07:42.76
>>65
落ちているのではなく、アサートに引っかかっているのだから、
画面に書かれているように「再試行」を押せば一発で原因がわかるよ。
69デフォルトの名無しさん:2012/01/13(金) 08:22:36.58
出席管理のプログラム作ったんですが何か使いにくい・・・

研究室で使うように作ったのですが他に足した方が良い所とかありますか?
あと、年間を通して1つのCVCデータで管理したいのですが、どうやったらいいですか?

VC2005でXPを使用しています。

"shine90271.zip [施錠中] よろしく"って書いてあるのです。

DLKey:0309
URL:http://up.shinetworks.net/cgi-bin/snup/upload.html

個人情報とか大学名とかはスルーして貰えると嬉しいです。
70デフォルトの名無しさん:2012/01/13(金) 08:33:19.28
CSVです。スイマセン
71デフォルトの名無しさん:2012/01/13(金) 23:52:29.00
>>69
一画面に色々機能を詰め込みすぎだ。入退出と管理の画面を分けよう。
名簿リストとか入退室記録は、起動・終了時に決まったファイルに読み書きすれば十分じゃないか?

本当の所はコードを一から書き直したい、というか.NETに移植してしまいたい位だけどw
72デフォルトの名無しさん:2012/01/16(月) 14:44:28.17
ファイルとかCFileとかで読めますが
Excelファイルとかどうやったら読めますか?
シートの中のデータ読みたいんですがむりですか?
MFCは2008を使ってます
73デフォルトの名無しさん:2012/01/16(月) 14:52:45.20
COM使えば
74デフォルトの名無しさん:2012/01/16(月) 16:46:31.18
COMって何ですか?
MFCでできますか?
75デフォルトの名無しさん:2012/01/16(月) 16:52:34.69
かなりの初心者質問なのですが、
MFCのボタンにBitmapを貼り付けるにはどうすれば
いいのでしょうか?Iconはうまく行ったのですがBitmapだとうまく行きませんでした。

したいこと。リソースからBitmapをボタンの中央に張りつける。

できなかったコード:
[ヘッダ]
public:
 HBITMAP m_hBmp;

[cpp]

m_hBmp = (HBITMAP)::LoadBitmap( AfxGetApp()->m_hInstance,
MAKEINTRESOURCE(IDB_BITMAP1) );
cBtnRec.SetBitmap(m_hBmp);
76デフォルトの名無しさん:2012/01/16(月) 17:18:47.23
すでにMFCにクラスが用意されてるはずだから
それ使うかソース見ればいい
77デフォルトの名無しさん:2012/01/16(月) 19:30:54.43
>>72
http://msdn.microsoft.com/ja-jp/library/fe06teee(v=VS.90).aspx
ここら辺を参考にすれば良いよ。
「Excel MFC」で検索した方が手っ取り早いとは思うけど。
78デフォルトの名無しさん:2012/01/19(木) 11:49:11.63
CMainFrame::OnCreate()内で、
ModifyStyle(WS_CAPTION,0);を呼んでタイトルバーを削除してるんですが。

この状態でウィンドウを最大化すると、
全画面表示のような状態になってしまいます
(タスクバーの領域までウィンドウが拡大される)。

通常の最大化状態にするポイントなどご存知でしたら教えてください。
よろしくお願いします。
79デフォルトの名無しさん:2012/01/19(木) 12:37:44.41
>>78
OnGetMinMaxInfo()で出来ないかな?
80デフォルトの名無しさん:2012/01/19(木) 13:39:53.76
>>79
早速の返信ありがとうございます。
WM_GETMINMAXINFOというメッセージがあったんですね。
Mから始まるメッセージで探してたので盲点でした。
ちょっと試行錯誤してみます。
81デフォルトの名無しさん:2012/01/19(木) 16:41:21.31
プライマリモニタだけならこんな感じで動きました。
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
CRect workArea;
::SystemParametersInfo( SPI_GETWORKAREA, 0, &workArea, 0 );

const int BORDER_WIDTH = 3;//境界線の幅
lpMMI->ptMaxSize.x = workArea.Width() + BORDER_WIDTH*2;
lpMMI->ptMaxSize.y = workArea.Height() + BORDER_WIDTH*2;

CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
でもセカンダリモニタだとうまくいかないんですよね。
そもそもセカンダリモニタだとlpMMI->ptMaxSizeの設定が効いてこないんですよね。。。
lpMMI->ptMaxSize.x = 100;とか直接値を指定すると効くみたいなんですけど。
82デフォルトの名無しさん:2012/01/19(木) 16:44:04.31
#include <MultiMon.h>
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
CRect windowRect;
GetWindowRect( windowRect );
HMONITOR h = ::MonitorFromPoint( windowRect.TopLeft(), MONITOR_DEFAULTTONEAREST );

MONITORINFO info;
info.cbSize = sizeof( MONITORINFO );

::GetMonitorInfo( h, &info );
CRect workArea = info.rcWork;

const int BORDER_WIDTH = 3;//境界線の幅
lpMMI->ptMaxSize.x = workArea.Width() + BORDER_WIDTH*2;
lpMMI->ptMaxSize.y = workArea.Height() + BORDER_WIDTH*2;

CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
セカンダリモニタのワークエリアを取得して設定もしてみたんですけど、
lpMMI->ptMaxSizeの設定がそもそも効いてこないんですよね。
何か気づいた点がありましたらご指摘いただきたいと思います。
83デフォルトの名無しさん:2012/01/19(木) 23:11:07.58
lpMMI->ptMaxSizeではなくlpMMI->ptMaxTrackSizeの方に値を設定したらそれらしく動作しました。

lpMMI->ptMaxTrackSize.x = workArea.Width() + BORDER_WIDTH*2;
lpMMI->ptMaxTrackSize.y = workArea.Height() + BORDER_WIDTH*2;

気持ち的には、ptMaxSizeの方に設定して動いてほしいんですけど、
とりあえずゴリゴリ書いてけば動きそうです。
やりたいことに対して処理が若干複雑な気もしますが、こんなもんですかね〜w
84デフォルトの名無しさん:2012/01/26(木) 21:13:32.62
ちょっと気になったんで、ご意見伺いたいんですけど。
CRect::PtInRect()って右辺上と下辺上の点は内部とみなされないんですけど、どうしてこういう仕様なんですかね?
自分的には右辺上も下辺上も内部とみなしてくれた方が使い易いんですけど。

何か合理的な理由ってありそうですか?
85デフォルトの名無しさん:2012/01/26(木) 23:49:43.56
>>84
RECTは基本的に右端と下端を含まない範囲を表しているから。
辺の差がそのまま幅や高さになるから、案外こっちの方が便利。
86デフォルトの名無しさん:2012/01/27(金) 00:19:11.01
うーむ
CRect r( 0, 0, 100, 100 );だと実際は101ピクセルずつですけど
r.Size();するとサイズは100ずつですもんね。。。

配列のサイズと、有効インデックスと同じような考え方かなぁ?

でも、実際にFrameRect();とかすると右端と下端も描画されるしなぁ
(実はここが引っ掛かりポイントかな。実際に描画されてるのに内部と判定されない。)

やっぱり、それなりに理由は有りそうですけど、まだすっきり理解できてこないなぁ
87デフォルトの名無しさん:2012/01/27(金) 01:08:25.33
いや、ちゃんと確かめないで書き込んでしまった
FrameRect();は右端と下端を描画していないようです

これで全部辻褄が合ってるのかなぁ?
もうちょっと自分で考えを整理してみます。
88デフォルトの名無しさん:2012/01/27(金) 01:48:50.51
>>85
一人で書き込んでばかりですみませんがw

問題点というか、混乱してた原因が、
CRect::PtInRect()ではなくてCRect::BottomRight()で
混乱してたことが分かりました。

RECTの仕様としては、右端・下端を含まないのが正しそうですね。

それで、
CRect::TopLeft()は、RECT内の有効な点として使えるのに、
CRect::BottomRight()は、RECT内に含まれない右下の点を返すので、
これを使ってちょっと色々やってたので混乱してしまったようです。

お騒がせしました。
でも、RECTの仕様もすっきり分かってきたので良かったです。
ありがとうございました。
89デフォルトの名無しさん:2012/01/30(月) 19:48:17.36
Windows1の頃からの仕様だな。
90デフォルトの名無しさん:2012/01/30(月) 20:50:18.20
left, top, width, heightの方が分かりやすいよな
POINT二つ分とかにはできなくなるが、そもそもそれがおかしいわけで
91デフォルトの名無しさん:2012/02/02(木) 00:38:27.77
CFileFindについてですが、
MSDNではIsDirectoryなどの属性を調べるメンバはすべて
FindNextFileを少なくとも1回は呼んでから使えと書いてあるんですが、
これって一番目のファイル(FindFirstFileで検索したファイル)は属性を調べられないってことでしょうか?
実際に試すとそんなことも無いような気がしておりまして、
とても気になっております。
92デフォルトの名無しさん:2012/02/02(木) 08:00:00.06
>>91
CFileFind.FindFileは、内部的には一番目のファイル情報を取得しているけど、
実は、次のCFileFind.FindNextFileを呼び出した時に、その情報が参照できるように細工してある。
詳しくはMFCのソースを見たほうが早いかと。
93デフォルトの名無しさん:2012/02/02(木) 12:42:51.76
>>92
ソース見てみました。難しくてなんとなく分かった程度ですが
なんでこんな仕様になってるんだろう?と思いましたが、
ひとつ解決してすっきりしました。ありがとうございました。
94デフォルトの名無しさん:2012/03/18(日) 10:46:30.07
VS2010 MFC / Windows 7/32bit です。
MSDN 方法 : リソースを追加または削除する
http://msdn.microsoft.com/ja-jp/library/3bka19x4.aspx
参考にリソースのインポートを行うのですができません。
リソースビュー→Toolbar→右クリック→リソースの追加→インポート→予めエクスポートしておいたbmp ファイルを選択
Bitmap ファイルが表示されます。
その後、当該bmpファイルとIDを関連付けて、リソースビューのToolbarタブの配下に登録したいのですが、どうすればいいのでしょうか?
また、やり方が間違っているならば、正しいリソースのインポート方法を教えて下さい。
95デフォルトの名無しさん:2012/03/18(日) 15:51:20.64
環境:VS10 MFC MDI
MDI にダイアログをモードレスダイアログを追加しました
ドキュメントクラスのデータをダイアログで使いたいのですが、
CxxxDoc* pDoc = dynamic_cast<CxxxDoc*>(((CFrameWnd* )AfxGetMainWnd())->GetActiveDocument());
これだと、pDocがNULL で取得できません、どうしたらいいでしょうか。
96デフォルトの名無しさん:2012/03/18(日) 15:52:11.11
☓MDI にダイアログをモードレスダイアログを追加しました
○MDI にモードレスダイアログを追加しました
>>95-96
もう見ていないかもしれんが、呼ぶ場所による。

メインのフレームウィンドウが生成されていな時点で、AfxGetMainWnd()
を呼ぶとNULLが返されるし、SDIと違ってMDIの場合は何もドキュメントを
開いていなければやっぱりNULLが返される。

前者は、例えばモーダレスダイアログ(CMyDialog)のインスタンスが、アプリ
ケーションクラス(CMyApp)のメンバとして定義して、CMyDialogのコンスト
ラクタ内では、まだドキュメントは開かれていないので、ポインタは取得
できない。(NULLが返される)

あと、MDIだと、AfxGetMainWnd()のキャストは(CFrameWnd *)ではなく、
(CMDIFrameWnd *)でなければならない。
CEditのオブジェクトをCWndのポインタでdeleteしても問題ない(=メモリリークなどは発生しない)のでしょうか?
教えてください。

------------------------------------
// エディットボックス構築
CWnd* pEdit = new CEdit();
pEdit->Create(ES_LEFT| WS_VISIBLE | WS_BORDER, rect, this, IDC_EDIT5);

// エディットボックス削除
delete pEdit;
------------------------------------

今でもMFCは花形ですか?
勉強する価値はありますか?
>>98
CWndが仮想デストラクタになっているから問題無い。

>>99
勉強しなくて良い。
>>99
さすがにぜってー意味ねぇと思うわ
C#+.netやれ
>>101
先輩まじですか。
マネージで安泰ということでよろしいか?
安泰つーか、MFCが有り得ないだけだから。
>>103
津波のシミュレートってテレビでよくやってるじゃないですか。
あーいうのがやりたいんですよ。
ということは、C#でも十分可能ということなんですよね?
>104
まず物理に詳しくて、それをパソコンで計算する手法を知っていることかな
その辺の知識があれば関連書籍やサンプルプログラム見つかるだろうし
そこで使ってるプログラミング言語を選ぶのが楽
MFCがあり得ないというのは言い過ぎだけど花形ではないは確か。
組み込み系でもない限り使う機会って少ないんじゃないかな?
ちなみに私は組み込み系。有り難く使わせてもらってる。
津波のシミュレートとかだと、計算方法とかをしっかり知ることかな。
そしてその結果を出力していくだけだろうからMFCは関係ない。
何かUIを付けていくんだったら、MFC使うなりC#使うなり
そのとき考えればいい。
組み込み系でMFCってw
それ、組み込み系って言うか、組み込みの支援ツールとかだろww
できの悪いシミュレータでも作っているんだろwww
質問です。
1つのアプリケーションの中で複数のダイアログやウィンドウの間で遷移させたくて次のような実装を考えています。
BOOL CMyApp::InitInstanse(){
  〜中略〜
  int nUI = 0;
  while(1){
    switch(nUI){
      case 0:
        CMyDialog dlg;
        dlg.DoModal();
        nUI = dlg0.m_nNextUI;
        break;
      case 1:
        CMyFrameWnd* pwnd = new CMyFrameWnd;
        if( (pwnd->LoadFrame(〜) == FALSE) || (pwnd->AddDocTemplate == FALSE) ){
           delete pwnd;
           nUI = -1;
        }
        else{
           pwnd->ShowWindow(SW_SHOW);
           nUI = pwnd->m_nNextUI;
        }
        break;
      default:
        return FALSE;
        break;
    }
  }
}
でもCWnd::ShowWindowはCDialog::DoModalのようにUIが閉じられるまで待ってくれないから
このようなコードでは正常に動作しないんですよね。本来はInitInstanseをreturn TRUEで出て
メッセージポンプ開始させるのが普通ですが、InitInstanseを出ずに使う方法は無いですか?
>>108
やりたいことを具体的に書いた方がいいよ。でないと、
どうしてもInitInstance()から出たくないなら、中でメッセージポンプを実装すればいいとしか。
普通に状態フラグみたいなもので作業フェーズを管理すればいいだけだと思うんだけどね。
>>109
あるダイアログ上である特定のUI操作をしたら、そのダイアログが消えて別の
ダイアログ/ウィンドウが新たに表示される、というような画面遷移がいくつか
必要なアプリケーションにおいて、アプリケーション上で生きているダイアログ
やウィンドウを常に1個だけにしたい(使わないダイアログやウィンドウを隠す
のではなく使い終わったものは順次デコンストラクトしてしまいたい)、というの
がやりたいことです。
>>110に追記。
自分が困っているのは、>>108のようにInitiInstanseの中からウィンドウを呼ぶ実装だと、
モーダルダイアログと違って、ウィンドウが閉じられるまでプロセスをそこで待たせるのが
難しいので、もっと簡単に>>110を満たす実装ができないだろうか、というところです。
>>108
case 1:のところでは見えないダイアログをDoModalで出しておいて、
そのダイアログから別スレッドを作ってCMyFrameWndを出して、
ダイアログがタイマーで定期的にスレッドの終了を見張って、
終了していたらダイアログ自身もEndDialog
というようなやりかたならやったことがある。
>>112
その方法だと、タスクバー上に、ダイアログのぶんとウィンドウのぶん、
2つのタイトルボタンが現れてしまいませんか?
>>107
横レスだけど、WinCEは企業じゃ現役だと思うよ
あと、POSとか、大き目の組込みじゃ普通にXPが載ってたりする
>>104
Blenderでできるよ。動画もあったはず。
>>113
そこはWS_EX_TOOLWINDOWを指定するなり、
ダイアログをサイズ0ではなく非表示にするなり、
自身のアプリの動きに合った方法を探ってもらうしか。

自分の場合は、ランチャのようなものがあって、
そこからダイアログやCMyFrameWndをモーダルで出す仕組みだったので、
LoadFrameに渡す親ウィンドウを前述の見えないダイアログにして、
タスクバーに新たに出てこないようにした。

この方法だとCMyFrameWnd自体のタスクバーへの最小化ができないけど、
モーダルダイアログと同じようになればよかったので、最小化は不可にした。
108ですが解決しました。おおざっぱにですが、まずはウィンドウ側。
BOOL CMyFrameWnd::OpenAndHide(CWnd* pwndParent, BOOL* pbIsDestroyed)
{
  // LoadFrameの引数の親ウィンドウへのポインタにはpwndParentを渡さずNULLにしておく
  if( (pwndParent == NULL) || (LoadFrame(〜) == FALSE) || AddDocTemplate(〜) == FALSE) ) return FALSE;
  // pwndParentを消す
  pwndParent->ShowWindow(SW_HIDE);
  LONG lExStyleOfParent = m_lExStyleOfParent = ::GetWindowLong(pwndParent->m_hWnd, GWL_EXSTYLE);
  lExStyleOfParent &= (~WS_EX_APPWINDOW);
  lExStyleOfParent |= WS_EX_TOOLWINDOW;
  ::SetWindowLong(pwndParent->m_hWnd, GWL_EXSTYLE, lExStyleOfParent);
  ::SetWindowPos(pwndParent->m_hWnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
  ::SetWindowRgn(pwndParent->m_hWnd, CreateRectRgn(0, 0, 0, 0), TRUE);
  // ポインタをメンバ変数に記録
  m_pwndParent = pwndParent;
  if(pbIsDestroyed != NULL){
    m_pbIsDestroyed = pbIsDestroyed;
    (*m_pbIsDestroyed) = FALSE;
  }
  ShowWindow(SW_SHOW);
  return TRUE;
}
void CMyFrameWnd::OnDestroy()
{
  if(m_pbIsDestroyed != NULL) (*m_pbIsDestroyed) = TRUE;
  else{
    ::SetWindowLong(m_pwndParent->m_hWnd, GWL_EXSTYLE, m_lExStyleOfParent);
    ::SetWindowPos(m_pwndParent->m_hWnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
    ::SetWindowRgn(m_pwndParent->m_hWnd, NULL, TRUE);
  }
  CWnd::OnDestroy();
}
そしてダイアログ側。
BOOL CMyDialogForWindow::OnInitDialog()
{
  if(CDialog::OnInitDialog() == FALSE) return FALSE;
  CMyFrameWnd* pwnd = new CMyFrameWnd;
  if(pwnd->OpenAndHide(this, m_bIsDestroyed) == FALSE){
    delete pwnd;
    OnCancel();
    return FALSE;
  }
  pwnd->ShowWindow(SW_SHOW);
  SetTimer(m_nTimerID, 500);
  return TRUE;
}
void CMyDialogForWindow::OnTimer(UINT nIDEvent)
{
  if(m_bIsDestroyed == TRUE){
    KillTimer(m_nTimerID);
    OnOK();
  }
  CDialog::OnTimer(nIDEvent);
}
これで、>>108のcase 1:の中で、CMyDialogForWindowのインスタンスを作ってDoModal()すれば
(CMyDialogForWindowが自動的に隠れ)CMyFrameWndだけを開いているような状態になるはずです。
>>116さんのようにランチャ的なダイアログから開きたい場合には、上のダイアログ側コードを削除して
void CMyDialogForWindow::OnButtonOpenWindow()
{
  CMyFrameWnd* pwnd = new CMyFrameWnd;
  if(pwnd->OpenAndHide(this, NULL) == FALSE) delete pwnd;
  else pwnd->ShowWindow(SW_SHOW);
}
を加えれば、うまく動作するはずです。
大事な部分が抜けてました。
CMyFrameWnd::OpenAndHideおよびCMyFrameWnd::OnDestroyの中において、
CWinApp::m_pMainWndを移譲する処理を書いておく必要があります。

CMyFrameWnd::OpenAndHideでは
  m_pwndOld = AfxGetApp()->m_pMainWnd;
  AfxGetApp()->m_pMainWnd = this;

CMyFrameWnd::OnDestroyでは
  AfxGetApp()->m_pMainWnd = m_pwndOld;

それぞれ適当な場所に書いてください。

いろいろとご助言ありがとうございました。
120デフォルトの名無しさん:2012/04/11(水) 20:41:32.54
>>117
CMyFrameWndを別スレッドにしなくても大丈夫だった?

>>112を作ったときは、
MFCのフレームウィンドウのコマンドUI処理やドッキング処理は
InitInstanceを抜けた後のアイドル時に行うような前提で、
ダイアログベースのアプリケーションのメインスレッドからだと
CMyFrameWndでそのあたりがうまく動かなかったので、
わざわざ別スレッドを経由するするようにしたんだけど。

121デフォルトの名無しさん:2012/04/13(金) 16:44:19.01
CDatabaseやCRecordsetを使ってODBCでOracleデータベースにアクセスしています。
しかし、このクラスにはメモリリークのバグがあるみたいなので
別の方法(CDatabaseを使わない)でOracleにアクセスしたいのですが
そんな方法があるんでしょうか?教えてください。
122デフォルトの名無しさん:2012/04/13(金) 17:12:53.36
>>121
ADOかなー。
バージョンによってはoo4oのほうがいいかな
123デフォルトの名無しさん:2012/04/16(月) 08:14:51.44
ありがとうございます
ADOでやってみます
oo4oは64bitで使えないらしく残念です
124デフォルトの名無しさん:2012/04/17(火) 00:54:50.49
>>121
SQLを書いたファイルをsqlplusに食わせて、それをファイルにリダイレクトするバッチファイルを作る。
で、"cmd /c バッチファイル"をsystem関数で実行する。
というダサいプログラムを見たことがある。
125デフォルトの名無しさん:2012/04/17(火) 13:19:50.06
ダサいけど、存外安定するんだな。
126デフォルトの名無しさん:2012/04/19(木) 00:50:24.86
安貞するの?
安貞しちゃっていいの?
しちゃうよ?
本当にいいの?
127デフォルトの名無しさん:2012/04/24(火) 02:17:02.68
滅茶滅茶にして…///
128デフォルトの名無しさん:2012/05/01(火) 01:21:14.89
MFC初心者です
質問があります
 
計測データをグラフ表示したい場合
どのような方法が考えられますか?
なんでもいいのでおしえてください
129デフォルトの名無しさん:2012/05/01(火) 12:41:20.69
・市販のグラフコントロールを買う
 買ったコントロールのヘルプを読めばいい

・自分で全部描く
 ViewのOnDraw又はOnPaint
 CDCクラス
 CPenクラス
 CBrushクラス
 あたりを調べて勉強する
 理解出来たらオーナー描画を勉強する
130デフォルトの名無しさん:2012/05/01(火) 13:23:06.10
>>128
市販のグラフコントロール買うのが一番良いよ。
ただ、それが10万とかすると「高いから自分でコード書け」とかいう馬鹿上司がいたりするんだよなぁ。
131デフォルトの名無しさん:2012/05/01(火) 14:57:14.85
まぁ仮に、人月単価40万円の奴が担当したとする。
一週間グラフを作るのに費やしたらそれだけで10万円だよな。

とは言え、我が社ではgnuplotでやっているが。
132デフォルトの名無しさん:2012/05/01(火) 15:24:49.15
>>131
それ、メンテナンス工数が入ってないよ。
133デフォルトの名無しさん:2012/05/01(火) 23:45:28.86
もう少し大局的に物事を考えられるようになろうぜ
134デフォルトの名無しさん:2012/05/02(水) 07:53:50.61
高機能なコントロール=使い易いコントロール
とは限らないのが難しい所だけどな。
MFC使い慣れてるオッサンに仕事を押し付けるのが手っ取り早い。
……MFC以外を検討するのが最善策な気もするけどw
135デフォルトの名無しさん:2012/05/03(木) 00:07:29.16
企業として使用する場合MFC以外でGUIライブラリってなにがあるんだ?

シェアウェアとして個人でwwwに公開する場合ならいろいろあるけど。
136デフォルトの名無しさん:2012/05/04(金) 20:02:08.50
MFCで組み合わせを計算するアプリ作成しています
いざ計算すると止まってしまい困っています
どうやらユーザ定義関数の階乗を計算する関数が
動作していないことが原因みたいです
C++の要領でメイン関数の上に置いたのはマズかった
のでしょうか?アドバイスおねがいします
137デフォルトの名無しさん:2012/05/04(金) 22:02:41.13
ユーザ定義関数を直せばいいんじゃないかな
138デフォルトの名無しさん:2012/05/05(土) 04:02:33.96
>>137
どのように直せばいいですか?
方法が分からず困っています
139デフォルトの名無しさん:2012/05/05(土) 05:13:56.42
正しく動くように直せばいいんじゃないかな。
140デフォルトの名無しさん:2012/05/05(土) 19:46:33.66
>>136
宿題は自分でやれよ、馬鹿が
それとも、聞ける友達すらいないのか
141デフォルトの名無しさん:2012/05/06(日) 01:05:34.85
>>140
すみません
たしかに友達が少ないのは事実ですが

なんとかなりそうです
激励ありがとうございます!
142デフォルトの名無しさん:2012/05/09(水) 18:32:22.87
>>131
人月単価40万円なんてありえない

それって、個人の給料と勘違いしていない?

工数は8000〜10000円/1H位で見積もるよ
143デフォルトの名無しさん:2012/05/09(水) 19:04:15.66
底辺下請けを舐めんなよ。個人でやってるソフトハウスなんてそんなもんだ。
ちなみに、独立系のソフトハウスで80-120万、大手SIerで120-200万円だ。
144デフォルトの名無しさん:2012/06/09(土) 18:39:41.26
ソフトウェア業界で飯を食っていこうと考えると
MFCと.NETだと、どちらをマスターしたほうがいいですか?

145デフォルトの名無しさん:2012/06/09(土) 21:00:41.38
その2択ならMFCだろうな
.netなんて適当な本読んで、2,3日もすれば完全にマスターできる。

必要になったときにやればいい。
146デフォルトの名無しさん:2012/06/09(土) 22:38:58.81
>>144 はスレタイを読んでいる
>>145 は空気を読んでいる
そして死神が漏れを呼んでいる
147デフォルトの名無しさん:2012/06/10(日) 08:44:58.86
もう 2ch にはまともなひといないお
148デフォルトの名無しさん:2012/06/10(日) 20:14:15.57
質問があります
追加したダイアログのメニューバーを無効(灰色表記)にするのはどうすればいいですか?
149デフォルトの名無しさん:2012/06/11(月) 12:48:21.30
150デフォルトの名無しさん:2012/06/13(水) 22:47:19.74
吹き出しっぽいものを作ってそこに文字を入力してもらおうと考えています
そこでまずttp://www.yoshibaworks.com/ayacy/inasoft/wpt/ulw.htmlを参考に
UpdateLayeredWindowを使って吹き出し型のウィンドウを作るところまでは出来ました。

しかしそれに対してエディットボックスを貼り付けてみたところ見事に表示されませんでした。
レイヤードウィンドウにコントロールを貼り付けることはできないのでしょうか
151デフォルトの名無しさん:2012/06/13(水) 22:57:27.40
出来ますよ
152デフォルトの名無しさん:2012/06/13(水) 23:00:05.36
>>151
おお、ホントですか。
何かサンプルになるようなものはありませんか
153デフォルトの名無しさん:2012/06/13(水) 23:19:45.71
ウィンドウをダイアログにする
154デフォルトの名無しさん:2012/06/13(水) 23:26:20.02
えーとすいません
CDialogを継承したものをUpdateLayeredWindowで消すってことでしょうか
今すでにその状態なんですけど
155デフォルトの名無しさん:2012/06/14(木) 00:16:39.69
頑張れMFC
156デフォルトの名無しさん:2012/06/15(金) 08:50:49.04
>>154
ソース貼れ
157デフォルトの名無しさん:2012/06/23(土) 16:15:42.11
取り込んだデータで山なりの曲線作りたいんですが、どうやってグラフにするのかおしえてください
158デフォルトの名無しさん:2012/06/23(土) 16:35:33.83
了解
159デフォルトの名無しさん:2012/06/23(土) 16:55:29.93
C#やVBはポトペタできるのに
VC+++MFCは未だにポトペタできないのはなんで?

160デフォルトの名無しさん:2012/06/23(土) 17:12:52.77
161デフォルトの名無しさん:2012/06/23(土) 17:51:39.46

それだと、ショボイコントロールしかポトペタできないじゃん
162デフォルトの名無しさん:2012/06/23(土) 20:20:33.32
馬鹿には無理
163デフォルトの名無しさん:2012/06/23(土) 20:28:00.17
>>157
Excelを使え。
164デフォルトの名無しさん:2012/06/23(土) 23:00:03.40
遅ればせながら、vs2010を使ってみた
MFC、超進化してんじゃん
MFC新規作成から、完了ボタン一発ですげーGUIできた。
C#が生産性が高いなんて過去の話か???
165デフォルトの名無しさん:2012/06/23(土) 23:02:51.16
>>163
ExcelだとC+が使えないので…
166デフォルトの名無しさん:2012/06/24(日) 00:47:25.78
大半の人は、実は釣り質問。
単に馬鹿な回答者がいればそれでいい。
167デフォルトの名無しさん:2012/06/24(日) 04:33:37.16
>>166
ではヒントだけでいいので
168デフォルトの名無しさん:2012/06/24(日) 23:10:31.51
クラス名を変更したいですが、どうするのが正確にできますか?

CXxxxView ファイル名 XxxxView.h , XxxxView.cpp


CYyyyView ファイル名 YyyyView.h , YyyyView.cpp

としたいのです。
169デフォルトの名無しさん:2012/06/24(日) 23:22:14.92
s/Xxxx/Yyyy/g
170デフォルトの名無しさん:2012/06/24(日) 23:29:27.86
bakabakkadana
171デフォルトの名無しさん:2012/06/24(日) 23:43:25.78
若かろうがオッサンだろうが、
「これ出来ないとお金払いませんよ、
 あなたの生活がどうなろうと私には関係有りませんし。」
と言うとみんなちゃんと新しい技術をマスターしてくる。
努力しないってっことは努力する必要が無いからなんだと思う。
追い詰められていないんだろうね。
幸せなんじゃないか?
どうでもいいけど。
172168:2012/06/25(月) 01:36:45.53
>>171
答えられないくせにどうでもいい長文書くなよw
173デフォルトの名無しさん:2012/06/25(月) 01:48:50.20
「会議」がアイデアを潰す

若手や中堅がイノベーションを生み出す新しいアイデアを出す時
立ちはだかるのがジジイどもの支配する「会議」という壁だ

・ジジイどもに理解できる企画でなくてはならない
・ジジイどもの好みに合う企画でなければならない
・既に成功した事例がなくてはならない
・ジジイどもに気に入られている人物が提案者でなくてはならない
・ジジイどもに気に入れられていない人物が関わっていてはならない
・ジジイどもの支援が不要な企画でなくてはならない
・にもかかわらずジジイどもにも活躍の場を与えねばならない
・ジジイどもの気まぐれな口出しにいつでも応じなければならない
・失敗してもジジイどもが責任をとらなくてよい企画でなくてはならない
・成功したらジジイどもの業績になる企画でなくてはならない

若い頃は前世代のおかげで繁栄したくせに、自分らの時代には経済を衰退させ
そのツケを後世代に回す団塊ジジイ、バブルジジイどもが日本の病巣
174デフォルトの名無しさん:2012/06/25(月) 07:13:17.15
通報した方がいいのかね、これ。
175デフォルトの名無しさん:2012/06/25(月) 14:12:20.49
今更MFCを学ぶのは無駄なんですか?
176デフォルトの名無しさん:2012/06/25(月) 14:49:34.12
Don't think, feeeeeeeeeel.
177デフォルトの名無しさん:2012/06/27(水) 00:53:22.04
>>175
Windowsの仕組み、Win32API、C++の言語仕様を熟知していればMFCは3日で覚えられる。
178デフォルトの名無しさん:2012/06/27(水) 09:56:55.46
>>177
Windowsの仕組み、Win32API、C++の言語仕様を熟知するのにどれくらいかかりますか?
179デフォルトの名無しさん:2012/06/27(水) 11:45:01.77
>>178
基本的なOSの仕組み、Cの言語仕様を熟知していれば一週間くらい。
180デフォルトの名無しさん:2012/06/27(水) 12:08:16.93
一週間で熟知出来るのか〜
ってどんだけ浅い理解だよ
181デフォルトの名無しさん:2012/06/27(水) 18:39:59.86
>>179
無理だな。
最低でも一ヶ月はかかる。
182デフォルトの名無しさん:2012/06/27(水) 22:40:47.45
>>178
APIについては最低でも、猫でもわかるくらいの知識が必要。
183デフォルトの名無しさん:2012/06/27(水) 23:20:38.30
Windowsの仕組みが1ヶ月と嘘だろ?

15、16年程度Windowsでドライバやアプリケーションを書いてきたが
AdvancedWindows,やInside Windowsを読むのは相当キツイぞ
未だに全部頭に入ってるわけではない
184デフォルトの名無しさん:2012/06/28(木) 09:02:21.53
何年やったって全てを熟知するなんて無理
一週間とか一ヶ月とか言ってる奴はネタで言ってるか
単なる馬鹿のどっちか
185デフォルトの名無しさん:2012/06/28(木) 23:56:54.15
ソースが入手できないから当たり前

linuxなんかは、ソース読めば全体がくまなくわかるがな
186デフォルトの名無しさん:2012/06/29(金) 10:00:04.34
>>185
じゃあソースがあれば一週間で熟知出来るの?
お前天才だろ
187デフォルトの名無しさん:2012/06/29(金) 18:51:54.55
まあ、熟知っていうのをどのレベルに想定するかで違ってくるしな。
仕事に支障ないレベルまで習得できた状態までなら、一ヶ月でなんとか行くと思うよ。
(実例は俺)
ただし、その前にOSの仕組みやらC++やらは理解しておく必要があるが。
188デフォルトの名無しさん:2012/06/29(金) 19:16:03.68
「仕事で必要な部分」と「全部」は違うだろ
189デフォルトの名無しさん:2012/06/29(金) 19:30:03.23
>>188
ああ、違うよ。
悪かったな。
190デフォルトの名無しさん:2012/06/29(金) 23:40:01.55
ふふん
まあ兎に角、取り敢えずは、一週間だな
それでで大体はワカルもんだ
191デフォルトの名無しさん:2012/07/02(月) 23:55:53.29
子ダイアログに親ダイアログのメンバ変数に格納された数値を移したいのですが、
何故か値が消えて0になってしまいます
解決策をおしえてください
192デフォルトの名無しさん:2012/07/03(火) 00:41:09.74
Petzoldを参照せよ!
193デフォルトの名無しさん:2012/07/03(火) 01:43:02.81
>>192
さっそくみてみます!
194デフォルトの名無しさん:2012/07/03(火) 19:14:29.85
質問です。

リストビュー内のリストコントロールで各行ごとに異なる背景色を与えるとき、
LVS_EX_CHECKBOXESで表示させたチェックボックスの背景はどうやれば
変更できますか?
195デフォルトの名無しさん:2012/07/11(水) 20:53:15.43
質問です。WinXP, Visual Studio 2008 ProのMFCダイアログベースアプリで、
フォーム上にコンボボックス(IDC_COMBO1)を配置して、
コンボボックスのプロパティを次のように設定しました。
  Data: アメリカ;ドイツ;日本;インド
  Sort: False
  Type: ドロップダウン リスト
これをビルド・実行して、[▼]ボタンを押すと(1)のようになり、(2)のようにずらーっと選択肢が出ません。
(2)のようにするには、どうすればいいでしょうか?
よろしくお願いします。
 
 -----------
 |      |▼|
 -----------
    ↓ 右の[▼]ボタンを押すと
(1)リストのうち、要素が1個でるだけで、右端のアップダウンボタン[〓]を押して1個ずつ切り換え
 -----------
 |      |▼|
 -----------
 |アメリカ |〓| 
 -----------
(2)
 -----------
 |      |▼|
 -----------
 |アメリカ |
 |ドイツ   |
 |日本   |
 |インド  |
 ---------
196デフォルトの名無しさん:2012/07/11(水) 21:15:48.35
(1)エディタ上で[▼]の部分をクリックして、
 ドロップダウンする部分のサイズをリサイズする。
(2)XPのビジュアルスタイルを指定している場合は、
 プロパティのNo Integral HeightをTrueにする。
197195:2012/07/11(水) 22:04:42.07
>>196
教えて頂いた方法で、解決しました。
ありがとうございました。
198デフォルトの名無しさん:2012/07/13(金) 23:55:35.80
コントロールがフォーカスを持っているときに
枠線が描かれますが、この枠線を 赤の太線にほしいとの客先要望

どのコントロールにフォーカスがあるかをわかりやすくするためだと・・・

できますか?

できませんとお答えしたら、「いやいや、できなってことはないでしょ?」
の一点張り・・・

なにか良いアイデアはありませんか>¥?
199デフォルトの名無しさん:2012/07/14(土) 02:21:05.92
>>198
フォーカス時にMoveTo,LineToで線引いてやるとか?

莫大なコード書いて実現しても
「やっぱりできるんじゃん!サボろうとして安易にできないとか言うなよ」
とか言われたりして

まあ入力欄だったら背景色を変えるとかで手打ちしてもらったほうが
200デフォルトの名無しさん:2012/07/15(日) 17:25:55.11
おまえら正規版買えよ
201デフォルトの名無しさん:2012/07/15(日) 17:31:18.72
コンソールにHello Worldって出力するだけのソフトしかつくれないのに
何万も出すかよ
202デフォルトの名無しさん:2012/07/15(日) 17:38:53.40
203デフォルトの名無しさん:2012/07/15(日) 17:42:38.33
そんな屑ライブラリなんて使えるかよ

ライブラリは質より、どこが提供しているかが一番大事なんだぞ
MFCは糞だが、MSっての最強の強み
204デフォルトの名無しさん:2012/07/15(日) 17:43:06.69
心配ご無用、新機能満載、非互換版作成中、近々公開
205片山博文MZボット ◆0lBZNi.Q7evd :2012/07/15(日) 20:33:56.18
>>198
最前面拡張スタイルの独立したポップアップウィンドウをSetWindowRgnでくりぬく。
フォーカスを監視してフォーカスのあるコントロールに位置とサイズを合わせる。
206デフォルトの名無しさん:2012/07/17(火) 18:04:52.52
MSDN正規版を買いましょう
207デフォルトの名無しさん:2012/07/21(土) 06:09:51.48
MSDNは買うと言うよりもエントリーするとか登録するとかそういう感覚
208デフォルトの名無しさん:2012/07/22(日) 19:13:10.83
すいません、教えてください。

2つのOnTimer( CWnd1::OnTimer と CWnd2::OnTimer)から
同一の関数( func )を呼び出す制御をしていた場合、
関数( func )が2重に呼び出される事はあるのでしょうか?

※以下処理で g_ctr が 2になる可能性はありますでしょうか?

----------------------------------------------
CWnd1::OnTimer( UINT_PTR nIDEvent ) // 10ms間隔のタイマー
{
func();
}

CWnd2::OnTimer( UINT_PTR nIDEvent ) // 20ms間隔のタイマー
{
func();
}

int g_ctr = 0;
void func()
{
g_ctr ++;

// 色々な処理

g_ctr --;
}
----------------------------------------------

209デフォルトの名無しさん:2012/07/22(日) 19:19:51.17
>>208
是非とも、実際にやってみて結果を報告して欲しい。
通常は、「ある」ものとして設計するけどな。
210デフォルトの名無しさん:2012/07/22(日) 20:32:43.47
メニューの折りたたみをなくしたいだけど
どうすればいいのかしらん?
211デフォルトの名無しさん:2012/07/22(日) 21:00:48.42
>>208
OnTimer(=WM_TIMER)はメッセージベースなので、
GetMessage/DispatchMessageとか内部で呼び出さなければOK。
逆にMessageBoxとか出すと、再入するのが確認できるよ。
これらはタイマが一つだろうと二つ以上だろうと当てはまる。
212デフォルトの名無しさん:2012/07/22(日) 22:07:26.79
レスありがとうございます。

2つ(CWnd1 , CWnd2)は異なるウィンドウですが、同じメッセージループを回っているのでしょうか?
213デフォルトの名無しさん:2012/07/22(日) 22:12:52.77
んなわけねーじゃん
しねよ
214デフォルトの名無しさん:2012/07/22(日) 23:00:15.70
ですよね・・。

だって >>211 がおかしな事言うから・・。
しねよ は>>211に言ってよ
215デフォルトの名無しさん:2012/07/22(日) 23:50:15.85
もうWinのデスクトップではネイティブアプリって必要なくなっていくんですかね?
216デフォルトの名無しさん:2012/07/23(月) 01:12:58.66
>>212
同じUIスレッドのウィンドウなら同じ。
AfxBeginThreadとかで作った、別のUIスレッドのウィンドウとかなら別だけど。
217デフォルトの名無しさん:2012/07/23(月) 07:31:49.85
mfcの生産性の低さについて
マイクロソフトは何か対策を練ったりしてないの?
過去の遺産に先進機能を盛った所で相変わらず繁雑なままという印象なのだけれど
218デフォルトの名無しさん:2012/07/23(月) 07:57:02.22
今は一部社員の趣味で開発しているだけの予感。
MFCが使われなくても特に困らないんじゃないか?
他に生産性の高いライブラリがあるなら、どうぞそちらをお使いください、
ってスタンスかと。
219デフォルトの名無しさん:2012/07/23(月) 08:37:47.73
>過去の遺産に先進機能を盛った所

具体的にどのへんが先進機能?
220デフォルトの名無しさん:2012/07/23(月) 18:08:39.83
MFC Feature Packとか
外部には無いでしょ?
221デフォルトの名無しさん:2012/07/23(月) 18:53:04.01
mfcってそんなに生産性低いか?
ウィザードに従っていけば、デフォルトですごいカッコいいGUIが出来あるがるぞ

まさかVC++6とかつかってないか?

2008以降はGUIだけならC#より生産性は高い
222デフォルトの名無しさん:2012/07/23(月) 19:05:27.83
だがしかし 2008 Express には MFC が付いていない
223デフォルトの名無しさん:2012/07/23(月) 19:08:35.74
認識が全然違うのか
ウィザードで大抵の機能が完結するならいいけど
機能を追加する場合にも実際には色々と手作業でしかも複数箇所に渡って変更部分を追記する以外ないわけで
間違いなく生産性の面で言えば現代のプログラミング技術から数歩遅れた所に居ると思う
224デフォルトの名無しさん:2012/07/23(月) 19:25:25.71
人が嫌がるものだからこそ金になるんだろ。
225デフォルトの名無しさん:2012/07/23(月) 19:34:31.05
嫌がるからどうこうじゃなくて
整備しなかったマイクロソフトの怠慢じゃないの
226デフォルトの名無しさん:2012/07/23(月) 19:37:47.48
QtやらMacやらAndroidやらが現れている現在
本来ならここは改善されるべき所
227デフォルトの名無しさん:2012/07/23(月) 20:03:36.09
しかし、ネイティブアプリを作成するには、これが一番情報が多いし
使い方も簡単
228デフォルトの名無しさん:2012/07/23(月) 20:54:17.01
mfcはジャンク
組み合わせられれば最強だが
全体的に見るとあまりよろしくない
229デフォルトの名無しさん:2012/07/23(月) 21:22:08.10
>>222
Qt とか wxWidgets とかおすすめ
230デフォルトの名無しさん:2012/07/26(木) 11:01:06.28
MFCでラジオボタンを3つ作ってボタンを押すとそれぞれ3つとも違う処理をしています
ある時に自動で1つめのボタンを押す動作をプログラムで起こしたいのですが
CButtonのSetCheck(1)とするとボタンはへこむのですが
ボタンを押した時のハンドラは呼ばれません
これを呼ばれるようにするにはSetCheckじゃなく何を呼べばいいんでしょうか?
VC2003を使っています。OSはXP
231デフォルトの名無しさん:2012/07/26(木) 11:42:28.74
>>230
「ボタンを押した時のハンドラ」
232デフォルトの名無しさん:2012/07/26(木) 11:48:31.40
それをやろうとするとプログラムで判定が必要になって不格好です

if(button1.GetCheck()==1)
button1のハンドラ();
if(button2.GetCheck()==1)
button2のハンドラ();
if(button3.GetCheck()==1)
button3のハンドラ();

button1.SetCheck(1)に対して自動でハンドラを呼ばせたいのですが無理ですか?
233デフォルトの名無しさん:2012/07/26(木) 12:30:09.30
>それをやろうとするとプログラムで判定が必要になって不格好です
なんで? >230にはGetCheck()の結果でハンドラを呼びたいなんて書いてなかったのに後出し?
つーか、動作のシミュレーションをしたいのならボタンの座標を使ってメッセージ送ればいいじゃん。
234デフォルトの名無しさん:2012/07/26(木) 15:34:45.00
馬鹿には無理
235デフォルトの名無しさん:2012/07/26(木) 21:32:46.97
CMenuでおしえてください
左クリックでメニューだしてますが以下の構造でポップアップのMeasuredItem処理が分かりません
メニュートップ
  −メニュー1(ポップアップ)
    −サブメニュー(文字列)
    −サブメニュー(文字列)
  −メニュー2(ポップアップ)
    −サブメニュー(文字列)
    −サブメニュー(文字列)
  −メニュー3(文字列)

ポップアップになってるとこはCMenuの派生クラスでMeasuredItemが呼ばれないので
親WindowでOnMeasuredItemを呼ばせてその中でMeasuredItemを読んでます
つづく
236デフォルトの名無しさん:2012/07/26(木) 21:37:52.30
OnMeasuredItemでは以下の2つのハンドルが帰ってきますが
  −メニュー1(ポップアップ)
  −メニュー2(ポップアップ)

このハンドルから親であるメニュートップのハンドルが欲しいのですが
取得する方法わかりますか?
CMenuには親メニューを取ってくるメンバ関数はなさそうです
なぜ取得したいかというと親が持ってるメニューの幅と高さ情報が知りたいからです
その情報を使ってMeasuredItemを処理したいのですが
OnMeasuredItemでは親ではなく子のハンドルが帰ってきて困ってます
237デフォルトの名無しさん:2012/07/26(木) 23:06:57.75
APIレベルでその機能が無いからなあ。
予めSetMenuItemInfoでdwItemDataに親ハンドルをセットしておくとか、
せこい方法しか思いつかないw
238デフォルトの名無しさん:2012/07/28(土) 00:54:53.04
MFCってやたらモッサリしてるんですが、C#でWPFかwinformで書いたほうがいいですかね?
239デフォルトの名無しさん:2012/07/28(土) 02:53:59.26
MFCでモッサリならC#で書こうものなら使い物にならんだろ
240デフォルトの名無しさん:2012/07/28(土) 09:17:22.63
>>239
釣りだろ。
241デフォルトの名無しさん:2012/07/28(土) 09:52:29.42
vs2012では、mfcがなくなったの?
242デフォルトの名無しさん:2012/07/28(土) 13:08:52.96
どうしてそう思ったの?
243デフォルトの名無しさん:2012/07/28(土) 22:22:49.68
使えなかったから
244デフォルトの名無しさん:2012/07/29(日) 09:36:41.17
ExpressEditionには入ってなかった、ってオチだろうな。
Professional入れてるけど普通に使えるし。
245デフォルトの名無しさん:2012/07/30(月) 11:00:37.74
CTabCtrlでタブコントロールを使ってますが
InsertItemでタブを複数追加して実行中に
マウスでタブの順番をドラッグで入れ替えたりする機能は
標準でないんでしょうか?IEのタブ表示だと普通にできますけど
CTabCtrlでは無理なんでしょうか?方法があったら教えてください
VCは2005を使用しています
246デフォルトの名無しさん:2012/07/30(月) 11:27:27.60
ちなみにVS2010にCMFCTabCtrlというのがあって
コレを使えば実現できるのは知ってます。
問題はVS2005にてこれをやりたいと思っています。
未来Verの機能を使う方法があれば簡単なんでしょうけど
たぶん無理ですよね…
247デフォルトの名無しさん:2012/07/30(月) 20:23:02.66
>246
画像素材作るのが面倒だけど、
CButtonあたりを継承して自分で組んでしまえば?
248デフォルトの名無しさん:2012/07/31(火) 01:09:37.09
それやるくらいなら、CTabCtrlのイベント処理を自分でやればいいだけのような。
249245:2012/07/31(火) 08:59:34.21
やはり自前しかないですか
CTabCtrlをオーナードローして作ることにしました
250デフォルトの名無しさん:2012/07/31(火) 16:42:59.08
質問があります
AfxGetMainWnd()->SetMenu(NULL); でメニューを削除したあと
もう一度メニューを表示させることはできますか?
いっかいダイアログを閉じないとメニューをみれないので困っています
251デフォルトの名無しさん:2012/08/01(水) 01:25:13.72
オーナードローって
オーナーがドローするんですか?

それとも

オーナーをドローするんですか?

いまいちわからない。
カスタムドローってのもあるし・・・
252デフォルトの名無しさん:2012/08/01(水) 07:28:34.37
>>251
オーナーがドローする。
カスタムドローはオーナードローの進化版。
ただ、MFCではDrawItemのオーバーライドやNM_CUSTOMDRAWの
メッセージリフレクションを利用して実装するので、
実際にはコントロールの派生クラス自身が描画するような感じになるけど。
253デフォルトの名無しさん:2012/08/01(水) 14:04:58.12
VC++6.0のMFCで作ったActiveXコントロールが
64bit版WindowsのIE上でも動くのはなぜでしょうか?
254デフォルトの名無しさん:2012/08/01(水) 14:19:20.04
64bit版WindowsのIEには32bit版と64bit版がある。
255デフォルトの名無しさん:2012/08/01(水) 14:21:20.16
マジっすか
256デフォルトの名無しさん:2012/08/01(水) 19:05:47.96
むしろ64bit版の方がオマケ扱い。
257デフォルトの名無しさん:2012/08/01(水) 19:37:09.67
やはり64bitのIEだと32bitのocxは動かないんですね
258片山博文MZボット ◆0lBZNi.Q7evd :2012/08/04(土) 14:55:43.15
>>250 GetMenuで保管しておき、後でまたSetMenuする。
259デフォルトの名無しさん:2012/08/08(水) 16:41:02.14
MFC標準機能でダイアログアプリを作って起動させます
これを別アプリで終了させたいんですけど可能ですか?
タスクマネージャでの終了みたいに強制終了じゃなくて
あたかも終了ボタンがおされEndDialog(IDOK)が呼ばれたかのように
安全に終了させたいと思っています
出来ればダイアログアプリに外部から終了させるための特別な処理は入れたくありません。
あくまで外部から正常終了させる物を作りたいのです
よろしくお願いします
260デフォルトの名無しさん:2012/08/08(水) 17:23:38.89
どちらかと言えば
可能です
261デフォルトの名無しさん:2012/08/08(水) 17:25:30.51
もちろん可能ですよ。
262デフォルトの名無しさん:2012/08/08(水) 17:28:43.86
具体的にどうやるんですか?
教えてください
263デフォルトの名無しさん:2012/08/08(水) 17:30:47.45
馬鹿には無理
264デフォルトの名無しさん:2012/08/08(水) 17:44:00.42
ここで聞いても無駄
小学生にもわかるレベルのことは即応えるけど
技術必要なものははぐらかすだけだから
つまり素人の暇つぶしスレ
265デフォルトの名無しさん:2012/08/08(水) 17:49:06.43
>>259
SendMessage
266デフォルトの名無しさん:2012/08/08(水) 17:50:39.75
漏れでも出来そう
267デフォルトの名無しさん:2012/08/08(水) 17:51:50.21
プロが小学生に質問するスレはここですか?
268デフォルトの名無しさん:2012/08/08(水) 18:06:21.33
Spyでメッセージ調べて、そのメッセージをSendMessage()で投げるだけの簡単なお仕事。
269デフォルトの名無しさん:2012/08/08(水) 18:38:20.03
x 馬鹿には無理

o おまえには無理
270デフォルトの名無しさん:2012/08/08(水) 18:39:46.43
ウィンドウのハンドル取得って制限なかったっけ
271デフォルトの名無しさん:2012/08/09(木) 19:08:40.27

あほや!!
発作か〜!!
272デフォルトの名無しさん:2012/08/09(木) 21:05:35.13
Monday Football Common!!!
273デフォルトの名無しさん:2012/08/12(日) 21:24:07.35
mfcって.netより遅いの?
274デフォルトの名無しさん:2012/08/12(日) 21:55:46.48
遅いとか意味がよく分からない

レジストリを勝手に使ってやり取りしてたりするから
その分起動に時間は掛かるけど
.Net Frameworkを起動する程じゃない

それ以上の話はWindowsAPIと大して変わらない
275デフォルトの名無しさん:2012/08/23(木) 11:13:26.69
PCが高性能になるとそうとも言えない
APIよりCPUに最適化された中間言語の方が高速になる
もうそうなってきてるよ
276デフォルトの名無しさん:2012/08/23(木) 13:44:22.71
中間言語が早くなっても、Windows.Forms系の処理はAPIを経由してるんだから
そこは変わらないって
277デフォルトの名無しさん:2012/08/23(木) 13:51:37.57
中間言語のほうが速いなんてありえない
278デフォルトの名無しさん:2012/08/24(金) 00:09:18.30
レースゲーでオートマよりマニュアル車の方が
最高速度が速いのと同じような感じじゃないかなあ。
下手な書き方すると、MFCの方が速度落ちそうだし。
279デフォルトの名無しさん:2012/08/24(金) 08:30:12.89
文字列連結するのに1文字ずつ領域解放→再確保やっちゃうとか?
280デフォルトの名無しさん:2012/08/24(金) 11:19:38.43
std::vector ですねわかります
281デフォルトの名無しさん:2012/08/28(火) 10:58:59.48
MFCでwininetを使ってhttpでwebページの取得をしています。
以前まではできていたのですが、先日急にデータが欠落するようになりました。
具体的には、22kBほどのwebページを取得するのに、
2kBくらいでぶつっと切れてしまっています。

CHttpFile::Readの戻り値(取得したデータ長)は切れた部分まで(2k程度)になっています。
QueryInfoStatusCodeでは200が返ってきていますが、
firefoxでアクセスしてパケットのやり取りを見てみると、
最初は302が返ってきて、2〜3度転送されているみたいでした。

SendRequestからReadまでの間にSleep(1000)を入れると取得できるデータ長が
10k以上に増えましたが、やはり途中で切れてしまいます。
Sleepの数値を2000にしたら、すべて受信できるようになりました。
GetQueryInfoで、HTTP_QUERY_CONTENT_LENGTHを取得しようとしたら、
ヘッダが存在しないとエラーが出ました。(errcode:12150 ERROR_HTTP_HEADER_NOT_FOUND)

以前はこんなことは起きなかったのですが、何故だかわかる方はいるでしょうか?
Sleepで改善したということは、SendRequestの後に完了待ちをする必要があるのでしょうか?
282デフォルトの名無しさん:2012/08/28(火) 19:23:31.23
>>281
その時点で受信できていた分だけを返してるような気がする。
確か0で戻ってきたら完了じゃなかったっけ?
283デフォルトの名無しさん:2012/08/28(火) 19:45:51.15
自分もそう思い、Readで0が返ってくるまで繰り返すようにしてみたのですが
2回目のReadでは確実に0が返ってくるようで、ダメでした。

googleなどで色々と調べてみたのですが、Readの戻り値としては
「指定したbyte数【以下の値が】返ってきたら完了」という記事が一般的なようで、
先ほどの試験結果とも一致するので、そもそも少ない値が返ってくる時点でNGだと認識しました。

それにしては、Sleepで全部読み込めるようになったり、不可思議な点が多いのですが…
284デフォルトの名無しさん:2012/08/29(水) 00:00:53.95
select
285デフォルトの名無しさん:2012/08/29(水) 11:46:34.07
Sleep()で返る時間が変わるということは、単に経由している回線が細い
とか、Webサイト側でページを動的に生成に時間が掛かっていたり、ボット
対策でリファラーを見ていたりや、ブラウザの種類で何か細工しているん
でないの?

短く途切れる時の取得データと、「Webブラウザのリンク先を保存」などで
取得した正常データの先頭の中身は一致しているか確認した?
286デフォルトの名無しさん:2012/08/31(金) 08:43:17.41
どこのリソース取得かを聞かないのは
この板のやさしさかな
287デフォルトの名無しさん:2012/09/04(火) 16:19:04.15
>>285
返事が遅くなってしまい、すいませんでした。
先頭というより、切れている部分までは完全に一致しています。
リファラーとUAは、ブラウザで見る場合と同じ値に設定しています。

Web側でページを動的に生成しているとは思います。(更新ごとに内容が変わるので)
ただ、「Webサイト側で生成するのに時間がかかる」としても、
CHttpFile::Readで読み出す場合は問題ないと思っていたのですが…
(ページ内容を全て取得してからロードする、という関数ですよね?)

もしそうでないならば、以下の関数の実装が必要な気がします。
・途中まで読み込んだ後、再度実行することで、残りを読み出せる必要がある。
 (完了した場合は、戻り値、もしくは完了判別関数で、完了したかを判別する)
・Readする前に、「Webページ側の準備完了まで待つ」もしくは「完了を通知する」機能

色々と調べてみたのですが、どちらも見つからないのですよね…。
288デフォルトの名無しさん:2012/09/04(火) 19:17:21.44
MFCのソースを見てみる事をお勧めする。
APIのレベルで色々試せば何か見えてくるかもしれないし。
289デフォルトの名無しさん:2012/09/04(火) 22:11:53.34
既にやってるかもしれないけど
CInternetSessionのOnStatusCallback()を実装して
もう少しstatusを細かくチェックしてみては。
ネットで検索してもほとんど出てこないけど
中身はWinInetのInternetSetStatusCallback()だから
そっちで検索するといいよ
290デフォルトの名無しさん:2012/09/06(木) 10:29:04.71
>>288-289
ありがとうございます。ちょっとそのあたりを確認して色々と試してみます!
291片山博文MZボット ◆0lBZNi.Q7evd :2012/09/06(木) 15:02:34.00
もう、MFCは必要なくなった。これからは全部手作りで自由にハックできる。
292デフォルトの名無しさん:2012/09/11(火) 01:44:59.84
win7にmfc71.dll入れる場合って何を入れれば入るんだ?
ぐぐっても出てこんわ。
293デフォルトの名無しさん:2012/09/11(火) 05:01:33.08
馬鹿には無理
294デフォルトの名無しさん:2012/09/22(土) 18:30:35.99
>>292
Visual C++ .NET 2003 に含まれるやつだな。
残念ながら、公式の再頒布パッケージは存在しないので、
ベクター辺りから拾ってくるしかない。
「VC++ .NET ランタイムインストーラー」に入っているのは確認した。
295デフォルトの名無しさん:2012/10/17(水) 00:30:47.15
GUIでアプリケーションを作成する場合、MFCを使うべきですか?CLRフォームアプリケーションから作成するべきですか?
MFCは重い古いとか言われますが、、、CLRとMFCを同類としてしまってもいいのかもわかりませんが、、、Visual Studioを利用している限り、
この2つが並ぶので…
296デフォルトの名無しさん:2012/10/17(水) 00:41:07.53
>>295
WTLで
297デフォルトの名無しさん:2012/10/28(日) 15:53:28.54
MFCでスレッド作る時AfxBeginThread()使ってるんだけど、第一引数で指定するスレッド本体の関数はstaticじゃないとダメっぽい。
となるとstatic関数(スレッド本体)からは、そのクラスのstatic変数にしかアクセスできないから、そのクラスに定義されている変数を全てstaticに
変更したいのだが、一個ずつstaticを付けていくしかない?変数が大量なんどす、、、。
298デフォルトの名無しさん:2012/10/28(日) 15:55:31.52
元のソースは非MFCだったから(スレッド作成時のスレッド本体が静的でなくてもいいから)this->でいけたんだが、MFC用に改良する状況になっちゃいまして、、、
そもそもMFCのスレッド本体が静的じゃないとあかん理由もよくわかってませんが…
長文すみません。。。
299デフォルトの名無しさん:2012/10/28(日) 16:04:06.37
>>297-298
pParamにインスタンスのポインタを渡して、
スレッド本体からそのインスタンスのメソッドを呼ぶ形にすれば良いんじゃないか?
300デフォルトの名無しさん:2012/10/28(日) 16:20:24.69
>>299
現状だと、メインダイアログへのハンドル(文字列表示のためにPostMessage()するため)がpParamに入ってるんです。
構造体かなんかにしてインスタンスのポインタも同時に渡せますかね。
301デフォルトの名無しさん:2012/10/28(日) 16:48:15.93
>>297
>static関数(スレッド本体)からは、そのクラスのstatic変数にしかアクセスできないから、

これ都市伝説だから。
302デフォルトの名無しさん:2012/10/28(日) 18:48:07.74
えぇっ!?
303デフォルトの名無しさん:2012/10/28(日) 21:48:35.73
>>301

え?
304デフォルトの名無しさん:2012/10/28(日) 22:42:36.88
>>300
そもそも、そんな質問をしてるような奴にマルチスレッドは無理。
305デフォルトの名無しさん:2012/11/09(金) 09:29:05.87
マルチスレッドなんていまどき保育園児だってしてるわハゲ
306デフォルトの名無しさん:2012/11/18(日) 14:54:48.27
MFCで作ったソフトをブラウザ上で実行するには、どうすれば良い?
OfficeやAdobe Readerの様に動かしたいです。
307デフォルトの名無しさん:2012/11/18(日) 16:16:33.93
activex
308デフォルトの名無しさん:2013/03/04(月) 03:41:59.66
cfilefindで、指定フォルダ内の全フォルダの情報を読み出すプログラムを作成しているのですが、
フォルダのプロパティで出た数と、プログラムで読み出した数とで異なるフォルダがあります。

フォルダの階層もちゃんと再帰的に読み出しています。
試しに色々なファイルをフォルダに階層的に入れて数えましたが、
ファイル数303とかちゃんと合っているフォルダもあれば、

実際に確認したいファイル数10136 フォルダ数1654のフォルダでは、
合計11522と、少なく出ます。

FindNextFileのエラー情報も出しましたが、すべて18でした。

なにが原因なんでしょうか?
309片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/04(月) 05:48:08.61
隠しファイル、システムファイル
310デフォルトの名無しさん:2013/03/04(月) 11:21:18.51
ソースも貼らずに何を言っておるのかね
311308:2013/03/04(月) 20:29:04.81
>>310 そーですよね。
なにか既知の問題とかないかと思ったもので。

原因わかりました。
Cfilefindは問題ありませんでした。
ファイル名に、HTMLの半角文字「&nbsp;」が使われていて、
ワイド文字からマルチバイト文字に変換するときに、nullに変換されていました。
すれよごしすまんです。
312デフォルトの名無しさん:2013/03/05(火) 17:24:36.94
通常使用するプリンタの印刷設定で用紙サイズがありますよね?
例えばB5とA4の切り替えをVCプログラムでやりたいのです
やりたいのは用紙サイズ切り替えだけで印刷はしません
印刷はExcel等の印刷ボタンで行います

プリンタの印刷設定の用紙サイズの変更方法(使用するクラス?)など
又は例が載ってるサイトなどがありましたらお教え下さい
よろしくお願いします。
313片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/05(火) 19:48:51.03
GetProfileString,strtok,OpenPrinter,DocumentProperties,DEVMODE
314デフォルトの名無しさん:2013/03/05(火) 22:49:10.16
ありがとう
教えてもらったワードで検索してSDKサンプル見つけました
やりたいことができそうです
315デフォルトの名無しさん:2013/03/05(火) 23:51:44.81
>>314
基本的に片山は嘘をつくから相手にしないほうがいい
それに片山の相手をしていると他の回答者に無視されるよ
316デフォルトの名無しさん:2013/03/05(火) 23:52:58.75
>>315
またお前か
317デフォルトの名無しさん:2013/03/06(水) 07:48:12.66
片山さんは真実を教えてくれたよ?
今度から信じるよ?
318デフォルトの名無しさん:2013/03/11(月) 17:38:32.83
過疎
319デフォルトの名無しさん:2013/03/24(日) 00:36:21.77
質問です。
CTimeSpan::GetTotalSeconds()は閏秒を含んでいますか?

例えば
CTime BirthDay(nYear, nMonth, nDay, nHour, nMin, nSec);
CTime Today(__time64_t(NULL));
CTimeSpan Age = Today - BirthDay;
としたときに、Age.GetTotalSeconds()の戻り値は
2つのCTimeインスタンスの間の期間に挿入された
閏秒を加算した秒数になりますか?
320デフォルトの名無しさん:2013/03/24(日) 11:12:08.12
>>319
なるよ。
BirthDayもTodayも__time64_t型の時間を持ってるだけだし。
321デフォルトの名無しさん:2013/03/24(日) 15:57:38.80
ならないでしょ
うるう秒がいつ起こったかなんてライブラリは知らないだろうし、
OSもそもそもサポートしてないから知る手段ないのでは

http://support.microsoft.com/kb/2722715/ja
322デフォルトの名無しさん:2013/03/24(日) 21:41:31.38
>>321
確かにOSが知らないのであればMFCにも反映されて無さそうですね。
CTimeの派生クラスを作って、operation - や + の際に閏秒の判定と
加減をするよう定義することにします。
ありがとうございました。
323デフォルトの名無しさん:2013/03/25(月) 00:36:19.76
まあ過去のうるう秒のあった時刻をまたいで実験してみればいいだけだね
やってみようとおもったが手元にMFCの環境が無いわ、、、
324デフォルトの名無しさん:2013/03/25(月) 07:07:49.62
対応は無いよ
325デフォルトの名無しさん:2013/03/26(火) 23:20:58.52
CStdioFileのReadStringのfgetsが+1してる件
326デフォルトの名無しさん:2013/03/26(火) 23:58:29.64
VS2012付属のソース見る限りは、
最大長+1=バッファ長という意味合いで使っているんじゃないか?
CString::GetBufferは指定文字数+NULL文字のバッファを返すし。
327デフォルトの名無しさん:2013/03/28(木) 00:04:33.33
フローチャートかくつーるを作りたい。手始めに四角図形をドラッグ出来るようになりたいけど、ドラッグイベントはないし、どうすればいいの?
328片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/28(木) 00:39:45.35
>>327
WM_LBUTTONDOWNが来たらPtInRectで四角の中か判定、SetCaptureしてフラグを立てる。
WM_MOUSEMOVEが来たらフラグを確認、移動後の位置を計算、再描画で四角を動かす。
WM_LBUTTONUPが来たらフラグを下ろしReleaseCaptureして移動後の位置を計算、再描画で四角を動かす。
329デフォルトの名無しさん:2013/03/28(木) 02:05:06.91
ドラッグとりあえず出来ました。ありがとう。
ただドラッグ前の図形が表示削除できていないや。楽に消すとコツあります?
330片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/28(木) 05:50:40.39
>>329
InvalidateRect
WM_PAINT
WM_ERASEBKGND
ダブルバッファリング
331デフォルトの名無しさん:2013/03/28(木) 09:48:06.91
DrawClient サンプルを見た方が良い
フラグを使うなら WM_CAPTURECHANGED も処理する必要がある
332デフォルトの名無しさん:2013/03/28(木) 22:09:09.98
もと図形の削除もできた、drowclientはまだ見てない。

図形の左下をクリックして動かすと左下を掴んだまま図形を動かすのは難しい?

四角図形の座標とマウス座標の相対座標も計算するのかな
333デフォルトの名無しさん:2013/03/29(金) 05:49:47.99
WinFormsやWPFがあるのにわざわざMFCで作る理由ってなに?
334片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/29(金) 07:45:11.41
>>332
GetCursorPos、ClientToScreen、ScreenToClientを使って座標系を統一して
ホットスポット(図形からマウスへの相対位置)を計算。
マウスの位置からホットスポットを引けば図形の新しい位置が求まる。
335デフォルトの名無しさん:2013/03/29(金) 07:57:01.32
>>334
ありがとう出来ました。
あとはドラッグ中に画面更新して画面がちらつくのが気になるだけですね。
グリッドを表示させてみたんですがボタンや線がチラチラしすぎ。

メモリーデバイスコンテキスト検討しようかな
336デフォルトの名無しさん:2013/03/29(金) 08:48:40.52
wixformsやwfpがそもそも何かわからないです。それだとフローチャートを書くツールを作りやすいんですか?
337デフォルトの名無しさん:2013/03/29(金) 08:57:56.13
>>336
そういうのに特にwpfはめっちゃ向いてる
338デフォルトの名無しさん:2013/03/29(金) 09:36:27.67
DrawClient見りゃ質問した内容は全部書いてあるのに…
そもそもそのツールを作る理由って何?
プログラムの勉強をしたいのかと思ってたけど、ツールが欲しいだけの
ような気がしてきた…
339デフォルトの名無しさん:2013/03/29(金) 13:01:26.49
質問した理由は、umlのような図形プログラムを作りたかったからです。
かなり用途を限定したRPGツクールのプログラム版のようなものでしょうか
だから自作実装しておきたい。
340片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/29(金) 13:18:40.56
>>335
ちらつきをなくすならWM_ERASEBKGNDとメモリDCですね。
341デフォルトの名無しさん:2013/04/04(木) 08:35:29.83
>>340
書き込み規制で遅くなったけど メモリーdcは少し面倒だったので、WM_ ERASEBKGND で対応しました。
当初の目標は達成できましたが、 フローチャートを描くツールとしては 図形クラス設計しておいて、 表示や当たり判 定、図形の中に文字を書くなどなどですね
342デフォルトの名無しさん:2013/04/04(木) 08:40:42.10
WPFのベクタグラフィックス最高だぞ
343デフォルトの名無しさん:2013/06/15(土) 01:17:00.33
このスレは生きているのかな?

BOOL Cmessage_winDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
// Framework は、この設定を自動的に行います。
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
SetWindowPos(&Cmessage_winDlg::wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}

ダイアログウインドウを出すだけのプログラムですけど、
普通に起動すると常に最前面に出せるのに、
タスクマネージャーにより起動させると、常に最前面になりません。

なんで?
344デフォルトの名無しさん:2013/06/15(土) 22:38:41.60
WS_EX_TOPMOST
345343:2013/06/19(水) 19:47:44.63
thanks
346デフォルトの名無しさん:2013/06/29(土) 21:32:41.43
ドキュメント/ビューの基本的なところで教えてください。
SDIではCDocumentとCViewが使いまわされますが、あるドキュメントで作業した後に
別のドキュメントを開いた際、それまで使用していたCViewの後始末はどこで行えば
いいんでしょうか?
CView::OnInitialUpdateの冒頭で初期化に先立って行うのが普通なんでしょうか?
347デフォルトの名無しさん:2013/06/30(日) 10:03:31.41
SDIならそうするしかないんじゃないの
348デフォルトの名無しさん:2013/06/30(日) 11:28:36.66
なるほど、ありがとうございます。
そうすると、CView::OnInitialUpdateはCDocument::DeleteContentと違って
終了時に呼ばれないですから、同じ後始末処理をOnDestroyかどっかと
両方に書かなきゃならないんですかね。
349デフォルトの名無しさん:2013/06/30(日) 12:59:08.90
>>346
何なのかわからないけど、その後始末の必要な物をCDocument側に置けないの?
350デフォルトの名無しさん:2013/06/30(日) 13:54:16.13
MFC+SDIなら綺麗な設計にはならんw
351デフォルトの名無しさん:2013/06/30(日) 16:19:10.64
>>349
具体的には、ドキュメントの内容に応じて動的に作成するコントロールなどです。
352デフォルトの名無しさん:2013/07/18(木) NY:AN:NY.AN
CDockablePaneとかのMFCの比較的新しい機能を解説した書籍ってないもんかな。
353デフォルトの名無しさん:2013/07/23(火) NY:AN:NY.AN
VS2008のMFCで、CMDIFrameWndEx::ShowFullScreenを使って全画面表示をしようとしています。
ただ、そのままだと完全な全画面にはならずタブと枠が残ってしまいますが、完全な全画面に
するにはどうすればいいでしょうか?
ちなみにCFullScreenImpl::EnableTabsAreaで制御できるのかなと思いましたが、アクセスする
方法がわかりませんでした。
354デフォルトの名無しさん:2013/07/28(日) NY:AN:NY.AN
MFCの共有DLLを読み込んだDLL同士でスレッド情報を共有させ、CWndの仮想関数を
機能させるには、それぞれのDLLのエクスポート関数の先頭にマクロを書けば良いのですか?
355デフォルトの名無しさん:2013/08/08(木) NY:AN:NY.AN
telnetネゴシエーションがよくわからない。mfcのソースコピーできるとこない?
356デフォルトの名無しさん:2013/08/10(土) NY:AN:NY.AN
エスパーさん ━キョロ━(゚∀゚≡゚∀゚)━キョロ━マダ━?
357デフォルトの名無しさん:2013/09/03(火) 22:50:16.50
タブ形式のMDIでクローズボックスを表示させない方法ってありますか?
検索するとhttp://support.microsoft.com/kb/201553/jaのような方法は
見つかるのですが、どうもタブ形式では効かないようで。
358デフォルトの名無しさん:2013/09/08(日) 20:53:43.35
.NET 2003なんですけど、プロジェクトを作成した時点で
例えば#include "LeftView.h"ってソースにインクルードされてるのに、
いつのまにか自動的に#include ".\leftview.h"
とかってソースに追加でインクルードされるのを抑制することは出来ますか?
VS6とか、以前のバージョンではこんな余計な機能無かったのに。
うざくてしょうがない。
359デフォルトの名無しさん:2013/09/09(月) 00:42:20.96
>>358
VisualStudioスレへどうぞ。
360デフォルトの名無しさん:2013/09/12(木) 19:20:25.96
VS2010のVC++でCListCtrlのCreateDragImageでドラッグアンドドロップを実装しています。
開発、動作とも32ビット環境で、Unicodeでコンパイルしています。
XPとWin7で作成される画像が違うのですが、仕様が変わったのでしょうか?
リストコントロールはFULLROWSELECTにされていて、XPでは存在する全ての列のイメージが作成されますが
Win7だと一番左のセル1個の画像だけ作られて、他の列は作られません。
全く同じバイナリを動作してXPと7で差があるのですが、それに関する文献はありませんか?
361デフォルトの名無しさん:2013/10/02(水) 15:02:10.69
MFCでIPアドレスコントロールをReadOnlyにしたいのですが関数がありません
どうにかReadOnlyにすることはできませんか?
DisableではなくReadOnlyにしたいです
362デフォルトの名無しさん:2013/10/02(水) 17:09:04.63
ReadOnlyなら自前で書けばいいじゃん。
つーか、目的を書いた方が早いよ。
363デフォルトの名無しさん:2013/10/04(金) 18:05:52.81
ダイアログアプリにメニューを設け、起動時に特定の条件の時にメニューに新規項目を追加する、
と言うのをやりたいと考えています。
メニューバー部(最上位)に1件追加し、その下に項目を設けたかったのですが、最上位に追加した
項目をGetSubMenu()するとNULLが帰ってきて、当然その下に項目を設けることができません。

CxxDlg::OnInitDialog()
{
  // <省略>
  CMenu *mnu = this->GetMenu();
  mnu->AppendMenu(MF_STRING , ID_MNU_0001, _T("test"));
}

CxxDlg::OnInitMenu()
{
  CDialog::OnInitMenu(pMenu);
  CMenu *mnu = this->GetMenu();
  CMenu *mnuSub;

  mnuSub = mnu->GetSubMenu(4);  // (新規追加項目の位置)
  ASSERT(mnuSub);  // ここでエラー
}
 最上位への追加まではできているのですが、追加した項目のCMenu*を得るにはどうすれば良いでしょうか?
364デフォルトの名無しさん:2013/10/04(金) 20:51:42.84
>>363
最上位に追加するメニュー項目の時点で間違い。
そこは、作ったポップアップメニューを追加するという形になる。
実装方法の詳細は以下のURLを参照。
http://msdn.microsoft.com/ja-jp/library/vstudio/ya33w9f2.aspx
365デフォルトの名無しさん:2013/10/08(火) 21:04:30.33
MFCのリスト表示で悩んでいます。
どうすれば良いか方法を教えて下さい。
よろしくお願いします。

[環境]
・Windows7 Professional 64bit/Microsoft Visual Stadio 2005
・MFCダイアログベース

[やりたいこと]
・ MFCリストボックスの文字列表示(インデント)を揃えたい
 →こんな風に表示したいです(http://www.dotup.org/uploda/www.dotup.org4564440.jpg
・ 1列に「Address Length Parameter Message」の表題をつけた後にそれぞれの情報を表示したい
・ Addressは8桁固定、Lenghtは4桁固定、parameterは2〜8桁可変、メッセージは可変長(最大32文字 2バイト文字あり)で表示したい

[試した事]
1. リストボックスの追加(AddString)をする際に全角スペースや\tを入れてみた
  →結果はガタガタで全く揃わなかった
2. MultiColumnを有効にしてみた
  →やりたい事と違っていた(リストが水平方向に表示された)
3. SetTabStopsを使ってみた
  →下記リンク先の記事を参考にして実装してみたが何が変わったのか分らなかった。
  →http://msdn.microsoft.com/ja-jp/library/vstudio/25d6hs9f.aspx
  →http://mfc-ml.ldblog.jp/archives/305171.html
4. オーナードロウを使ってみる
  →下記リンク先の記事を参考にして複数行のリストボックスは表示出来た。ベースを弄って見たが(Height→Widthに変えるとか)複数列は出来なかった
  →http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_LBowner.html
366デフォルトの名無しさん:2013/10/09(水) 00:40:39.71
フォントを固定ピッチに変更するだけなんじゃ・・・
367デフォルトの名無しさん:2013/10/09(水) 20:23:05.72
MS PゴシックじゃなくMSゴシックみたいにPが付いてないフォントを選べばいい
368365:2013/10/09(水) 22:18:18.60
>>366-367
返信ありがとうございます。
とりあえずこんな風にしてみました。

// ヘッダのクラス定義内に登録
// 等幅フォントを格納するメンバ変数を定義する
CFont m_inFixedPitchFont;
CListBox m_list;


// 等幅フォントを作成します。
LOGFONT sLogFont;
memset(&sLogFont, 0, sizeof(LOGFONT));
sLogFont.lfHeight = 12;
sLogFont.lfCharSet = SHIFTJIS_CHARSET;
sLogFont.lfPitchAndFamily = FIXED_PITCH;
m_inFixedPitchFont.CreateFontIndirect(&sLogFont);

m_list.SetFont(&m_inFixedPitchFont);
m_list.AddString("Address Value Name Message");
m_list.AddString("[0x00000] [0002] [Jpeg Stat] Jpegのステータス");

こうすればとりあえずインデントを揃える事は出来ました。
AddStringは\tとかのエスケープシーケンスを自動で判断する事が出来なさそうなので
その辺の処理を追加するか、完全手動に必要がありそうですが・・。

もしもっと他に方法がありましたら教えてください。
369片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/09(水) 23:39:52.42
列がいくつもある場合には、リストボックスよりもリストビューの詳細表示の方がいいよ
370デフォルトの名無しさん:2013/10/09(水) 23:56:52.70
>>368
リストボックスのスタイル指定忘れが原因で、
タブ処理が有効になっていない予感。
VS2012のダイアログエディタだと「Use TabsStops」をTrueにする。
API的にはLBS_USETABSTOPSだな。
371デフォルトの名無しさん:2013/11/02(土) 18:48:46.47
ある子ウィンドウで、キー入力のうち自分が処理しないものを親ウィンドウに処理してもらいたいとき、
OnKeyDown() の中から親に SendMessage(WM_KEYDOWN,...) で委譲するしかないですかね?
それとも他にもっと適した方法がありますか?
また、SendMessageで委譲するとした場合、他に併せて送らなければならないメッセージとか
ありますか?たとえばWM_KEYUPとか。
372デフォルトの名無しさん:2013/11/03(日) 05:12:50.93
親のOnKeyDownを直接呼ぶ
373デフォルトの名無しさん:2013/11/04(月) 07:58:02.05
初歩的な質問で恐縮です。
Windows 7 & VC++ 2010 で MFC をスタティックリンクで開発してきました。
今度、開発環境のOSだけ 8.1 にしようと思っております。
動作OSの下位互換は開発環境さえ変えなければ維持できるでしょうか?
(リンクするライブラリさえ変わらなければ問題無いと思うのですが)
それともそれを保証するなにかオプション設定は必要でしょうか?
ご教示お願いします。
374デフォルトの名無しさん:2013/11/04(月) 08:48:33.45
テストは必須です。
375デフォルトの名無しさん:2013/11/04(月) 11:29:48.10
>>374
実環境でのテストは必須として、基本的に問題ないということですね。(>>373
376デフォルトの名無しさん:2013/11/04(月) 11:33:17.77
すべてはテスト次第です
377デフォルトの名無しさん:2013/11/04(月) 11:41:19.70
「テストが必須」っていうのはお飾りじゃないよ。
378デフォルトの名無しさん:2013/11/04(月) 11:56:45.00
>>376-377
はい、肝に銘じて。
ありがとうございます。
379デフォルトの名無しさん:2013/11/04(月) 12:07:22.56
>>373
targetver.hでググッてみ

#define WINVER 0x0600
等の定義で、新OSでなければ動かないAPI等を弾ける
ただし100%信頼できるものではないので、テストは必須
380デフォルトの名無しさん:2013/11/04(月) 12:14:56.54
そりゃターゲットのバージョンを変える場合だろ。
381デフォルトの名無しさん:2013/11/04(月) 12:38:08.38
BCGライブラリをくっつけた今のMFCには、
OS依存のバグがかなりあるよ。
382デフォルトの名無しさん:2013/11/06(水) 20:36:39.31
たとえば?
383デフォルトの名無しさん:2013/11/17(日) 17:35:08.43
docviewsdiでxxxというプロジェクトを作成すると
CxxxViewクラスのヘッダファイルに
CxxxDoc* GetDocument();と宣言されている

CxxxDoc.hもincludeされていないのになぜコンパイルできるですか?
384デフォルトの名無しさん:2013/11/17(日) 21:56:18.63
コンパイルされるのはソースファイルだから。
385デフォルトの名無しさん:2013/11/17(日) 22:25:06.54
分かりました
386デフォルトの名無しさん:2013/11/18(月) 12:00:55.75
使う側のインクルードの順番が違うとコンパイルが通らないのは、欠陥だと思うけどな。
通常はxxxView.h自身がxxxDoc.hをインクルードするか、前方宣言するべき。
387デフォルトの名無しさん:2013/11/18(月) 14:16:29.23
pch肥大化対策か
388デフォルトの名無しさん:2013/11/18(月) 15:02:21.80
循環回避だろう
389デフォルトの名無しさん:2013/11/19(火) 09:30:33.55
MFCって、エラークラスありましたっけ?_?
390デフォルトの名無しさん:2013/11/20(水) 07:48:06.60
CExceptionとか?
391デフォルトの名無しさん:2013/11/20(水) 10:36:58.89
あ、あるんですか。

C++ Builderだと、throw Exception("err");、を良く見るけど、
MFCプログラムだと、throw CException("err")、ってのは見たことないですね。
392デフォルトの名無しさん:2013/11/20(水) 12:10:57.39
>>391
AfxThrow〜〜〜Exception()ってのがいろいろある
393デフォルトの名無しさん:2013/11/20(水) 12:35:12.18
>>391
CExceptionはMFCの全ての例外クラスの"抽象"基本クラスだから、アプリのソースに直接使われることは無いよ。
派生クラスのCFileExceptionなんかが良く使われる。
394デフォルトの名無しさん:2013/11/20(水) 17:55:35.24
>C++ Builderだと、throw Exception("err");、を良く見るけど、

これってクラスのインスタンスを投げてるんじゃなくて
文字列を投げてるだけなんじゃないの?
395デフォルトの名無しさん:2013/11/20(水) 18:30:58.02
>>394
Exceptionクラスのインスタンスを値で投げてる。
ここら辺、MFCは歴史的経緯でポインタを投げるから、
CATCHマクロでハンドリング、もしくはcatchしたらDeleteメソッド呼んで
明示的に削除とか妙な話になってるんだよなあ。
396デフォルトの名無しさん:2013/11/29(金) 21:24:48.64
visual studio2012でMFCを使っているんですが、
各種コントロールを拡張して一つのライブラリにまとめたいと思っているのですが、
詳しいやり方が分からず困っています
mfc active コントロール ウィザード ってのでいいんでしょうか?
普段複数列のコンボボックスとかなにかと標準のでは
かゆいところに手が届かないと思うんですが、
皆さんはどのようにされていますか?
397デフォルトの名無しさん:2013/11/30(土) 01:54:22.82
>>396
サブクラス化
398デフォルトの名無しさん:2013/11/30(土) 02:25:33.79
>>397
サブクラス化
の意味知ってる?

使いたかっただけだよねw
399デフォルトの名無しさん:2013/11/30(土) 11:24:26.99
「複数列のコンボボックス」の内容にもよるんじゃないか?
サブクラス化で実装できる内容もあるだろうし。

ライブラリ化するなら、ソースレベルに留めておいた方が扱い易そう。
ActiveXコントロールは明らかにやり過ぎとしても、
MFCのDLLとかにしても依存関係とかで面倒な話になりそうだし。
400デフォルトの名無しさん:2013/12/02(月) 20:48:21.51
画面を作るときの書き方についてアドバイスください
画面にラインやテキスト、動的に生成したコントロール等を配置する際に、
int width = マウス等で広げた画面の幅
DrawText(_T("aaa"), CRect(20, 50, 120 + width, 70)...
と、もろに数字を書いて場所を指定しているのですが、
印刷も実装しようとした際に解像度が違うので、数値を変えないといけなくなってしまいますが、
皆さんは描画の際にどのように位置等を指定していますか?
画面の何%のようにすれば解像度が変わっても問題ないのでしょうが、
細かい調整等ができないのと、描画する物が多くなればなるほど面倒になります
こういう場合どういう実装が一般出来なのでしょうか
皆さんの意見をお聞かせください。
401デフォルトの名無しさん:2013/12/02(月) 21:13:02.67
>>400 拡張メタファイルを使え
402デフォルトの名無しさん:2013/12/02(月) 21:35:28.65
>>401
調べてみたのですが、こんなものがあったのですね
詳しい使い方がいまいち分からないのですが、
普通に描画して印刷の際に拡大縮小して表示するということでしょうか?
大量のリストを表示するような画面で、画面ではスクロールバーを生成して
画面に表示できる量だけを計算して表示しているようにしているのですが、印刷時は全部を印刷したいと思っています。
画面の描画も印刷も同じOnDrawでpDC->IsPrinting()で判断するようなので、
とりあえずOnDrawにすべて記述しているのですが、メタファイルの作成はあらかじめしておくのでしょうか?
403デフォルトの名無しさん:2013/12/02(月) 21:58:55.97
CDC::SetMapModeで論理単位で指定するモードに切り替える。
たぶん。
404デフォルトの名無しさん:2013/12/02(月) 22:30:58.31
表示と印刷の両方に使える描画関数を用意する。サイズなどは引数で抽象化する。
印刷する場合はアスペクト比を取得し、描画関数を使って
メタファイルを作成し、用紙サイズに合わせてメタファイルを描画する。
405デフォルトの名無しさん:2013/12/10(火) 20:03:54.43
structにCStringをメンバとして含ませて、そのstructのオブジェクトをnewで大量に作成するとdelete時にコケる事がある
CStringが元凶だと分かるまでに1時間位かかった
406デフォルトの名無しさん:2013/12/11(水) 06:18:45.09
ごめん>>405は忘れてくれ、全然関係ない事が原因だった
407デフォルトの名無しさん:2013/12/11(水) 10:22:33.81
実はCStringをメンバとして持つ構造体にmemset()でクリアする馬鹿がいたとか。
十年前、私のいる会社でそれをやった馬鹿は今では立派に部長兼任理事ですw
408デフォルトの名無しさん:2013/12/11(水) 11:32:06.13
まだCString使ってるひとがいたとは
409デフォルトの名無しさん:2013/12/11(水) 18:54:56.56
MFC使ってるなら使わざるを得ないだろ
410デフォルトの名無しさん:2013/12/11(水) 19:12:59.24
CString使って何が悪いの?
411デフォルトの名無しさん:2013/12/11(水) 19:20:10.65
速度
412デフォルトの名無しさん:2013/12/11(水) 19:55:18.40
どういう処理の速度が何と比べてどれぐらい遅いの?
413デフォルトの名無しさん:2013/12/11(水) 20:22:07.70
中身はただのcharとかwchar_tなの知らないで、断片的にメモリ確保させまくって遅いとか言ってるんジャマイカ?
414デフォルトの名無しさん:2014/02/07(金) 19:55:50.98
数年ぶりにmfcでPG作ったけどサクサク動く感じはいいなー
415デフォルトの名無しさん:2014/02/08(土) 10:26:19.29
なんだかんだ言っても、ネイティブコード直結はレスポンスが良いからね。
416デフォルトの名無しさん:2014/02/08(土) 13:47:20.30
CFileDialogにIFileDialogCustomizeでコントロールを追加する場合、やっぱり
ダイアログを表示した後は変更不可なんでしょうか?
OnTypeChange()で選択されたファイルタイプ毎に別の表示を行いたいと
思っているんですが。
417デフォルトの名無しさん:2014/02/08(土) 14:01:26.88
既存のテンプレートに追加する仕組み自体
苦し紛れの裏技みたいなものじゃなかったかな

該当部分全体を1個の複合コントロールにまとめてしまって
コントロール内部の変化として吸収してしまう手はあるかもしれないw
418デフォルトの名無しさん:2014/02/08(土) 14:55:45.70
Vistaから、テンプレートを使う方式のかわりにIFileDialogCustomizeになったんですよ。
419416:2014/02/08(土) 19:07:30.66
自己解決。
一旦表示したらAdd/Removeできないのは仕様。
かわりにSetControlStateで見えなくすることはできる、ということらしい。
420デフォルトの名無しさん:2014/03/04(火) 23:52:51.41
質問させてください。
windows7+VC2005の環境で、ダイアログベースのMFCアプリを作成しています。
目的はブラウザ(IE)のリンクをドロップし、リンクパスの表示と、リンク先のファイル(主にzipかlzh)をダウンロードすることです。
現在、ドロップを受け取る方法が分からず困っています。
ググるとファイルドロップの方法ばかりでリンクをドロップするにはどうしたらよいのかがわからないです。
(ゆくゆくはブラウザで選択した文字列を取得するドロップにも対応したいです。)
たまにテキストのドロップを受け付けられるサンプルソースがあるのですが、
MFCを使用せずに作成されており、どうやってMFCアプリに組み込めばよいのか理解できていません。
ttp://hp.vector.co.jp/authors/VA016117/oledragdrop5.htmlを参考にしたのですが、DropTargetクラスをMFCで作成したクラスにどう組み込めばよいのかわからなかったです)

windowプログラム初挑戦で分からないことだらけなのですが、リンクのドロップを受け付ける手順を教えていただけませんでしょうか。
よろしくお願いします。
421デフォルトの名無しさん:2014/03/05(水) 00:25:03.37
COleDropTargetかな?
422デフォルトの名無しさん:2014/03/05(水) 10:46:52.92
.netならちょろいのになぁ
423420:2014/03/06(木) 01:25:01.97
>421
COleDropTargetをダイアログクラスの面罵にして、Initでレジスト関数にポインタを渡すと
ドロップに対応できるくさいことはどこかのHPで呼んだのですが、上手くいっていなんです...
とりあえずDrop関数でbreakできるようになれば後は頑張れると思うのですが...
今日は別の仕事が立て込んでて作業できなかったので、明日もう少し向き合ってみます。
(携帯がauで規制かかってるため、日中質問したりできないのが辛い...)

>422
.netなら簡単に実装できるのですか。
Windowプログラミングをあまり必要としない分野なもので、手持ちのツールがVC2005しかないので駄目そうです。
残念です。
424デフォルトの名無しさん:2014/03/06(木) 07:22:51.09
>>423
.netなら10行で実装できるぜ。
VisualStudioは無料だからいつでもダウンロードして使えるぜ。
サンプル
http://dobon.net/vb/dotnet/control/dropfromwebbrowser.html
425デフォルトの名無しさん:2014/03/08(土) 09:48:30.95
>>424
そのコードをReflectorで解析すれば出来るんじゃないのか
根性があるのならば
426デフォルトの名無しさん:2014/03/08(土) 19:03:03.76
>>420
かなり昔のことなのでだいぶ忘れてるけど
当時のソース見てみるとIDropTargetを継承したクラスを作って
仮想関数のDragEnter、DragLeave、DragOver、Dropをオーバーライドして
チマチマやってたみたい。ほとんどがwin95でも動くようにするためのコード
なのでwin95を捨てればほんの数行かも。
427426:2014/03/08(土) 19:05:41.94
ごめん、これMFCじゃないね
428デフォルトの名無しさん:2014/03/12(水) 00:50:01.17 ID:Ja3A3JiQ
>>424
あっさり捨てられた環境を勧めなくても
429デフォルトの名無しさん:2014/03/16(日) 13:19:59.09 ID:JfqgfTA8
皆さんアドバイスをください
SDIで開発してて、ドキュメント1つに対してビューを2つ用意して、
一つは一つの商品の情報を表示して、もう一つは複数の商品の一覧を表示しています。
商品に対して表示する情報は同じなので、2つのビューで共通する処理が多数あるのですが、
(OnPaintの半分ほど、スクロール、マウス、キーボード等の処理はほぼ同じ)
この場合共通する処理だけ実装したビューを作成し、
それぞれが共通ビューを継承して違うところだけ実装した方がよいのでしょうか?
それとも後々処理が変わることを見越してこのまま同じ処理のビュー2つでいいのでしょうか?
むやみに継承しても他の人が触るときにどうなのか客観的にみて皆さんはどちらがいいと思いますか?
430デフォルトの名無しさん:2014/03/16(日) 13:44:15.19 ID:qeSKPaCp
>> それぞれが共通ビューを継承して違うところだけ実装した方がよいのでしょうか?
これに一票。小さいプログラムなら単一Viewを状況に応じて使い分けるってのもアリかも。

>> 他の人が触るときにどうなのか
あなたと引き継ぐ人の腕前が分からないと判断しかねます。
431デフォルトの名無しさん:2014/03/16(日) 21:15:21.38 ID:JfqgfTA8
>>430
ありがとうございます
システム関係の部署もなく現在は私一人で開発しているもので、
どうしても主観的になっているのではないかと思い客観的な意見が聞きたかったのでありがたいです!
できればもう一つアドバイスを頂きたいのですが、
現在exeをサーバーの共有フォルダに置いており、各クライアントからはショートカットで起動しているのですが、
このようなやり方はいかがなものなのでしょうか?
やはりなにか自動アップデート的な機能を付けた方がいいのでしょうか?
各システムの使用者はそれぞれ10名程度なので、更新するときはサーバーのだけ上書きすればいいので楽なのですが、
はたして正しいのかどうなのかひっかかってます…。
432430:2014/03/16(日) 22:06:38.19 ID:qeSKPaCp
read onlyなら問題無いと思います。サーバー上にドキュメントがあり、さらにその更新も
やるプログラムであれば、サーバー側にも1個別なPGがないと厳しいかも。
433デフォルトの名無しさん:2014/03/20(木) 20:54:55.47 ID:Em0TZNJT
>>431
文面からエスパーすると、実行するのはクライアントのプロセス空間内みたいだし、実行ファイルが自分自身を書き換えたり共有フォルダ上の他のファイルを更新しないのであれば問題ないとは思う。
リスクとしては、更新時(バイナリ差し替え時)に誰も関連ファイルを参照しない、ということが保証できているかが気になる。

まあ、現状うまいこと運用出来ているみたいだから、そのままでもいいんでない?
ただ個人的にはそういう配布(?)方法は気持ち悪いからやりたくない。
434デフォルトの名無しさん:2014/03/21(金) 07:50:08.86 ID:ptiv3+4J
ヘルプ(*.chm)が共有フォルダ上だと見れない(見るには要レジストリ変更)とか無かったっけ?
ヘルプは無いのかな
435デフォルトの名無しさん:2014/03/22(土) 22:24:24.27 ID:7IgIWHBV
CWndの1つ1つが別スレッドで出来てるってマジ?
436デフォルトの名無しさん:2014/03/22(土) 22:29:33.95 ID:EwCIeJkp
ないない
437デフォルトの名無しさん:2014/03/22(土) 22:33:41.89 ID:7IgIWHBV
そうだよね
読み間違えたか^^
438デフォルトの名無しさん:2014/03/29(土) 09:52:32.60 ID:WP7oRJZ8
Javaだとやりかねないけどな
439デフォルトの名無しさん:2014/05/20(火) 15:49:35.48 ID:egqFhnIS
ダイアログアプリケーションについての質問です。

ダイアログ上に貼り付けたピクチャーコントロールに、リソースからビットマップを選択して表示、
と言うのをやっています。
これに追加して、ビットマップの内側にあるあらかじめ色bで塗りつぶされている領域を、
あとから指定する任意の色(c)で塗りつぶす、と言うのを行いたいと考えています。

 CDC cDC;
 CBitmap *pOldBitmap;
 BITMAP bmp;
 CPaintDC paintDC((CWnd *)&m_Static);
 cDC.CreateCompatibleDC(&cpdc);
 pOldBitmap = cDC.SelectObject(&m_Bitmap);
 m_Bitmap.GetBitmap(&bmp);
 paintDC.FillSolidRect(0, 0, bmp.bmWidth, bmp.bmHeight, color_back);
 paintDC.TransparentBlt(0, 0, bmp.bmWidth, bmp.bmHeight,
  &cDC, 0, 0, bmp.bmWidth, bmp.bmHeight, color_Transparent);
 paintDC.FloodFill (15, 30, color_c); // <-ここで塗りつぶしを意図
 cDC.SelectObject(pOldBitmap);

 OnPaint()中でこんな感じにすれば出来るか、と考えていたのですが、うまくいきませんでした。
正しい(出来れば簡便な)手順はどのようになりますでしょうか?
440デフォルトの名無しさん:2014/05/20(火) 17:03:36.36 ID:mSiEAm6Z
ビットマップにメモリ上で描画してから張るしかないんじゃないの? MFCよく知らんけどw
441デフォルトの名無しさん:2014/05/20(火) 17:43:21.64 ID:fbMM1sIr
OnPaintなら引数でdcわたってくる
442デフォルトの名無しさん:2014/05/20(火) 17:50:37.88 ID:Dt1y8Hrx
CDC *pDC = m_Static.GetDC();
// 描画
m_Static.ReleaseDC(pDC);

じゃ駄目?
443デフォルトの名無しさん:2014/05/20(火) 18:17:50.66 ID:/jbaDLb2
仮にそれでうまく塗りつぶせたとしても、ピクチャーコントロールの再描画が発生したら
ピクチャーコントロールが持つ元のビットマップが再描画され、塗りつぶしは消えてしまうよ
444デフォルトの名無しさん:2014/05/20(火) 19:42:37.71 ID:fbMM1sIr
GetDCとかは描画のためじゃなくて属性の取得・切替くらいにしか使えない
445デフォルトの名無しさん:2014/05/20(火) 22:33:38.27 ID:3MxWeU1m
>>439
CPaintDCは基本的に、WM_PAINTのハンドラOnPaintで引数にthisを渡して使う。
他のウィンドウに書きたい時は442の通り。ReleaseDCは不要だけど。
また、443の通りなので、オーナー描画にしてOnDrawItemで描画する方が良さげ。
あと、ピクチャコントロールはCS_PARENTDCなので、
実際にはダイアログ上に直接描画するのと同じことになる。
FloodFillがコントロール外に溢れだすかと。
446439:2014/05/23(金) 21:19:46.12 ID:bGbo8U4D
 いろいろとアドバイスをありがとうございます。
 あれから、いろいろと自分なりに試行錯誤を続けていたのですが、
どうにもうまくいきませんでした……自分がアホなのが悪いのですが orz
(描画方面を触る機会が無かったので、セオリーが全然わからないのです)

 他力本願で申し訳ないのですが、似たような事例で参考になるページ等、
ご存じでしたら誘導をお願いできませんでしょうか?
447デフォルトの名無しさん:2014/05/25(日) 04:23:16.90 ID:1TiKn05Y
できないことは諦めるのがいいとおもうんだ。
448445:2014/05/25(日) 10:10:34.15 ID:LQ1sHYmR
.NETのWindowsForms使った方が楽。
あれだけグダグダ書いといてなんだけど。
今時こんな知識糞の役にも立たんよ。
449デフォルトの名無しさん:2014/05/28(水) 10:47:36.15 ID:GoJRs+ay
VS2013のC#でFormにいくつかのボタンやテキストボックス、
リストボックスなどある簡単なGUI作った経験があるのですが、
それと同じのをC++で作りたいのです。
それで、MFCのダイアログベースのアプリを試してみたのですが、
C++初心者の私には、ちょっと難しすぎて困っています。
C++で簡単なGUI作る何か良い方法ありませんか?
450デフォルトの名無しさん:2014/05/28(水) 12:43:57.89 ID:2nt5gxIs
>>449
目的によるんじゃね?

・.Netで楽したい
→C++/CLI
・MSに縋りつきたい
→VSで頑張ってMFC
・どうしてもC++は馴染めない
→WinAPI直呼び
・できれば他のOSでも使いたい
→QtをQtCreatorで
451デフォルトの名無しさん:2014/05/28(水) 13:57:12.78 ID:GoJRs+ay
アドバイスありがとうございます。
MFCを少し使ってみたのですが、例えばボタンを配置してダブルクリックすると
自動的にOnBnClickedButton1()関数が追加されますよね。
このあたりはC#と同じですが、でもその関数が不要になり削除してビルドすると
エラーしました。C#だと問題なくビルドできます。それでMFCは使いづらいなあと
いう印象を持ちました。
私としては、そんなに複雑なGUIを作る予定はないので、高機能なものよりも、
GUI作成時の操作性の良さを優先したいです。例えば上で指摘したような件は、
些細な事ですが私にとっては重要です。
WTLというのを試してみようかなと思っていますが、どうでしょうか?

>・.Netで楽したい
>→C++/CLI
C++/CLIは少しやってみましたが、複雑で断念しました。

>・MSに縋りつきたい
>→VSで頑張ってMFC
今ここで迷っています。

>・どうしてもC++は馴染めない
>→WinAPI直呼び
それは避けたい。

>・できれば他のOSでも使いたい
>→QtをQtCreatorで
これも試してみます。
452デフォルトの名無しさん:2014/05/28(水) 14:07:41.68 ID:D+f+jZyP
.hと.cppとMESSAGE_MAPの3箇所修正しないといけないな
453デフォルトの名無しさん:2014/05/28(水) 18:03:43.00 ID:6RxarYIU
Qt は初心者でも使えるけど、どちらかというと上級者向きで、使い込むほど上級にステップアップできる。
MFC は初心者向きで、いつまでたっても初心者を脱出できないカタワになること享けあい。
454デフォルトの名無しさん:2014/05/28(水) 21:26:02.80 ID:2bmOQwT6
つ C++Builder
455デフォルトの名無しさん:2014/05/28(水) 21:56:51.16 ID:vt8gBzLM
WTLはMFCよりメッセージ周り理解してないと面倒、昔はMFCみたいにVSから編集できたような気がしたが今はだめっぽい?
Win32++がウィンドウのサンプル多いから改造しやすいがリソースファイル周りがちょっと面倒
456デフォルトの名無しさん:2014/05/28(水) 23:19:13.72 ID:tZBZVEkH
>>451
大昔にC++Builder使ったことあるけどサクサク組めて簡単だった。
でもC++/CLIを複雑過ぎると言う方には、どうなんだろ。

C#やVBで、簡単なサンプルじゃなく、自分が欲しいアプリを出来るだけ妥協せずに
1本組んでみたらいかがでしょうか。その後でC++に手を出しても遅くないと思います。
今の段階ではマニュアルが読めないんじゃないかな?
457デフォルトの名無しさん:2014/05/28(水) 23:26:41.66 ID:8pIXW7AP
初心者なんだから情報の多いMFCでいいと思うがな。
C++自体初めてなのにわざわざマイナーな環境で苦労することはない。
458デフォルトの名無しさん:2014/05/29(木) 01:27:30.54 ID:yMYw3hJp
つうかIDE使うこととライブラリ使うことと言語がごっちゃになってるじゃん。
何使ったってうまく行かないよ、そういう人は。
459デフォルトの名無しさん:2014/05/29(木) 02:18:03.33 ID:PR7m/tdq
>>458
より良い開発環境を求めて何が悪いと?
460デフォルトの名無しさん:2014/05/29(木) 02:37:26.16 ID:yMYw3hJp
>>459
言語仕様は開発環境じゃ変わらないよ?
そんなこともわからない奴がより良い環境って。
461449:2014/05/29(木) 05:33:31.36 ID:82BFXyhl
WTL試してみましたがMFCと同じくらいややこしそうなので、やめました。
Qtは試していませんが、調べた限りではちょっと大掛かりな感じなので
やめました。
ということでMFCを勉強することにしました。
C#の場合だと、プロパティ設定でフラットスタイルや、上下左右のアンカー
など簡単でしたがMFCでは難しそうですね。それとタブコントロールにタブページ
の追加方法が分らなくて困っています。ああ、難しい。
462デフォルトの名無しさん:2014/05/29(木) 10:03:57.83 ID:7BbAPvjC
簡単さを求めるならC#一択だと思うんだけど
VC++に手を出すなら猫でも分かるプログラミングでも見て
API直叩きのプログラミングを経験した方が良いよ
MFCはそれを楽にするためのクラス群だし

難しいってのは基礎知識が無いってだけの話だからね
掛け算を知らないのに因数分解を学ぼうとするようなもの
そういった意味ではC#は完全に別物だよね
463デフォルトの名無しさん:2014/05/29(木) 22:27:10.25 ID:vpEOP7D2
>>462
MFCはそれ自体で完結しているから、MFCとWin32という界面の違いというだけで
どっちから始めても大して変わらんだろ。
Win32の知識があればMFCの個々の設計がなぜそのようになっているか理解
しやすいだろうが、Win32の設計を1から理解しようとしたら歴史の知識が必要だw
464デフォルトの名無しさん:2014/05/29(木) 23:40:45.66 ID:82BFXyhl
このHPを参考にしてComboBoxにアイテムを追加したいのですが、
http://www.g-ishihara.com/mfc_cb_01.htm

メンバ変数追加ウィザードの画面で、コントロール変数のチェックボックスなどがインアクティブ
な状態になっていて選択できません。できるのはコントロール変数ではなく、普通のint型などのメンバ
変数の追加のみです。
どうすればコントロール変数を追加できるでしょうか?
VisualStudio2013のMFCプロジェクトです。
465デフォルトの名無しさん:2014/05/30(金) 03:08:54.26 ID:+JiPsEdl
>>464
カテゴリの項目が「Value」になっていないか?
466デフォルトの名無しさん:2014/05/30(金) 08:02:41.98 ID:5UIEmL2b
>>465
カテゴリの項目もインアクティブで変更できませんでした。
その後、プロジェクトを保存して再度開いたりしていたら、
自然に解決しました。原因はわかりません。
467デフォルトの名無しさん:2014/06/03(火) 18:10:20.28 ID:hUkg2c+Y
MFCで作ったダイアログ画面を
IEとかでそのまま使う方法ありますか?
やりたいことは、遠隔からIEにIP指定して画面を起動したいです
ttp://111.111.111.111:8080/index.htmlみたいな感じで
ダイアログ画面を起動したいです
ASP.netとかじゃないと無理ですかねえ
468デフォルトの名無しさん:2014/06/03(火) 19:52:51.86 ID:x+JfIFfH
index.htmlからMFCのexeファイルへリダイレクト。
って話では無いよなあw
その説明だけだと、本当にやりたい事がわからないな。
469デフォルトの名無しさん:2014/06/03(火) 20:02:12.83 ID:ldg7iKBp
cgiのプロセスメモリを監視して
GUI遠隔操作とかやったことある
470片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/03(火) 20:14:14.90 ID:t1Kppqzn
MFCアプリの画面イメージやマウスクリックを通信する方法もあるけど、Win実機が必要になる。
素直に作りなおすといいよ。
471デフォルトの名無しさん:2014/06/03(火) 20:36:11.35 ID:ihOB1yvw
エスパー凄いな
びっくりだ
472デフォルトの名無しさん:2014/06/04(水) 17:22:01.33 ID:MuCyUmqy
PropertySheetにPropertyPageが数枚あるだけのシンプルなMFCアプリを
作りたいのですが、その場合、親のウインドウはダイアログウインドウになるのでしょうか?
それともダイアログウインドウ無しでPropertySheet自身が親ウインドウになれるのでしょうか?
一般的な方法を教えてください。
473デフォルトの名無しさん:2014/06/04(水) 17:28:06.51 ID:2ij5JthN
> 470
Uchan の出番だな
474デフォルトの名無しさん:2014/06/04(水) 22:03:25.69 ID:CdPl8bsr
>>472
好きに作ればエエ
475デフォルトの名無しさん:2014/06/04(水) 22:33:13.64 ID:jM6qArUI
>>471
ゆい姉さん
476464:2014/06/08(日) 12:51:14.20 ID:psuIHcXy
先日464で質問したのですが、今でもコントロール変数が追加できない症状が解決できません。
一時、治っていたのですが、また発症しました。
http://www.g-ishihara.com/mfc_cb_01.htm
を見ながら作っているのですが、
メンバ変数追加ウィザードの画面
http://www.g-ishihara.com/mfc_cb_01_05.png
で、コントロール変数のチェックボックスなどがインアクティブな状態になっていて選択できません。
つまり、3列あるこの画面で、中央と右側の列が全部インアクティブ状態で、左側の
 アクセス(A)
 変数の種類(V)
 変数名(N)
の欄のみ入力可能です。中央列のコントロール変数チェックボックスが有効に出来ないのです。
どうすればコントロール変数を追加できるでしょうか?
VisualStudio2013のMFCプロジェクトです。
477デフォルトの名無しさん:2014/06/08(日) 13:51:27.69 ID:OVTpY++G
>>476
プルダウンのボタンを右クリックしてるとか?
478デフォルトの名無しさん:2014/06/12(木) 09:18:24.66 ID:GvZA3DBS
MFCのソースはスパゲッティーだと思う人いますか?
ちなみに自分は思います。

シンプルなことを複雑に書いてしまっているので、ちょっとした機能向上
のために自前で何かを追加すると、アクティブ化やDocking, Floating関連、
CFrame,CView,CDocument関連の一部で妙な不具合が出てきます。
479デフォルトの名無しさん:2014/06/12(木) 09:26:17.26 ID:GvZA3DBS
Document&View Architecture は、一つの CDocumentを複数のCViewで
表示する事が基本理念なのに、VC++6.0のMFCで用意されている関数は、
CFrame,CView,CDocumentを一括で作成する物だけで、既存の
CDocumentを新しいCViewにリンクするような関数は無いようです。

メッセージ・ルーティングも、実装が複雑なせいか、Doc&View
Architecute から離れて、単独の CView や CWnd などを持つと、
当たり前のことが当たり前に出来ないような事態になります。
480デフォルトの名無しさん:2014/06/12(木) 09:43:07.98 ID:XjWc7dDP
ちなみに自分はどうでもいいです。
481デフォルトの名無しさん:2014/06/12(木) 09:52:17.91 ID:iyKKJxWh
CDocument::AddView じゃ出来ないってこと?

MFCをそのまま使うだけじゃ出来ないことも多いけど
使い方を理解せずに「出来ない」って言ってるようにしか見えない
482デフォルトの名無しさん:2014/06/12(木) 10:00:12.19 ID:GvZA3DBS
VC++6.0でMFCのMDIアプリのプロジェクトを作成し、直後にビルド。
アプリに作成されたCViewの継承クラスに OnActivateView() の仮想関数を
追加。その中で:
MyDebugPrintf( "OnActivateView(), bActv = %d, pAct=%08X, pDeact=%08X, this=%08X\n",
        bActivate, pActivateView, pDeactiveView, this );
と書く。この関数は、OutpurDebugString()にvspritnf()を使って、
書式付出力機能をつけた物。

デバッグを開始し、アプリのファイルメニューから新規作成を二度行い、
MDI Child Frame を二個作って、アクティブ化のテストを行う。

別アプリをアクティブ化して、このアプリのタイトルバーをクリックす
ると、pAct==pDeact==this で上記の仮想関数三回呼び出されてくる。
bActvは、1,0,1 の順。で、三回とも、同じ this の値は同じ。つまり、
pAct==pDeact==this は、計9回同じ値が表示され、bActvだけが1,0,1。

別アプリをアクティブ化して、このアプリの中のMDI子ウィンドウをクリック
した場合は、これが、4回となる。
483デフォルトの名無しさん:2014/06/12(木) 10:11:18.90 ID:GvZA3DBS
>>481
なるほど。それはすみませんでした。
ちなみに、MSDN Library によれば:

pView = new CMyView;
pView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
rectDefault, this, AFX_IDW_PANE_FIRST + 1, NULL);
//pView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); // ???
pView->ShowWindow(SW_SHOW);
AddView( pView );
SetActiveView(pViewAdd);
RecalcLayout();

とするとのことですが、CViewのCFrameWnd はどうなりますか?
自動作成ですか、自前で用意するのですか?
CViewを追加するだけでこのように大量のコードが必要なのですか?
484デフォルトの名無しさん:2014/06/12(木) 10:24:14.20 ID:GvZA3DBS
誤字訂正:
誤:AddView( pView );
正:pDocument->AddView( pView );


ただ、CDocument::AddView(CView *pView) より、
virtual CFrameWnd *CDocTemplate::CreateNewFrame( CDocument* pDoc, CFrameWnd* pOther );
の方が「まだまし」な関数です。なぜなら、後者は、ちゃんとCFrame
を作成してくれるからです。

しかし、これが正しく動作するかは誰にも分かりませんが。
485デフォルトの名無しさん:2014/06/12(木) 11:23:14.63 ID:iyKKJxWh
ドキュメントとビューが結びつかないと書いたからAddViewを書いただけ
ドキュメントテンプレートを理解しないと無理
それっぽいメンバ関数を呼べばいいってものじゃない
中途半端な知識を捨てて1から勉強したほうがいいよ
486デフォルトの名無しさん:2014/06/12(木) 11:31:25.92 ID:GvZA3DBS
ちなみに、CDocument::AddView(CView *pView) が公開されていることで、
CViewは、どんなCFrameWndに入れても正しく動作するわけではないことは
実験的にはっきりしています。もちろん、一般のCWndに入れたらそれ以上
に駄目です。

MDIの場合、結露から言うと、CViewは、CMainFrm (<-- CMDIFrameWnd) に
入れるか MDI CLIENT WINDOW の子であるところの CMDIChildWnd に入れ
ないと正しく動作しません。

それ以外のCFrameWndに入れた場合、メッセージルーティングがおかし
くったり、アクティブ化が誤動作します。Docking<--->Floatingでは、
親であるところのCFrameWndの「すげ換え」が置きますが、CControlBar
にCViewを入れたりすると、Floating化後に「二重アクティブCView現象」
が発生し、CMainFrmのメニューが(開こうとすると点滅して)開けなく
なります。
487デフォルトの名無しさん:2014/06/12(木) 11:45:23.41 ID:GvZA3DBS
>>485
釈迦に説法。
自分はIPA認定の天才プログラマを超えている。
その上でかなりMFCの経験をつみ、よく調べた上で書いている。

MFCはスパゲッティーで、ドキュメントに書かれている理念でさえ
満たせていない。ほぼデフォルトの状態でしか使えないと見た方がいい。
変えようとするとさまざまな不具合に遭遇し、MFCのソースを解析、
SPY++でメッセージの調査、テストアプリの製作が必要となり、
最終的にはMFCのソースを大量にコピーして修正する必要が有るか、
または、そうした方が楽。
488デフォルトの名無しさん:2014/06/12(木) 11:57:26.63 ID:ps0VIDNa
使いこなせないなら自分で1からフレームワーク書けばいいじゃん
489デフォルトの名無しさん:2014/06/12(木) 12:00:14.51 ID:iyKKJxWh
経験を積んだ天才プログラマがよく調べた結果に対して
もう何も言うことはありません
いや、天才プログラマを超えてるわけだから…
490デフォルトの名無しさん:2014/06/12(木) 12:00:25.93 ID:GvZA3DBS
>>488
実際書いてるし、これからもっと書くつもり。
491デフォルトの名無しさん:2014/06/12(木) 12:04:03.31 ID:GvZA3DBS
>>488
「使いこなせない」わけじゃない。普通のプログラマなら、デフォルト
状態に毛の生えた状態でしかしようとしない。

自分の場合は、機能拡張を試みるので、機能拡張が全く出来ないよう
ものが困るだけ。
492デフォルトの名無しさん:2014/06/12(木) 12:10:17.33 ID:GvZA3DBS
>>486 の誤字訂正:

誤:ちなみに、CDocument::AddView(CView *pView) が公開されていることで、
  CViewは、どんなCFrameWndに入れても正しく動作するわけではないことは

正:ちなみに、CDocument::AddView(CView *pView) が公開されているので
  勘違いしそうですが、CView を、どんなCFrameWndに入れても正しく
  動作するわけではありません。それは、
493デフォルトの名無しさん:2014/06/12(木) 12:14:12.78 ID:GvZA3DBS
>>485
その理解もホントは間違い。

なぜなら、オブジェクト指向の理念からすると、公開されている
関数は、どのような使い方をしても正しく動作しなければならない
から。

CView *pView を引数に持つ関数を公開するのなら、ありとあらゆる
方法で作成した CView でも絶対的に正常に動作しなければならない。


この理念の理解の仕方が、天才プログラマのオイラとMFCの設計者や
あなたとの違いだ。
494デフォルトの名無しさん:2014/06/12(木) 12:24:41.32 ID:GvZA3DBS
公開さらたメンバ関数に、CView *pView を引数に持つ場合、本来、
次のようなことが守られて無ければならない。

・pView = new CView した pView でも良い。
・CDocTemplate などから間接的に作成したものでも良い。
・既にどこかで使われている既存の CView でも良い。
・CView は、Create() や CreateEx() などでウィンドウオブジェクト
 を作成する前でも後でも良い。
・CView は、クラスの集合で公開されている方法を使ってそうなった
 なら、他のどんな種類のウィンドウの子であっても良い。
 もし、一般の CWnd の子に成り得てしまうのなら、その場合でも
 正常に動作しなければならない。
・CView は、どんなスタイルや属性を持ってCreate()やCreateEx()
 されていても良い。


これが、C++ の基本的な理念。これが一つでも守られていなければ
アウト。ただし、CView は、一般の CWnd ではなく、必ず CFrameWnd
に入れる、程度の制約は、ドキュメント化されているならセーフ。
495デフォルトの名無しさん:2014/06/12(木) 13:47:21.08 ID:foAgyfNc
天才じゃなくてもMFCが20年以上前の古代C++と化石PC向けに設計されたことくらい知ってるだろう
496デフォルトの名無しさん:2014/06/12(木) 14:35:40.14 ID:VbjypW4u
これが若気の至りってやつかw
MFCの考え方が素晴らしいから他の環境にもどんどん適用していこう、
なんて奴はどこにもいないから安心して良いよ。
あとは>>495の通り。MFC1.0はWin3.1より前じゃないかな。
497デフォルトの名無しさん:2014/06/12(木) 15:05:09.91 ID:gzq5J5qE
1.0はWindows用でも無かった気がする
498デフォルトの名無しさん:2014/06/12(木) 15:16:34.79 ID:CisCdg7y
>>478-479 >>487 >>491 >>493
MFCは使わない方が良い
むしろ使うべきではない
天才ならもっと早く気付け
499デフォルトの名無しさん:2014/06/12(木) 15:26:31.26 ID:GvZA3DBS
少なくとも、.Net はもっと使いたくないですけどね。
500デフォルトの名無しさん:2014/06/12(木) 16:06:59.23 ID:SK659vFt
MFC も .NET も糞
Win32API 最高
501デフォルトの名無しさん:2014/06/12(木) 16:28:21.32 ID:C+ZFNT6Q
と言ってしまうのもどうかと思うが。
502デフォルトの名無しさん:2014/06/12(木) 19:51:14.40 ID:yC50SOGl
MFC も .NET も最高
Win32API 糞
503デフォルトの名無しさん:2014/06/12(木) 21:33:14.80 ID:yC50SOGl
ちょ
おまwww
504デフォルトの名無しさん:2014/06/12(木) 23:05:59.49 ID:kwwtPGed
>>493
iteratorにoperator*()があるからといって、end()に対して使ったらアホ。
505デフォルトの名無しさん:2014/06/13(金) 11:27:32.37 ID:V8AWh71l
>>504
end() に対して使っても、不整合は起きませんよね。

そこでiterator 自体がエラー処理するか、一般保護例外などがおきて
停止しませんか。

もしそうだとすれば、最高の安全性が確保されているということです。


AddView() して何のエラーも出ず、内部データの整合性がめちゃくちゃ
になって、後々原因不明のエラーになるのとは大違いです。
506デフォルトの名無しさん:2014/06/13(金) 11:55:52.36 ID:xgzZYZB7
天才プログラマなのに2chで質問…
天才プログラマなのに使い方が分からず悪戦苦闘…
MFCなんてソースが付いてるんだからちょっと見れば分かるだろ
適当にやって「うまく動かないのはMFCのせいだ!」って…
天才プログラマなんだから自力で解決しろや
それができないならさっさと諦めろ
507デフォルトの名無しさん:2014/06/13(金) 14:17:17.16 ID:ooUx6NQl
天才プログラマはMFCを使わない
508デフォルトの名無しさん:2014/06/13(金) 14:56:01.24 ID:zlKbN8L5
Pacalは使うのかね?
509デフォルトの名無しさん:2014/06/13(金) 14:56:41.14 ID:zlKbN8L5
おっとsが抜けた、台無しw
510デフォルトの名無しさん:2014/06/13(金) 15:51:29.59 ID:0JUM4RsI
天才プログラマはMFCを使わない
  ↓             ↓
天災プログラマはMFCを使えない
511デフォルトの名無しさん:2014/06/13(金) 16:36:21.63 ID:ooUx6NQl
Python
いいよ
512デフォルトの名無しさん:2014/06/13(金) 17:57:11.17 ID:28pi4WtW
なんかと紙一重って言うからな。
513デフォルトの名無しさん:2014/06/14(土) 19:11:48.30 ID:/GIgISes
ウィンドウのアクティブ化なんてものは、大して難しい処理でないことは、
ある程度以上のプログラマなら分かるだろうが、MFCのソースを見ると、
非常に複雑なコーディングになっていて、はっきりいって、こんがらがっ
てる。
514デフォルトの名無しさん:2014/06/14(土) 19:14:18.65 ID:/GIgISes
それだけで数千行を超えてるんじゃないか。
515デフォルトの名無しさん:2014/06/14(土) 20:10:23.73 ID:fnX3+qSk
━━MFCユーザーを解放せよ━━

MZC3が始まる……
516デフォルトの名無しさん:2014/06/15(日) 00:42:18.00 ID:gWcHCSVq
数年後にこの書き込みを見直したら、
恥ずかしさで転げまわる羽目になるのだろうなw
517デフォルトの名無しさん:2014/06/15(日) 07:29:11.43 ID:CUPMZUG2
ならない。
518デフォルトの名無しさん:2014/06/15(日) 09:44:50.27 ID:H0hqrU74
>>516
数年後も馬鹿のままだからならないよ
519デフォルトの名無しさん:2014/06/15(日) 10:25:15.21 ID:CUPMZUG2
人の力の大小を見極めるには、見極める側にも有る程度力が必要だと
いうことが如実に分かるスレですね。
520デフォルトの名無しさん:2014/06/15(日) 11:00:43.99 ID:H0hqrU74
>>519
ですよね〜
MFCのソースはほめられたものじゃないけど、ある程度の経験をつめば
「非常に複雑でこんがらがる」ほどではないことが分かる
だからあの程度で「非常に複雑でこんがらがってしまう」天才プログラマは
本当に天才なのか?って思ってしまう
でも見極める側に力がないからしょうがないですよね
521デフォルトの名無しさん:2014/06/15(日) 11:18:22.32 ID:Yby/fsOm
見極められる能力がある天才なら
MFC なんて使い物にならないと
とっくに見切ってるはず
522デフォルトの名無しさん:2014/06/15(日) 13:27:21.91 ID:paCDnv+x
>>521
それも間違い。

MFCはスパゲッティーではあるが、Visual Studio と統合されている
ことで、メッセージ・ハンドラの追加作業が、手でコーディングする
より遥かに効率的に行える。その他、CString が使えたり、
メニューの有効/無効が、OnUpdate 系のハンドラで、CCmdUI を
使って楽に行えたり、自作ダイアログのデータをCStringやintに
最初から入れてくれたりと、とても便利で効率的なことも多い。

つまりWin32を直に使うよりは、遥かに生産性が高い。

しかし、MFCがスパゲッティーで有ることもまた事実。スパゲッティー
だが、IDEとの連携で効率は良い、という複雑な事情が有る。
523デフォルトの名無しさん:2014/06/15(日) 13:32:09.43 ID:paCDnv+x
>>520
それも違うな。

あのソースを「スパゲッティー」だと思わないのは、あなたも
あの程度のスパゲッティーなプログラムしか出来ないからだ。

もっと遥かに美しい設計をいつもしている人なら、あんなソース
は問題外に感じるはず。
524デフォルトの名無しさん:2014/06/15(日) 13:57:18.48 ID:H0hqrU74
>>523
そんな話はしてない
スパゲッティーだろうがなんだろうが天才なら理解出来るでしょ
あの程度が理解出来ないなんて…

実際多いんだよね
プライドだけ高くて何も出来ない奴が…
実力が無いことがばれそうになると言い訳ばっかして逃げる
実力があるならごちゃごちゃ言ってないでさっさと解決すればいいのに、
あれが悪いだのこれが駄目だの…
525デフォルトの名無しさん:2014/06/15(日) 14:03:48.04 ID:VrQXXusG
明日この場所にもう一度来てください
俺が本物のスパゲッティーをお見せしてあげましょう
526デフォルトの名無しさん:2014/06/15(日) 14:14:02.72 ID:paCDnv+x
>>524
実際読んでみたの?

すくなくとも、オイラはスパゲッティーなコードを解読する能力が
高くはない。

ではそれでもなぜ、天才的なプログラミングが出来るのかというと、
スパゲッティーなコードを自分では絶対に書かないからだ。

一目瞭然で、サルでも分かるような単純なコードになっている。

それでも出来上がった作品は、天才的だといわれる。
527デフォルトの名無しさん:2014/06/15(日) 14:20:57.70 ID:Rg7+Zgkt
やっぱり天才だったかw
528デフォルトの名無しさん:2014/06/15(日) 14:25:59.59 ID:paCDnv+x
>>524
何を言ってるの? 「解決」とは何のこと?

スパゲッティーなコードをスパゲッティーだと断言することが、
目的であって、特に解決すべきことはない。

MS は、公式に「MFCのソースを直接変えるな」といっている。
あのレベルのスパゲッティーさを解決するには、
「リファクタリング」するのは最善の策。

それをMSは「禁止」している。

だから、直すためには禁止事項を破る必用が有る。
529デフォルトの名無しさん:2014/06/15(日) 14:59:56.67 ID:Yby/fsOm
MFC の中身のコードがすぱげっちぃなんは
人間が書いたものじゃなくて
MSDN の翻訳サイトみたいに
機械生成で造らせたコードだからかも知れないぬ
530デフォルトの名無しさん:2014/06/15(日) 15:01:57.17 ID:paCDnv+x
>>529
そんな可能性は低いと思うけど、ちなみに中身の汚さは外にも出てる。
だから拡張性が低く、ソースがないと利用するのが困難。

本当に美しい論理構造を持っていれば、ソースが無くともスラスラと
利用できるライブラリになる。
531デフォルトの名無しさん:2014/06/15(日) 15:12:49.29 ID:VrQXXusG
熱烈な要望にお応えしてMSが MFC Museum Edition を300万円で発売するってさ
532デフォルトの名無しさん:2014/06/15(日) 15:22:14.63 ID:H0hqrU74
>>528
禁止事項?

http://msdn.microsoft.com/ja-jp/library/ms235264%28v=vs.100%29.aspx
MFC ソースを変更し、その MFC DLL を再度ビルドする場合は、変更後の
MFC DLL が Visual Studio にインクルードされている MFC DLL と競合
しないように名前を変更する必要があります。
MFC DLL のリビルドおよび名前の変更は、できる限り行わないでください。
詳細については、MFC のテクニカル ノート 33 を参照してください。

http://msdn.microsoft.com/ja-jp/library/hw85e4bb%28v=vs.100%29.aspx
したがって、MFC のソース コードを変更して MFC DLL のカスタム
バージョンを作成するときは、別の名前を使ってください。
"MFC" を含まない名前をお勧めします。
533デフォルトの名無しさん:2014/06/15(日) 15:42:51.93 ID:paCDnv+x
「禁止」というのは言いすぎだった。
よく思い出してみると、「MFCソースは直接、修正すべきではない」
だったような気がする。

そりゃそうかもしれないな。
534デフォルトの名無しさん:2014/06/15(日) 16:02:33.95 ID:paCDnv+x
>>524
>実際多いんだよね
>プライドだけ高くて何も出来ない奴が…
>実力が無いことがばれそうになると言い訳ばっかして逃げる
>実力があるならごちゃごちゃ言ってないでさっさと解決すればいいのに、
>あれが悪いだのこれが駄目だの…

そういう人も多いかもしれないが、オイラはそれには当てはまらない。
作品や他人の評価を知れば、それは証明できる。
535デフォルトの名無しさん:2014/06/21(土) 19:35:59.51 ID:+tlHdBiN
>>524 って素人?
536デフォルトの名無しさん:2014/06/21(土) 20:31:21.24 ID:9Y4wI++n
遅い
537デフォルトの名無しさん:2014/06/21(土) 23:42:09.50 ID:+tlHdBiN
予想を超えたレス…
538デフォルトの名無しさん:2014/06/23(月) 09:55:52.21 ID:xVD6cdY2
キチガイに対するレスに素人も玄人もないだろ
539デフォルトの名無しさん:2014/06/23(月) 10:46:22.84 ID:Vv3nlqf+
キチガイに対するレスに遅いも早いもないだろ
540デフォルトの名無しさん:2014/06/23(月) 10:48:14.50 ID:Vv3nlqf+
いや、やっぱあるよねw
541デフォルトの名無しさん:2014/06/24(火) 02:16:01.71 ID:4sDn2htr
 C++のプログラムを、Windowsのダイアログボックスで操作するMFCベースの
ダイアログプログラムに移植しようとしたが、STLでビルドエラーだ、困った
もんだ。
 setコンテナのinsert()メンバ関数とかでエラーになる。
 Visual C++ 6.0の[プロジェクトの設定]ダイアログボックスの[C/C++]タブ
の[プロジェクト オプション(O)]に、/GX を追加しても、ビルドで警告表示
は解消しないし、エラーも出てしまう。
 どうすれば良いものか。
 もちろんヘッダーファイルはインクルードしているし、移植前のプログラム
は、普通にコンパイルが通ったものを使ってる。
 Visual C++ 6.0での話しで、それは会社にしかないので、今はそのエラー
メッセージは確認できないが。
 自分のVisual C++ .net 2003なら、何も問題なくビルドが普通に通ったが。

 どうすれば、STLを普通にビルドを通せるようになるでしょうか。
 または、それが無理なら、STLと同様の処理が可能なMFCのライブラリという
ものはないですか。
542デフォルトの名無しさん:2014/06/24(火) 03:12:42.64 ID:y3aUZP9H
vc6なんてテンプレート展開が大きすぎるとかで警告出たよな
それなら
#pragma warning disable
543デフォルトの名無しさん:2014/06/24(火) 06:51:46.67 ID:G9G4AQQ3
つーか、何故既にサポートの切れている環境でしか使えないVC6を使おうとするのか。
保守案件ならSTLを新規に使うことはないわけだし。
544デフォルトの名無しさん:2014/06/24(火) 07:42:17.49 ID:LohfYnwo
VS Express入れて、そいつでビルドしたexeを呼び出す作りにしてみるとか。
VC6でSTLをまともに使おうとするのは一寸無謀すぎる。
545デフォルトの名無しさん:2014/06/24(火) 09:13:55.66 ID:sHZWMGRb
>>543
サポートされていない「機能」でも、自分で解決するのが
プログラマ、だという主張がされているよね。

どんなにMFCがスパゲッティーでも、使いこなせなければプログラマの
能力が低いとされる。

であるならば、サポート切れした開発環境でも使いこなしてみせ
るのが優秀なプログラマだという事だよね。

なぜなら、ちゃんと設計できてないMFCでも、プログラマが苦労して
使うという意味では同じだもの。
546デフォルトの名無しさん:2014/06/24(火) 09:16:30.66 ID:oDNeDxJ6
弘法筆を選ばず
547デフォルトの名無しさん:2014/06/24(火) 09:58:31.06 ID:sHZWMGRb
実際の弘法は、筆に強いこだわりがあったらしいけれども。
悪い筆でもそれなりに上手く書けるが、良い筆で無いと到達できない
領域が有るのであろう。
548デフォルトの名無しさん:2014/06/24(火) 10:30:56.85 ID:AoaCOEto
>>545
どこにそんな話があったんだ?
自称天才プログラマが人の話を聞かずにギャーギャー騒ぐから
天才なら自分で何とかしろよって話になっただけでしょ。
549名無しさん@0新周年:2014/06/24(火) 11:09:51.36 ID:I/LXKLNz
堂が歪んでは経が読めぬ
550デフォルトの名無しさん:2014/06/24(火) 11:16:32.92 ID:rOvxW007
サポートが切れているかどうかは個々の企業によるのではないか
551デフォルトの名無しさん:2014/06/24(火) 11:35:09.26 ID:EGSIKm2X
サポートが切れているかが問題ではない。VC6で新規開発をすることに意義があるかどうかだ。
552デフォルトの名無しさん:2014/06/24(火) 13:10:51.35 ID:sHZWMGRb
>>548
優秀そうな人の集まりであるかのような書き込みで満ち溢れている2ch
が、実際は凡夫の集まりで有ることに気づかなかったんだよ。
553デフォルトの名無しさん:2014/06/24(火) 13:13:02.70 ID:rOvxW007
隠しきれずににじみ出てしまう知性と
ギトギトしたアピールとの区别くらいつくやろ
554デフォルトの名無しさん:2014/06/24(火) 13:29:38.06 ID:sHZWMGRb
例えば、灘や開成高校などの環境で育つと周囲には出来るといった
ことは本当に出来る人がほとんど。
「プライドが高い」のではなく本当に出来るから出来ると言っている。
そのつもりで2chを見ていれば、何でも答えられる人の集まりなのだと
勘違いしてしまうんだよ。
555デフォルトの名無しさん:2014/06/24(火) 13:40:42.42 ID:AoaCOEto
仮に何でも答えられる人が居たとしても、
「俺は天才だから、その指摘は俺には当てはまらない」
なんて言ってたら何も答えてくれなくなる
すぐ話をすり替えるし…
いい加減気付けよ
556デフォルトの名無しさん:2014/06/24(火) 13:59:13.02 ID:sHZWMGRb
>>555
はっきり言わないと、世界中からアクセスされてくる2chでは
通用しないんだよ。
それに、天才の言うことを凡人が見ると、知的障害者のように
馬鹿げて見えることが有るようだし。
さらに、2chでは、どのように態度をとっても、「意味有る答えは
めったに返って来ない」ようだし。
557デフォルトの名無しさん:2014/06/24(火) 14:01:28.16 ID:sHZWMGRb
>>555
>仮に何でも答えられる人が居たとしても、

MFCのソースのダメさが理解できない人たちにそれは出来ない。
558デフォルトの名無しさん:2014/06/24(火) 14:21:31.33 ID:oDNeDxJ6
天才でも歯が立たないMFC
559デフォルトの名無しさん:2014/06/24(火) 14:24:39.26 ID:oDNeDxJ6
すごいぞMFC
560デフォルトの名無しさん:2014/06/24(火) 14:25:33.90 ID:oDNeDxJ6
がんばれMFC
561デフォルトの名無しさん:2014/06/24(火) 15:05:47.32 ID:AAHBTYvg
やったねMFC
562デフォルトの名無しさん:2014/06/24(火) 17:05:49.94 ID:AoaCOEto
>>557
MFCのソースが良いソースなんて誰も言ってない

最初はMFCの質問かと思っていたけど、要するに
「MFCは糞だよね、天才の自分でも理解できないんだから」って
意見に賛同して欲しかっただけでしょ
563デフォルトの名無しさん:2014/06/24(火) 17:27:47.46 ID:sHZWMGRb
>>562
>>「MFCは糞だよね、天才の自分でも理解できないんだから」って

まあ、勝手に言ってなさいな。
564デフォルトの名無しさん:2014/06/24(火) 19:38:35.52 ID:rOvxW007
ソースがスパゲッティ云々いう以前に日本語で意思疎通できてない
笑え…ない
565デフォルトの名無しさん:2014/06/24(火) 21:15:46.36 ID:lP72EcqD
>> 541
VC++5のときにSTL系でコンパイルエラーがよく出てた気がする。
そのときはリリースビルドだとエラーがでなくなったことがある。

MFCにCMapってクラスがあるからsetの代わりになるんじゃないの?
もう全然覚えてないけど。
566デフォルトの名無しさん:2014/06/25(水) 02:21:32.59 ID:kNLYduIt
 普段は、単一のC++ソースファイルにプログラムを記述して、Visual C++ 6.0の
clコマンドでコンパイル・リンクして、コマンドプロンプト上で実行するプログラム
を作ることが多い。STLは不可欠だ。
 そして、Visual C++ 6.0でWindowsプログラムを作成する方法を学習して、少し理解
できてきたところだ。
 >>541のプログラムは、標準入出力(コマンドプロンプト)で実行するものを、GUI化
しようとした。
 MFCベースのダイアログプログラムを最初にウィザードで作成して、リソースエディタ
を編集して、コマンドライン引数や標準入力から取得していたものは、エディットボックス
から取得するように変更して、コマンドボタンのメッセージハンドラの関数に、main()関数
から実行していたコードを移植して、標準出力していたものは、メッセージボックスで表示
するように変更するという方法で、GUI化を考えた。
 STLは使ってるけれど、同じVisual C++ 6.0のclコマンドで、コマンドプロンプトで実行
するプログラムは、問題なく作成できたものだから、ダイアログプログラムにしたからと
いって、ビルドエラーになるとは考えていなかった。clコマンドでは、STLのコードで大量の
警告は出るが、/GX を指定すると出ない。だから、[プロジェクトの設定]ダイアログボックス
で、その設定はしたけれど、効果なしだったし、>>542で教えてくれた #pragma warning disable
も効果なしだった。
 これはもう、MFCでのクラスで代替手段を使ったほうがいいかもしれんな。>>565がリリースビルド
と言ってるし、明日会社で、リリースビルドで試して、それでも解決しなければ、MFCに変更する。
MFCのクラス階層図を見ると、配列、リスト、マップというものがあるな。これからは、これらを
勉強したほうがいいな。CSetというクラスは存在してないので、>>565の言う通り、CMapで代用す
るしかないな。そして、CMultiMapも存在してないので、multimapを使ったコードの移植もどう
するか対策の検討が必要になりそうだな。
567デフォルトの名無しさん:2014/06/25(水) 02:29:01.82 ID:kNLYduIt
プロポーショナルフォントだから、「dコマンド」に見えてしまうな。
"d" (D) でなくて、 "c"と"l" (CL) コマンド。
568デフォルトの名無しさん:2014/06/25(水) 02:52:13.26 ID:kNLYduIt
>>543
会社のパソコンのC++コンパイラは、それしかなく、またフリーソフトのダウンロード
は禁止なので、Visual Studio Express等を入れるわけにもいかないので、仕方ないのです。
569デフォルトの名無しさん:2014/06/25(水) 03:12:57.65 ID:kNLYduIt
 Visual Studio .net 2003は持ってるけれど、Visual C++ 6.0とは操作方法の違い等
もあることだし、Visual C++ 6.0の学習本で効果的に学習するためと、会社のパソコン
で使うVisual C++ 6.0でのプログラム作成能力を身に付けるために、Visual C++ 6.0
の購入も検討したが、AmazonでEnterprise版の中古は68,000円Professional版は新品で98,000円、中古で4万円、Standard版
の中古で2万もするからな。
 これだけのために、この高額な出費は厳しいな。
570デフォルトの名無しさん:2014/06/25(水) 05:57:09.42 ID:UIqp9yq9
未だにVC6にしがみついている会社って何なの?
571デフォルトの名無しさん:2014/06/25(水) 07:47:30.11 ID:ddPSuVSv
>>564
意思疎通できてる。もし日本語が変に感じるなら、
天才の言語感覚と、凡人であるあなたの言語感覚とが違っているだけ。
572デフォルトの名無しさん:2014/06/26(木) 00:23:56.26 ID:EUltEyNe
VC6強制とか、追い出し部屋にでも閉じ込められているとしか思えん。
573デフォルトの名無しさん:2014/06/26(木) 01:07:03.23 ID:yx8r5ZXb
それが割と有るから恐ろしい。
過去製品のサポートだとかでも必要だし、新しい製品と言ってもベースは過去ソースだったり。
574デフォルトの名無しさん:2014/06/27(金) 10:14:28.00 ID:MD/Kgkpe
VC6とSTL-PORT の組み合わせで使ってます。
575デフォルトの名無しさん:2014/06/27(金) 22:15:14.18 ID:+f+jTPw3
.Netでいきなり使いにくくなったりおかしな事になったからVC6を使わざる得ない状態はある。
最新のVSは過去のWindowsどんどん切り捨ててるし
576デフォルトの名無しさん:2014/06/27(金) 23:05:23.42 ID:tyj/D5gs
> VC6を使わざる得ない状態はある



え???
577デフォルトの名無しさん:2014/06/28(土) 06:00:04.81 ID:WBXNiQjo
staticおじさんキター
578デフォルトの名無しさん:2014/06/28(土) 12:37:49.66 ID:57e/13Kx
>>575
>最新のVSは過去のWindowsどんどん切り捨ててるし

具体的にお願いします:
579デフォルトの名無しさん:2014/06/28(土) 13:01:24.20 ID:pkB82Erl
strhogehoge 関数を使おうとすると
いちいち「もっと secure なの使え」って警告出るのはやめて
580デフォルトの名無しさん:2014/06/29(日) 13:47:10.57 ID:HJOUXsHi
>>579
#define _CRT_SECURE_NO_DEPRECATE
581デフォルトの名無しさん:2014/07/03(木) 23:29:52.68 ID:2beLGnBn
>>578
VS2008でWin9X系のバイナリは作れない。2010でWin2kのバイナリは作れない

>>576
お前はプロではないのか?
582デフォルトの名無しさん:2014/07/04(金) 00:24:28.83 ID:Qf+YHaeI
ちょっと教えてくれ。CRichEditCtrlでDrag&Drop編集の無効化ってできないの?
583デフォルトの名無しさん:2014/07/04(金) 20:37:20.76 ID:4D1jvaxN
DragAcceptFiles(FALSE)
だめなら派生させ、WM_DROPFILES/OnDropFiles()で何もせずリターン
584デフォルトの名無しさん:2014/07/05(土) 10:07:33.38 ID:4+ZYXVfC
DragAcceptFilesはなんか違うだろうと思って調べたら、ES_NOOLEDRAGDROPだった。
585デフォルトの名無しさん:2014/07/25(金) 23:59:28.12 ID:KWe1DoCq
ModifyMenuでメニューのテキストを変えたいのですが
HMENUはどれを指定したらいいのでしょうか。
4つ試したのですが、うまく動作しませんでした。

void CMainFrame::OnTestSettext(){
CMenu* main_menu = AfxGetMainWnd()->GetMenu();
CMenu* this_menu = this->GetMenu();
CMenu* menu_menu = this->m_wndMenuBar.GetMenu();
CMenu* tool_menu = this->m_wndToolBar.GetMenu();
::ModifyMenu(tool_menu->m_hMenu,ID_TEST_HELLOWORLD,
MF_BYCOMMAND|MFT_STRING,ID_TEST_HELLOWORLD
,L"こんにちは世界");
}
586デフォルトの名無しさん:2014/07/26(土) 02:10:56.54 ID:pKa/BFWU
Windowsネイティブのメニューなら反映されるだろうけど、
メニューバーのように元ネタとしてしか使っていない場合、
メニュー自体を変更しても画面には反映されないような気が。

MFCの流儀に従って、UPDATE_COMMAND_UIメッセージのタイミングで
CCmdUI::SetTextで変更するのがお勧めだな。
587585:2014/07/26(土) 05:33:55.28 ID:ozo5SIol
>>586
おお、ありがとうございました。
WTLでは似たようなやり方でなんとか動いていたのですが、
CCmdUI::SetTextですか。
無事、動きました。
588デフォルトの名無しさん:2014/08/09(土) 13:55:36.09 ID:H0g9sw/6
MFCのダイアログベースアプリをWizardで生成すると
CMyxxxDlgクラスが生成されると思うのですが
これってなんでデストラクタが生成されてないんですか?
MFCのCDialog派生クラスではデストラクタ禁止とか?
589デフォルトの名無しさん:2014/08/09(土) 16:53:38.54 ID:Tp6ekRy+
ComboBox(Type:ドロップダウンリスト)はフォーカス時(ドロップダウンしていなくても)、↑↓キーやマウスホイールに反応しますが、これを簡単に禁止する方法はありませんか?
Spin はリソースのプロパティで止められるのに Comboはできません。メンバ関数も無いようです。

よろしくお願いします。
590デフォルトの名無しさん:2014/08/11(月) 14:59:20.29 ID:ZBtQaP4y
>>588
(クラスウィザードで生成されたコードには)不要だから。
必要があれば自分で書けばいい。

>>589
派生クラスを作成して PreTranslateMessage で握りつぶす
591588:2014/08/11(月) 22:44:20.22 ID:Tf915yWy
>>590
サンクス!それを聞いて安心して自分で追加できます。
不安神経症で。。
592デフォルトの名無しさん:2014/08/26(火) 01:09:40.18 ID:q2uUhQ1i
中国語版(簡体字)を作ることになりました。
GB18030に対応するとなると、Unicodeアプリにしないとだめ?
それとも、UTF-8対応アプリとして作成したほうがよいのかな。
経験者いませんか。
593デフォルトの名無しさん:2014/09/01(月) 15:55:55.89 ID:nQghNeel
>>592
んなこと気にするな、ロジックは変わらない。
594デフォルトの名無しさん:2014/09/01(月) 16:21:50.10 ID:xK7WN8k/
なんだかんだ言って
使ってるライブラリによって選択肢が絞られるというのが
いつものパターン
595デフォルトの名無しさん:2014/09/01(月) 16:27:29.06 ID:X69OanmZ
>>592
UNICODE(ここでは WIDE 文字の意味)だけだと、2BYTE文字までの対応に
とどまる。
それでは足りないと言うことで、サロゲートペアが導入された。
もともと、1文字を 1 つの wchar_t 変数だけで済まそうと思った
のが Windows における UNICODE 対応だったが、その前提が崩れた。

元々、国産機時代から、SHIFT-JIS が使われていたが、
それは、1文字を全部2BYTEで表すよりは効率が良かったからだ。
8 bits, 16 bits マシンでも効率が良く処理できた。
同様の仕組みの UTF8 は全てを WIDE 文字で表す Windows の
UNICODE 対応よりは効率が良い可能性が高い。
分かりやすい上に、一度対応してしまうとその後何もすること
も無い。

2BYTEでも1BYTEでも今のCPUでは速度が変わらないように思えるが、
使用するメモリが増大することによる効率低下はまだ無視できない。
ASCII文字まで2BYTEで書くのは効率が悪い。最近、ASCII文字まで
2BYTEで表現されたテキストファイルを見たことがあるが、
あれは馬鹿ではなかろうか。
596デフォルトの名無しさん:2014/09/01(月) 16:44:51.95 ID:xK7WN8k/
シフトJISだったのはメモリが絶対的に足りなかったから
64kBスモールモデルからやり直せ
597デフォルトの名無しさん:2014/09/01(月) 16:46:39.82 ID:riC6owF6
もともとASCIIの上に乗っけるために
シフトしてるだけだしなあ
598デフォルトの名無しさん:2014/09/01(月) 16:48:05.28 ID:riC6owF6
K-IN K-OUT (SI,SOが使われてる体系が大元にあったんだよね
599デフォルトの名無しさん:2014/09/02(火) 11:03:19.57 ID:TmMSlGm8
>>598
それは状態変数のある文字コードと呼ばれていて、SJISや
UTF8よりはプログラミングしにくい事が知られている。以下は理由の
一部:

・文字列を別の場所にコピーするような場合、状態まで含めてコピーする
 必要がある。
・文字列の内容を正しく示すためには、ポインタだけでは足りず、状態も
 必要となる。

一方、SJISや、UTF8は、読み込みと書き込みだけを関数に任してしまえば
プログラミングは楽。uint32 の変数に読み込んだ後の文字を入れてしまい、
それを処理すればよいだけ。それでいてメモリ効率が良い。
600デフォルトの名無しさん:2014/09/02(火) 11:38:30.46 ID:wdU1cIJ3
本来の意味通りの合理的なSHIFTをしてるのは
むしろEUCの方だと思う
SJISのはギクシャクしてる
601デフォルトの名無しさん:2014/09/02(火) 11:48:42.68 ID:/m8AfW3s
SJISは半角カナとBASICで使うコードを避けたからな
602デフォルトの名無しさん:2014/09/02(火) 22:56:33.42 ID:wdU1cIJ3
5cは裂けませんでした
603デフォルトの名無しさん:2014/09/03(水) 02:29:54.86 ID:nJQEVZbi
そこは間が抜けているよな。
604デフォルトの名無しさん:2014/09/03(水) 11:47:08.57 ID:wH3fvtih
CMFCListCtrlを使ったCListViewを作ろうと思うけど、CListView派生型で、GetListCtrl()をオーバーライドするだけじゃダメだよね?

一般的な方法、もしくはその詳細を示しているサイトがあれば教えていただきたいですが…
605デフォルトの名無しさん:2014/09/12(金) 14:47:30.54 ID:1g4SS1Y1
とある現場ではまだ現役なのに解説本がもう10年出てないってどういうことなの
606デフォルトの名無しさん:2014/09/12(金) 22:16:07.10 ID:560WHGrX
そういうこと
607デフォルトの名無しさん:2014/09/13(土) 11:33:38.69 ID:dGFUkkE8
2〜3千円で本出しても元取れないってこと
608デフォルトの名無しさん:2014/09/13(土) 12:10:33.35 ID:81UxBdfS
基本的な部分は既にある本で間に合うからいいとして、2008sp1で追加された機能の
解説書が出ないうちに消えたのが残念だな。
609デフォルトの名無しさん:2014/10/04(土) 18:27:06.54 ID:IMKf9Y45
MFCって将来消えないのですか?
610デフォルトの名無しさん:2014/10/04(土) 22:39:45.47 ID:HPG7vLa4
消える言われて10年ぐらいたってる気がするがなぜか消えない
なぜかはわからんけどフリーでは配布されないぐらいの扱いをされているかもしれない
611デフォルトの名無しさん:2014/10/04(土) 23:04:16.99 ID:H28nZv4o
C++の需要がある限りMFCを捨てるわけにはいかんだろうな。
Win7のサポートが切れる頃にはWinRTに移行してくれると思うが。
612デフォルトの名無しさん:2014/10/06(月) 00:28:22.14 ID:zc3GSDUD
C++の需要ってあるの?
613デフォルトの名無しさん:2014/10/06(月) 19:25:31.42 ID:4uiIGAjI
>>612
少なくともキミにはない。
614デフォルトの名無しさん:2014/10/06(月) 23:46:27.02 ID:P5y3Kt/6
>>612
新規は少ないのでは?
615デフォルトの名無しさん:2014/10/07(火) 00:21:21.14 ID:AGZyHAPk
C#があればVBはもういらないと言っていいと思うけど、C++いらないというところまでは
まだのように思うなぁ。
MS自身、ストアアプリをC#に一本化できずにC++/CXなんてやらざるを得なかったくらいだし。
616デフォルトの名無しさん:2014/10/07(火) 01:29:54.99 ID:WYpWzpgi
Windows自身をc#で書いてみろってんだ
617デフォルトの名無しさん:2014/10/07(火) 07:18:25.41 ID:F2JbrDrK
VBはいらないと言っても、慣れ親しんだ書き方から、なかなか変えられないからな。
最初に習得した言語で十分と、新しい言語を学ぼうとしない人も多いし。

その結果、技術の進歩に取り残されて、使えない技術者になってしまうんだけどな。
618デフォルトの名無しさん:2014/10/07(火) 07:59:02.03 ID:FEWSCUR/
VBは、そうしたロートルを集めるのに役立った。
後は束ねてゴミの日に出すだけだ。
619デフォルトの名無しさん:2014/10/07(火) 08:55:52.03 ID:nFAJZCFr
最近は trend micro の製品だと思ってる人の方が多い
620デフォルトの名無しさん:2014/10/09(木) 05:33:26.89 ID:Jo0mqKMo
VBはほんと糞をまき散らしただけだったなぁ
ポインタも理解できない奴が人類に居ることが驚き
621デフォルトの名無しさん:2014/10/09(木) 06:31:36.52 ID:rubchCfk
もっと早い段階で免許ないとプログラミング出来ない様にしておくべきだった
622デフォルトの名無しさん:2014/10/09(木) 20:39:37.17 ID:tOThY/oR
その免許を得るための試験問題をひとつあげてみてよ
623デフォルトの名無しさん:2014/10/10(金) 00:18:37.32 ID:G9TwYsex
6809で39hはなにか。
624デフォルトの名無しさん:2014/10/10(金) 15:45:19.01 ID:T0LFFi4l
NOP
625デフォルトの名無しさん:2014/10/10(金) 18:44:47.65 ID:Xd6YjWLK
>>620
プログラミングにおいてポインタを理解していないことは致命的な弱点なのか?
626デフォルトの名無しさん:2014/10/10(金) 18:52:38.32 ID:T0LFFi4l
move ip, (sp++)
627デフォルトの名無しさん:2014/10/11(土) 12:48:59.62 ID:gz4lvABW
ポインタを理解できないのは致命的弱点だがな。
高度に規制の掛かった、WEBアプリのような物しか組めなくなる
628デフォルトの名無しさん:2014/10/12(日) 08:33:49.16 ID:5zSMLK5i
ポインタを理解できない頭が致命的
629デフォルトの名無しさん:2014/10/22(水) 12:29:14.98 ID:GnesLG+L
ポインタと再帰が理解できない頭ならこの仕事は無理だ
630デフォルトの名無しさん:2014/10/22(水) 23:18:56.35 ID:a0guCzhK
本当は無理なんだが
無理なのに無理やりやらせておかしくなってるのがこの業界でもあるな。
631デフォルトの名無しさん:2014/10/23(木) 09:01:43.18 ID:sksS7kTY
昔々に日立様が「ソフトウェア工場」なんて考えを流布したから
日本ではプログラミングはエンジニアではなくて技能職扱いなんだよね
ドヤ顔でプログラムの「製造」とか言っちゃうでしょ?
632デフォルトの名無しさん:2014/10/23(木) 09:28:03.02 ID:GVukQ4G4
へー
ITドカタが標準だと思ってた
633デフォルトの名無しさん:2014/10/24(金) 13:47:58.20 ID:k8b8ruuQ
>>631
実態そのものじゃないか
634デフォルトの名無しさん:2014/10/24(金) 14:28:26.53 ID:0u2i7qBO
それは日立だけの用語?
不治痛でも使ってる?
635デフォルトの名無しさん:2014/10/24(金) 15:12:48.39 ID:LInCoF9d
なんとなく大きな所はどこでもそう言うのかと思ったけど、
そういえば日立用語かも?

で、日立に関わったことがある営業とかマネージャが得意げに言うのよ
製造って
636デフォルトの名無しさん:2014/10/25(土) 08:41:51.34 ID:kNxHTA5N
Visual Studio 2012でMFCを用いて開発するんだけど、
「タイプ ライブラリからの MFC クラスの追加」でExcel 2010を追加したのだが、
xlDialogActivateとかの定数や列挙体ってインポートされないんだっけ?

みんなどうしてる?
637デフォルトの名無しさん:2014/10/25(土) 10:25:54.88 ID:kNxHTA5N
自己解決

*.tlhをインクルードするんだったな
638デフォルトの名無しさん:2014/10/28(火) 04:21:41.46 ID:eRgiBxYV
すいません、教えて下さい
環境は、VS2013 Pro とWin 8.1 です。

問題は、ダイアログを5つ作り、画面を移れる様にしました。

そのつど、Timerを作り、ダイアログを作りました。
移る時、はkillTimerを使い、Timerを切っていますが
その中の一つが、そのダイアログに移った瞬間
ボタンが、張り付き押せません。

最初は、他のtimerが動いていて、高速で動いている為と思い
debagでブレークポイントを付けて、見て見たのですが、動いている気配が無いです。
timerのIDを変えてみたのですが、それでもボタンが押せません。
Sleep(100)も入れてみました。症状は改善しません

「原因は、何が考えられる」でしょうか?

ソースは、大きいのと仕事なので記載出来ません。
エラー名も出ません、困っています。お願いします。
639デフォルトの名無しさん:2014/10/28(火) 04:26:43.63 ID:IaTzRo42
日本語の勉強からやり直した方が良い
割とマジレス
640片山博文MZ次期CEO ◆T6xkBnTXz7B0 :2014/10/28(火) 23:14:57.34 ID:RQAouJbt
そのダイアログはモーダルかモードレスか。親子関係はどうなっているのか?
なぜそのような画面遷移が必要なのか?
641デフォルトの名無しさん:2014/10/29(水) 07:11:34.45 ID:gYeqyNVo
親子関係とは何ですか?
642デフォルトの名無しさん:2014/10/29(水) 07:37:41.85 ID:N8JvcROE
>>641
勉強不足。Win32の基礎からやり直せ
643638:2014/10/29(水) 22:07:35.02 ID:r8pQJvlw
640他

有難う御座います。
ダイアログは、モーダルです。
親1 子4です。

未だ、原因は分かっていませんが
対処は、出来そうです。

新しく、ダイアログを作成して置き換えると
動作しそうです。(リソースが壊れた?)

因みに641は、私では無いです。
644 【東電 74.8 %】 :2014/10/30(木) 12:42:12.45 ID:VubmAqci
>>635
もしもしキミキミ!そうキミや。それはそうと、あれさ

神戸市の東、芦屋西宮の知的障害者施設で未成年利用者に性的な行為をして淫行条例で逮捕された三田谷学園元職員の堂垣直人(西宮市老松町)は、結局どういう罪になったの?
被害者家族のケアを芦屋市役所と兵庫県警はちゃんとやったのか?
差別や虐待は環境を選べない子供には関係ない。

http://www.youtube.com/watch?v=JxMzW3ZlV4g&sns=em
645デフォルトの名無しさん:2014/10/30(木) 19:13:54.92 ID:P+CVnAvq
モーダルの意味が分かってねーだろ?
モードレスにしろよ
646デフォルトの名無しさん:2014/11/07(金) 09:51:07.09 ID:FbMgv0lz
ちょっと教えてください。
スレッド内でUpdateDataを使うと
debug asseetion failedになって
あまりよろしくありません。
で検索すると、PostMassage経由でUpdateDataに
アクセスすれば上記のエラーはでない模様です。
でもPostMassageもUpdateDataも
同じCWndメンバーなのに何故UpdateDataは
直接スレッドからアクセスできないのでしょうか。
647デフォルトの名無しさん:2014/11/07(金) 10:07:48.63 ID:nUR92w6F
直接関数呼び出しになるのと
メッセージループで処理されるのとが違う
648デフォルトの名無しさん:2014/11/08(土) 06:18:29.33 ID:F238qiEh
>>646
UIスレッドと違うスレッドから呼び出したのなら当たり前かと。
MFCのオブジェクトは、基本マルチスレッドには非対応。
PostMessageは殆どAPI直結だから偶々通るだけ。
649デフォルトの名無しさん:2014/11/08(土) 14:40:24.68 ID:FUUNkC7E
>>648
> PostMessageは殆どAPI直結だから偶々通るだけ。
嘘書くなよ。メイン(UI)スレッドでしかできない処理(スレッドコンテキストに依存する処理)を
他のスレッドから行わせるときはメッセージをpostして、メッセージループ経由でメインスレッドに
処理させるのは常道。『偶々通る』、なんてことじゃない。
650デフォルトの名無しさん:2014/11/08(土) 18:10:20.71 ID:F238qiEh
別スレッドからでも問題無くメソッドを呼び出せる、
という思い込みだけで呼び出しているみたいだから、偶々と書いたわけで。
事実UpdateDataはASSERTに引っかかっているし。

厳密には、KB147578に書いてある通りHWNDでPostMessageしろって話なのだろうけど、
流石にそこまではしなくても大丈夫かとw
651デフォルトの名無しさん:2014/11/11(火) 20:45:36.67 ID:rXOccRM9
assertが出るのはCWndオブジェクト管理用のポインタ配列がスレッド単位で
独立しているからでなかったかな。

CWinThread派生クラスにHWND型のデータメンバを追加しておいて、ワーカ
スレッドをサスペンド状態で作成して、ワーカスレッド内からメインスレ
ッドを呼び出す際に、

CWnd *pWnd=CWnd::FromHandle(m_hWnd);
pWnd->UpdateData();

でよかった気がする。
652デフォルトの名無しさん:2014/11/14(金) 21:50:11.08 ID:bZ12n+rg
Community版ってPro相当の条件付き無料版みたいだけど
ProってことはMFCもあるんだよね?
個人的にはどうでもいいけどw
653デフォルトの名無しさん:2014/11/15(土) 13:56:53.32 ID:I36Ez7uH
MFCないとGUI出来んだろ
654デフォルトの名無しさん:2014/11/15(土) 17:28:43.57 ID:yJPCIm/Q
自宅のPCにインストール中。
VS2005以来なのでワクワクする。
655デフォルトの名無しさん:2014/11/16(日) 08:28:58.89 ID:lR2mulvd
WTL/ATL も入っちょる
656デフォルトの名無しさん:2014/11/16(日) 09:36:56.35 ID:IB4rlMlg
WTL?
657652:2014/11/16(日) 11:07:47.88 ID:fYw/Ek9p
>>653 の真意がよくわからん
>>652で言いたかったのはExpressとかの無料版はMFCなかったけど
Pro相当の無料版はMFCついてるなら、スレ的には価値のあるものかと思った。
個人的にどうでもいいのはVS2010Proもってて新規にMFCのアプリつくることはないので
それで十分とおもっているから。
MFCなくてもGUIのアプリなら
・他のライブラリを使う(QT,wx等)
・WindowsAPIを使う
・Managed系 Cli とかから System.Windows.Forms等を使う
658デフォルトの名無しさん:2014/11/16(日) 13:49:32.07 ID:zDSUi8Bd
659デフォルトの名無しさん:2014/11/16(日) 19:18:00.51 ID:mcbtcq3H
VS2013Communityで遊んでます。
二つのプロジェクト間でリーソースをドラッグでコピーしようとすると
ドラッグされた側が異常終了してコピー出来ません。回避策ありますか?
Comunity版じゃない方はコピーできます?
vs2005で作ったプロジェクトにドッキングウィンドウを仕込もうとしてるんですが
menu,toolbar,statusbarをCMFC?に変えるところで上記問題にぶつかってます。
660デフォルトの名無しさん:2014/11/17(月) 09:09:01.05 ID:8aBncdye
>>659
リソースビュー上での操作のことであれば、
VS2008やVS2010ではドラッグでもコピーできるようだけど、
まずは普通にキーボードやコンテキストメニューなどでコピーしてみては。
661デフォルトの名無しさん:2014/11/17(月) 17:41:31.02 ID:MImLrqGZ
>>660
レスありがとうございます。
IDEからプロジェクトを閉じ、ファイルを開くから2つのプロジェクトが持つrcを開いたら
コピー可能でした。が、ちょっと不便ですね。
http://msdn.microsoft.com/ja-jp/library/a5axa064.aspx
662デフォルトの名無しさん:2014/11/20(木) 22:18:02.24 ID:4UHhfVdJ
2013Comunityで初めてMFC Feature Packを使ってみた。
何の根拠もなく夢のようなライブラリだと思い込んでたけど
ソース見たら今まで自分でコツコツ作っていた機能を最初から用意している
程度のものもありちょっとショック。
ドッキングウィンドウは良いと思うけどね。
663デフォルトの名無しさん:2014/11/21(金) 06:01:51.64 ID:4QqWErIn
車輪の再発明か
664デフォルトの名無しさん:2014/11/21(金) 07:53:26.36 ID:4wsWtGd6
FeaturePack相当のものがC#で手軽に使えたらMFCを捨てて移行してもいいと思ってるんだが、
WPFは自由度が高い代わりに自分でなんとかしろって感じなんだよなぁ。
665デフォルトの名無しさん:2014/11/21(金) 21:22:31.27 ID:hLSIsWv9
MFC, WinForms, WPF比較すると自分的にはMFCが一番自由度高いとおもうけどな
ただし、ひたすら面倒。特にダイアログが色んな意味で低レベルだから
なんか自分でポトペタできるようなライブラリか何か作ったほうがいいんじゃないかと思うぐらいだ。
WPFは見た感じや動作をある程度までは比較的簡単にいじれるけど
いちいち覚えることが多いのと、ある程度以上のことはできませんな感じがする。
個人的にはFormsが一番バランスがいいと思う。
666デフォルトの名無しさん:2014/11/21(金) 22:53:56.82 ID:vZidNcEn
>>665
日曜プログラマからの質問ですが
MFC, WinForms, WPFの動作速度(初回起動込)は
MFCを100とするとどんな感じですか?
昔C++/CLIを勉強したことがあるのですが、あまりの遅さに
1週間で見捨てました。今は違うのかな。
667デフォルトの名無しさん:2014/11/22(土) 08:49:46.19 ID:XJHA90H/
速度なんかそんなかわんないんじゃない?
少なくとも体感できるほど遅いのはなんか別の問題だろう。
特にC++/CLIでGUI作ると・・・
動作時の速度じゃないけど、コンパイルがくっそ重かったり
そもそもいきなりGUIエディタがエラーになってGUIいじれなくなったりしてたから
C++/CLIでGUIを作る奴は居ない。
668デフォルトの名無しさん:2014/11/22(土) 22:29:21.32 ID:w+0AKoeG
>>667
見捨てた当時、遅すぎると思ったのはシンプルなGDIでの描画です。
VS2013でリビルドしたらだいぶマシになってるようですね。
それでもMFCに比べると倍以上遅いけど、、
669668:2014/11/22(土) 22:33:39.76 ID:w+0AKoeG
訂正
GDIはMFC側の話でDotNet側は中身不明。
670665:2014/11/22(土) 23:41:35.56 ID:nO/Ts9Hc
昔(2005あたり)と比べると初回起動は速くなってるというか、PC自体が速いのが大きいと思う。
最近のWindowsは元から.Net入ってるのも速い理由になってると思う。
C++のアプリと比べると起動遅いと思うときはあるけど問題にするほどでは無い速度と思う。
Windowsは長いこと使ってると起動時間とかどんどん長くなっていって
OSインストールしなおしたりするとOSの起動もアプリの起動も早くなるので
環境や状況によっては遅いと思い込んでいる人もいると思う。

最近WinFormsでDraw系のツールを作ったが実用になる速度ではあると思う。速いとは思わない。
だいぶ以前(VS2005のころ)ビットマップ系のアプリを作成したことがあるが
それは遅いと思った。いわゆるマップチップ表示のようなものだったが、
メモリーDCとかなかったのでビットマップの転送が効率悪いのだろうと思ったが、
最近はPCが速いのか何か改善されたのかわからないけど、以前よりかなり速くなっていた。

C++/CLIとかはほとんど使って無いのでわからない。
671666:2014/11/23(日) 00:10:08.48 ID:b8N83vrz
>>実用になる速度ではあると思う。
リビルドの結果、全く同感です。

>>速いとは思わない。
個人的にはここがネックです。

少しWPFの勉強してみようかな。DirectXで描画みたいだし。
672デフォルトの名無しさん:2014/11/23(日) 10:30:56.90 ID:BbKFBihK
WinFormsはGDI+で描画のはず。
昔はGDI+のハードウェアアクセラレーション予定もあった筈なんだけど、
結局ソフトウェアレンダラで落ち着いたみたいだ。
673デフォルトの名無しさん:2014/11/24(月) 14:45:44.59 ID:vXnR58zu
visual c++はニートになって勉強を続けないと身につけられる気がしない。
週末に学習に専念したくらいでは休み明けに成果を発揮するのは無理だし。
業務でvisual c++の開発をしてるわけではないし、その学習する時間で他の
やるべきことに使う時間が失われるほうが問題かもしれんな。
かなり難しいプログラムコードを書く割に、ウィンドウを表示して画面に
文字や図形を描画する程度で実用性があまりないもののために勉強するの
は大変だな。
674デフォルトの名無しさん:2014/11/24(月) 15:29:38.34 ID:EXpXIrWI
単にコンパイラとして使えば良いよ
675デフォルトの名無しさん:2014/11/28(金) 00:47:55.19 ID:mpqlgBjO
確かに職場で勉強する暇は無かったな。スケルトンを分かってないとMFCも上手く使えないしな
だが、他の環境よりずっとラクに組めるがなぁ
676デフォルトの名無しさん:2014/11/28(金) 03:00:48.15 ID:0GRBX8Eb
UIをWin32やMFCで作るのなんてやってられないw
C#が一番楽でいいよw
677デフォルトの名無しさん:2014/11/29(土) 18:59:41.93 ID:Uw3xE4X+
ただ作るだけ、ならばな。ややこしい仕様を満たすとなると話は違ってくる
678デフォルトの名無しさん:2014/11/29(土) 20:17:17.73 ID:WqomWRNe
MFCでプログラム組む人と、楽なことが一番な人とでは話がかみ合わない
と思う。そんなに大変なものでもないと思うけどね。ニートにならないと
VC身につけられないって人は、何でここ見に来てるんだろう。平日の昼間
に、、いや何でもない。
679デフォルトの名無しさん:2014/11/29(土) 21:12:43.94 ID:AKpgIRGl
一ヶ月くらい社内ニートをやってたらそこそこ使えるようになったけどなあ。
そこそこ止まりの頭しか持ってないがw
680デフォルトの名無しさん:2014/11/29(土) 21:40:51.77 ID:WqomWRNe
それは言い方の問題だろ(w
会社から(会社の意図はともかく)学習する時間を貰って、成長した。
と言うか、社内ニートと言うかで大分印象は変わってくる.
私も仕様がいつまでも確定しないでそんなことあったけど、あの時間は
ありがたかったと思う。
681デフォルトの名無しさん:2014/11/29(土) 23:22:26.88 ID:SoXvwZNw
社内ニートしてたら会社が潰れたでござる
682デフォルトの名無しさん:2014/11/29(土) 23:43:48.02 ID:YaXrgfF9
在宅ニートがはかどるな
683デフォルトの名無しさん:2014/11/30(日) 03:54:06.81 ID:JKdMgMZL
ごく初期の学習コストが高めというのはあるかもね。
WIN32APIだけでいろいろやった経験がある人とない人でも違うし
他のフレームワークの経験の有無でも違うだろうけど。
684デフォルトの名無しさん:2014/12/02(火) 18:59:16.69 ID:JIqSIT6x
>>678
>平日の昼間
>に
不正解。祝日だ。
685デフォルトの名無しさん:2014/12/07(日) 20:16:04.56 ID:TbxrJZXQ
わけわか
686デフォルトの名無しさん:2014/12/07(日) 20:18:42.56 ID:S3RAav3h
www
687デフォルトの名無しさん:2014/12/07(日) 20:29:33.97 ID:S3RAav3h
e
688デフォルトの名無しさん:2014/12/07(日) 20:29:57.32 ID:TbxrJZXQ
f
689デフォルトの名無しさん:2014/12/08(月) 01:49:22.71 ID:x2ZB8QJM
690デフォルトの名無しさん:2014/12/12(金) 12:19:08.79 ID:r3Fvlg1D
結局、MS Office は .NET では書かれないんだからな。そりゃCOMとOLEが残るわな。
691デフォルトの名無しさん:2014/12/12(金) 19:47:56.62 ID:igsJCovF
スレタイ、デバッグライブラリ?
692デフォルトの名無しさん:2014/12/15(月) 01:18:35.68 ID:aYRUZIwr
ドトネで書いたらソース丸見えなんだから売れなくなるだろ。
693デフォルトの名無しさん:2014/12/22(月) 21:09:04.99 ID:qPtfkPzc
678のように、そんなに大変なものでもないと思う人は、きっと頭がいいんだろうな。
本に書かれているプログラムは、いずれも幼児のおもちゃレベルでしかないけれど、
今はこれで我慢して勉強を続けるしかないんだろうな。
694デフォルトの名無しさん:2014/12/23(火) 05:47:15.20 ID:Cbd3aR0Y
最初から最高のパフォーマンス出せるひとなんてそうそういない
成功の裏にはたくさんの見える失敗や見えない失敗がある
だから初心者は失敗をおそれず色々やればいい
695デフォルトの名無しさん:2014/12/27(土) 02:10:36.27 ID:x6PZI0I4
失敗ばかりしてる人が成功するはずが無い

成功者は大抵は失敗がかなり少ない
696デフォルトの名無しさん:2014/12/27(土) 07:22:14.31 ID:w+/gOU5E
なるほど
一理ある
697デフォルトの名無しさん:2014/12/27(土) 09:25:34.66 ID:AKOS2ykD
失敗しないのは天賦の才能かね
経験積んで失敗しなくなる訳じゃないんかね
運が良いだけならそうそう続かないと思うんだが
どうなんだろうね
698デフォルトの名無しさん:2014/12/27(土) 16:20:15.39 ID:y4iXYZp5
諦めたら失敗が確定する。
最終的に成功すれば、それは試行錯誤となる。
まあ見極めも大事ではある。
699デフォルトの名無しさん:2014/12/28(日) 13:53:50.40 ID:6jddN626
うむ
700デフォルトの名無しさん:2014/12/28(日) 14:04:15.85 ID:0mcuX8gP
"成功"が多数の挑戦の結果ならば多数の失敗がある

失敗が少ないのなら成功ではなく安定という名の停滞である
701デフォルトの名無しさん:2014/12/28(日) 14:45:00.04 ID:Lg3Cm6Ji
日本人的感覚って気がするなあ
失敗からどれだけ学ぶかじゃない
702デフォルトの名無しさん:2014/12/29(月) 10:49:16.66 ID:naIzv4vi
ノーベル賞を取る人は数限りなく失敗してるんだが
あるいは分量を間違えたら新素材が出来ちゃったとか
703デフォルトの名無しさん:2014/12/29(月) 10:50:09.49 ID:/fu+2Q3X
ノーベル賞の選考基準に
「失敗からの発見」てのがあるからな
失敗したひとしかノーベル賞取れない
704デフォルトの名無しさん:2014/12/31(水) 07:07:57.90 ID:69RlDRjx
たしかに川上会長は失敗したイメージが全然記憶にないぬ
705デフォルトの名無しさん:2015/01/04(日) 02:10:23.24 ID:OfghjWl9
>>698, >>700
単なる詭弁だよね
706デフォルトの名無しさん:2015/01/04(日) 07:09:28.20 ID:eaSAVEXU
5.資料を示さず持論が支持されていると思わせる
707デフォルトの名無しさん:2015/01/04(日) 16:34:17.47 ID:w2TCoU2v
一部の特殊な例だけ取り上げて
それが全体の傾向であるように結論付けることはするべきでないが
往々にして成功者ヒストリーは一部の特殊な例である
708デフォルトの名無しさん:2015/01/04(日) 23:29:20.98 ID:cZc1COaa
変な人が一人で意味のない話をしているように見える。
日本語変だし外人さんかな。
709デフォルトの名無しさん:2015/02/08(日) 20:19:57.27 ID:vjMoB+W3
VS2013のC++でMFCのアプリケーションウィザードを使うと、自動的に
WindowsのファイルExplorerみたいなアプリが作れますが、例えば、
 アプリケーション種類:マルチドキュメント
 プロジェクト形式:Office (Ribbon有り)
この上にListBoxとかCheckBoxとかいろんなコントロールを配置して
自作のGUIを作りたいのですが、その場合、Dialogベースのアプリなら、
リソースのエディタでそのダイアログに自由に部品を配置して作成できますが、
上記のアプリの場合、自動生成されたリソースにはIDD_ABOUTBOXくらいしか
ありませんでした。
部品の追加は、プログラムに直接手書きして行くしか方法は無いのでしょうか?
要するにRibbonを持ったGUIを作りたいのですが、部品の配置はDialogを作る場合
のように自由に配置したいのですが。可能でしょうか?
710デフォルトの名無しさん:2015/02/08(日) 20:36:51.73 ID:tUjKNEQ0
マルチドキュメントなんだからあたりまえ
シングルドキュメント煮汁
711デフォルトの名無しさん:2015/02/08(日) 20:59:52.70 ID:vjMoB+W3
>>710
レスありがとございました。
さっそくシングルドキュメントでウィザードで作ってみたのですが
やはり、リソースフォルダの中身を見ると、BitmapとかIconとかMenuとか
いろいろ自動で追加されていますが、Dialogに関しては、IDD_ABOUTBOX
しか見当たりません。部品を自由に配置できるそういうリソースは
自動生成されないのでしょうか?
712デフォルトの名無しさん:2015/02/08(日) 21:30:40.01 ID:p5pYedXE
リボンはDialogじゃなくてRibbonというリソースだよ。マルチ/シングルは関係ない。
713デフォルトの名無しさん:2015/02/08(日) 21:37:34.81 ID:vjMoB+W3
>>712
レス有難うございます。

□□□□□□□□□□□□ Ribbon
□□□□□□□□□□□□
■■■■■■■■■■■■
□□□■□□□□□□□□
□□□■□□□□□□□□
□□□■□この部分に□□
□□□■□部品を置きたい
□□□■□□□□□□□□

Ribbonではなくて↑の部分に
部品を置きたいのですが。
Dialogを作るのと同じようにマウスで
部品配置可能でしょうか?
714デフォルトの名無しさん:2015/02/08(日) 22:56:31.70 ID:z5GqJ8Sh
2013は知らないけど、FormViewっていうのがあったような気がする。
715デフォルトの名無しさん:2015/02/09(月) 07:47:29.91 ID:iJdyGTL3
>>713
馬鹿には無理
716デフォルトの名無しさん:2015/02/09(月) 09:12:25.99 ID:dbrw/Pr1
>>715
知っているなら教えてくれよ
717デフォルトの名無しさん:2015/02/09(月) 12:55:12.06 ID:eUOrTSr4
>>711
・CViewではなくCFormViewを使う
・CViewのまま子ダイアログを貼り付けるようにする
718デフォルトの名無しさん:2015/02/09(月) 14:31:52.36 ID:dbrw/Pr1
>>714>>717
出来ました。
有難うございました。感謝です。
719デフォルトの名無しさん:2015/02/09(月) 14:39:13.44 ID:jsF3Jw1x
デュアルブートできますか?
720デフォルトの名無しさん:2015/02/09(月) 20:21:42.80 ID:V0EspmSl
>>719
はい?
721デフォルトの名無しさん:2015/02/09(月) 21:38:48.12 ID:dbrw/Pr1
MFCにはC#のTableLayoutPanelとかSplitContainerに相当する
部品はありませんか?
もし無い場合、皆さん、自作するのでしょうか?
私には難しくて無理です。
722デフォルトの名無しさん:2015/02/09(月) 22:42:56.03 ID:EPzT3drr
2013は知らないけど、CSplitterWndがあったと思う。
動的にすると勝手にスクロールするキモいやつにできる。

> もし無い場合、皆さん、自作するのでしょうか?
ネットで検索したら大体似たものは見つかってたけど最近は知らない。
723デフォルトの名無しさん:2015/02/18(水) 14:24:22.49 ID:o+3lLWFr
Win7-64bit+VS2010(SP1)で開発してるんだが、
1ヶ月前あたりからこんな現象が頻発するようになったんだが、同じ症状の人いる?
ttp://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+201205/12050011.txt

今まで問題なかった昔のソースを実行してみても同じ現象になるのよね。
条件はDebugモード、MFCスタティック、CFileDialogを連続して2回以上使う、bVisualStyleを変更しても出る。
CFileDialog使ってから数十秒〜数分の間で出る時もあるし出ない時もある。
出力ログを見るとCOM自動開放時に例外0xC0000005でしくじってる模様(ole.dllがエラー出してる)

OSのFileDialog仕様が変更されたのか、セキュリティのせいなのかよく分からん
724デフォルトの名無しさん:2015/02/18(水) 15:10:07.84 ID:X3xI6x7N
>>723
CFileDialog CoInitialize でググったら幸せになれるかな?
725デフォルトの名無しさん:2015/02/18(水) 21:56:24.15 ID:289WFADr
Win95のころダイアログ使うとVCのログウインドウによく出てたような気がする。
NT系では出なかった気がする。
プログラム強制終了するわけじゃなかったし原因がわからなかったから放置してたな。
これと一緒かどうかは知らないけど。
726デフォルトの名無しさん:2015/02/19(木) 10:48:51.10 ID:mAv7fs9q
MFCのプログラムでウィンドウのないタスクトレイ常駐プログラムを作っていて
起動時にSetTimerを設定したいのですが、ネットで調べてもウィンドウの初期化時にセットしているものばかりなのですが、
SetTimerはウィンドウがないと使えないでしょうか
727デフォルトの名無しさん:2015/02/19(木) 11:34:26.01 ID:hRb8aPHh
ウィンドウはなくてもいいがメッセージループは
廻す必要がある
728デフォルトの名無しさん:2015/02/19(木) 12:10:50.17 ID:mAv7fs9q
起動時にSetTimerを設定する場合はOnInitDialog()の中で行うという解説が多いのですが
ウィンドウがなければOnInitDialog()もないと思うのですが、ウィンドウがない場合はどこにSetTimerを入れるべきでしょうか
729デフォルトの名無しさん:2015/02/19(木) 12:21:25.34 ID:ra0CCNS1
そのプログラムがタイマーが必要なタイミングで通るとこに置けばいい
いつからいつまで必要なの?
730デフォルトの名無しさん:2015/02/19(木) 12:34:49.08 ID:mAv7fs9q
起動から終了までずっとです
731デフォルトの名無しさん:2015/02/19(木) 13:33:51.98 ID:ra0CCNS1
>>730
InitInstanceでSetTimerしてExitInstanceでKillすればいいと思うよ。
732デフォルトの名無しさん:2015/02/19(木) 13:47:12.53 ID:ra0CCNS1
あーでもタスクトレイのアプリ作った時はトレイからの通知受け取り用に
表示しないままのウィンドウ作ってたけどな、あまりに昔の話なので
今の状況知らないけど。
733デフォルトの名無しさん:2015/02/19(木) 14:10:56.99 ID:mAv7fs9q
>>731-732
ありがとうございます。やってみます。
734デフォルトの名無しさん:2015/02/19(木) 16:05:37.86 ID:m5LZC2Jw
>>724
ありがとう。
(*´∀`*)幸せになれた。
2006年頃はAcrobat 7.0が何かしらやらかしてたらしいけど、今回はなんだろうね?
735デフォルトの名無しさん:2015/02/19(木) 16:47:33.77 ID:ZhXVRy09
>>734
昔調べたときは、MSも認識している問題だと解釈したけど。
ttp://mfctips.com/2012/10/29/cfiledialogdomodal-causes-access-violation/
736デフォルトの名無しさん:2015/02/20(金) 17:10:38.15 ID:Wp2bPqaM
OnTimerは重い処理をさせるときは一度解除したほうがいいんですか?
どうも処理が積み重なっているように感じるのですが
737デフォルトの名無しさん:2015/02/20(金) 18:35:12.65 ID:MkuV+cy2
はい
738デフォルトの名無しさん:2015/02/20(金) 18:41:20.45 ID:MaDrr6Li
シングルスレッドであれば、タイマーが重い処理を呼び出しているとして、その呼び出しが重複することはないよ。
739デフォルトの名無しさん:2015/02/20(金) 22:41:12.80 ID:SRZUyAeY
まあ動作環境知らんけど、再入が気になるなら
フラグとかで対策しとけ
740デフォルトの名無しさん:2015/02/20(金) 22:45:51.35 ID:r3gji5y+
フラグ立てるとatomicな処理とかでまた詰まるんですね
741デフォルトの名無しさん:2015/02/21(土) 06:55:40.51 ID:ZprzlED+
ありがとうござます。
742デフォルトの名無しさん:2015/02/22(日) 23:00:32.38 ID:bfA7aDbz
基本的なことをお聞きしますが、MFCのプログラムを作っていて
ヘッダーファイルで
public:
static const float VAL;
とやってcppのほうで、
CHoge::CHoge()
{
const float VAL = 0.1;
}
とやっているのですが、LNK2001のリンクが未解決というエラーになります。
constの定義はほかにもあるのですが特定の何個かだけエラーになってまして
意味がわかりません、どなたかわかる方教えてください
743片山博文MZ ◆T6xkBnTXz7B0 :2015/02/22(日) 23:43:41.43 ID:vD6PHArE
>>742
const float CHoge::VAL = 0.1;
744デフォルトの名無しさん:2015/02/23(月) 00:54:29.48 ID:NldAyYSY
>>743
あざす
通りました。でもなぜ通るのかわかりません。
どういう意味の違いがあるのでしょうか
745片山博文MZ ◆T6xkBnTXz7B0 :2015/02/23(月) 00:57:45.43 ID:cWkGfwjm
一方は関数内ローカル変数になる
746デフォルトの名無しさん:2015/02/23(月) 06:38:22.60 ID:5y2BF+sm
const float ::VAL = 0.1;
747デフォルトの名無しさん:2015/02/23(月) 07:10:59.32 ID:XXFYkuzw
ありがとうございます。まだ完全に理解できてませんがスコープが原因ということで調べてみます
748デフォルトの名無しさん:2015/02/23(月) 07:41:28.89 ID:AjFb9vvE
ヘッダに書いてinlineにしてしまえ
749デフォルトの名無しさん:2015/02/23(月) 09:09:44.78 ID:+NS9Huw+
C#やJavaと違って、C++は自動でインスタンスフィールド
→クラスフィールドみたいには追いかけてくれない。
……だっけ?
750デフォルトの名無しさん:2015/02/23(月) 09:26:24.22 ID:AjFb9vvE
勝手に追いかけてもらったら困る
751デフォルトの名無しさん:2015/02/24(火) 15:41:56.25 ID:XQtX+KlD
MFCのクラスの中でstd::mapを使おうとするとアクセス違反で逮捕するってエラーが出るんですが
mapはクラス内で使ってはダメなんでしょうか
752デフォルトの名無しさん:2015/02/24(火) 16:10:43.49 ID:trUfTvKQ
どう書いたらどんなエラーが出たのさ?
753デフォルトの名無しさん:2015/02/24(火) 17:12:53.94 ID:XQtX+KlD
empty()ではじいたらエラーにならなくなりました。お手数おかけしました
754デフォルトの名無しさん:2015/02/28(土) 22:25:37.26 ID:oRo13HM9
>>751
アクセス違反で逮捕で笑ってしまった。私は懲役だろうなー
755デフォルトの名無しさん:2015/03/01(日) 05:32:10.55 ID:LYwpGVQL
自演つまらん
756デフォルトの名無しさん:2015/03/07(土) 09:23:30.87 ID:zQQnxaDJ
MFCって.NETと比べるとコントロールが馬鹿に少なくないですか?
こんなんじゃ何も作れないと思うんですが・・・
757デフォルトの名無しさん:2015/03/07(土) 10:52:39.25 ID:SbrjsXOD
コントロールやコントロールのようなものをMFCで作るか
ActiveXコントロールならATL(たぶんMFCでも)で作って使えばいいし
むしろDVアーキテクチャなら一般的なコントロールは
ちょっと使いにくいというか、いちいち値を入れたり出したりが
面倒だったりレスポンスが悪くなるような気がする。
758デフォルトの名無しさん:2015/03/07(土) 13:02:46.44 ID:BY6NtiZi
.netはコントロールにしないと使えないからでは。
759デフォルトの名無しさん:2015/03/08(日) 05:03:07.32 ID:5/QSYnVE
MFCは貧弱だからなぁ
MFCだけじゃなく、C++は標準ライブラリにも恵まれなかったし
.netはその辺の反省も生きているのでは
760デフォルトの名無しさん:2015/03/09(月) 01:00:07.44 ID:fIAFp70M
.netはJavaの真似でしょ。
javaはC++の反省が生かされてるから、
間接的には影響しているんだろうけど。
761デフォルトの名無しさん:2015/03/09(月) 06:59:54.30 ID:+I51GYiG
C++とJavaの反省を生かしているかと
762デフォルトの名無しさん:2015/03/09(月) 07:22:12.25 ID:ozCn1dQF
そうはいっても、Windowsアプリ普及期でのMFCの存在はかなり大きかったとおもうよ
APIで書いてた頃のめんどくささったらなかったもの
763デフォルトの名無しさん:2015/03/09(月) 07:47:08.31 ID:+I51GYiG
>>756
作ってたんだよ。必要なコントロールは自分でね。買ってくる時もあるけど。

元々Win32 APIで、C言語での大変な開発に対して、
C++でWin32 APIをラップして使いやすくしたMFCが登場し、
Javaが登場するが、ちょっと理想論的なところが使い難かった、

という反省を踏まえて.NETが登場したという時系列だから
.NETの方がコントロールが多い、便利というのは当たり前
764デフォルトの名無しさん:2015/03/09(月) 08:41:59.41 ID:CRFMLrc+
VB6おじさんですねわかります
765デフォルトの名無しさん:2015/03/09(月) 09:06:16.50 ID:dExiqI6Y
MFCの設計思想は、名前の通り「ファンデーション」だったんだよ。
APIやメッセージハンドラなどを薄くカプセル化。

今ではだいぶ厚化粧になったけど、根幹は変わっていない。
766デフォルトの名無しさん:2015/03/09(月) 09:24:44.28 ID:CRFMLrc+
そうか?
MFCは重ね塗りには向いてなかった設計だが
767デフォルトの名無しさん:2015/03/11(水) 18:40:08.81 ID:B0uxeYZf
そもそもMFCってそんなに便利か?
個人的にはWin32APIを直接呼び出すスタイルと比べて、
大差ないと思うんだが。
768デフォルトの名無しさん:2015/03/11(水) 20:16:57.90 ID:ia4bkTQw
だから便利じゃんじゃん
大差あったら、いちいちその呼び出しスタイルを覚えなきゃいけないんだぜ
769デフォルトの名無しさん:2015/03/11(水) 20:35:35.60 ID:ioZEgDg0
つーか、>>765 にも
>APIやメッセージハンドラなどを薄くカプセル化。
って書いてるし
770デフォルトの名無しさん:2015/03/11(水) 20:45:19.64 ID:9/hbSKsF
>>767
APIだけでウインドウ出してみ
771デフォルトの名無しさん
>>770
こんなの決まった書き方だから関数化するなりコピペするなりすればよいし。