■MFC相談室 mfc18d.dll■

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Microsoft Foundation Classライブラリ専用スレです。
2デフォルトの名無しさん:2007/08/01(水) 12:02:21
前スレくらい貼ってくれてもバチは当たらないと思う >>1

■MFC相談室 mfc17d.dll■
http://pc11.2ch.net/test/read.cgi/tech/1164073111/l50
3前スレ986:2007/08/02(木) 21:54:39
前スレ>987 遅レスだがサンクス
4デフォルトの名無しさん:2007/08/10(金) 21:12:33
GUIの設計が大変すぎるんだが
例えばVCLでいうStringGridみたいなもの作りたいとき
MFCだけでやろうとするとListBoxとかListViewとかをベースに
しこしこつくっていくわけなんすかね
5デフォルトの名無しさん:2007/08/10(金) 21:44:32
だからMFCは基本的にWin32のラッパなんだと何度言ったら(ry

StringGridって割と便利みたいだし、誰かMFCで実装した奴いるんじゃね?
いなけりゃ、自前で実装して公開すれば皆に喜ばれるよ。
6デフォルトの名無しさん:2007/08/11(土) 09:45:34
ダイアログの中にマウス関連のイベントやグラフィック表示を扱う
独自のコントロールを置きたいのですが、

・CWndの派生クラス(カスタムコントロール)として作成
・CStaticの派生クラスとして作成

この両者で作り勝手などに違いはありますか?
どちらが妥当な方法でしょうか?
7デフォルトの名無しさん:2007/08/12(日) 03:00:57
8デフォルトの名無しさん:2007/08/14(火) 06:33:44
CListView(report)とCDocumentの質問なんですが、
CDocumentに、オブジェクトの配列obj[10]を作って、それを配列の引数順にリストに表示させているのですが、
リストでソートしたときに、リストの表示とCDocumentのリンクのさせかたが分かりません。

つまり、リストのどの行に、オブジェクト配列obj[10]の何番目が入っているのか、どうやってリンクさせればいいんでしょうか?
9デフォルトの名無しさん:2007/08/14(火) 06:55:17
>>8
CListCtrl.SetItemDataでインデックス・ポインタ等を関連付けておく。
UI上でのインデックスは、GetItemData用と割り切って考えるといい。
10デフォルトの名無しさん:2007/08/14(火) 07:21:23
>>9
レス有難うございます。

やってみたのですが、SetItemDateは、 LVITEM 構造体の lParam メンバの値を設定するもののようなのですが、

で、ソートするときに、このlparamの値を、itemの値と同じ通し番号にしているので(他から引っ張ってきたソート用
のコードで、なんでこうしているのかわからないのですが・・・)、
初めにセットしたlParamの値がソートすることで消えてしまいます。
ソートのコードがおかしいのでしょうか?

どうすればよいのでしょう。
11デフォルトの名無しさん:2007/08/14(火) 07:36:31
>>9
CompareFuncの中もobjを使って比較すればよいのですね。
わかりました。
ありがとうございました。
12デフォルトの名無しさん:2007/08/14(火) 08:11:07
>>10
ちゃんと頭を使ってドキュメントを読めば、そんな引っ張ってきたロジックに頼らずに
自分でソートくらい書けるようになりますよ。
尤も、SetItemDateなんてTypoやっているようじゃお郷が知れますがね。
13デフォルトの名無しさん:2007/08/14(火) 09:10:37
お郷が知れます(w
14デフォルトの名無しさん:2007/08/14(火) 09:34:54
日曜大工ならず、夏休みプログラミングなもんで・・・
スレ汚し勘弁
15デフォルトの名無しさん:2007/08/14(火) 23:24:41
>>10
lParamの値からFindItemを使ってアイテムのIndexを取得してソートに利用
すれば良いでしょう。そうすれば、後からソートをし直してもIndexは
変わってもlParamの値は変わらないので、配列に関連付けて使う事が可能です。
この場合lParamはアイテム挿入時に一度セットしたら後から変えないで下さい。
16デフォルトの名無しさん:2007/08/16(木) 20:44:02

テキストエディタとかにルーラー(目盛り)ついてますが
あれと同等のことをやりたいです。下にスクロールしても常に表示するみたいな
CScrollViewと CDC::IntersectClipRectつかってもうまく行きそうにない・・・。

CViewとIntersectClipRectでスクロールは自前でやるしかないのでしょうか?
# CSplitterWndでルーラー部と本体部の2つのViewってのもありでしょうか・・・
17デフォルトの名無しさん:2007/08/16(木) 21:57:04
>>7
試してみます thx
18デフォルトの名無しさん:2007/08/17(金) 00:39:30
>>7
その程度のものなら自前で作ってもたかがしれてる
ドキュメント読んで使い方を覚えるほうが面倒だよ
19デフォルトの名無しさん:2007/08/17(金) 01:00:02
すいません。質問です。
ダイアログのクラスの名前を間違えたので、
ダイアログのクラスを一旦削除して、同じ名前のダイアログのクラスを再度作成すると以下のエラーがでます

error C2374: 'classCDialogXXXX' : 再定義されています。2 回以上初期化されています。
'classCDialogXXXX' の宣言を確認してください。
error C2084: 関数 'CRuntimeClass *CDialogXXXX::GetRuntimeClass(void) const' は既に本体を持っています。
'GetRuntimeClass' の前の定義を確認してください
・・・

grepしてもclassCDialogXXXXは一箇所しか見つかりません・・・
同じ名前のクラスを再度作るにはどうすればいいですか?
20デフォルトの名無しさん:2007/08/17(金) 01:13:13
>>19
単に、消し忘れた場所があるだけのような気もするが……
リビルドとかいう基本的な話じゃないよな?
21デフォルトの名無しさん:2007/08/17(金) 11:28:49
MFCのソフト1つで、次の場合はダイアログとSDIのどちらが適切ですか?
メニューバーはありで、ツールバーは使いません。
ドキュメントを1つ扱います。
ビューでは、8割がボタンなどで、2割が独自の描画をします。

ビューの一部だけを独自描画の時に、どちらを選ぶのが適切か教えて下さい。
22デフォルトの名無しさん:2007/08/17(金) 17:32:08
>>21
画面の一部のみ独自で描画したいというだけなら
DialogでもSDIでもどっちでも構わない。

メニューありでボタンが一杯という所を見る限り
自分ならSDIでViewの種類をCFormViewにする。
23デフォルトの名無しさん:2007/08/17(金) 22:57:42
漏れなら可能な限りダイアログだ。
24デフォルトの名無しさん:2007/08/17(金) 23:34:25
ダイアログの何が便利なのかさっぱりわからん
大体、CViewから派生させ、すべて自前で描画したほうが
客の理不尽な要求に応じれる。
25デフォルトの名無しさん:2007/08/18(土) 00:49:36
配置がリソースエディタで弄れる
26デフォルトの名無しさん:2007/08/18(土) 04:41:41
CFormViewでもいじれるやん
27デフォルトの名無しさん:2007/08/18(土) 10:29:11
>>24 の条件でCFormViewって反則じゃね?
28デフォルトの名無しさん:2007/08/18(土) 10:52:49
>>24
>ダイアログの何が便利なのかさっぱりわからん
ビューとドキュメントをわざわざ分離するまでもない場合、コード量が減る。
29デフォルトの名無しさん:2007/08/18(土) 22:57:02
>>28
その程度のプログラムを作成する必要があるのかしらん?
30デフォルトの名無しさん:2007/08/19(日) 01:28:23
必要がある、と答えられたらそれまでだな。
プログラムの規模とその必要性に関連は無いし。

MFCで小規模アプリ組むの禁止〜!
ってな決まりもないしね。
31デフォルトの名無しさん:2007/08/19(日) 02:36:15
っえ?
MFCは大規模アプリケーションには向きませんよ
32デフォルトの名無しさん:2007/08/19(日) 02:50:20
>>24
あれだろ?
MSの仕様から逸脱した仕様を希望する馬鹿な客だろ?
そういうの刎ねちゃって問題無い場合がほとんどだぜ
そいつの好感度上げてもなんもいいことねーし
やったからって次の仕事がくるかどうかも全然関係無い場合が多い

俺はタブフォーカスやショートカットの類は全部高額な金額ふっかけて刎ねてる
やりたきゃ自分のところでやれと
正直、やるだけ無駄、全く意味無し
33デフォルトの名無しさん:2007/08/19(日) 05:50:13
ソフト会社入社3年目の初心者です。
MFCは今後は.NETに取って代わられるというような話を聞きました。
実際どうなんでしょ?
34デフォルトの名無しさん:2007/08/19(日) 06:30:35
>>33
.NETってなーに?
35デフォルトの名無しさん:2007/08/19(日) 06:38:50
.NET Frameworkのことじゃね?
でも.NET FrameworkってC++で使えるの?
36デフォルトの名無しさん:2007/08/19(日) 11:43:23
>>33
まあ、単純で簡単な.NETに移っていくのはしょうがないんじゃね。
VSの機能も、明らかにC++よりC#に力入れてるし。
MFCがなくなることはないだろうけど、使う機会はゆっくり減っていくかと。
37デフォルトの名無しさん:2007/08/19(日) 12:25:21
組み込みプログラムとそのツールの作成の仕事が多いから
MFC+C++の形を保ってくれないと困る
ソース流用できねーじゃん
基本理念(オブジェクト指向)が変わらないのに
新しい言語なんて無駄に作るんじゃねぇといいたくなる
38デフォルトの名無しさん:2007/08/19(日) 13:50:40
C#やVB.NETは厳密にはコンポーネント指向
39デフォルトの名無しさん:2007/08/19(日) 14:10:15
>>35
C++/CLI

>>37
>組み込みプログラムとそのツール
GUIとファイル処理、通信部でも作っとけば、
ちょっとした組み合わせと改造で事足りるんじゃないか?
その程度だったら、2ちゃん回ってる時間を少し割けば、速効で作れるだろ
VC、VBだろうが、OOPがどうとか目くじら立てるほどのもんかね?
組み込みでアーキテクチャやOSやらが変わったり、
実績のないボード動かしたりするほどの手間でもないだろ
40デフォルトの名無しさん:2007/08/19(日) 20:01:19
.netでのアプリを出荷したことないから何とも言えないが
客先から見たら、.NETであることによるメリットってなにもないよね?
しかも、.netは遅いなんてことも浸透してるから・・・


41デフォルトの名無しさん:2007/08/20(月) 00:32:37
今までいろんなプログラム書いてきたが
MFCほどわからんもんはない
42デフォルトの名無しさん:2007/08/20(月) 00:47:01
>>40
なんだろうなあれ?
なんであんな糞動作するんだろか?

スクリプトで動作してんのかな?
Vistaといい動作の糞なアプリが多くなったな
43デフォルトの名無しさん:2007/08/20(月) 06:16:33
>>42
糞動作の意味がわからん
中間言語で動いてるんだから初回起動は遅いのがあたりまえだろ
もっさりしているが 異常動作してるわけじゃない

さらにVistaをアプリと分類する頭も逝かれてるな
44デフォルトの名無しさん:2007/08/20(月) 09:28:57
アンマネージドなのは好きになれないが、GUI周りの設計は嫌いじゃない。
45デフォルトの名無しさん:2007/08/20(月) 09:31:23
アンマネージドじゃなくてマネージドだった
46デフォルトの名無しさん:2007/08/20(月) 11:31:13
47デフォルトの名無しさん:2007/08/20(月) 11:38:51
>>40
ヒント

1年目マでも使える
開発期間
ASP.NET
48デフォルトの名無しさん:2007/08/20(月) 17:14:01
CWinApp* pApp = AfxGetApp();
if (pApp != NULL)
return pApp->DoMessageBox(lpszText, nType, nIDHelp);
else
return pApp->CWinApp::DoMessageBox(lpszText, nType, nIDHelp);
49デフォルトの名無しさん:2007/08/20(月) 22:29:14
>>43
やっぱ、もっさりしてるんじゃんw
これが糞動作でなくてなんなんだと聞きたい

俺等は.Netをサポートしてバージョンをわざわざアップしてやるのに
動作はもっさりすんのか?
お前等なんて一生もっさりしてればいいんだ
50デフォルトの名無しさん:2007/08/20(月) 22:36:34
CDC::SaveDCとCDC::RestoreDCって、
CDC::SelectObjectの戻り値を最後に戻す方法に比べて、
なにかデメリットってありますか?
こっちのほうがずっと簡潔に書けると思うのだけど。
51デフォルトの名無しさん:2007/08/20(月) 23:15:09
一切合財保存するだろうから、必要なものだけ戻すよりは重いと思う。
でもまあ今時のPCならデメリットと言えるほどのものではないだろう。
52デフォルトの名無しさん:2007/08/21(火) 20:45:43
一ヶ所でやる事しか考えないなら
どっちでもいい
53デフォルトの名無しさん:2007/08/22(水) 12:37:48
>>51
やっぱりSaveDCとRestoreDCのほうが便利ですよね。
なんでこの方法って広く浸透していないんだろう。
卑怯な方法みたいに書かれているところもあったし。

>>52
これはどういうことでしょうか?
SaveDCはスタック的に何回でもコールできるみたいですけど。
54デフォルトの名無しさん:2007/08/29(水) 20:40:42
CDocumentでファイル開く処理を行った後、
CViewのOnDrawで再描画行いたいんですけど

CView::GetDocumentのような
GetViewみたいなの無いですか?

OnDrawするような再描画コマンドでもいいです。
55デフォルトの名無しさん:2007/08/29(水) 21:18:28
>>54
Viewの更新は、基本的にCDocument::UpdateAllViewsで通知する
GetFirstViewPosition/GetNextViewを使って、
関連付けられたViewの取得もできなくはないけど。
56デフォルトの名無しさん:2007/08/29(水) 23:47:13

CMyView* pView = (CMyView*)AfxGetMainWnd()->GetActiveView();
pView->InvalidateRect(NULL, FALSE);
57デフォルトの名無しさん:2007/08/29(水) 23:49:32
ドッキングウィンドウ難しい・・・orz
誰か詳しいページ知ってる人いませんか?
コードGruruしかない?
58デフォルトの名無しさん:2007/08/30(木) 14:55:47
MFCでドッキングは茨の道すぎるので
C#かBCBやりなさい
59デフォルトの名無しさん:2007/08/30(木) 23:16:51
VC++2005にCWebBrowser2が無いのですが、
ダイアログに貼り付けたWeb Browserコントロールで
下記のようにNavigate2したいのですが、どうすればできるでしょうか?

CWebBrowser2* wb = (CWebBrowser2 *)GetDlgItem(IDC_EXPLORER1);
wb->Navigate2(url,NULL,NULL,NULL,NULL・・・);
60デフォルトの名無しさん:2007/08/30(木) 23:34:59
>>59ですが、webbrowser2.hとwebbrowser2.cppを自分のプロジェクトへ追加することで解決しそうです
61デフォルトの名無しさん:2007/08/31(金) 09:07:23
>58
MFCはドッキングツールバーがあるから
ドッキングウインドウは簡単だけど?
62デフォルトの名無しさん:2007/08/31(金) 14:57:46
>>61
なら教えてやれよ。
63デフォルトの名無しさん:2007/08/31(金) 17:12:58
64デフォルトの名無しさん:2007/08/31(金) 23:11:46
ドッキングも使えないとは・・・
65デフォルトの名無しさん:2007/09/01(土) 11:35:46
メモリマップドファイルについてですが

hMap = CreateFileMapping( hFile, 0, PAGE_READONLY, 0, 0, NULL); // MAP名なし
if( hMap <= 0 )
{
    return false;
}
pPointer = (char*)MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, 0); // 全サイズ

↑のようにとするとhFileの内容が数1G超とかの場合、無謀になるような気がしますが
MapViewOfFileEx等で数ページ分を部分的に割り当てていくしかないでしょうか?
1Gぐらいのファイルを試してみるとpPointerがNULLでした。
66デフォルトの名無しさん:2007/09/01(土) 11:40:58
ここMFCスレですよ
67デフォルトの名無しさん:2007/09/01(土) 12:14:26
CControlBarから派生する独自ドッキングバー作る時はかなり苦労したもんだ( ´∀`)
CDockBarとかCDockContextとかMSDNドキュメントにも載ってないしソース読むしかないもんな
でも.NETだと最初からリサイズ可能ドッキングバーがあるんだよなー・・・なぜMFCも拡張せん!ヽ(`Д´)ノ
68デフォルトの名無しさん:2007/09/01(土) 14:53:09
だってMFCだもん
69デフォルトの名無しさん:2007/09/01(土) 17:48:35
MFCって今後は先細り?
.NETマンセー時代は来るんですか?
70デフォルトの名無しさん:2007/09/01(土) 23:55:43
VS2008でVista向けMFCが出るみたい
71デフォルトの名無しさん:2007/09/02(日) 00:18:12
MFC嫌いなんで廃れてくんねーかな
72デフォルトの名無しさん:2007/09/02(日) 00:23:31
なぜ?

.NETに比べたら100倍はいいと思うが?
73デフォルトの名無しさん:2007/09/02(日) 00:28:05
>>71嫌いなんで氏んでくんねーかな
74デフォルトの名無しさん:2007/09/02(日) 11:58:33
例外でポインタを投げてくるのだけはどうにかしてほしい
75デフォルトの名無しさん:2007/09/02(日) 14:27:02
MFCに文句つける奴って単に使えないからだけだでょ?

現在、WINでGUIを作成するなら最強だと思う。
MFC無い時代はWINアプリを書くのはしんどかった。

最近C#なんてあるが、所詮インタプリタみたいなもんだからおもちゃw
76デフォルトの名無しさん:2007/09/02(日) 15:24:09
お前は小学生か
77デフォルトの名無しさん:2007/09/02(日) 15:43:12
.NET Frameworkに文句つける奴って単に使えないからだけだでょ?

現在、WINでGUIを作成するなら最強だと思う。
.NET無い時代はWINアプリを書くのはしんどかった。

昔MFCなんてものがあったが、所詮遺産みたいなもんだからガラクタw
78デフォルトの名無しさん:2007/09/03(月) 00:22:51
MFCなんて時代遅れっしょ
79デフォルトの名無しさん:2007/09/03(月) 00:48:28
次期VSでのMFCはかなりイイ

ダウンしてみ。

.NETなんざ使う気しなくなるぞ
80デフォルトの名無しさん:2007/09/03(月) 01:45:52
具体的に説明せよ
81デフォルトの名無しさん:2007/09/03(月) 03:31:47
MFCってなにがどうなってんのかさっぱりわかんね('A`)
82デフォルトの名無しさん:2007/09/03(月) 11:39:24
ダイアログ上に数十のラジオボタンを配置したいのですが、
後のメンテナンス性を考慮して、ダイアログエディタではなく
プログラム内の初期化処理にて生成したいのですが、
どういう関数を使えばいいのですか?

よろしくお願いします。
83デフォルトの名無しさん:2007/09/03(月) 12:42:25
>>82
CButton::Create
8482:2007/09/03(月) 13:39:19
>>83
ありがとうございます。
85デフォルトの名無しさん:2007/09/03(月) 20:50:30
MFCって関数ポインタテーブルを使いたい「だけ」のためにC++使ってるんだろ?
C with class でしかないじゃん、C++と言うより
86デフォルトの名無しさん:2007/09/03(月) 20:58:27
>>85
"C with class"であることの何が悪いのか知らんけど、クラス継承もあるし、オペレータオーバロードもある。
新しいMFCならテンプレートも使っているね。
87デフォルトの名無しさん:2007/09/03(月) 23:46:56
ダイアログ上にタブコントロールを配置してます。
ダイアログの表面色を塗りつぶしてるんですけど、
タブコントロールのタブが並んでいる部分の横の余った空間や、
タブコントロールの周囲の微小な背景がグレーのままです。
ここを塗るにはどうしたらいいんでしょうか。
塗るでもいいし、背景を透過にできればいいんですけど。
88デフォルトの名無しさん:2007/09/03(月) 23:53:19
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200704/07040003.txt
場所は↑この方が説明してるのと同じです。
89デフォルトの名無しさん:2007/09/04(火) 21:26:42
CHtmlViewでURLのドロップを受け取れるようにするにはどうすればいいの?
SetRegisterAsDropTarget(TRUE)をしてもダメだった
90デフォルトの名無しさん:2007/09/04(火) 23:03:19
中味はIEだし、特に何もしなくてもできるだろ
91デフォルトの名無しさん:2007/09/04(火) 23:12:42
ちょっと興味あったんで試したけどデフォルトじゃ無理みたい。
WM_DROPFILESのイベントハンドラ追加のみで出来ました。
ショートカットだけじゃなく、htmlファイルやtxtファイルも表示可。
92デフォルトの名無しさん:2007/09/04(火) 23:36:09
ウイザードでCHtmlViewにして、あとは何もいじらない状態でできたよ
93デフォルトの名無しさん:2007/09/05(水) 00:33:26
>>90,92
通常のCHtmlViewではドロップできませんでした
MFCのバージョンが関係あるかもしれないでしょうか?
自分はVisual Studio 2005 Standard Edition SP1を使ってます(WinXP&IE6)

>>91
OnCreateでDragAcceptFiles()してWM_DROPFILESを追加したら、
ローカルのファイルはドロップできるのですが
IEからのURLのドラッグ&ドロップはできませんでした・・・
IEからのURLのドロップをしたいのです
94デフォルトの名無しさん:2007/09/05(水) 09:49:06
CDC::DrawDragRect()の説明には、座標は「論理座標」と書かれてるのに、
指定した位置にちゃんと描かれず、ネットで使用例を漁ってみたところ、

dc.LPtoDP(&rect);
dc.DrawDragRect(rect, Last_draw_size, NULL, CSize(0, 0));

という記述がありました。
これに倣ってLPtoDP()してみたらちゃんと描かれたんですけど、
LPtoDP()するということはデバイス座標ですよね?
MSDNの「論理座標」というのはどういう意図なんでしょうか?

CDC::Rectangle()のほうにも論理座標と書かれていて、
こっちはLPtoDP()は必要無いんですけど。
95デフォルトの名無しさん:2007/09/05(水) 14:55:19
>>94
MSDNの説明が間違っているな、これ。英語版でも駄目だな。
VS2005のCDC::DrawDragRectのコードだと、
矩形描画の範囲を指定するのにSelectClipRgnを使っているが、
この関数はデバイス単位での指定を仮定しているにも関わらず、
単位変換無しでそのまま渡している。
96デフォルトの名無しさん:2007/09/05(水) 23:49:14
mfc(VC++ 2005)で開発をしているのですが、
ステータスバーをスレッド中から参照しようとすると、
Assertion Failedで怒られてしまいます。
ダイアログに変数で CStatusBar m_statubar を追加して
OnInitDialog でCreate、ペインの初期化を行い
ダイアログのコンストラクタで外部変数で定義した CStatusBar *m_sb に
m_sb = &m_statusBar でアドレスを渡してスレッドで参照しているのですが
どこがいけないのでしょうか?
97デフォルトの名無しさん:2007/09/05(水) 23:55:33
>>95
解析情報ありがとうございます。
やっぱりCDC::DrawDragRect()ってデバイス単位で渡すのですよね。
昔からある関数なのにドキュメント修正すらされてないのか…。
98デフォルトの名無しさん:2007/09/05(水) 23:59:24
たまたま指摘が無かったんじゃね?
ちゃんとMSに言えば多分直してくれるよ。
99デフォルトの名無しさん:2007/09/06(木) 00:11:21
>>96
メインスレッド以外からコントロールを操作してはいけないからと思われ。
100デフォルトの名無しさん:2007/09/06(木) 00:13:46
101100:2007/09/06(木) 00:14:51
アンカー間違えた、ごめん。
99じゃなくて96宛です。
10296:2007/09/06(木) 00:47:54
>>99 >>100
スレッドから参照できないんですね。
ということで、タイマーで監視することにしました。
ありがとうございました。
103デフォルトの名無しさん:2007/09/06(木) 01:28:16
>>102
作り方によってはタイマー監視でもいいけど、同期オブジェクト使った方がいいかも
スレッドプログラミングをタイマーで監視するプログラムは安易でいいけど嵌ることもあるから
104デフォルトの名無しさん:2007/09/06(木) 01:32:44
あ、スマン96のようなステータスバー監視だったら
タイマーで良いや
105デフォルトの名無しさん:2007/09/06(木) 07:34:25
>スレッドプログラミングをタイマーで監視するプログラム
何を監視するんだか。
106デフォルトの名無しさん:2007/09/06(木) 08:20:53
>>94
さぁ、ドキュメントのフィードバックをしよう
107デフォルトの名無しさん:2007/09/07(金) 23:14:58
VC++ 2005, OSはXPProを用いているものです。
DLLを作成し、そこからAfxBeginThreadでスレッドを複数立ち上げているのですが、
メモリリークが起こってしまいます。 同様のコードをDLL経由でなく、EXEから直接動かすとリークしません。
恐らく、何らかの初期化処理が足りてないためと思っているのですが、心当たりのある方がいらっしゃいましたら、教えてください。

//--- 以下ソース
#pragma once
#include "TestThread.h"

class CThreadManager
{
public:
CThreadManager() {
m_pThreads = NULL;
}
virtual ~CThreadManager() {
delete [] m_pThreads;
}
void Run() {
if (m_pThreads == NULL) {m_pThreads = new CTestThread[50];}
for (int i = 0; i < 50; i ++) {
if (m_pThreads[i].IsEnable()) {
m_pThreads[i].SetEnable(FALSE);
m_pThreads[i].Run();
return;
}
}
}
private:
CTestThread* m_pThreads;
};
108デフォルトの名無しさん:2007/09/07(金) 23:15:43
//続き
#pragma once

class CTestThread
{
public:
CTestThread()
{
m_pThread = NULL;
m_bEnable = TRUE;
}
virtual ~CTestThread(void)
{
EndThread();
}
void Run()
{
EndThread();
m_pThread = ::AfxBeginThread(TestProc, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if (m_pThread != NULL)
{
m_pThread->m_bAutoDelete = FALSE;
m_pThread->ResumeThread();
}
}
109デフォルトの名無しさん:2007/09/07(金) 23:16:15
//続き
BOOL IsEnable() {return m_bEnable;}
void SetEnable(BOOL bEnable) {m_bEnable = bEnable;}
private:
void EndThread()
{
if (m_pThread != NULL)
{
m_bEnable = -1;
::WaitForSingleObject(m_pThread->m_hThread, INFINITE);
delete m_pThread;
m_pThread = NULL;
}
}
static UINT TestProc(LPVOID pParam)
{
for (int i = 0; (i < 50) && (((CTestThread*)pParam)->m_bEnable == FALSE); i ++) ::Sleep(5);
((CTestThread*)pParam)->m_bEnable = TRUE;
return 0;
}
CWinThread* m_pThread;
BOOL m_bEnable;
};
110デフォルトの名無しさん:2007/09/07(金) 23:16:58
以上です。
108,109は一つのファイルを分割しています。
それと、掲示板に登校するサイズを減らすためにヘッダファイルのみで書いてみました……


よろしくお願いします。
111デフォルトの名無しさん:2007/09/07(金) 23:44:11
>>107に追加です。
CThreadManager::Run(); 関数をタイマーで何回も呼ぶと、どんどんメモリが消費されていくという現象です。
確認は[管理ツール]→[パフォーマンス]から行い、一日ほど回し続けました。
112デフォルトの名無しさん:2007/09/09(日) 00:28:50

初心者です、質問させてください。

OnFileNewなどMFCが用意してくれた関数の中身(=ソースコード)って

見る事ができないのでしょうか?

もしできるのなら、その方法を教えてください。

よろしくお願いします。
113デフォルトの名無しさん:2007/09/09(日) 00:55:01
初心者を自称する人がMFCのソースコードが読めるとでも?
114デフォルトの名無しさん:2007/09/09(日) 01:54:18
>>107
もっと簡素化したソースで検証したほうがいいんでねえの?
あと、”何らかの初期処理”ってのが、DLLの初期処理ではないとか、
メモリリークが発生しているかどうかをどのように見極めているとか、
メモリリークは、1スレッドあたりどの程度発生しているとか、記載すべきことがあるんでねえの?

>>112
どのクラスのOnFileNewだかしらねーけど、MFCのソースはインストールされてんの?
されてんなら検索すればいいだろう。 されてねーならインストールすればいいだろう。
115デフォルトの名無しさん:2007/09/09(日) 01:56:48
検証方法は>>111に書いてるつもりなんじゃね?
116112:2007/09/09(日) 02:15:39
>>114

「OnFileNew」をキーワードに、下記フォルダを検索したら探せました。

ありがとうございました!!


C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc
117デフォルトの名無しさん:2007/09/09(日) 02:24:10
WIN32開発、java、C#とやってきて
最近MFCを始めました。
MFCってすごく難しく感じます。
実際どうなんですか?
118デフォルトの名無しさん:2007/09/09(日) 02:25:59
>>117
あなたにとって難しい。それだけのことです。
119デフォルトの名無しさん:2007/09/09(日) 03:16:30
>>117
平然と並列でないものを並べられると、頭がグラグラする。

漢文、英語、中国語とやってきて、
最近2ch語を始めました。
2ch語って凄く難しく感じます。

とかそんな感じか?
120デフォルトの名無しさん:2007/09/09(日) 03:24:08
とりあえず、107のソース使って、dllとexeから実行してみたけど
リーク検出できなかったな
1日実行してみて、どれくらいリークしてるの?
121デフォルトの名無しさん:2007/09/09(日) 08:17:53
>>117
win32の経験があるのなら、mfcはそんなに難しくないと思うが。
122デフォルトの名無しさん:2007/09/09(日) 13:15:43
フレームワーク「郷に入っては郷に従え」
の考え方ができればいける。
123デフォルトの名無しさん:2007/09/09(日) 13:48:24
>>114
もっと簡素化したソースについては今から作る事にします。
>あと、”何らかの初期処理”ってのが、DLLの初期処理ではないとか、
何らかの初期化処理というのは、単にスレッドを起こす前に、おまじない的なものが必要なのかと思って書いただけです。
また、DLLMain関数はMFC側で作っているものを使っているので、こちらの初期化処理については不明です。

>メモリリークが発生しているかどうかをどのように見極めているとか、
管理ツールからパフォーマンスモニタを開きまして、そこでプロセスを選択して、15秒おきにワーキングセットを監視しています。
直接のメモリリークではないと思いますが、exeとの比較により、ワーキングセットの増え方があまりに異常なので問題かと……

>メモリリークは、1スレッドあたりどの程度発生しているとか
1スレッドあたりのリークは調べていませんが、15秒おきのワーキングセット増加値は平均で23kBほどです。
これは、CThreadManager::Run();をタイマーで、90msごとに動かした結果です。

一日動かしたときは、これよりも間隔をあけて1000msでやりました。割合は減りますが、同じようにリークします。
なお、1000msで一日動かしたときの、一日のリーク量は1MBほどです。


>>120
1000ms間隔で1MB程度です。

ちなみに、事情がありまして、DLLエクスポートの部分は少々特殊かなぁ……と。
そこのソースも書いてみます。
124デフォルトの名無しさん:2007/09/09(日) 13:49:25
// エクスポート部分のソース。
__declspec(dllexport) void CreateThreadManager(DWORD** ppObject)
{
*ppObject = (DWORD*)(new CThreadManager());
}
__declspec(dllexport) void RunThread(DWORD* pObject)
{
((CThreadManager*)pObject)->Run();
}
__declspec(dllexport) void DeleteThreadManager(DWORD* pObject)
{
delete (CThreadManager*)pObject;
}

//アプリ側の使用部分
#include "stdafx.h"
#include "ThreadTest.h"
#include "ThreadTestDlg.h"
#include "ThreadDll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CThreadTestDlg::CThreadTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CThreadTestDlg::IDD, pParent)
{
m_pManager = NULL;
m_nTimerEvent = 0;
}
// 続く
125デフォルトの名無しさん:2007/09/09(日) 13:50:08
//続き
BEGIN_MESSAGE_MAP(CThreadTestDlg, CDialog)
ON_WM_TIMER()
ON_WM_DESTROY()
END_MESSAGE_MAP()

BOOL CThreadTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
::CreateThreadManager(&m_pManager);
m_nTimerEvent = SetTimer(1, 89, NULL);
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}
void CThreadTestDlg::OnTimer(UINT_PTR nIDEvent)
{
if (m_pManager)
{
RunThread(m_pManager);
}
CDialog::OnTimer(nIDEvent);
}
void CThreadTestDlg::OnDestroy()
{
CDialog::OnDestroy();
if (m_nTimerEvent != 0)
{
KillTimer(m_nTimerEvent);
}
DeleteThreadManager(m_pManager);
}
126デフォルトの名無しさん:2007/09/09(日) 13:51:26
てな具合で、動かしています。正直な話タイマー間隔をこのぐらい短く設定すると一日は多分動きません。
もうちょっと空けてやらないと、マシンスペックの弱いPCだと落ちてしまうのではないかと……
127デフォルトの名無しさん:2007/09/09(日) 13:59:38
>>122
そうですか?
BCBやVC#と比べると何をどうしていいのかまったく分からん
128デフォルトの名無しさん:2007/09/09(日) 14:11:26
>>127
>何をどうしていいのかまったく分からん

たとえば、何をどうしたいのかな?
よほど難解なことをしようとしてるのか。それともごく標準的なGUIツールも作れないのか。
129デフォルトの名無しさん:2007/09/09(日) 14:18:07
>>127
ぶっちゃけ、すぐ上のサンプルコードは動かせる?
130デフォルトの名無しさん:2007/09/10(月) 00:10:07
>>126
とりあえず、そのもたないと思われる状態で一日動かしてみるべき
131デフォルトの名無しさん:2007/09/12(水) 10:16:49
CObjectから派生させていないデータクラスでも
Serializeでないファイル読み書きに
CArchiveを使ってしまってよいものでしょうか?

virtual void LoadData(CArchive& ar);
virtual void SaveData(CArchive& ar) const;
こんな感じのメンバ関数を用意しようかと思っているんですけど。

それとも、CFile*を引数にしてしまうべきですか?
132デフォルトの名無しさん:2007/09/12(水) 18:42:47
>>131
シリアル化にIMPLEMENT_SERIALを使わないなら、
CObject派生の意味は殆ど無いし、良いんじゃないかな。
結局は単純なバイト列の読み書きなのだし。
133デフォルトの名無しさん:2007/09/13(木) 09:47:20
>>132
ありがとうございます。
自作データクラス群は大元の親クラスが純粋仮想クラスで、
また、自分自身がCObjectから派生することに慣れていないため、
この形のままCArchiveだけ使えないかなと思いました。

このデータクラス群の一つが内部でCArrayのメンバを持っているのですが、
これを保存するためにCArray::Serializeを呼ぼうとすると、
SaveDataはconstにはできないですね…。

まぁconstを取り外してしまえば、とりあえず動きそうですが、
SaveDataの中でMFCクラスメンバのSerializeをコールというのが
かなりまずい構造なのかなぁ。
134デフォルトの名無しさん:2007/09/13(木) 10:05:42
>>133
MFC - 概念 - シリアル化 - シリアル化 : オブジェクトのシリアル化
- アーカイブを通じた CObject の格納と読み込み
135デフォルトの名無しさん:2007/09/13(木) 22:03:21
質問です
CDialogの派生クラスを作成して、そのダイアログに
CButtonやCStaticなどのコントロールを貼り付けています
そのコントロールの上に色々描画したいんですが
やり方が解りません。どうすればいいでしょうか?

OnPaintを作ってその中で
CPaintDC dc(this);
dc.MoveTo(*,*);
dc.LintTo(**,**);
としてみましたが、コントロールの上でなく背後に描画されてしまいます
136デフォルトの名無しさん:2007/09/13(木) 22:57:38
>>135
ダイアログを派生させるまで分かって、
コントロールを派生させることに思いつかなかったってことでいいの?
137デフォルトの名無しさん:2007/09/13(木) 23:53:45
>>136
CStaticを派生させてそのOnPaintを処理したら
キャプションが表示されなくなりました。

やりたいことはCStaticのコントロールがあれば、そのコントロールに
縁取りして線を描いたり、コントロールの上にビットマップを表示したり
したいんです。その時CStaticの文字を表示する機能はそのまま活かしたい。

イメージとしてはダイアログを表示してそれをビットマップで保存し、
その上に落書きする、みたいな。
138デフォルトの名無しさん:2007/09/14(金) 12:06:25
DLLの関数をコールした時に、よく解らない現象が起きます。

char Buff[1000];
int nRet = ((PT_FUNC)*m_fpFunc)( Buff, sizeof(Buff) );

1行目でBuff領域を確保した後、
2行目のDLLをコールするとBuffのアドレス値が変化してしまいます。
しかもthis変数の値も変化してしまい、エリアの破壊が起きている感じです。
DLL側(自作)では無処理のreturn としています。

2行目のBuff宣言を static char Buff[1000] とすると正常に動作します。
DLL関数には 静的なバッファしか渡せないという事なんでしょうか?
教えて下さい
139デフォルトの名無しさん:2007/09/14(金) 12:26:52
>>138
m_fpFuncの中身をさらせ
140138:2007/09/14(金) 12:38:29
>>139
FARPROC  m_fpFunc;
です。ここが違うのでしょうか?
141デフォルトの名無しさん:2007/09/14(金) 12:53:40
>>140

FARPROCやめて実体と同じ型で宣言してみ
引数と戻値が呼び出しと実体で違っててスタックを壊してるだけだと思うぞ
142138:2007/09/14(金) 13:30:42
>>141
指摘の通りでした。
ありがとうございました。
143デフォルトの名無しさん:2007/09/15(土) 17:31:24
>>137
> やりたいことはCStaticのコントロールがあれば、そのコントロールに
> 縁取りして線を描いたり、コントロールの上にビットマップを表示したり
> したいんです。その時CStaticの文字を表示する機能はそのまま活かしたい。

CStaticのOnEranseBkGroundって作れるっけ? 作れるんなら、そこで処理してみたら?
作れないなら、無理っぽい。
144143:2007/09/15(土) 17:34:21
×OnEranseBkGround
○OnEraseBkgnd
145デフォルトの名無しさん:2007/09/15(土) 19:40:30
>>143
結局CStaticから派生してOnPaintの中で
DrawTextとかFrameRectとかを使用するようにしました

今OnEraseBkgndでFrameRectを使ってみましたが、
これでも出来そうな気がします
しかし、テキストの描画時にFrameRectで描いた枠が消されて
しまうようで他にも幾つかいじらなければいけないっぽいですね

一応解決です、皆さんアリガト
146デフォルトの名無しさん:2007/09/16(日) 14:26:04

CHtmlView::Navigate2のエラー検知を行いたいのですが、
どうすれば良いのでしょうか?
どなたか教えてください。



147デフォルトの名無しさん:2007/09/16(日) 14:49:26
自作DLLでダイアログを表示しようとしています。
m_pcDebugDlg->Create(IDD_TEST);
を実行すると、
ERROR: Cannot find dialog template with IDD 0x36B1.
というエラーが発生します。

何かの設定が足りないのでしょうか?
よろしくお願いします。
148デフォルトの名無しさん:2007/09/16(日) 15:25:03
そこに書いてある通りじゃないの?
149147:2007/09/16(日) 17:25:10
>>148
IDD_TEST は resource.h に定義されていました。

プロジェクト/プロパティ/MFCの使用を「共有DLLでMFCを使用する」から
「スタティックライブラリでMFCを使用」に変更したら、ダイアログが表示される様になりました。
ただし、客先からは「共有MFC」でと指示があります。
何が悪いのでしょうか?
150デフォルトの名無しさん:2007/09/16(日) 17:33:08
リソースをビルドしなおしても同じ?
151デフォルトの名無しさん:2007/09/16(日) 17:44:40
>IDD_TEST は resource.h に定義されていました。

.rc ではどうなってますか
まあ>>150でおkだと思うけど
152147:2007/09/16(日) 18:02:30
..rc には
IDD_TEST DIALOGEX 0, 0, 250, 170
という記述がありました。

リソースをビルドという方法がよくわからなかったのですが、
 ソリューションのリビルド 
. rcファイルのコンパイル
の両方とも、現象は変わりませんでした。
リソースのビルドって、他のやり方でしょうか?
153デフォルトの名無しさん:2007/09/16(日) 18:10:28
つ AFX_MANAGE_STATE
154147:2007/09/16(日) 18:43:56
>>153
DLL関数の先頭に
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
を追加したらうまくいきました。

どうもありがとうございました。
155デフォルトの名無しさん:2007/09/19(水) 17:46:56
ダイアログの上でエンターキーを押すと、
プログラムが正常終了してしまいます。
プログラムを終了させたくないのですが、どうすればいいのか教えて下さい。
よろしくお願いします
156デフォルトの名無しさん:2007/09/19(水) 18:47:04
>>155
つ[OnOK()]
157デフォルトの名無しさん:2007/09/19(水) 19:23:59
いや俺は PreTranslateMessageで処理するほうが好きだ
158155:2007/09/19(水) 20:06:07
>>156,157
ありがとうございました
OnOK()で対応しました
159デフォルトの名無しさん:2007/09/19(水) 20:57:01
OnOK()で対応するというのは間違っていると思う。
OnOK()の意味をちゃんと考えるべき。
そして「Enterキーを押したときにダイアログを終了させない」という仕様の意味をちゃんと考えるべき。
するとどうやって実現するのが正しい形かわかるでしょ。
面倒でも、何事も正しい形ってものを常に意識して作っておかないと後悔するよ。大袈裟だがw
160デフォルトの名無しさん:2007/09/19(水) 21:19:33
MFCが勝手に定義してる機能を殺すだけだろ
元のダイアログにはそんな機能ない
161デフォルトの名無しさん:2007/09/19(水) 22:50:34
リターンキーが押される→OnOK()が呼び出される→OnOK()の処理をキャンセルする
よりは
リターンキーが押される→OnOK()を呼ばないようにする
の方がスマート。
よってPreTranslateMessageを推奨するよ。
他の用途にも使えるし覚えといて損はない。
162デフォルトの名無しさん:2007/09/19(水) 23:14:48
そこまで気にするんなら
メッセージ発生するごとにPreTranslateMessage呼ばれるのも気にした方がいいよ
OnOKよりはるかにオーバヘッドになってるはず
163デフォルトの名無しさん:2007/09/20(木) 12:46:43
Okボタンが在る場合、
Okボタンがデフォルトボタン形状なのはUI的にまずい。
164デフォルトの名無しさん:2007/09/20(木) 17:56:11
フォトショップ等、メインウィンドウの他に、
レイヤー情報などを表示するウィンドウがあるんですが、
それをCDialogで作ろうと思っているんです

m_dlg.Create( CTestDialog::IDD , this );
m_dlg.ShowWindow( SW_SHOW );

で、一応表示されるんですが、
ダイアログにフォーカスが写ると、
メインウィンドウのタイトルバーが灰色になるのです。

正しい、子ウィンドウの作り方ってありますか?
165デフォルトの名無しさん:2007/09/20(木) 19:38:14
正しいかどうか知らんけどツールウィンドウ
166デフォルトの名無しさん:2007/09/21(金) 12:26:58
Enterキーは、OKボタンを押すのではなく、デフォルトボタンを押す操作です。
PreTranslateMessageでEnterキーを弾いてしまうと、
OKボタン以外のボタン上でEnterキーを押したときにも無視されてしまいます
(そのときにはそのボタンが押されるべき)。

もちろん、PreTranslateMessageでフォーカス位置を調べてもいいけど、
そこまで面倒なことをするのなら、
OKボタンをDisable・非表示にしたほうが早いです。

OKボタン自体は残しておきたいのであれば、
なにもしない非表示ボタンをデフォルトにすればよいです。

PreTranslateMessageの方法だと、デフォルトボタン枠が出ているのに
Enterキーが効かないというGUI上の矛盾もあります。
167392:2007/09/21(金) 21:55:41
> OKボタン自体は残しておきたいのであれば、
> なにもしない非表示ボタンをデフォルトにすればよいです。
デフォルトボタンは何ですか、と問われたときに、ありませんと答える方が良いかと。
168デフォルトの名無しさん:2007/09/22(土) 18:03:04
今、以下の方法で自作ボタンを作ろうとしています。
・CStaticを派生させる。SS_BITMAPとSS_NOTIFYを設定する。
・OnMouseMoveでカーソルが乗ったらSetCaptureなどして降りるまでハイライト用のビットマップをSetBitmapする。
・カーソルが降りたらReleaseCaptuerして通常のボタン用ビットマップをSetBitmapする。
・OnLButtonUpで親ウインド(CDialog)にWM_COMMAND,BN_CLICKEDをPostMessageする。下記ソース参照。あと押された時のビットマップをセットする。
CMyButton::OnLButtonUp
{
 WPARAM w = MAKEWPARAM(id,BN_CLICKED);
 ::PostMessage(hParent,WM_COMMAND,w,0);
 ごにょごにょ
}

すると確かにLボタンを押下すると親のダイアログに通知されます。
しかしながら親ダイアログではON_BN_CLICKEDマクロで登録したハンドラが2回呼ばれます。
一回目は不明。2回目は私の作ったCMyButton::OnLButtonUpから。

誰が一回目のBN_CLICKEDを送るの?CStaticの規定クラス??
169392:2007/09/22(土) 22:02:59
winuser.h
#define STN_CLICKED 0
#define BN_CLICKED 0
170デフォルトの名無しさん:2007/09/22(土) 22:19:04
>>169
ありがとうございます。
171デフォルトの名無しさん:2007/09/22(土) 23:31:42
本当にMFCが全くわかりません。
とにかく、GUIを作るのが難しすぎに感じます。

VC#なんて超簡単にGUI作れるのに・・・

まだまだ、VC+++MFCはデファクトスタンダードなんですかね?
172デフォルトの名無しさん:2007/09/23(日) 00:33:02
>>171
MFCは欠陥製品だと思う

対抗するボーランドがコケちゃったんでMSの一人天下になっていますが
これに付き合わされる開発者はたまらない

C#を使いましょう
173デフォルトの名無しさん:2007/09/23(日) 00:42:51
慣れの問題ですよ
VC#が簡単に、作れるって言っても例えばテキストエディタを作る場合
商用を考えたら標準のTextBoxなんて使い物になりません。
一から書くことになります。

だったら、WIN32APIを手間なく呼べるVC++に利がある。
VC#だと使う、WIN32APIをいちいち宣言しなくてはいけない。
174デフォルトの名無しさん:2007/09/23(日) 01:58:19
MFC使わねばならん環境なら、頑張って使えるようになればいいだけだし、
使わなくて言い環境なら、C#でやればいいだろう。
何故このスレで愚痴るのか理解できない。
175デフォルトの名無しさん:2007/09/23(日) 23:52:49
>>174
MFCの習得に挫折した人がMFC叩きしてるだけ。
穏やかになだめてあげてください。
176デフォルトの名無しさん:2007/09/24(月) 00:10:51
確かに他のライブラリと比較すると挫折率はダントツに高いかもしれん
よく、Cはポインタで躓いたなんて人いるけど似たようなもん
177デフォルトの名無しさん:2007/09/24(月) 01:45:06
ていうかあまりの複雑さと面倒臭さに死にたくなるときあるな
なんでもかんでもメッセージって逆に面倒臭いだけだったんじゃないだろうか・・・
178デフォルトの名無しさん:2007/09/24(月) 02:17:59
けど、大抵の商用ソフトはMFCが使われている。
.NETなんて皆無では???
179デフォルトの名無しさん:2007/09/24(月) 02:47:39
>>178
だって糞おせぇし
180デフォルトの名無しさん:2007/09/24(月) 02:54:45
Vistaならネイティブとほとんど変わらんが?
181デフォルトの名無しさん:2007/09/24(月) 03:10:20
>>180
それって普通に作ってた奴の方が遅くなったんでしょ?w
182デフォルトの名無しさん:2007/09/24(月) 05:07:52
MFCは隠蔽化というより隠蔽工作だというようなことがかかれた本があった。
本来仕組みなど知らなくても簡単に使用できるのが隠蔽化だが
MFCには仕組みを知らなければバグの原因がまったく理解できない不可解な現象も多い。
それらを苦労して乗り越えて来た人間は威張り腐りって、
「MFCが糞なんじゃなくて理解できないやつが糞」と言いたいのだろう。気持ちはわかる。
だが世間一般ではそういう場合ライブラリが糞だという。
自分の腕前を自慢したいからって言葉を捻じ曲げてはいけない。

183デフォルトの名無しさん:2007/09/24(月) 05:31:44
あの当時に書かれたライブラリで今まで通用したものってほかに何かあるかな?
OLEを隠蔽するフレームワークとして十分納得いくし、フル機能のウインドウズ
ソフトウエアを書くのにほかにいいライブラリが無かったのも事実だと思う。
184デフォルトの名無しさん:2007/09/24(月) 06:03:59
>>それらを苦労して乗り越えて来た人間は威張り腐りって、
被害者意識が強い傾向が見られます。
何かトラウマになるような事でもあったのでしょうか(w
185デフォルトの名無しさん:2007/09/24(月) 06:41:22
MFCがなければWIN32のバグが分からない
永遠に更新を続けるべき
186デフォルトの名無しさん:2007/09/24(月) 07:39:58
>>182
あー、でも俺、そういうラッパー系のクラスで
下層の構造知らずにうまく包んであるもんってみたことないわ
無理なんじゃねぇの?って思ってる

可変長ですよといいつつ
なんも意識せずに1文字ずつ追加すると毎回全バッファを再確保する
最近の次世代(?)言語の文字列クラスのようにw
187デフォルトの名無しさん:2007/09/24(月) 09:28:21
文字列定数 -> System.String
CString -> System.Text.StringBuilder
と考えれば、それはそんなもんかって気もする。
Stringの連結はおまけ機能ってことで。
188デフォルトの名無しさん:2007/09/24(月) 10:54:07
MFCのいいところはVisualStudioで使う場合にドキュメントモデルを提供してくれることとダイアログエディタがあることか。
ちょっと凝ったことをしようと思うと折角クラスで隠蔽化しているように見えても実際にはAPIと同じ名前のメソッドだからAPIと手間は変わらないし、
全てを網羅しているわけではないから結局APIを直截呼ばないといけないケースもある。
あれはだからAPIラッパクラス集と思えばいいのであって、それ以上のフレームワークと思ってはいけないのだろう
189デフォルトの名無しさん:2007/09/24(月) 15:22:11
>>187
>Stringの連結はおまけ機能ってことで。
そんなことになってるぐらいならラップなんてしないほうがいいじゃないって思う
190デフォルトの名無しさん:2007/09/26(水) 11:01:12
CDC型のメンバからその描画領域のサイズを取る方法はありますでしょうか。

CBitmap* pBitmap = pDC->GetCurrentBitmap();
BITMAP bmp;
pBitmap->GetBitmap(&bmp);

とやってbmp.bmWidthやbmp.bmHeightを参照しようと思ったのですが、
ビューのOnDrawなどで渡される画面DCに対しては
GetBitmapがエラーになるようなのです。
メモリDCに対しては成功します。

もちろん、OnDraw時はGetClientRectを使えばサイズを取れるのですが、
関係無い場所でpDCだけを見て調べられないかなと思っています。
191デフォルトの名無しさん:2007/09/26(水) 11:43:46
つ ::WindowFromDC
192デフォルトの名無しさん:2007/09/26(水) 11:53:25
>>191
ありがとうございます。
::WindowFromDCというのは、CDC::GetWindowと対応しているようなので、

CRect rect;
BITMAP bmp;
if (pDC->GetCurrentBitmap()->GetBitmap(&bmp)) {
  /* メモリDC */
  rect = CRect(0, 0, bmp.bmWidth, bmp.bmHeight);
}
else {
  /* 画面DC */
  pDC->GetWindow()->GetClientRect(rect);
}

とやってみたところ、どちらの場合でもサイズを取ることができました。
判定方法はこれで大丈夫ですよね?
193デフォルトの名無しさん:2007/09/29(土) 13:30:06
.NETのMenuStrip簡単にできていいなぁ
MFCでもサポートしてくれ
194デフォルトの名無しさん:2007/09/29(土) 21:33:08
簡単に作れる代わりに使い物にならんほど遅いプログラムとなってしまった
.NET非常に残念だったな
195デフォルトの名無しさん:2007/09/30(日) 01:39:05
MFC not dead - "massive update" planned

まさか
.NETは無しね!MFC大幅機能強化するから!
なんてことになるん(r
196デフォルトの名無しさん:2007/09/30(日) 06:51:40
MFC と NET って、どの程度の処理速度がちがうんですか?
まじレス希望
197デフォルトの名無しさん:2007/09/30(日) 08:27:09
>>196
MFC全盛期のPCでMFCを動かすと、今のハイエンドなPCで.netを動かすのとは較べ物にならないほどもっさりしています。
198デフォルトの名無しさん:2007/09/30(日) 11:28:36
MFCって.NETのコントロールと比べると鼻くそみたいにショボイのに2008にもまだ残ってる理由ってなんですか?
必要かな?
199デフォルトの名無しさん:2007/09/30(日) 12:54:06
鼻くそみたいにショボイと思ってるのに
このスレへやってくる理由ってなんですか?
必要かな?
200デフォルトの名無しさん:2007/09/30(日) 13:07:07
.NETのコントロールなんて飾りです。偉い人には(ry

冗談抜きで。
201デフォルトの名無しさん:2007/09/30(日) 16:56:35
>>198
2008ではMFCはなくなってたお
202デフォルトの名無しさん:2007/09/30(日) 18:25:47
>>201 ソースキボンヌ

2008でも含まれると考えられるソースはこちら
ttp://msdn.microsoft.com/msdnmag/issues/07/06/Cpp/default.aspx?loc=jp
203デフォルトの名無しさん:2007/09/30(日) 18:29:11
EEダウンロードできんじゃん
204デフォルトの名無しさん:2007/10/01(月) 11:36:20
VS2005とMFCで拡張DLLを作成しているのですが、
この拡張DLLを呼び出した側のインスタンスハンドルって
どうやって参照すればよいのでしょうか。

AfxRegisterClassで必要なのですが、
AfxGetInstanceHandleだと、大元のEXEのハンドルが返ってきてしまいます。
EXEから呼び出された別の拡張DLLがこの拡張DLLを使う可能性もあるため、
大元のEXEではなく、呼び出し元を参照できるようにしたいのです。
205デフォルトの名無しさん:2007/10/01(月) 23:44:38
Code Projectにたくさんのコントロールがあげられているが
コントロールってダイアログベースにするかViewをFormViewに選択するしか
使えないんでしょうか?

206デフォルトの名無しさん:2007/10/02(火) 19:19:08
VC6です。

プログレスバーについての質問。
時間がどのくらい掛かるか不明な処理でプログレスを表示したい。
Webなんかで有るような、2−3このコマが左から右へくるくる回ってるの
が良いんだけど、CProgressCtrlじゃできないっぽい?
なんか良い案あったらおしえて。

時間がどのくらい掛かるか不明なのは、開始ボタン押すとハードと通信して
ハードが処理終了するのを待つから。
ハードは詳細な進捗なんて返してくれない。
ハードの状態や処理対象によっても時間が大きく変わるので平均でこのくらい
ってどんぶりで表示するのも厳しい状況。

したがって、ループするようなヤツが欲しいといった理由。
207デフォルトの名無しさん:2007/10/02(火) 19:21:10
砂時計
208206:2007/10/02(火) 19:29:58
>>207

レスサンクス。

砂時計は却下されてしまいました。
と言うか、すでに砂時計は出してるけど、曰く
「ホントに、動いてるのか解らない」だそーで。
プラスでプログレスが欲しいんだと。

えらい人の考えは良くわかりません。
209デフォルトの名無しさん:2007/10/02(火) 21:23:57
>>206
まあ、砂時計出したままフリーズするアプリもあるから、動いているか
どうかを確認したいというのもわからなくはない。
どうしてもプログレスコントロールにこだわるなら、何回も繰り返して
描画してやればいいんじゃない?
210デフォルトの名無しさん:2007/10/03(水) 01:24:29
>>205
ん? Code Projectにあがっているコントロール”だけ”使えてないの?
そうなら、そのコントロールを挙げてくれ。
そうでなく普通のEditやComboも同じように使えてないなら、動的生成すればいい。
”Edit 動的生成”とかでググレば、サンプルとかあるんじゃねーかな。
211デフォルトの名無しさん:2007/10/03(水) 02:23:43
>>206
IEのようなウィンドウ右上のアニメーションで済むならCAnimateCtrlでが楽。

プログレスバーの現在位置が左から右へ動き続けるような奴だと
中断ボタンも必要だろうし、別スレッドでプログレスバー制御と中断の
入力待ちをすることになるんじゃないかな。

砂時計を却下する上司って良いなーと思った。
212デフォルトの名無しさん:2007/10/03(水) 08:38:51
動いてるのか解らないという理由で砂時計がダメなら
IEのようなアニメーションもダメだろう
213デフォルトの名無しさん:2007/10/03(水) 18:40:21
214デフォルトの名無しさん:2007/10/03(水) 20:03:48
エディットコントロールの質問です。
コントロール内部に画像を表示させて、文字編集を行うものを作ろうと思ってるのですが
なかなかうまくいきません。
OnCtlColorでCreatePatternBrushで作ったものを返すようにして
何とか文字未入力領域に画像を表示させたのですが、
文字入力エリア部分に画像を表示できなくて困っています。

何かいい解決方法はないんでしょうか?
215デフォルトの名無しさん:2007/10/03(水) 20:19:12
>>214
SetBkModeで透過にするのを忘れている予感
マルチラインは、この方法だと不都合があるみたいなので注意
216デフォルトの名無しさん:2007/10/03(水) 20:30:44
>>215
あ、説明たりなくて申し訳ない。
複数行エディットコントロールについての話でした。
217デフォルトの名無しさん:2007/10/04(木) 01:05:32
質問です。

CViewの派生クラス を A 、
CWndの派生クラス を B とします。

Aのメンバ変数にBを持ち、A の OnCreate にて B を Create し、A全体に貼り付けました。
正常に生成され、貼り付けもうまくいっているのですが、B にてマウスホイールが
取得出来ないことに気づきました。(クリック等は正常動作します)

どうもフォーカスがいっていないようなので、A の OnSetFocus にて、B に対して
SetFocus をすると、期待通りの動作をしてくれ、B にてホイールを取得出来る
ようになりました。

A全体にBが貼り付けてあり、これをクリックしたら当然Bにフォーカスが行くものだと
思っていたのですが、なぜ行かないのでしょうか?

XP Pro SP2
VC++8 sp1
218デフォルトの名無しさん:2007/10/04(木) 02:15:47
>>217
例えば、ラベルをクリックしてもフォーカス受け取らないじゃん?
そしてどーやるんだったか忘れた。 ごめん。

SPYでフォーカス受け取るコントロールと
受け取らないコントロールのメッセージの違いを調べる…とか。 激しく疲れるな。。
219デフォルトの名無しさん:2007/10/04(木) 06:11:25
ラベルというかスタティックはidの設定だから全然別の話
220デフォルトの名無しさん:2007/10/06(土) 00:21:28
>>219
idの設定て、IDC_STATIC? まさか、そんなはずは。 もうちょっと分かるように説明してくれ。
221デフォルトの名無しさん:2007/10/06(土) 10:53:03
シングルダイアログのプログラムです、最小化ボタンと最大化ボタンを付けるのを忘れてしもうたww
今から付加したいのだが、どのクラスのどのプロパティーをいじったらええの?
VS20005 MFC
222デフォルトの名無しさん:2007/10/06(土) 11:21:44
>>221
ダイアログエディタかテキストエディタで<project>.rcを編集し給え。
223デフォルトの名無しさん:2007/10/06(土) 11:58:13
>>222
221です
rcファイルいじって悲惨な目(編集不能)に何回かあったのだが大丈夫なのか?
224デフォルトの名無しさん:2007/10/06(土) 12:34:21
ダイアログのプロパティでMinimize/MaximizeBoxをTrueにすればいいだけの話だろ。
何を悩んでるんだ?
225デフォルトの名無しさん:2007/10/06(土) 12:53:44
>>224
('ー')ゞラジャサンクス
226デフォルトの名無しさん:2007/10/06(土) 13:57:59
>>223
ダイアログエディタでプロパティを変更する行為だけで編集不能にできるならたいしたもんだ。
227デフォルトの名無しさん:2007/10/06(土) 15:19:49
CToolBarのボタンを大きくすることは出来ますか?ロードするビットマップのサイズが大きければ大きくなるのでしょうか?
228デフォルトの名無しさん:2007/10/06(土) 18:17:23
MFCのSDIアプリケーションを作成しています。
日本語以外のOSでも正しく動作させたいのですが、
最小化ボタンの上にカーソルを合わせたときに表示されるツールチップの「最小化」
などは自動的に現地の言葉で表示されるのでしょうか?
229デフォルトの名無しさん:2007/10/06(土) 19:09:31
コード調べたらわかるでしょ
230デフォルトの名無しさん:2007/10/06(土) 19:24:13
日本語化されてない英語アプリ動かしてみりゃわかるだろ
231デフォルトの名無しさん:2007/10/06(土) 19:28:51
apiのソースは非公開
漏れたのもあるけど
232デフォルトの名無しさん:2007/10/07(日) 09:57:50
CStringのTrimの中でアサートするんですが・・・

CString str = "33 "
str.Trim();
 ・・・
Truncate
  ATLASSERT( nNewLength <= GetLength() );

Unicodeライブラリ使ってますがこれがまずい?
233デフォルトの名無しさん:2007/10/07(日) 10:33:50
"33 "
234デフォルトの名無しさん:2007/10/07(日) 11:07:27
VC2005で試したところ、>>232のコードはコンパイルを通らなかったのだが、
それはそれとして、不思議な現象が。

1. CString str = "33"; // NG
2. CString str("33"); // OK
3. CString str; str = "33"; // OK

いまいち納得がいかない。
235デフォルトの名無しさん:2007/10/07(日) 11:10:22
すみません str = _T(" 33 ")なら通りますね
236デフォルトの名無しさん:2007/10/07(日) 12:22:02
>>234
コンストラクタと=の動作が違うんかな?とかわからずに言ってみるテスト
237デフォルトの名無しさん:2007/10/07(日) 21:32:43
>>234
初期化と代入の違いわかってるか?
あと_T()マクロがどう展開されるか
238234:2007/10/08(月) 08:29:48
WCHARベースのCStringでも
CString(LPCSTR)
operator=(LPCSTR)
の両方とも定義されているので、2.と3.が通るのは分かるが、
なら、何故1.が通らないのかがよく分からない。
1.は3.の省略系みたいなものだとの解釈は間違い?
239デフォルトの名無しさん:2007/10/08(月) 08:39:47
コンパイラはヘッダみてるだけだから
コンパイラの立場でヘッダ見てみればいい
240デフォルトの名無しさん:2007/10/08(月) 16:48:36
MDIでApp作ってます。

CMDIChildFrameA :: OnCreate()
{
dlg.Create(IDD_DIALOG, this);
}

としておいて

Dialog 内 OnOKで
if ( GetParent()->IsKindOf(RUNTIME_CLASS( CMDIChildFrameA )) )

とすると何故か失敗するのですが・・・
GetParent()で取れるCWnd* がCMainFrameになっているみたいです。
誰かボスケテ
241234:2007/10/08(月) 16:52:45
(・∀・)ワカッタ!!

1.
CString str="33"; は、暗黙的に CString str("33") に変換される

2.
が、WCHARベースのCStringでは
#define CSTRING_EXPLICIT explicit
CSTRING_EXPLICIT CString::CString (LPCSTR str);
と宣言されることになる

3.
explicit宣言されていると、1.のような暗黙的なコンストラクタへの変換は禁止される。
よってコンパイルエラー発生。

explicit使った事無かったから、全然思いもつかなかった。
242デフォルトの名無しさん:2007/10/08(月) 17:36:32
>>240
Windowsの仕様で、自動的にフレームウィンドウを親にされてしまうみたいだな。
Get/SetOwnerで関連付けてしまうのも一つの方法か。
243デフォルトの名無しさん:2007/10/08(月) 18:20:18
>>242さん ありがとうございます

色々試してみてたんだけど
GetWindow(GW_OWNER) ← 駄目
GetParent() ← 駄目

SetOwner() GetOwner()すればRUNTIME_CLASSうまくいきました
244デフォルトの名無しさん:2007/10/08(月) 22:34:05
>>228
MFC使わないコードで
Tooltip(?)の処理しなくても出てくるから
OSが処理してる。
だからOS依存で英語版なら英語で表示されるでしょ。

MFC内で独自処理してたらしらない
245デフォルトの名無しさん:2007/10/08(月) 23:04:47
英語版のVCでコンパイルすれば解決ということだな
246デフォルトの名無しさん:2007/10/08(月) 23:05:39
そうだっけ?
なんかリソースファイルの中くまなくさがしてみるとか・・・
247デフォルトの名無しさん:2007/10/09(火) 00:25:46
SDIアプリでCreateWindowでCFrameWindowの子供ウインドを作成し、Viewの上に沢山並べてみた。
で、そいつらをクリックしたら、アクティブになってフォーカスがあたってフォアグラウンドになる予定だった。
でも実際はWM_MOUSEMOVEすらそいつらには飛んでこない。くるのはWM_CREATE,WM_MOVE,SIZE,PAINTくらいだ。
この子供ウインドをWS_POPUPとかにすれば飛んでくるけど。。あーわかんないよぉ。
子供ウインドの一つを選択したら、他のウインドがフォーカスを失って、選択されたウインドがフォーカスされて
しかもメッセージを受け取って欲しいんだよぉ。なんでだめなの?????
248デフォルトの名無しさん:2007/10/09(火) 01:23:05
>>247
何が作りたいのか俺にはわからんが
他のアプリで似たような動きしてるもんあったら教えてみぃ
249デフォルトの名無しさん:2007/10/09(火) 08:18:03
MFCのライブラリをスタティックリンクすると挙動が変になり悩んでます。

[現象]
・スタティックリンクすると、
 メニュー → ファイルを開く → コモンダイアログのフィルタに「すべてのファイル(*.*)」がなくなる。
・共有DLLでビルドすると普通に出来る。

--
新規プロジェクトでスタティックリンク試してみると
普通に出来るので俺が悪いのは確かだろうが・・・

ちなみにデバッグビルド(&スタティックリンク)すると
[docmgr.cpp]
DoPromptFileName()
    VERIFY(title.LoadString(nIDSTitle));
でエラーになる。
この先を追っかけているが(atlcore.hとか)だんだん鬱になってきた。
似たような現象になった人いませんか?

>>247 割り込んでごめんなさい
250デフォルトの名無しさん:2007/10/09(火) 08:41:24
フォーカスないウインドウにもマウスのメッセージは飛んでくるし
WM_MOUSEMOVEすらそいつらには飛んでこないというのは変
251デフォルトの名無しさん:2007/10/09(火) 14:34:01
>>248
そうですね。。たとえて言えばエクセルのオートシェープをウインドで表現し、
シートに沢山並べた状態みたいなものでしょうか。
252デフォルトの名無しさん:2007/10/09(火) 21:54:53
トラッカークラス使えよ
253デフォルトの名無しさん:2007/10/10(水) 10:54:24
VC6です。CListCtrlをレポート形式で使ってます。
SetExtendedStyle()でLVS_EX_GRIDLINESを設定するとグリッド線が表示されていたのですが、
Windows2000からWindowsXPに変えて、画面をXPスタイルで表示するとグリッドが消えてしまします。
設定の仕方を間違えているのでしょうか。
254デフォルトの名無しさん:2007/10/10(水) 11:22:16
>>253
スクロールさせると消える挙動はバグ。修正予定はたぶん無い。
どうしても直したいなら、自前描画するしかないと思われ。
255253:2007/10/10(水) 12:35:12
>>254
まだスクロールもさせていない段階なのですが・・・。
256デフォルトの名無しさん:2007/10/14(日) 20:02:58
カスタムコントロールにCPenで書いた線を消そうと
void CLineChartCtrl::DeInvalidateCtrl()
{
CClientDC dc(this);
CRect rcClient;
GetClientRect(rcClient);
InvalidateRect(rcClient , TRUE);
}
として再描画しても消えないのはお子ちゃまだからデツカ?
ハンドルもしっかり取れてるのにな??
257デフォルトの名無しさん:2007/10/14(日) 22:11:51
おぼっちゃまがやっていることは
ただ画面を更新してるだけ
258デフォルトの名無しさん:2007/10/14(日) 22:14:22
再描画でまた書いてるだけなんじゃ……
ちなみに、その処理ならCWnd::Invalidate()一発で済む。
259デフォルトの名無しさん:2007/10/14(日) 22:19:55
>>257のおじさま、ありがd
うぅぅぅ〜〜〜、嫌な悪寒デツ
どうしたら簡単に線が消せマツカ?
やっぱり書いた線をxorで描くとかマンドクサイことやんなきゃムリッポなのかなぁ。。。。。。うぅぅぅ〜〜〜
260デフォルトの名無しさん:2007/10/14(日) 22:31:29
>>258さんもありがd
やってミマスタガ線が消えません、MFCってCPenクラスがあるならCEraserクラスも
作ってホスイ片手落ちって言うんだよねこれ豆知識
線が消したいというか初期画面に戻したいんデツガ、コンストラクタをも一回読んでみたら
どうなるのかな、実験シマツ
261デフォルトの名無しさん:2007/10/14(日) 22:41:26
おまいは何か根本的に勘違いをしている。
ウィンドウに描画した内容は、基本的に保持されていない。
描画内容を変更したい時は、一旦クライアント全体を無効にして、
次の再描画からその変更した内容で描くようにする。

自前でフレームバッファを用意してそこに描画してる、とかは無しな。
262デフォルトの名無しさん:2007/10/14(日) 22:45:15
>>260
おまえ、あたまん中をいっぺん消した方がいいぞ
263デフォルトの名無しさん:2007/10/14(日) 22:57:24
最小化して戻したら消えてないか?
264デフォルトの名無しさん:2007/10/14(日) 22:59:21
>>260
消しゴムかそうか?
265デフォルトの名無しさん:2007/10/15(月) 01:27:09
まぁマイクロソフトのウインドシステムは確かにわかりにくい仕様がおおいけどな。

266デフォルトの名無しさん:2007/10/15(月) 10:11:46
VS2005です。
SDIのプロジェクトからダイアログを追加し(CDialog1)、
そのコンストラクタにビューのポインタを渡してみたのですが、
ダイアログはフレームウィンドウの中央に出てきてしまいます。

void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
  CDialog1 dlg(this);
  dlg.DoModal();
}

ダイアログのコンストラクタで親ウィンドウを指定しているのに、
なぜその中央に表示されないのでしょうか?
中央に表示させたい場合は、ダイアログに何を渡せばよいのでしょうか?
267デフォルトの名無しさん:2007/10/15(月) 11:49:39
.........@ノ”

かたつむりなのです。
わかってほしいのです。
触られると触角がひっこんじゃうの。
動けなくなっちゃうの。
よくわかんない、でもそうなっちゃうのだ。
雨の日とかにぺたぺた這うのが好きなのです。
なんでかしら。
自分でもよくわからないのだ。
あんまり指ではがさないでください。
ごはんたべてうんこしようっと。
268デフォルトの名無しさん:2007/10/15(月) 20:36:21
塩撒くか
269デフォルトの名無しさん:2007/10/15(月) 22:02:40
>>266
>>240とたぶん同じ原因なので、同じ解決法で。
SetOwnerしておいて、OnInitDialogでCWnd::CenterWindow(GetOwner())。
別にオーナーに拘らずとも、中央配置の元になるウィンドウを渡せればいいんだけどね。
270デフォルトの名無しさん:2007/10/16(火) 09:30:39
>>269
ダイアログのOnInitDialog()でGetParent()とm_pParentWndを調べてみたら、
m_pParentWndにはコンストラクタで渡したビュークラスが入っているのに、
GetParent()ではメインフレームが返ってきました。

OnInitDialog()でm_pParentWndを直接CenterWindow()に渡してみたところ、
ビュークラスの中央に表示させることができました。
m_pParentWndっていうのは隠れメンバっぽいけど、
これならダイアログを呼ぶ側でオーナーを別途指定する必要は無いですよね。

ダイアログのコンストラクタって、なんの意味があるんだ…?
271デフォルトの名無しさん:2007/10/16(火) 11:14:36
>>270
それはダイアログ(そのもの)ではなくてダイアログクラスだ。
OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。
272デフォルトの名無しさん:2007/10/16(火) 11:49:03
>>271
> OnInitDialog()以前に一回だけ必要な処理を行なっておくなどの使い道がある。

もちろんコンストラクタの使いかた自体は理解しているつもりですが、
ダイアログクラスのコンストラクタで親ウィンドウを指定しても
それが実際の親にならないのなら、
コンストラクタで親ウィンドウなんて指定させるなよっていうことでした。

まぁ今回の件では、隠れメンバに保管されていることがわかったので、
コンストラクタに渡す作業は無駄ではなかったようですが。
273デフォルトの名無しさん:2007/10/16(火) 17:58:53
>それが実際の親にならないのなら、

親になってるからCenterWindowが正しく動作しているのでは?
CWnd::GetParent()が親じゃなくオーナーを返すのは、内部で
呼び出しているAPI(GetParent())の仕様。
トップレベルウィンドウがGetParentするとオーナーを返すみたいね。
274273:2007/10/16(火) 18:04:38
あ、CenterWindow(NULL)じゃ駄目なのか。しょっく
275デフォルトの名無しさん:2007/10/16(火) 21:29:33
MFCアプリケーション(ダイアログ)の終了時、アプリケーションのの戻り値(%ERRORLEVEL%)を
使用したいんですが何か方法ありますか?

・コンソールアプリケーションだと一瞬コンソールが表示されるのが問題
・引数なしの起動でダイアログでて起動をさせたいができればMFCダイアログテンプレートで作りたい。

という理由です。

WinMainのでやれば恐らく可能とは思いますが・・誰か知ってたら教えてください。
276デフォルトの名無しさん:2007/10/16(火) 22:04:11
>>275
CWinApp::ExitInstanceをオーバーライド
277デフォルトの名無しさん:2007/10/16(火) 22:12:31
>>276
今その方法でやったらできました。

一応方法を書いておくと、ExitInstance で戻り値を返すだけではだめで
start /wait aaa.exe
とかしてアプリケーションの終了を待機しないとだめなんですね・・
当然といえば当然なのかも。

なにはともあれ、ありがとうございました。
278デフォルトの名無しさん:2007/10/16(火) 23:44:10
ダイアログアプリケーションでCDialog派生クラスのデストラクタがないのですが、
デストラクタの処理はどこでするのでしょうか?
279デフォルトの名無しさん:2007/10/16(火) 23:54:06
>>278
勝手にオーバーライドすればいい。
280デフォルトの名無しさん:2007/10/17(水) 00:09:14
定型文のボタンを押したら、
CEditコントロールのカーソル位置に文字を自動で入力したいのですが、
どうやればいいですか?
281デフォルトの名無しさん:2007/10/17(水) 00:13:17
現在のCEditの文字取得して定型文追加して再設定
カーソル位置は GetSel() で取得
282デフォルトの名無しさん:2007/10/17(水) 00:26:29
>>281
ありがとうございます!
283デフォルトの名無しさん:2007/10/17(水) 11:46:56
★番組で紹介された亀田史郎が息子・興毅に書いた手紙
興毅 ほんとうに おめでとう
お前は もう 親父だけの者ではない
今や世界の亀田興毅になったんじゃ
それも山あり谷ありの厳しい勝負の道を
ひたすら歩み続けたからこそ今日の栄光が会った
しかしボクシングの道は終った分けではない
これから厳しいボクシング道が待ってる
興毅よ万文の山はいくつはばまおうとも
戦陣の谷に何度も落ちようとも前え 進め
最後に 本当におめでとう
親父

★ アニメ「侍ジャイアンツ」最終回
川上監督が番場蛮に贈った言葉
番場よ、本当におめでとう。
おまえはもうジャイアンツだけのサムライではない。
今や世界のサムライになったんじゃ。
それも山あり谷ありの厳しい勝負の道を
ひたすら歩み続けたからこそ、今日の栄光があった!
しかし、野球の道はこれで終わったわけではない。
これから厳しい野球道が待っている。
サムライよ、万丈の山がいくつ阻もうと、
千尋の谷に何度落ちようと、前へ進め!
その前途を祝って、もう一度言わせて貰おう。
番場蛮、本当に、おめでとう!
巨人軍監督 川上哲治
284デフォルトの名無しさん:2007/10/17(水) 21:16:32
visual c++ 2005 SP1でSDIアプリを作っています。
MFCをスタティックリンクでビルドすると、Cランタイム(_recalloc)で
メモリリークが発生します。共有DLLでビルドするとリークは発生しません。
リークのチェックにはBoundsChecker8.2を使用しました。

スケルトン(ソースは変更しない)でも同じでした。
どなたかご存知ないでしょうか?
285デフォルトの名無しさん:2007/10/17(水) 22:26:32
>>284
BoundsCheckerって使ったことないから知らないけど
http://support.microsoft.com/kb/192102/ja
この情報のVCのバージョン相当古いのは分かってるが、参考にならないかな?
286デフォルトの名無しさん:2007/10/17(水) 23:02:39
スタティックリンクは使うなってことよ
287デフォルトの名無しさん:2007/10/19(金) 13:00:37
CInternetsessionでのFTPのcloseは、FTPサーバーにログが残らないものなのでしょうか。
288デフォルトの名無しさん:2007/10/19(金) 15:04:58
CCriticalSectionについて質問があります。
今Visual C++ 2005でアプリを作成しているます。

TestA.cppに通信処理があって2箇所からココを呼び出してます
1つはTestA.cppのOnTimerからコール
1つはTestB.cppのワーカースレッドからコール
通信処理は、入った時点で CCriticalSectionのLock()、抜けるときにUnLock()してます

で、問題なのはTestB.cppのワーカースレッドから通信処理をコールし、Lock状態のときに
TestA.cppのOnTimerから通信処理をコールするとデッドロックしてしまいます

なぜそうなってしまうのか、原因が全く分からず困ってます・・・
何か分かる方、いらっしゃいましたらご教授お願いします
289デフォルトの名無しさん:2007/10/19(金) 15:38:34
通信処理が怪しい。
OnTimerの呼ばれるスレッド側に依存する処理が混じっていないか?
メッセージキューが回っている必要がある、とか。
290デフォルトの名無しさん:2007/10/19(金) 16:20:28
>>289
ご返答ありがとうございます
通信処理の本体はTestC.cppに用意してあり、そこで完結してます
それをTestA.cppからコールしているだけなのです
なので依存する処理とかはないと思います

簡単に書くとTestA.cppの通信部分はこんな感じです

void CTestA::SendProc()
{
m_CriticalSection.Lock();

TestC->SendData();

m_CriticalSection.Unlock();
}

もしかして、OnTimerとCCriticalSectionのLock、UnLockは
同じ場所(TestA.cpp)にあってはいけないとか
そんなことはない・・・ですよね?
291デフォルトの名無しさん:2007/10/19(金) 17:26:09
当たり前だろ
Lock状態というのは、他から同時に同じ部分をアクセスさせないように
するのが仕様だよ
要はバッティングしないようにしてるわけだから、用がすんだら
解放される
292291:2007/10/19(金) 17:27:56
>>291 は、>>288 に対するレスね
293デフォルトの名無しさん:2007/10/19(金) 17:36:27
>>292
Lock状態のときに、その処理に入ったら待機状態になりますよね?
先にLockを掛けた処理が動いてUnlockしてくれればなんの問題もないのですが、
何故か動いてくれないんですよ・・・
なので困っております・・・
説明不足ですみません
294デフォルトの名無しさん:2007/10/19(金) 18:06:04
ワーカースレッドからSendProcを呼び出した際にm_CriticalSection.Unlock(); 
までたどり着いてないってこと?
295デフォルトの名無しさん:2007/10/19(金) 18:11:19
UI更新しようとSendMessageしてロック、とかは初心者にありがちなんだけどな。
TestC->SendData()の処理内容が判らないことにはなんとも。
あと、Lock/Unlockを直接書くより、CSingleLockを使っておいた方がいい。
296デフォルトの名無しさん:2007/10/19(金) 18:32:57
>>294
はい、おっしゃる通りです
Lockした状態でOnTimerから通信処理に入って
m_CriticalSection.Lock(); の中へステップで進んで行くと
:EnterCriticalSection(&m_sect); で実行中になったまま処理が戻らず、
仕方なくデバッグ中断すると
「プロセスはデッドロックされているか、ユーザーモードコードがどれも実行されません。すべてのスレッドが中止されました。」
となります


>>295
TestC->SendData()の処理内容はUSBドライバに対して
プロトコルに沿ったデータの送信・受信をしています
CSingleLock、ちょっと勉強してみます
297294:2007/10/19(金) 18:51:18
ならAPIのTryEnterCriticalSectionを使うか >>295の方法。
ワーカスレッドから呼ばれたTestC->SendData()がフリーズしてる可能性もある。
298デフォルトの名無しさん:2007/10/19(金) 19:25:33
>>297
TryEnterCriticalSectionを試してみたところ、それっぽい動きになりました
ありがとうございます!

ところで、MSDNライブラリに書いてある解説に
「TryEnterCriticalSection 関数は、クリティカルセクションの所有権を
取得できたかどうかにかかわらず、すぐに制御を戻します。」
とありますが、これは処理が終わる前に次の処理が動いてしまう
と解釈してよろしいのでしょうか・・・
299デフォルトの名無しさん:2007/10/19(金) 19:36:13
戻り値で、他のスレッドがCriticalSectionを所有している事が判るわけだから
後で再送するとか、諦めてエラーにするとか好きにすれば良い。
300デフォルトの名無しさん:2007/10/19(金) 19:41:08
>>299
了解しました
戻り値で判断して何とか回避してみます

皆様、色々ご指導ありがとうございました
とてもとても助かりました
素敵な週末を過ごしてください
301デフォルトの名無しさん:2007/10/19(金) 23:38:36
今後Winアプリって.NETがデファクトスタンダードとなるんですかね?
MFCは開発止まってるのですか?
302デフォルトの名無しさん:2007/10/20(土) 00:03:37
デファクトスタンダード(笑)
まあ、そうだろうね。
XPが標準になってることで、.NETFrameworkデフォルトで入ってるだろうし

最近のすごいアプリ
3ds maxとか、C++/CLI(.NET使えるように拡張したC++)で
作られてるみたいだし
303デフォルトの名無しさん:2007/10/20(土) 00:17:45
Win32で十分だろ。なぜ.Netなんかで開発するの?
いまはじめてWindowsFormアプリケーションってのを生成してみたが
さっぱりわからない。ショック。
304デフォルトの名無しさん:2007/10/20(土) 00:37:31
しょぼいツール作るならWin32でいいけど、
こったもの作るなら、.Net最高
305デフォルトの名無しさん:2007/10/20(土) 00:55:04
自分がMFCを勉強し始めた時と比べると、C++/CLIの学習は
随分楽だなーと思った。

でもC++/CLIの描画がGDI+を使わなくなるか、GDI+の性能が
大幅アップするまではMFCを使い続ける気がする。
306デフォルトの名無しさん:2007/10/20(土) 09:55:15
結局.NETってライブラリとして充実しているんだろ?
Win32だって充実させてくれたらいいじゃん。
なんで言語まで変えるの。。
307デフォルトの名無しさん:2007/10/20(土) 10:45:24
>>303
Win32、MFCが理解できて
.NET Frameworkが理解できないヤツはいねえだろ
MTは運転できるがATは運転できない というヤツがいないように
308デフォルトの名無しさん:2007/10/20(土) 22:12:33
>>304
逆だろ?
こったものを.NETで作るのは無理
メモ帳程度のテキストエディタなら.NETでも十分つくれるが
メジャーなテキストエディタに勝とうとしたら.NETでは絶対無理
309デフォルトの名無しさん:2007/10/20(土) 23:03:43
ちょっとさみしい気もするが手軽にきれいなのできるからいいよ
クラスの構造もMFCと比べるときれいだし、仕事の関係上使えないのが残念なくらいだ
C#とかで作ってるとVBって(使ったことないけど)こういうもんなのかなーって思うくらい簡単
310デフォルトの名無しさん:2007/10/22(月) 20:41:09
ていうか基本的に糞重いアプリができる
311デフォルトの名無しさん:2007/10/22(月) 22:28:10
296じゃありませんが

ちょっと前(>295)で
CCriticalSectionを直接Lock/Unlockするのではなく
CSingleLockを使った方がいいとありますが
その理由はなぜでしょうか?

CCriticalSectionだと待ち合わせ時間が設定できないって事くらいですか?
312デフォルトの名無しさん:2007/10/22(月) 22:31:04
MFC71.DLLは何処からダウンロードできるのですか?
313デフォルトの名無しさん:2007/10/22(月) 23:29:00
>>311
別に深い理由ではなく、単に解放し忘れが無くなるだけ。
途中returnや例外でロックしっぱなしとかなると危険だし。
314デフォルトの名無しさん:2007/10/23(火) 01:20:13
C#でのDataGridViewみたいな便利なものはないんですか?
315sage:2007/10/23(火) 02:40:33 BE:233717663-2BP(0)
質問です。

あるGUI有りのアプリから、別のDLLの関数を呼び、そのDLLが
生成したウィンドウを表示したところ、Tab キーや、OK, Esc キーなどが
期待通りに動作しない現象が起こりました。

具体的には、CMainFrame から DLLのある関数を呼び出し、その関数に
HWND を引数に与えて、そのHWNDを親ウィンドウとした、別ウィンドウを
表示しています。モーダルではありませんが、モーダルでも同じ挙動です。

原因が分かる方、教えてください。

VC++ 8.0 SP1
WinXP SP2
316デフォルトの名無しさん:2007/10/23(火) 13:45:48
CEditコントロールで質問ス
カレット位置を取得するためにGetSel()を使うというのは理解できるんですが、
範囲選択状態となっている場合、カレット位置がどこにあるかという判断はどーすればいいっスか?
317デフォルトの名無しさん:2007/10/23(火) 14:14:30
>>316
CWnd::GetCaretPos()で取れると思う。尤も、クライアント座標だから適当に変換する必要があるけど。
318デフォルトの名無しさん:2007/10/23(火) 14:47:10
>>317
ありがとうっス!
ちょっと試してみるっス
319315:2007/10/23(火) 16:44:59
320デフォルトの名無しさん:2007/10/23(火) 17:12:21
VS2005、ダイアログベースで、マウスオーバーイベントを
ボタンコントロールが取得するにはどうしたらいいでしょうか?

↓やったこと
ボタンを画像にするのに、オーナードローでやってみて
それ自体は問題なかったのですが
マウスオーバーしたときにも画像を変えようと思ったら
マウスオーバーのイベントが来てませんでした。
MSDNみてCBitmapButtonなるものを使って見たのですが
AutoLoadでアサートが出てしまって動きませんでした。


321デフォルトの名無しさん:2007/10/23(火) 17:41:50
>>320
前似たようなもの作った時は CButtonのサブクラスの中のOnMouseMoveで
マウスが入ってきたことを検知し、TrackMouseEventを呼び出してWM_MOUSELEAVE
を発生させるようにし表示画像を変えてた。一般的なやりかたかどうかは知らない。
WM_MOUSEHOVERも同様にTrackMouseEventで発生させることができる。
マウスオーバーってホバーのことだよね?
322デフォルトの名無しさん:2007/10/23(火) 17:44:08
>>321
そうです。

ありがとうございまいた。
ちょっくらやってみます。
323デフォルトの名無しさん:2007/10/24(水) 17:42:18
Win32APIスレから誘導されてきました。

MSGraph.Chart(Officeについてくるグラフコンポーネント)をウィンドウに張り付けたいんですが、どうすればいいですか?
MFCのCWnd::CreateContorlをいじってみましたが、うまくいかないです(´・ω・`)
゚・(ノД`)教えて下さい。

CWnd* wnd = new CWnd();
BOOL ret = wnd->CreateControl("MSGraph.Chart", "", WS_VISIBLE, rc, this, 2000);
で、retがFALSEになります。

CreateControlの第1引数を"mscal.calendar.7"にすると、ちゃんとカレンダーが表示されます。
324デフォルトの名無しさん:2007/10/24(水) 18:45:52
ActiveXコントロールとして貼り付けたら?
325323:2007/10/24(水) 19:25:39
>>324
(Officeフォルダ)\Graph9.olbをリソースエディタのツールボックスに登録しようとしたら、
「有効なCOMサーバーではありません」と言われました(´・ω・`)
そもそも根本的に無理なのでしょうか?
326デフォルトの名無しさん:2007/10/24(水) 21:13:31
ググってみて思ったのだが、
もしかすると、MSGraph.ChartはActiveXドキュメントかもしれない。
自分の所にはOffice無いからそれ以上は分からないけど。
327323:2007/10/24(水) 22:38:16
>>326
情報ありがとうございます(・∀・)
ActiveXドキュメントでググリましたが、要領を得ません(;´Д`)スミマセン
ActiveXドキュメントというのは、それ単体では表示できず、
ExcelのWorksheetや、RichEdit等にしか貼り付け出来ないということでしょうか?
328デフォルトの名無しさん:2007/10/26(金) 16:24:44
質問です。

class CHogeA;
class CHogeB;

class CHogeA : public CView
{
...
private:
CHogeB m_hogeB;
};

class CHogeB : public CWnd
{

};

CHogeA 上に CHogeB を貼り付けて使っていたのですが、そうすると、
CHogeA にて例えばマウス操作などのイベントを拾うことが出来ません。

そこで、
1. CHogeA でも各種イベントを拾う、一般的な方法がありますか?
2. CHogeA と CHogeB で、ウィンドウを2枚作らず、1枚を共有するような手法がありますか?

よろしくお願いします。
WinXP SP2
VC++ 8.0 SP1
329デフォルトの名無しさん:2007/10/26(金) 16:32:13
>217
330デフォルトの名無しさん:2007/10/27(土) 01:14:52
>>328

>1. CHogeA でも各種イベントを拾う、一般的な方法がありますか? 

あなたの書いたとおりの構成でサンプルを作ってみたらマウスイベントは
全てCHogeAに流れました。逆にCHogeBでマウスイベントを拾うためには
細工が必要でした。

>2. CHogeA と CHogeB で、ウィンドウを2枚作らず、1枚を共有するような手法がありますか? 

おそらくあります。

要するに情報不足杉です。
331デフォルトの名無しさん:2007/10/27(土) 10:09:51
SDIでCView
CViewでCWndをCreate
あとはどこもいじらないでCWndにMouseMoveイベント来たよ
332デフォルトの名無しさん:2007/10/27(土) 10:30:33
スレ間違いで再投稿です。
マルチすいません・・・

Visual studio6.0です。
ラジオボタン2個、ボタン1個のwindow作ってます。
MFCでラジオボタンにintの変数を追加しようと
してもbuttonにしか変数が追加できません。

どうすれば、受付けてくれるのでしょうか?
VS.NET仕様のテキストを見ながらやってて違いに困ってます・・・
333デフォルトの名無しさん:2007/10/27(土) 10:48:56
ラジオボタンはボタンなの
334デフォルトの名無しさん:2007/10/27(土) 10:53:22
>>332
ラジオボタンのグループ分け(WS_GROUPのオン・オフ)がきちんとできているか?
面倒ならDDX_Radio()を直書きしてもいい。案外簡単だから。
335デフォルトの名無しさん:2007/10/27(土) 11:07:00
>>333
言われて見れば・・・「チェックしたか、してないか」しかないのに
変数の設定っていうのも変な気がします・・・。

>>334
グループ分けは出来てると思うので
ラジオボタンがどんな値を返すのか勉強してきます。

VC6.0準拠の本かサイトも探してきます・・・
336デフォルトの名無しさん:2007/10/27(土) 11:50:57
VC2005でもそこら辺の仕様は変更されていなかったはず。
MFCのヘッダをDDX_Radioで検索して、実際に中身を見た方がたぶん早い。
337デフォルトの名無しさん:2007/10/27(土) 12:12:59
グループをチェックすれば出てくるな
338デフォルトの名無しさん:2007/10/27(土) 17:21:37
Win2k 上で vc6 sp6 使ってMFC勉強中の者です。
ウィザードで CFormView 指定してつくったもので、
その画面のボタンから CDialogの Modal で表示してる部分があるんですけど、
垂直方向に一画面に入りきらなくなってスクロールさせようと思い、ハマッテマス。
リソースで垂直のチェック入れて、OnVScrollとってきてScrollWindowExつかって
みたんですけど再描画で位置がリセットされちゃうんで OnDrawで覚えた値を使って
ScrollWindowExで戻してます。みなさんもこんなやり方で実装します?
アドバイスお願いしますm(__)m
やり方、なんか間違ってる気がするんですよね……。
CFormViewでdoModal できれば楽なのになぁ〜。
339デフォルトの名無しさん:2007/10/27(土) 18:13:37
リセットされるところをみるに、SetScrollPosしていない予感。
WM_VSCROLLはスクロールさせたいという意図を伝えてくるだけで、
実際にスクロールバーの位置を確定させるのはプログラム側の仕事。
340デフォルトの名無しさん:2007/10/27(土) 18:35:10
スクロールバーが付いたダイアログって見たことない。
止めるつもりは無いけど、自分ならプロパティシート使う。
341デフォルトの名無しさん:2007/10/27(土) 19:13:02
もう1個別のCFormViewのウインドウ出すのは可能だし
CDialogの上にCFormViewを貼り付けることも可能
でも問題はそういうことではなさそうだな
342デフォルトの名無しさん:2007/10/27(土) 20:51:04
レスありがとうございます
>>339
ウィンドウについてるって事で OnVScroll内に引数でもってきてる pScrollBarは null なので
pos = ::GetScrollPos( m_hWnd, SB_VERT );しています。
あとは nSBCodeみて 移動量決め SetScrollPos( m_hWnd, SB_VERT, pos, TRUE );して
ScrollWindowEx( 0, 垂直移動量, NULL, NULL, NULL, NULL, 0 ) してます
で…再描画でリセットされてしまうので OnPaint()用意して ScrollWindowEx( 0, 総移動量, …
って感じになっちゃっております。
>>340
なるほど。プロパティシートですか。
いやぁこまった、変えられない仕様みたいでして。
>>341
CDialog上にCFormViewの貼り付けですか。 CDialog持ってるクラスのメンバーに
CFormView持ってるクラスをメンバーのインスタンスもたせるのかなって想って
ちょっと今やってみましたがProtectあたりでひっかかってコンパイルもとおりませんね。
難しい……。
343デフォルトの名無しさん:2007/10/27(土) 21:18:23
子ウィンドウを全然動かしていない件について。
そりゃ、再描画でリセットされるように見えるわ。

子ウィンドウを一つ一つ動かすより、
フレーム-CDialog派生の子ウィンドウ(=フォーム) という風に乗せて、
フォームの位置を動かす感じで作ればいいんじゃないかな。
344デフォルトの名無しさん:2007/10/28(日) 01:43:07
CSliderCtrlを使用して、マウスでクリックした位置に一発で移動する動作をさせたいです。
(通常はページスクロールをしますが、この動作をさせずに、クリックした位置に移動させたいです。)

ためしにGetChannelRectでスライダーの稼動範囲(厳密には稼動範囲より広いエリアになってしまうけど。。)とマウス位置から
Posを求め、SetPosしています。これだと問題が二個あります。
1)ユーザーが一回クリックすると、見た目上二回動く
2)そもそもGetChannelRectはスライダーの稼動範囲を取るわけではないので、微妙に位置の計算が狂う。

なにか良いアイディアは無いものでしょうか?
345デフォルトの名無しさん:2007/10/28(日) 03:19:32
ぶち殺すぞ糞が
346デフォルトの名無しさん:2007/10/28(日) 03:39:56
↑しゃぶれよ
347デフォルトの名無しさん:2007/10/30(火) 11:52:37
とりあえず保守させておいてくれ
また質問したい時がくるかも知れんから
348デフォルトの名無しさん :2007/10/31(水) 09:32:39
http://tserve01.aid.design.kyushu-u.ac.jp/~fujiki/vc_lecture/c_5.htm
のページを見てキャラクターを表示しようとしてるんですが
キャラクターの白い部分が残って
うまく表示がされません、どうすれば良いか教えて頂けないでしょうか。
お願いします。
349291:2007/10/31(水) 10:37:25
そのページを見てわからんのなら
君にはむりだ
350デフォルトの名無しさん:2007/10/31(水) 10:49:25
>>348
謎は解けた!
マスク描画のROPを、SRCPAINTからMERGEPAINTに変えれば正しく描画される。

普通はキャラ画像の背景は黒にして、
SRCANDで抜いてSRCORで重ねるってのが定番だと思うのだけどな。
CImageListならカラーキーを使った描画ができるから、
こっちを使った方が手っ取り早いかも。
351デフォルトの名無しさん :2007/10/31(水) 12:36:21
>>350さん
ありがとうございました。
感謝感謝です。
352デフォルトの名無しさん:2007/11/01(木) 07:21:07
どうも、他スレから流されてきました。

Win32環境+VS2005で開発を行っています。
ダブルクリックでファイルを開く処理に対応させようと頑張っていた所
Debugビルドでは成功したのですが、Releaseビルドにするとファイルを開かなくなりました。
(でもショートカットに開きたいファイル名を指定するとReleaseビルドでもきちんと開く)

そこで処理を追っていくと、どうもInitInstanceメソッドが呼び出されていないようなのですが、似たような経験をされた方はいらっしゃらないでしょうか?


353デフォルトの名無しさん:2007/11/01(木) 10:16:22
そこまで分かってんなら呼び出せばいいじゃん
354デフォルトの名無しさん:2007/11/01(木) 14:28:25
CTreeCtrlを使ってエクスプローラライクなダイアログを作っています。
メーラーの未読数表示のように、フォルダ内のファイル数を表示する
方法はあるのでしょうか?

ラベル編集も可能にしたいので、"フォルダ名(n)"のように直書きでは
問題が出てしまいます。
やっぱり無理矢理作るしかないのでしょうか?
355デフォルトの名無しさん:2007/11/01(木) 14:57:38
>>354
楽な方法は無いな。
NM_CUSTOMDRAWを始め、
いくつかの通知メッセージを処理しないと実現できないと思う。
356352:2007/11/01(木) 15:25:21
>>353
すいません、関連付け関係のレジストリをすべて掃除したら直りました。
プログラムのミスではなかったようです。orz
357デフォルトの名無しさん:2007/11/01(木) 15:33:26
ダブルクリックってそういう意味か
仕様を満足に説明できないやつは1人でやってればいいと思う
358デフォルトの名無しさん:2007/11/01(木) 21:04:18
MFCを使った有名なソフトはどんなものがあるんですか?
359デフォルトの名無しさん:2007/11/01(木) 23:51:16
秀丸
360デフォルトの名無しさん:2007/11/02(金) 00:07:13
ペイント
361デフォルトの名無しさん:2007/11/02(金) 15:55:16
>>358
有名になる予感
http://www.cute.or.jp/~makuchan/wore.html
10/31
362デフォルトの名無しさん:2007/11/03(土) 21:48:38
Internet Explorer
363デフォルトの名無しさん:2007/11/04(日) 10:19:39
>>361
いいねえ。
これは期待できる。
364デフォルトの名無しさん:2007/11/04(日) 10:58:22
得体の知れないリンクは踏まないようにしてる
365デフォルトの名無しさん :2007/11/05(月) 22:00:13
マルチです。すいません。
http://tserve01.aid.design.kyushu-u.ac.jp/~fujiki/vc_lecture/c_6.htm
のお絵かきソフトを作るページを参考にしてるんですが
「ToolBar」の「IDR_MAINFRAME」のボタンとIDを書き換えても
ページに書かれているようなIDに対応するような関数が作られず
ボタンも描いたように表示されず灰色の使用不可のような状態
になってしまいます。
VS2005stdです。
どなたか、わかるかた、VS2005ではどうしたらよいか教えていただけないでしょうか。
お願いします。
366デフォルトの名無しさん:2007/11/05(月) 22:06:23
>365
教えてやったのに無視してこっちに引越しか?
とんでもないやつだな
367デフォルトの名無しさん:2007/11/05(月) 23:28:00
VC++2005スタンダードを使ってMFCを勉強しているのですが、
onNewDocumentやonOpenDocument、Serializeなどファイル操作や
イベント処理などがどういう流れで行われているのかがいまいち把握できないので、
詳しく解説してある良い書籍とかないでしょうか?

ちなみに今頃MFCかよとかなしでおねがいします。
368デフォルトの名無しさん:2007/11/06(火) 02:40:56
いや、本当にいまさらMFC勉強しても意味がない
>>367
みたいな質問してるようだと、人に見せれるようなアプリがかけるまで、2年以上はかかる
2年後にはMFCはVSからなくなってるぞ
369デフォルトの名無しさん:2007/11/06(火) 11:34:51
なくなるわけねーだろ
お前みたいな、おこちゃまアプリしか作らんやつには
MFC は必要ないだけだ
370デフォルトの名無しさん:2007/11/06(火) 12:46:27
2年後が楽しみになってきました
371デフォルトの名無しさん :2007/11/06(火) 13:17:56
2年後にMFCが無くなってたら怖いな。
M$がwin32apiを無理矢理クラス化し、永続させてきたMFCを
ばっさり切るなんて、今までの努力を捨てちまうようなもんだもんな。
それにVBを.net化したりしてるのを見れば「まだまだ、へこたれへんでー」
ってな感じに受け止めれる。
まぁ、主流はVC#VB.netの方針で発展していくんだろうね。
372デフォルトの名無しさん:2007/11/06(火) 14:37:15
>>371
いいえ。C++の財産はとてつもなく大きいものです。

C++/CLI について語ろうぜ Part2
http://pc11.2ch.net/test/read.cgi/tech/1142147319/
これ最強
373デフォルトの名無しさん:2007/11/06(火) 15:45:45
Picture ControlのBorderをプログラム実行中に変更する方法を教えてください
374デフォルトの名無しさん:2007/11/06(火) 16:16:42
変らない?
375373:2007/11/06(火) 16:17:49
>>374
やり方がよく分からないんです。
376デフォルトの名無しさん:2007/11/07(水) 10:43:29
パスがファイルかフォルダかを判定する方法があれば教えていただけないでしょうか?
そのパスは存在することが前程でよいのですが。。。

よろしくお願いいたします。
377デフォルトの名無しさん:2007/11/07(水) 10:53:11
ファイルの属性を見る
MFCにそういうのを扱うクラスはなかったと思う
378デフォルトの名無しさん:2007/11/07(水) 10:58:57
>>377
CFileにGetStatus()があるのだが。static版の方は引き数にフルパスを取るから一応使えると思う。
379デフォルトの名無しさん:2007/11/07(水) 11:25:51
CFileでディレクトリも扱えるの?
380デフォルトの名無しさん:2007/11/07(水) 11:32:05
>>379
CFile::GetStatus()のstatic版は、実体を必要としないので普通の関数のように使える。
つまり、その対象を予め開いておく必要はない。詳しくは、MSDNでも読め。
381367:2007/11/07(水) 18:08:26
>>368
何を根拠に2年なのかkwsk、というかカチンときた。

まぁ、ATLとか.NETとか出てる中、いまどきMFCやるのもあれかもしらんが・・・

で、MSDN以外に参考になるものはないってことかい?
382デフォルトの名無しさん:2007/11/07(水) 18:13:41
カチンと来るのは勝手だけれど、MFCが斜陽なのは事実。
一頃本はたくさんあったようだしWebSiteもそれなりにあると思う。
それを探せないようでは先が思いやられるのも同感。
383デフォルトの名無しさん:2007/11/07(水) 18:15:08
ATLとMFCって同じレベルのものなの?
全然知らなくてすまそ
384デフォルトの名無しさん:2007/11/07(水) 20:48:24
無駄に複雑で使えないっていう点では同じレベル
385デフォルトの名無しさん:2007/11/07(水) 21:13:42
簡単なツールならVB感覚でさくっと作れるじゃない。MFCは。
386デフォルトの名無しさん:2007/11/08(木) 13:05:34
やっぱり.NET
387デフォルトの名無しさん:2007/11/09(金) 15:15:14
View画面でのサイズ指定で
SDIのCMainFrameウィンドウサイズを変更する関数ってありますか?

やっぱり、指定のサイズ+枠のサイズとかメニューのサイズとかを計算しないとだめですか?
388デフォルトの名無しさん:2007/11/09(金) 16:37:49
CHTMLViewクラスを使って表示したHTML文書のテキストの
色などをプログラム中から変更することはできるでしょうか?

PutPorpertyというメソッドを使えばできそうな気がするの
ですが使い方がよく分かりません。

<P class='test'>Hello, World</P>
というテキストの色を赤にする方法を教えてください。
389デフォルトの名無しさん:2007/11/09(金) 21:49:22
>>388
CHTMLViewのGet/SetPropertyは、単にIWebBrowser2の同メソッドが呼ばれるだけ。
GetHtmlDocument()から始めるしかないと思う。という訳で、試しに書いてみた。
ちなみに、MFCでなくてATLだが全く問題無い。

// 1. CSSを追加してみる方法

CComPtr<IDispatch> spIDisp;
spIDisp.Attach(GetHtmlDocument());
CComQIPtr<IHTMLDocument2> spIDom(spIDisp);
CComPtr<IHTMLStyleSheet> spCSS;
spIDom->createStyleSheet(NULL, -1, &spCSS);
long idx;
spCSS->addRule(CComBSTR(_T("P.test")), CComBSTR(_T("color:red")), -1, &idx);
390デフォルトの名無しさん:2007/11/09(金) 21:53:27
// 2. エレメントに直接スタイルを追加してみる方法

CComPtr<IDispatch> spIDisp;
spIDisp.Attach(GetHtmlDocument());
CComQIPtr<IHTMLDocument2> spIDom(spIDisp);
CComPtr<IHTMLElementCollection> spElemCol;
spIDom->get_all(&spElemCol);
spIDisp.Release();
spElemCol->tags(CComVariant(_T("P")), &spIDisp);
CComQIPtr<IHTMLElementCollection> spElemCol2(spIDisp);
for ( int idx = 0 ; ; idx++ )
{
spIDisp.Release();
spElemCol2->item(CComVariant(idx), CComVariant(), &spIDisp);
if ( !spIDisp ) break;
CComQIPtr<IHTMLElement> spElem(spIDisp);
CComBSTR clsname;
BSTR bstr;
spElem->get_className(&bstr);
clsname.Attach(bstr);
if ( clsname != _T("test") ) continue;
CComPtr<IHTMLStyle> spStyle;
spElem->get_style(&spStyle);
spStyle->put_color(CComVariant(_T("red")));
}
391388:2007/11/09(金) 22:57:03
>>389 >>390
ありがとうございます。ATLは全く知らないのでコードは謎ですが、
必要なヘッダを調べてインクルードして何とか両方とも動かすこと
ができました。

if ( clsname != _T("test") ) continue; のところで
エラーが出たので調べてみると CComBSTR::operator==は
定義されていましたが CComBSTR::operator!=は定義されて
いませんでした。if ( clsname == _T("test") ) { /*../*/ }
と直すとコンパイル通りました。これはVisual C++6.0の
不具合かもしれません。

師匠になってほしいです。
392デフォルトの名無しさん:2007/11/13(火) 02:19:17
http://blogs.msdn.com/somasegar/archive/2007/11/09/visual-c-libraries-update.aspx
結局捨てないのか
ともかく壮絶なソースコードが見れそうだ
393デフォルトの名無しさん:2007/11/14(水) 11:34:45
CReBarでレバーコントロールを利用しているのですが、
複数のコントロールを1つのバンドに含めるにはどうすればいいでしょうか。

CReBar cRebar;

cRebar.AddBar(コンボボックス)
cRebar.AddBar(ボタン)

とすると、コンボボックスとボタンが別々のバンドに配置されますが、
目的としては、コンボボックスとボタンを同一バンドに配置したいです。
394デフォルトの名無しさん:2007/11/14(水) 12:30:31
各バンドには 1 つしか子ウィンドウ (コントロール) を含むことができません。
各バンドに複数の子ウィンドウを含めたい場合は、この点が制約になります。
395393:2007/11/14(水) 17:10:33
なるほど、ありがとうございます。
ちょっと微妙ですけど、コンボボックスとボタンをスタティックコントロールの子にして、
そのスタティックコントロールをAddBarすることにしました。
396デフォルトの名無しさん:2007/11/15(木) 00:22:50
MFCでExcelのセルみたいなぐりっどコントロールってないんですか?
397デフォルトの名無しさん:2007/11/15(木) 01:22:56
ありません。ListCtrlを自前で拡張するか、CodeGuruでそうしたものを探すか、市販のライブラリを使うか、
ExcelをDDEで使うことになるかと。
398デフォルトの名無しさん:2007/11/15(木) 18:29:30
拡張DLLでダイアログクラスをエクスポートしようとしているのですが、
ヘッダのクラス宣言の中に
enum { IDD = IDD_… };
という記述があります。
このリソースIDは拡張DLL側のResource.hに書かれているものです。

拡張DLLを使う側がこのヘッダをインクルードすると、
リソースIDが見つからないと言われると思うのですが、
拡張DLLでダイアログクラスをエクスポートする場合
この部分はどのように対応すればよいものなのでしょうか。
399デフォルトの名無しさん:2007/11/16(金) 16:17:31
保守!
400デフォルトの名無しさん:2007/11/16(金) 21:52:56
>>398
そのリソースIDが記述されてるヘッダをインクルードしなきゃいんじゃね?
使う側は、拡張DLL側のリソースIDなんて余計なだけじゃね?
401デフォルトの名無しさん:2007/11/17(土) 18:06:11
MFC VC でセマフォや共有メモリみたいなのって無いの?
402デフォルトの名無しさん:2007/11/17(土) 19:15:43
>401
自分で調べようとも思わないのか?
403デフォルトの名無しさん:2007/11/17(土) 19:25:37
ぐぐってみようとも思わなかったんだろうな
404デフォルトの名無しさん:2007/11/17(土) 19:25:53
VS2005付属MSDNのキーワードに「セマフォ」って入れるだけで
あっさり対応するクラスが見つかった件について。

おまえやる気無いだろ。氏ね。 >>401
405デフォルトの名無しさん:2007/11/17(土) 22:35:15
>>404
そんな高価なツールもってねえよばーーか
406デフォルトの名無しさん:2007/11/17(土) 23:04:35
VS2005のどこが高価なんだよw
今までのこと考えたらクソ安いつーの
つーかMSDNのちょっと遅れのイメージなんか完全フリーじゃねえか
407デフォルトの名無しさん:2007/11/17(土) 23:12:13
MSのサイトでみれるMSDNはVS2005のとは別ものなの?
同じなら、オンラインで検索すれば。
408デフォルトの名無しさん:2007/11/18(日) 16:15:43
基本的には同じはずだが…
409デフォルトの名無しさん:2007/11/18(日) 17:58:57
VS2005 MFCです
折れ線グラフを描画する、ツールを作りたいんだけど
MFCのツールボックスには、ピクチャーコントロールというツールと
カスタムコントロールというのがあるけれど、どう違うのでしょうか?
また、グラフを描画させるにはどちらのコントロールを選んだ方がいいのでしょうか?
410デフォルトの名無しさん:2007/11/18(日) 18:29:12
>>409
つ[TrueWinChart]
411デフォルトの名無しさん:2007/11/18(日) 18:43:10
>>410
>>409です
True WinChart for .NETですよね、標準価格:102,900円
そんな予算でないです
412デフォルトの名無しさん:2007/11/18(日) 18:58:09
自分で描画するだけだからコントロールは必要ない
413409:2007/11/18(日) 19:11:21
>>412
ダイアログに直接描画するのではなく、ピクチャーコントロールかカスタムコントロールに
描いて、それをサブクラス化したいんだけど、違いがよく分からないんだよね
414デフォルトの名無しさん:2007/11/18(日) 19:24:32
違いは標準かカスタムか
415409:2007/11/18(日) 19:34:14
ということは、カスタムコントロールのほうが、拡張性(自由度)が
高いってことだね?
416デフォルトの名無しさん:2007/11/18(日) 19:56:50
描画するだけなら、単純にウインドであれば良いだけじゃないの?
ゴテゴテ機能が付いている方がいろいろな横槍がはいって返って上手くいかないかもしれん。
417409:2007/11/18(日) 20:34:14
>>416
言われてみればそうかも知れないな、
コントーロールを貼り付けて、描画専用クラスを別に書き、シリアル化したデータを
流し込んで、グラフを描画させようと思ったけど
よく考えたら、描画専用クラスは、ダイアログに描こうがコントロールに描こうが必要なわけで
対象となるオブジェクトがどっちになろうが、使えるクラスを設計する方が賢いかもしれないね
418デフォルトの名無しさん:2007/11/19(月) 13:17:07
.flvから0.5秒おきのBMPを作りたいんですが
何かヒントだけでもいただけたら
419デフォルトの名無しさん:2007/11/19(月) 13:24:14
ヒント MFCと関係ない
420デフォルトの名無しさん:2007/11/19(月) 13:34:30
>>419
とは思ったのですがやはりプログラミングのプロ集団は
MFCスレかと思いまして。
421デフォルトの名無しさん:2007/11/19(月) 14:26:56
B's Recorderみたいな画面作りたい><
422デフォルトの名無しさん:2007/11/19(月) 15:29:48
>>420
DirectShowスレがあるぞ
423デフォルトの名無しさん:2007/11/19(月) 20:59:53
ShowWindowでウィンドウを描画するときに一瞬描画にもたつきます。

描画してからShowWindowするには、
WM_PAINTを送ってからShowWindowすれば良いでしょうか。
424デフォルトの名無しさん:2007/11/19(月) 23:40:48
>>420
ヒント:同病相哀れむ
425デフォルトの名無しさん:2007/11/19(月) 23:53:53
WM_PAINTってShowWindow、Invalidate、UpdateWindowなどの呼び出し
または他アプリに無効化された際に、発生するものであって、自分で
送るものじゃないと思う。

描画のもたつきについては、CompatibleBitmapへ予め描いておき
OnDrawなりOnPaintなりで、それを実画面に転送(BitBlt)する手法が一般的。
ダブルバッファとかダブルバッファリングで検索すると具体例が見つかるよ。
426423:2007/11/20(火) 01:06:54
>425
ありがとう。
やってみるよ。ほんとに親切にありがとう。
427デフォルトの名無しさん:2007/11/20(火) 22:10:01
>>420
画像処理スレが最適では
428デフォルトの名無しさん:2007/11/22(木) 09:57:43
VS6 MFCです。
複数のスレッドで色んな処理をしていて、
各スレッドの処理ログを一つの CListView に書き込んでいくというプログラムを作っています
こんなとき、どのように組むのが一般的というか技法的に正しいのでしょうか?
最初は動的に確保した領域にログを書いてそのアドレスをLPARAMに渡して
各スレッドからメインスレッドにメッセージを投げていたのですが
取りこぼしがあるとメモリリークしてしまったため、
今はmailslotを使ってやっています。
クリティカルセクションを置いたログ書き込みメソッドを持つ
CListViewの派生クラスを作り、
そのインスタンスを各スレッドに渡すような感じがいいんでしょうか?
429デフォルトの名無しさん:2007/11/22(木) 11:15:31
>>428
MSDNのサンプルに複数スレッドで実行した内容を1つのビューに反映させる
サンプルがあったはず。それが参考になるかも。
430デフォルトの名無しさん:2007/11/22(木) 18:36:52
>>各スレッドからメインスレッドにメッセージを投げていたのですが
PostMessageまたはSendMessageのどっちよ?
これで解答のしかたは大きく変わるし、質問者さん情報少なすぎ
mailslotか、そんなのあったのか、知らなかったよ
普通にクリティカルセッションで排他制御して
SendMessageでデータ投げて、無問題だったが?
後はシングルトーンによる、インスタンスの一意化?
とかそんな感じジャマイカ
431デフォルトの名無しさん:2007/11/26(月) 18:23:23
ダイアログのモーダレスのプログラムです。
http://www.athomejp.com/goldfish/mfc/dialog/modeless.asp
のサイトのプログラムを作成しているのですが、動きません・・・
誰か助言をお願いします。(Win2000・vc6.0)

リビルドすると、次のエラーが出ます。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2143: 構文エラー : ';' が '*' の前に必要です。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2501: 'CTestDlg' : 識別名を宣言するのに、型が指定されていません。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2501: 'm_pTest' : 識別名を宣言するのに、型が指定されていません。
ModelessDlg.cpp
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2143: 構文エラー : ';' が '*' の前に必要です。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2501: 'CTestDlg' : 識別名を宣言するのに、型が指定されていません。
c:\documents and settings\あ\デスクトップ\modeless\modelessdlg.h(19) : error C2501: 'm_pTest' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(99) : error C2065: 'm_pTest' : 定義されていない識別子です。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(189) : error C2440: '=' : 'class CTestDlg *' から 'int' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
432デフォルトの名無しさん:2007/11/26(月) 18:23:54

C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(190) : error C2227: '->Create' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(194) : error C2227: '->BringWindowToTop' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(204) : error C2440: '=' : 'class CTestDlg *' から 'int' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(205) : error C2227: '->DoModal' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(206) : error C2541: delete : 'delete' 演算子が、ポインタでないオブジェクトに用いられています。
C:\Documents and Settings\あ\デスクトップ\Modeless\ModelessDlg.cpp(211) : error C2227: '->BringWindowToTop' : 左側がクラス、構造体、共用体へのポインタではありません。
TestDlg.cpp

ソースファイルは、
http://www11.axfc.net/uploader/20/so/He_49138.zip.html
dlPASS=1
一応つけました。宜しくお願いします。
433デフォルトの名無しさん:2007/11/26(月) 18:36:10
>>431
エラーは抜粋してくれ、、、それができるなら質問しないでもわかるか。
modelessdlg.h 内で CTestDlgクラスを参照してるから。
#include "TestDlg.h" を適切な位置におけばよろしい。
面倒ならmodelessdlg.hの先頭に入れてもいいかもな。
434デフォルトの名無しさん:2007/11/26(月) 23:12:38
>>433
modelessdlg.hではポインタでメンバ定義してるみたいだから
modelessdlg.hの先頭で class CTestDlg; 入れて
modelessdlg.cppに #include "TestDlg.h" を入れるスタイルもあるな

自分でもわからんがヘッダに#include入れるのを無意識に避けるオレ
435431:2007/11/27(火) 09:29:10
>>433 様
>>434 様
有難う御座います。
おかげ様で、動きました。
ヽ(゚∀^○)ノ★'*:・.@+【感謝】+@.・:*'★(●゚ω^)ノ

またMFCを勉強すると同時に、クラス・メンバのC++をかじる必要があると感じた。
436デフォルトの名無しさん:2007/11/27(火) 22:00:22
MFCから入るとへんな誤解をしたまま気が付かない大人になるよ
437デフォルトの名無しさん:2007/11/27(火) 23:22:46
MFCつかわない人でもMFCのソース見れば
apiの使い方の参考になるよ
438デフォルトの名無しさん:2007/11/28(水) 02:30:32
それは認める。つまりMFCはAPIのリファレンスなんだよ。あるいはサンプル。
439デフォルトの名無しさん:2007/12/03(月) 09:02:58
保守!!!
440デフォルトの名無しさん:2007/12/03(月) 13:37:13
\あ\


なんか受けたww
441デフォルトの名無しさん:2007/12/03(月) 19:36:45
今 青龍マスター なのですが何に進化しますか?
 
442デフォルトの名無しさん:2007/12/03(月) 22:15:50
朝青龍に
443デフォルトの名無しさん:2007/12/04(火) 09:57:29
そして昼青龍へ
444デフォルトの名無しさん:2007/12/04(火) 15:45:35
その後、夕青龍へ進化した後に?
445デフォルトの名無しさん:2007/12/04(火) 19:57:46
夜青龍
446デフォルトの名無しさん:2007/12/04(火) 21:55:34
丑三つ時青龍を経て
447デフォルトの名無しさん:2007/12/05(水) 15:34:08
最後は昇竜拳!

よって>>441はケンorリュウ使い
448デフォルトの名無しさん:2007/12/05(水) 17:28:26
>>411ですけど
黄龍っしょ あとで わかりました
けど おもしろかったです。 どうもありがとうございます。
449デフォルトの名無しさん:2007/12/05(水) 18:16:31
→↓↘+P
450デフォルトの名無しさん:2007/12/05(水) 20:46:40
ちょwなんだよこの流れはwww
何故かプログラマーやってて良かったと思っちまったじゃねーかw
(この業界若しくは趣味でプログラミンでもやらなきゃこんなスレ見ないって意味でw)

おまいら最高www
451デフォルトの名無しさん:2007/12/06(木) 01:07:24
海自の新しい潜水艦の名前は蒼龍らしいな
452デフォルトの名無しさん:2007/12/06(木) 09:35:53
アスカ?
453デフォルトの名無しさん:2007/12/06(木) 10:36:01
日本の豪華客船でしょ!飛鳥
454デフォルトの名無しさん:2007/12/10(月) 10:56:32
保守+.(´・∀・)ノ゚+.ダー
455デフォルトの名無しさん:2007/12/11(火) 18:16:54
今、本に書いてある、ダイアログボックスにある二つのエディットコントロールに
入力した数値を加算して、それを表示するということをやろうとしているのですが、
「wprintf' : 1 番目の引数を 'char [80]' から 'const wchar_t *' に
変換できません」というエラーがでます。
その本はVC++.net用の本で私はVS2005を使用しています。
VS2005のほうでも通用するとあったのですが上手くいかず悩んでいます。
コードは以下のとおりです。
char str[80];
wprintf(str,"%d + %d = %d",
dlg.m_X,dlg.m_Y,dlg.m_X+dlg.m_Y); //エディットコントロールのメンバー変数。
dc.TextOutA(0,0,str);
全くの初心者ですが、何卒ご教授願えないでしょうか?
456デフォルトの名無しさん:2007/12/11(火) 18:38:25
wprintf -> printf
457デフォルトの名無しさん:2007/12/11(火) 18:41:13
まちがえた sprintf
458デフォルトの名無しさん:2007/12/11(火) 18:53:18
おぉぉ!>>456さんのいうとおりwprintfをprintfにしたら、
ビルドが成功しました! ありがとうございます。
しかし、二つの数値を入力してOKボタンを押したら、
ウィンドウに「フフフフフフxX」などという文字がずらーっと表示され、
加算した結果が表示されません。
これはなぜでしょうか?printfでエディットコントロールのメンバ変数
m_Xとm_Yを%dで表示しているし、char型で文字も整数も表示できるはずですし…
459デフォルトの名無しさん:2007/12/11(火) 18:59:11
おぉっと書き直してくださっていたんですね。
sprintfにしたら、バッチリ表示されました!
>>457さん、本当にありがとうございます。
460デフォルトの名無しさん:2007/12/11(火) 19:10:00
MFCらしくないコードだな
まともな本とは思えない
461デフォルトの名無しさん:2007/12/11(火) 19:22:12
MFCなのにchar[]使うのか・・・
462デフォルトの名無しさん:2007/12/11(火) 19:56:05
MFCらしくないですか?一応ほんの名前を出しておきますね。
「ゼロから学ぶVisualC++」という本です。
463デフォルトの名無しさん:2007/12/11(火) 20:54:35
>>455
CStringとか使うと楽チンだよ
464デフォルトの名無しさん:2007/12/11(火) 21:47:25
A系とW系がごちゃまぜだし、元の本のコードと違うんじゃないの?
465デフォルトの名無しさん:2007/12/12(水) 01:10:14
>>463さん、Cstringですか?
つまりchar[80]という文字配列ではなく、文字列型にデータを格納して
扱うということでしょうか?ちょっと試してみます。
ご助力ありがとうございます。
>>464さん、A系、W系ですか?
すみません、まだまだ初歩の者で、わかりません。
でも確かにそそっかしいので…。確認をしてみます。
466デフォルトの名無しさん:2007/12/12(水) 11:34:21
CStringクラスを使うなら

CString str;
str.Format("%d + %d = %d", dlg.m_X,dlg.m_Y,dlg.m_X+dlg.m_Y); //エディットコントロールのメンバー変数。
dc.TextOutA(0,0,str);

とかかな?
467431:2007/12/12(水) 15:28:58
431です前回は助けて頂き有難うございました。
再び問題が起きました。
現在モーダレス・ダイアグラムでプログラムを作っています。
画面上に複数(2つ)の異なるダイアグラムを表示させたいのですが、
上手くはいきません、助言と教授をお願いします。
作成する物
http://www.gazoru.com/g-70fd26a537d4c0d01c5f4796d8785b5e.jpg.html

まず モーダレスのプログラムサイト
http://www.athomejp.com/goldfish/mfc/dialog/modeless.asp
助言を頂きなんとか動かせる事ができました。
これを改造し、同時にモーダレスの2つのダイアグラムを表示させたいです。
以下の所を改造しリビルドした所、コンパイルは出きるのですが、動きません。
助言をお願いします。
一応ソースファイルを載せます(Win2000・vc6.0)
DLパス=1
http://www11.axfc.net/uploader/20/so/He_53709.zip.html
468431:2007/12/12(水) 15:34:33
スレ汚しすいません。追加したプログラムの部分です。
新規にダイアログを追加して、クラス名をCTestDlg2にしました。
CModelessDlgクラスにCTestDlg2のデータメンバを追加します。

BOOL CModelessDlg::OnInitDialog()
{
・・・・・
m_pTest = NULL;
m_pTest2 = NULL;
}

void CModelessDlg::EndTestDlg2()
{
m_pTest2 = NULL;
}

を追加

void CModelessDlg::OnButton2()
{
// TODO: この位置に・・・
if( m_pTest2 == NULL)
{
m_pTest2 = new CTestDlg2;
m_pTest2->Create(this);
}
else
{
m_pTest2->BringWindowToTop();
}
}
469431:2007/12/12(水) 15:35:23
その2
CTestDlgにウィンドウのデータメンバを追加します。
CTestDlgにCreate()メソッドを追加します。

CTestDlg2::CTestDlg2(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestDlg)
// メモ - ClassWizard ・・・
//}}AFX_DATA_INIT
m_pParent2 = NULL;
}

BOOL CTestDlg2::Create(CWnd *pWnd)
{
m_pParent2 = pWnd;
BOOL bret =
CDialog::Create( CTestDlg2::IDD, m_pParent2);
if( bret == TRUE)
{
this->ShowWindow( SW_SHOW);
}
return bret;
}
470431:2007/12/12(水) 15:36:16
その3
クラスウィザード(Ctrl+W)でPostNcDestroyメソッドをオーバーライドします。
クラスウィザード(Ctrl+W)でPostNcDestroyメソッドをオーバーライドします。

void CTestDlg2::PostNcDestroy()
{
// TODO: この位置に固有の処理・・・
if( m_pParent2 != NULL)
{
((CModelessDlg2 *)m_pParent2)->EndTestDlg2();
delete this;
}

CDialog::PostNcDestroy();
}


void CTestDlg2::OnClose()
{
// TODO: この位置に・・・
if( m_pParent2 != NULL)
{
DestroyWindow();
}
else
{
CDialog::OnClose();
}
}
471デフォルトの名無しさん:2007/12/12(水) 15:41:54
>現在モーダレス・ダイアグラムでプログラムを作っています。
「モーダレス」も「ダイアグラム」も間違い。
472デフォルトの名無しさん:2007/12/12(水) 16:41:58
>>467
m_pTest2 の初期化を忘れてる
473431:2007/12/12(水) 17:29:04
>>472
アリガト━━━ヾ(・∀・。`)(´。・∀・)ノ━━━!!!
動きました。
3日間真剣に悩んでいましたw

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

// "バージョン情報..." メニュー項目をシステム メニューへ追加します。
m_pTest = NULL;
m_pTest2 = NULL;
初期化したつもりで、見落としていました。
有難うです
☆⌒(*^▽゜)vありがd
474デフォルトの名無しさん:2007/12/12(水) 18:08:16
それより、

>助言と教授をお願いします。

に笑ってしまったw
475465:2007/12/12(水) 23:33:36
465です。>>466さん、わざわざCStringの使い方を
教えていただきありがとうございます。
大変助かります。
476デフォルトの名無しさん:2007/12/13(木) 01:08:43
>「ゼロから学ぶVisualC++」
amazonでのレビューの評価が概ね高いな。
上に貼ってあるコード見てるとちょっと微妙な気がするけど
評価高いってことは良書なんだろうね。
おれはC入門しながら、林ハルヒコ本で並行してMFCの
勉強してつまづいた経験があるから、どうもMFCのとっかかりは
難しいというイメージがある。
C++の理解が足りてないということに気付くまで、時間がかかりすぎた。
477デフォルトの名無しさん:2007/12/13(木) 06:22:51
これ?
>455のサンプルは見つからなかったけど、
他におもしろそうなソースがあったから見てみる
雑誌の過去記事の寄せ集めらしいから、記事書いた人によってばらつきがあるのかも

http://software.nikkeibp.co.jp/software/backno/03vcmook2.html
2003年4月17日発売 全国の書店でお求めください
日経ソフトウエアムック
ゼロから学ぶVisual C++
MFCの基本がわかる!
日経ソフトウエア編
■2000円(税込み)
■A4変型判、200ページ
■発行 日経BP社 ■発売 日経BP出版センター
■ISBN4-8222-1693-4
478デフォルトの名無しさん:2007/12/15(土) 19:24:26
VS2005 MFCです
ダイアログにCustom Controlを追加し、コンパイルに成功後、実行しますと
Custom Controlどころか、ダイアログ自体も表示されません
検索しましたら、MSDNに
http://msdn2.microsoft.com/ja-jp/library/dsezt3x7(VS.80).aspx
「Visual Studio コントロールを追加してもダイアログ ボックスに表示されない」
というタイトルでSDKの場合の対処法が出ていましたが、MFCの記載がありません
どなたかご存知ないでしょうか?
479デフォルトの名無しさん:2007/12/16(日) 06:55:05
あまりに丁寧語を使いすぎると 逆にうざく感じるのは
2chだからなんだろうなあ

おまいらおしえれ くらいのノリが普通な気がする俺は異常
480デフォルトの名無しさん:2007/12/16(日) 09:16:56
そこのMSDNの説明はコモンコントロールの場合の解決法と
リッチエディットコントロールの場合の解決法だけだな

その2つはMFCは特に何もしなくても使えるだろ
481478:2007/12/16(日) 10:55:36
>>480
サンクス
>コモンコントロールの場合の解決法と
>リッチエディットコントロールの場合の解決法だけだな
読解力が無くてスマソ、カスタムコントロールのことは書いて無かったんですね(^^;
478でも書きましたが、ダイアログにカスタムコントロールを貼り付けて
正常にコンパイル成功して、実行した場合、ダイアログらしきものが一瞬チラッと見えるのですが
直に、消えてしまうんですよ、どうしたらイイ?
>>479
こんな感じでOKww
482デフォルトの名無しさん:2007/12/16(日) 12:20:29
>>481
俺も初心者に毛が生えた位なんで間違ってるかもしれんが
リソースエディタのカスタムコントロールのclassのところが
空になってないか?
そこに自分の作ったコントロールのクラス名を入れないと駄目っぽい

カスタムコントロール MFCでぐぐるとサンプルも幾つかあったよ
483デフォルトの名無しさん:2007/12/16(日) 12:35:06
>>482
ありがとう、もう、あきらめて、他の掲示板で尋ねようか迷ってたところでした
class名を登録したら、上手くできました。
484デフォルトの名無しさん:2007/12/18(火) 13:04:39
保守!
485デフォルトの名無しさん:2007/12/18(火) 21:14:26
EditBoxのメンバ変数に、std::string型の変数を定義したのですが、無理ですか?
486デフォルトの名無しさん:2007/12/19(水) 09:36:59
>>485
悪いが言ってる意味が分からない
487デフォルトの名無しさん:2007/12/19(水) 21:45:26
>>486
>>485です、補足します
MFCで、メンバ変数の追加ウィザードを用いて、変数を追加する際
「変数の種類(V)」という項目があり、そこで、追加する変数の、種類を決めるのですが
その中に、std::string型がありません、強引にstd::stringと入力してやると、
エラーになります、やはり無理なのでしょうか?
488デフォルトの名無しさん:2007/12/19(水) 21:53:35
std::string用のDDX_Text があるか探して
なかったら自分で作る
489デフォルトの名無しさん:2007/12/19(水) 21:56:26
>>488
>>487です、サンクス
探し方ですがDDX_Textをgrepしたらいいですか?
490デフォルトの名無しさん:2007/12/19(水) 22:12:08
DDX_Textでgrepかけてみたけど、見当たんないだよね(´∀`)タハー
491デフォルトの名無しさん:2007/12/19(水) 22:17:00
自分で作れ。
つーかMFCなんだからCStringでいいじゃん。
492デフォルトの名無しさん:2007/12/19(水) 22:19:19
コアな部分でSTLをがんがん使ったクラスがあるんで、はなからstd::string型にしたいんですよ
どうやってツクルンデツカ?
作り方教えてホスイ
493デフォルトの名無しさん:2007/12/19(水) 23:14:19
MFCのソース参考するとか。
DDX_Textをラップするだけでもいいな。
つーかDoDataExchangeの最後あたりで、CStringに取った値をstd::stringに入れ直すだけでいいんじゃね?
頻度によっては毎回CStringからstd::stringに変換するのもアリ。
494デフォルトの名無しさん:2007/12/19(水) 23:45:14
テキストデータだとDDXの利点がほとんどない
自分で読み書きしても同じぐらいの手間だと思う
495デフォルトの名無しさん:2007/12/19(水) 23:55:34
CString()とstd::stringをオーバーロードしたりして、冗談ですww
(実際やったらどうなるのか、興味はありますが)
今回の場合は、EditBoxに入れる変数がコード番号だったんで、
EditBoxの値型をint型→_itoa_sでchar[]型に変換→std::stringとリレー変換でお茶を濁します
(*^‐^)_且〜〜

496デフォルトの名無しさん:2007/12/20(木) 01:21:34
CStringには operator LPCTSTRが実装されてるから、
std::string = (LPCTSTR)CString のほうがちょっとマシなきがする。 ほんのちょっとね。
497デフォルトの名無しさん:2007/12/20(木) 01:33:26
std::string& operator=(std::string& lhs, const CString& rhs) { return lhs = (LPCSTR)rhs; }
をグローバルで定義しちゃえば?
498デフォルトの名無しさん:2007/12/20(木) 02:12:38
暗黙的な型変換かstatic_castつかえよばyれgbぐ
499デフォルトの名無しさん:2007/12/20(木) 15:55:25
1.VS2008でMFCアプリのプロジェクトを選択
2.シングルドキュメントを選ぶ←これは無関係かも。
3.ビルドして実行する。
4.ウィンドウの右端を引っ張って縮める。
5.ウィンドウの右端を引っ張ってゆっくりとゆっくりと右に広げる。

これだけで、ボタンのない部分のツールバーの描画に白い縦線のゴミが
残るんだけど、これってほかになる人いる?

OSはVista Ultimate(x86)
VideoはGeforce8600GTS
500デフォルトの名無しさん:2007/12/20(木) 16:37:35
2008のスレなかったかな?
501デフォルトの名無しさん:2007/12/20(木) 21:42:57
MFCを学ぼうと思っているのですが、.NETに対する利点はあるのでしょうか。
それともMFCは時代遅れなのでしょうか。
502デフォルトの名無しさん:2007/12/20(木) 21:50:44
作る側は.netのが楽かもしれないけど、使う側は.net嫌う
503501:2007/12/20(木) 22:34:35
>>502
それってJAVAみたいに遅いってことですかね?
504デフォルトの名無しさん:2007/12/22(土) 13:41:35
MFCのほうがなんとなくプロっぽい
505デフォルトの名無しさん:2007/12/22(土) 23:15:23
MFCを手足のように使いこなせれば、.NETなんて1日あれば十分に習得できる
逆に.NETに慣れきったやつはMFCのUIでまずつまずく
506501:2007/12/22(土) 23:34:53
>>504
でもできることは似たようなものですよね?

>>505
MFCの方がいいのかなぁ
でもMFCって難しい・・・
507デフォルトの名無しさん:2007/12/25(火) 00:55:48
>>505
まず C++ でギブアップする奴が多い気もする。
508デフォルトの名無しさん:2007/12/25(火) 21:28:45
STLやboost使いまくってるソース見たら、
拒絶反応起こしてもしようがない。
MFCのC++なんて、たいした機能使ってないのにな。
509デフォルトの名無しさん:2007/12/26(水) 11:59:35
VS2005でCWnd派生のカスタムコントロールを作成し、
それをダイアログなどに貼り付けています。

WS_BORDERが指定されている際には自動で外枠が描画されますが、
この枠がXPでも立体的に描かれてしまいます。
リストビューやリストボックスのように平面的な枠にしたいのですが、
これはどこで設定するものなのでしょうか?
510デフォルトの名無しさん:2007/12/26(水) 12:28:26
EXSTYLE指定してる?
511509:2007/12/26(水) 12:35:00
>>510
「Extended Style」のプロパティはデフォルトのままで、値は0x0になっています。
「Style」は0x50830000で、これはデフォルトの値(0x50010000)から
WS_BORDERとWS_GROUPを追加したものです。
512デフォルトの名無しさん:2007/12/26(水) 13:38:48
指定してなきゃ誰も描かないと思うんだがな、、
spy++でスタイル見るとか、、、派生元クラスによるのかなあ
NCPAINTで自分で描く手もあるが、、、
513デフォルトの名無しさん:2007/12/28(金) 11:18:15
仕事収め保守
514デフォルトの名無しさん:2007/12/30(日) 13:50:36
VS2005MFCです
カスタムコントロールのサイズを取得する、関数って準備されてない?
515デフォルトの名無しさん:2007/12/30(日) 14:14:16
>>514
CSize size = CClientDC().GetTextExtent(_T("カスタムコントロール"));
516デフォルトの名無しさん:2007/12/30(日) 14:37:51
>>515
サンクス
CSize size = dc.GetTextExtent(_T("カスタムコントロール"));
カスタムコントロールの部分はキャプション名でいいよね?
long x = size.cx;
long y = size.cy;
CSize構造体からの、値の取出しはこれで出来た
517デフォルトの名無しさん:2007/12/30(日) 16:47:01
                               ∧_∧
                              (<_` )
                               >  ⌒ヽ
                               /   へ \
                              /   / / )
                              /  ノ/ /
                             /  /(_/~
                             /  /|
                            /  / |
                           〈  < 、 \
   ∧_∧     ダッ  515死ね           \ \ |⌒l
   (;`−) −=≡Ξ−=≡Ξ∧ ∧           \ ヽ | ミ
   (  :つ−=≡Ξ〜′ ̄ ̄(;″゚Д)           / 丿_)
   U ̄U −=≡Ξ(/(/ ̄ ̄ヽ)ヽ)            (_丿  ミ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
518デフォルトの名無しさん:2007/12/30(日) 16:47:34
                             ∧_∧
                            (<_` )
                             γ  ⌒ヽ
                             |   | \
                             |   | \ \
                              |   | ) )
                             |   |/ /
                ∧ ∧  i⌒i______ノ   |_ノ
                (" ゚Д) ヽ       |  ノ
               / / つ   ― ̄ ̄ ̄ ̄ ̄ ̄ | |
              / / /      ミ      | |
            / / ∪/       ミ     | |
   ∧_∧       / ∪ /          ミ   | |
   (;`−)    / / /                | |
   (  :つ                     ザッ  | |
   U ̄U                          (__丿
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
519デフォルトの名無しさん:2007/12/31(月) 12:44:59
大晦日におじゃまします (誰もみてないかなぁ。。)
エディットコントロールボックス(複数行・縦方向スクロールバー付き)に対して、
以下の様な処理でログを表示しています。

// ログの追記表示
strMsgKeep = strMsgKeep + "\r\n" + strMsg;
m_edtMsg.SetWindowTextA( strMsgKeep );   ← @

// スクロールバーを最下限に
m_edtMsg.LineScroll( m_edtMsg.GetScrollLimit( SB_VERT ) );  ←A

しかし上記方法で行うと、
@の処理でスクロールバーがログの先頭にいき、Aの処理でスクロールバーが最後に行くため、
大量なログを連続で表示すると、画面のちらつきが目立ちます。

画面のちらつきを目立たない様に表示を行うにはどうしたらいいのか教えて下さい
520デフォルトの名無しさん:2007/12/31(月) 13:33:29
つ GetWindowTextLength/SetCurSel/ReplaceSel
あとは自分で試せ
521519:2007/12/31(月) 15:17:11
>>520
ありがとうございます。
無事きれいなスクロールになりました
522デフォルトの名無しさん:2008/01/07(月) 15:45:59
保守!!!!!!!
523デフォルトの名無しさん:2008/01/09(水) 19:25:13
定期age
524デフォルトの名無しさん:2008/01/12(土) 04:27:42
最近MFC覚えたんだけどC++/CLIより使い易いな!!!!!
525デフォルトの名無しさん:2008/01/12(土) 06:38:35
そりゃぁ、C++/CLIが使いにくいだけだろ。
526デフォルトの名無しさん:2008/01/13(日) 20:05:42
教えて下さい。
VS2005 エディットコントロールボックスに対して、
関数で文字列データを改行しながら追加表示しています。

AddMsg(CString strMsg)
{
strMsg += "\r\n";
m_edtMsg.LineScroll( m_edtMsg.GetScrollLimit( SB_VERT ) );
int nEnd = m_edtMsg.GetWindowTextLengthA();
m_edtMsg.SetSel( nEnd, nEnd+1, TRUE );
m_edtMsg.ReplaceSel( strMsg ) ;
}

nEnd の値が30000未満は順調にデータ表示されますが、
30000になると、そこでデータが追加されなくなってしまいます。
どこが悪いのですか?
それとも、何かの制約があるのでしょうか?
よろしくお願いします。
527デフォルトの名無しさん:2008/01/13(日) 20:17:19
デフォルトでは 32767 文字
SetLimitText で広げる
528526:2008/01/13(日) 20:36:06
>>527
素早い回答、感謝です。
ありがとうございます。
529デフォルトの名無しさん:2008/01/13(日) 21:15:32
そういや、俺も前に>>526と同じ症状になったことあったな。
SetLimitTextか…いいもん教えて貰ったぜ!!!!!
530デフォルトの名無しさん:2008/01/14(月) 18:55:35
ちなみにSetLimitTextで設定できる最大値っていくつ?
531デフォルトの名無しさん:2008/01/14(月) 19:17:24
0
532デフォルトの名無しさん:2008/01/14(月) 23:11:52
mjd?
533デフォルトの名無しさん:2008/01/15(火) 00:26:56
>>530
脊髄反射せず、MSDNのヘルプ見ろや。

ttp://msdn2.microsoft.com/ja-jp/library/bb761607(en-us,VS.85).aspx

ちなみにデフォルトが32767なのは、16bit時代からのAPIを引きずって
いる名残だろう。Windows 95のメモ帳も、32KB超えるテキストを編集
できなかった。

MFCはWin32 APIをラップしているに過ぎないからな。

プログレスバー(CProgressCtrl)の範囲(Min/Max)やポジション指定が
16bitで表現可能な範囲の値なのも、同様の理由から。但しこっちは、
SetRange32(),SetPos32()がある。
534デフォルトの名無しさん:2008/01/15(火) 09:36:27
NTのメモ帳は昔から大きいのもOKだったけどな。
535デフォルトの名無しさん:2008/01/15(火) 12:40:55
CImageListのオブジェクトを受け取った関数内で
そのオブジェクトの1画像あたりのサイズを知りたい場合、
どのように参照するものなのでしょうか。

CTreeCtrl::SetImageList()やCHeaderCtrl::SetImageList()には
サイズ情報は渡していないのに、
描画の際にはちゃんとサイズを元にテキストなどを位置合わせしています。
これと同じような処理を行いたいのです。

GetImageInfo()というメンバ関数はあるようですが、
これは画像インデックスまで渡さないといけません。
1画像あたりのサイズは、画像インデックスは関係無いはずですが、
このような遠巻きな方法しか用意されていないのでしょうか。
536デフォルトの名無しさん:2008/01/15(火) 21:22:02
>>535
::ImageList_GetIconSizeを直接呼ぶしかないな。
537デフォルトの名無しさん:2008/01/15(火) 22:10:01
VS2005です。スナップショットを生成します。
hSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
[debug]で実行した時は、hSnap の値がそれらしい値になりますが、
[Release]で実行すると、hSnapの値が0になってしまいます。

どこが悪いのかさっぱりわかりません
どうか、よろしくお願いします。
538デフォルトの名無しさん:2008/01/15(火) 22:40:14
>>537
If the function fails, it returns INVALID_HANDLE_VALUE.
0というだけでは、無効なハンドルとはいえない。
539537:2008/01/15(火) 22:59:51
>>538
ありがとうございます。認識が間違っていました。
540デフォルトの名無しさん:2008/01/15(火) 23:48:12
MFCはあと何年の寿命でしょうか?
541デフォルトの名無しさん:2008/01/15(火) 23:49:51
ちょwwwww
542デフォルトの名無しさん:2008/01/16(水) 10:05:41
VS2005でMFCのアプリを作成してます。

質問なのですが、例えば2つのアプリケーションを作成し
Test1アプリで編集したデータを
Test2アプリで取得して表示に反映させる
(その逆も同様に)

どんな方法が一番簡単にできるでしょうか?
ご存知の方、どうか宜しくお願いします。
543デフォルトの名無しさん:2008/01/16(水) 10:14:28
プロセス間通信の話?
ファイルでもメモリマップドファイル(のメモリ)でもパイプでもメールスロットでも
クリップボードでもWM_COPYDATAでもすきなの使えばいい。
具体的に何をどうするかわからんと何が適切なのかはわからない。
544535:2008/01/16(水) 12:47:10
>>536
ズバリな関数です。
CImageListには備わってないんですかね。中途半端だな。
ありがとうございます。
545デフォルトの名無しさん:2008/01/16(水) 13:25:54
>>543
ありがとうございました。
素人なもので、どんな手段があるのか分からなかったのです^^;
メモリマップドファイルで調べてみます。
546デフォルトの名無しさん:2008/01/17(木) 11:38:23
教えてください。
コンボボックス内の項目を作りたいのですが、
CComboBox *pCombo;
pCombo = (CComboBox *)GetDlgItem(IDC_COMBO1);
pCombo->AddString("");
のところで、
error C2664: 'CComboBox::AddString' : 1 番目の引数を 'const char [17]' から 'LPCTSTR' に変換できません。
というエラーが出てしまいます。
どうやったら消せるか教えてください。
お願いします。
547デフォルトの名無しさん:2008/01/17(木) 12:07:51
>>546
「LPCTSTR」でググれ
548デフォルトの名無しさん:2008/01/17(木) 12:16:00
解決しました^^
ありがとうございました。
549デフォルトの名無しさん:2008/01/17(木) 16:53:29
ダイアログの大きさを変えると、グラフの大きさが異なる様なプログラムを作っています。
ダイアログの大きさを変えた時の画面の大きさを検出する。
GetClientRect構造体で画面を検出しているのですが、それが画面を大きくすると検出するのですが、
小さくすると検出しません・・・

検出している所は、
void CMyDlg::OnPaint()
で検出しています。
ヒントを下さい。
550デフォルトの名無しさん:2008/01/17(木) 18:18:33
小さくしても InvalidateRect は送られないから Paint もよばれない
551デフォルトの名無しさん:2008/01/17(木) 18:37:15
OnSize
552デフォルトの名無しさん:2008/01/17(木) 21:24:27
CS_VREDRAW|CS_HREDRAWを::SetClassLongで追加。
ただし、それだけだとボタン等も容赦なく再描画対象になるので、
WS_CLIPCHILDRENを付けておくといい。
553デフォルトの名無しさん:2008/01/18(金) 10:33:58
いや、、、大きさが変わったことを通知してくれるメッセージがあるのに
OnPaint使うのがおかしいだろう
ということで、>>551
554デフォルトの名無しさん:2008/01/18(金) 10:42:54
>>550-552

有り難うございます。
早速検索を行い見てみたのですが、あまり良く分かりませんでした。
::SetClassLong
で追加と言う事の様ですが、
もう少しヒントを頂けないでしょうか?
Class Wizardを見てもそれらしき物は出て来ませんでした。

今、更に検索しています。
知識を得て出直して、また来ます。
555デフォルトの名無しさん:2008/01/18(金) 10:51:56
>>554
>552なんて無視していいから>551。
556デフォルトの名無しさん:2008/01/18(金) 19:52:22
漏れも、 >>551 >>553 >>555 とまったく同意見だな。

CodeGuruで「CResizeDialog」を見つけられれば幸せになれるだろう。
557デフォルトの名無しさん:2008/01/18(金) 22:26:01
Resource.hに下記みたいな意味のない(使われていない)IDがたくさんできていて驚いた
のですが、これって消して番号をつめたほうがいいですか?
IDの番号が枯渇しそうな気がするんですが・・・

#define ID_32794 32794
#define ID_32795 32795
#define ID_32796 32796
#define ID_32797 32797
#define ID_32822 32822
#define ID_32823 32823
#define ID_32824 32824
#define ID_32825 32825
558デフォルトの名無しさん:2008/01/18(金) 23:39:32
IDEのシンボルブラウザから消せる気がした
559デフォルトの名無しさん:2008/01/20(日) 11:35:58
ダイアログ ベースで作成したものを、シングル ドキュメントに変更したいんだけど
途中から出来る?、新たに作り直す方が早いのかなぁ、どっち?
560デフォルトの名無しさん:2008/01/20(日) 13:33:21
>>559
ドキュメントの中にダイアログをはっつけちゃえば簡単かと。
561デフォルトの名無しさん:2008/01/20(日) 14:43:57
>>559
できない。つくりなおせ
562デフォルトの名無しさん:2008/01/20(日) 21:31:37
>>559
可能
563デフォルトの名無しさん:2008/01/21(月) 00:00:43
>>559
CFormView派生クラスを使うSDIを新規作成して、MyxxxView.cppと、
MyxxxView.hを、途中まで作成していた、MyxxxxDlg.cpp,MyxxxxDlg.h
をファイル名を替えて差し替えた後、エディタの置換機能で、派生
クラス名と基底クラス名をそれぞれ、CMyxxxxDlg→CMyxxxView、
CDialog→CFormViewへ置き換える。

ダイアログリソースもDrag&Dropか.rcを編集して持ってる。Resource.hを
手作業でリソースIDをマージする。

これくらいで、大筋取り込みは可能かと。 あとの作業は、元のソース
内容や記述による。
564デフォルトの名無しさん:2008/01/21(月) 05:12:31
MFCのピクチャーボックスに描画したものをメニュー処理(名前をつけて保存)からBMPで保存したいんだけど
ピクチャーボックスにファイル選択ダイアログがかぶってるとダイアログが写った状態で保存されてしまう
これって方法が悪いんだろうか?
なんか参考になるとこありませんか?
565デフォルトの名無しさん:2008/01/21(月) 10:32:18
そりゃウィンドウのDC使ってたらそうなるわな。
566デフォルトの名無しさん:2008/01/21(月) 11:02:00
>>564
Windowsはよく知らんけど、どうしてもウィンドウに描画されたものを使いたいなら、一度再描画したら?
# 普通はメモリDCに対して再描画して、それを保存するような気がするのだが。
567デフォルトの名無しさん:2008/01/21(月) 11:37:15
MFCでピクチャーボックスって、CStatic使ってんの?
もしそうなら、GetBitmap でハンドル持ってきてそれ使ってBMPにしては。
568デフォルトの名無しさん:2008/01/21(月) 21:10:22
>>567
よくわからないけどGetDlgItemでリソースエディタのコントロールを関連付けてる
どうにかなる?
569デフォルトの名無しさん:2008/01/21(月) 21:22:54
static_cast<CStatic*>(GetDlgItem(コントロールID))->GetBitmapでイケルと思った
570デフォルトの名無しさん:2008/01/21(月) 21:36:35
>>569
明日試してみるよ
ありがとう
571デフォルトの名無しさん:2008/01/21(月) 21:40:59
実行中にコントロールの上に別のウィンドウをかぶせたりするとコントロールが消えてしまう
一応クリックしたりすると再描画されるんだけど不便だしstatictextなんかは消えっぱなしなのでなんとかしたいのですが
どうすればいいでしょうか?
572デフォルトの名無しさん:2008/01/21(月) 22:25:21
描画をどの関数でやっているのだろう?
描画系の関数はOnPaintでやらないと消えるぞ
573デフォルトの名無しさん:2008/01/22(火) 06:32:22
Onscrollでやってる
statictextはリソースエディタで作ってわざわざ記述してないんだけど消えないようにするにはなにか記述しなければいけないの?
574デフォルトの名無しさん:2008/01/22(火) 22:17:53
Zオーダー的には他の兄弟コントロールの下になっていても、
たまたまフォーカスを受けた時は、処理の関係上表示されてしまう。
ってのが良くあるパターン。
575デフォルトの名無しさん:2008/01/23(水) 09:52:19
WS_CLIPCHILDREN の話なのか、独自描画の問題なのかわかりづらいな
576デフォルトの名無しさん:2008/01/23(水) 11:15:13
廚な質問なのですが、(本人は結構真剣)
ダイアログを2つ作りました。
2つ重なった場合、下の方を選択しても上になりません。
どうしたら良いですか?
577デフォルトの名無しさん:2008/01/23(水) 11:22:51
それは仕様
578デフォルトの名無しさん:2008/01/23(水) 15:11:17
モードレスダイアログにすればいいんじゃね?
579デフォルトの名無しさん:2008/01/23(水) 16:17:30
具体的にどうやって作ったのかわからんから説明のしようがないな
580デフォルトの名無しさん:2008/01/23(水) 16:47:36
メインダイアログからDoModal()でもう一個のダイアログを作ってるっぽくね?
それなら仕様としか言い様がない
581デフォルトの名無しさん:2008/01/24(木) 00:16:06
いまVS2005で勉強中なのですが、CListViewの描画まわりって、

OnInitialUpdate()でリストコントロールのスタイル設定、
OnUpdate()の中でリストコントロールの中身を更新、
OnDraw()の中でInvalidateRect()→UpdateWindow()

だけでいいんでしょうか?

MDIの子ウィンドウを2つのビューに分割し、そのうち1つを
画像表示に使い、もう1つをリストビューにしてるんですが、
子ウィンドウ生成直後や最小化復帰直後にリストビューの
領域だけが描画されないことがあるので、もしかすると
リストビューの作法から外れたことやってるのかも、と
思ったもので。
582デフォルトの名無しさん:2008/01/24(木) 09:52:12
Windows の作法から外れたことをやっとる
583576:2008/01/24(木) 10:07:53
>>577-580
有り難うございます。
>メインダイアログからDoModal()でもう一個のダイアログを作ってるっぽくね?
その通りです。メインからダイアログを作りそして、
2つ目のダイアログを作成したところ、
始めのダイアログが上にいかない Orz

仕様ですか・・・
どうしたら良いですか?
584デフォルトの名無しさん:2008/01/24(木) 10:14:40
DoModal だと無理。普通にモードレスでやればいい
585576:2008/01/24(木) 10:30:23
>>584
メインがモーダレスって出来るのですか?
出来れば、やり方を教えて下さい。
586デフォルトの名無しさん:2008/01/24(木) 10:56:01
メインを見えないウィンドウにしてモードレスで2枚作るとか
587デフォルトの名無しさん:2008/01/24(木) 23:30:17
>>585
>モーダレス
そんなものありません。
588デフォルトの名無しさん:2008/01/25(金) 09:46:57
>>585
試していないが

ダイアログベースアプリで、CxxApp::InitInstance()内で、ローカル変数
としてオブジェクトを作成し、dlg.DoModal()を呼び出している部分を ...

(1) メインダイアログ(CxxxDialog)を、CxxxxAppクラスのメンバ変数
にする。

(2) DoModal()を、CxxxDialog::Create(nID=CxxxDialog::IDD,...)と、
CxxxDialog::ShowWindow()に書き換える。

(3) CxxApp::InitInstance()をTRUEで終了して、InitInstance()終了後
  メッセージポンプを開始する。

で可能なんでわ?
589デフォルトの名無しさん:2008/01/25(金) 13:52:57
片方、DoModalで
dlg.Create(CXXX::IDD);
dlg.ShowWindow(
でいいんじゃね?

かスレッド
590デフォルトの名無しさん:2008/01/25(金) 22:39:14
>>585
>>588に付け足しで
モードレス化するダイアログにPostNcDestroyをオーバーライドして
delete this;を追加する
これをすると、ウインドウの破棄後に自己削除が行われて
アプリ終了時にメモリリークしないモードレスダイアログアプリができる
591588:2008/01/26(土) 10:13:38
>>589
普通はそれでいいと思うが、メインをモーダレスにできないという
やりとりがあったので。

>>590
おそらくマイクロソフトのサンプルコードから得た知識だろうが、delete
してよいのは、new で作成したオブジェクトの場合のみ。 malloc()して
いないポインタをfree()してはいけないのと同じ。

ダイアログをアプリケーションクラスの変数とすることで、アプリケー
ションクラスCxxxAppのオブジェクトが消滅する時、メンバ変数(CxxxDialog)
のデストラクタが自動的に呼び出されるので問題ない。

もちろん、ダイアログオブジェクトへのポインタを、アプリケーション
クラスのメンバ変数として、コンストラクタ/デストラクタで、

CxxxApp::CxxxApp()
{
  m_pCxxxDialog=(CxxxDialog *)new CxxxDialog;
}

CxxxApp::~CxxxApp()
{
  delete m_pCxxxDialog;
}

としても可だが、ダイアログ消滅時(PostNcDestroy)にdeleteして、アプリ
ケーションの消滅時にもdeleteすると、都合2回deleteが呼ばれるのでこれ
またマズー。
592デフォルトの名無しさん:2008/01/26(土) 11:07:18
>>591
>普通はそれでいいと思うが、メインをモーダレスにできないという
                         ̄ ̄ ̄ ̄ ̄
そんなものない。
593デフォルトの名無しさん:2008/01/26(土) 12:34:21
初歩的な質問かもしれませんが宜しくお願いします。
MFCアプリケーションのメインダイアログ(ウィザードが作ってくれたもの)に追加したリストコントロールで
Viewプロパティをレポートにしたときの話です。

幾つかのカラムを作成した後にアイテムを設定し実行したところ思ったように出力されたのですが、リソソ
ースエディタからリストコントロールのSortプロパティを昇順にしてみたところ追加したアイテムの一部が消
えてしまいました。
消えるアイテムは実際に追加するデータによりまちまちですが、最下部に配置された行のものと各行の先
頭のアイテムだけは残ります。しかし、出力された行のデータの並びがSetItemで追加したときとは異なっ
てしまっています。

ご存知の方がいらっしゃればご教授願えませんでしょうか。
594デフォルトの名無しさん:2008/01/26(土) 13:19:06
たぶんこれと同じ

----------------------------------------------------------
CListCtrlコントロールを、プロパティ-スタイル-ソート昇順と設定し
その後は、コード上で、ソートに関しては何も考えずに
SetItemTextとInsertItemを用いて、データを追加するロジックを
書いておりました。

データを昇順で追加すると、正常にリスト表示されますが
データを降順で追加すると(コントロールのソート機能が反応?すると)
なぜか一番最後の行しか、まともにデータが設定されておりません。
追加している間にソート機能が働いて、インデックスが訳わからない事に
なっているのでしょうか。
595デフォルトの名無しさん:2008/01/26(土) 14:37:51
>>591
いや、そんなの言われなくてもわかってるからw
596デフォルトの名無しさん:2008/01/26(土) 18:19:38
>>576のやりたい事って、
dlg.DoModal() の代わりに dlg.Create(IDD_DLG, GetDesktopWindow()) と dlg.ShowWindow(SW_SHOW) を使うだけだと思っているのは俺だけ?
>>576>>585で言っている「メインがモードレス」ってのは、何かを勘違いしていると思うのだが。
「モードレスとして出現するダイアログ」 を呼び出す側のことを 「モードレスダイアログ」 だと勘違いしているのでは?
そもそもメインダイアログがモードレスってのが意味分からん。
メインダイアログは、実質モードレスみたいなもんだと思うが。
デスクトップに対してモーダルではあるかも知れないが。
597デフォルトの名無しさん:2008/01/26(土) 21:16:24
>>594
それと同じですね。
その解決策をご存知でしたら教えて頂けないでしょうか。
598デフォルトの名無しさん:2008/01/26(土) 22:37:16
ヒント : >>594の出所
599デフォルトの名無しさん:2008/01/29(火) 01:22:30
MFC難し過ぎ
お前等なんでこんなもの分かるの?
600デフォルトの名無しさん:2008/01/29(火) 20:17:37
MFC とは関係ないかもしれませんが、
かなり昔から、VC6をしばらく使っていると、
ツールバーの端をクリックすると、
パソコンがフリーズするようになるんですが、
これってなおし方ありませんか??
601デフォルトの名無しさん:2008/01/29(火) 20:27:44
>>600
他のPCでも起きるかどうか調べてみたら?
おそらくPCを買い換えるのが吉。
602デフォルトの名無しさん:2008/01/29(火) 20:46:00
いや、もう8年くらい前から、
いろいろなPCでVC6をやってて起きてます。

知り合いソフト屋も、この現象の事は知っていて、
VC6では、ツールバーの端は触っては行けないのだ!
・・・と言っていますが、まさか、世界のVC6ユーザーが
全てそれで対応してるとも思えませんし・・・。
603デフォルトの名無しさん:2008/01/29(火) 21:53:56
そんなにひんぱんに起きる現象なら検索したら情報ぐらいあるだろ
お前の説明だと原因不明で対処しようがない
もうちょっとちゃんと説明してあるサイト探して来い。
604デフォルトの名無しさん:2008/01/29(火) 23:13:27
>>603

そうそう、検索するのすっかり忘れてました。

どうやら、MFCの例の無限ループのバグが、
VC6自体にもあるようですね。
・・・多分、そんくらいしかわからん。
605デフォルトの名無しさん:2008/01/30(水) 01:02:19
>>599
SDKの難しさと比べると断然に簡単だと思われ。
606デフォルトの名無しさん:2008/01/30(水) 10:44:09
俺はSDKの方が簡単だと思うけどな。
MFC使っても素のウィンドウやメッセージの振る舞い知らんといかん事もあるし
その上MFCの仕組みも覚えにゃならんし。
607デフォルトの名無しさん:2008/01/30(水) 21:06:42
元々SDKを楽に使う為に作られたのだから、ある意味当然だな。
SDKが簡単かどうかも微妙だけど。どこまでを範囲とすべきがサッパリわからんし。
608デフォルトの名無しさん:2008/01/31(木) 00:54:40
MFCは、VC++4.0の頃から使っているけど、これまで『MFCの例の無限
ループのバグ』って、一度も聞いたことないんだが?

VC6より、VC2002の方がずっと不安定だった思う。VC6は操作中に突然終了
したなんてことはめったにないが、VC2002は何かの拍子にIDEが終了して
しまう。

例えば、「VC内蔵エディタで開いているプロジェクトの対象ソースを、
プロジェクトのツリーから削除(プロジェクトから外す)して、その後
エディタを閉じる」といった操作で、いとも簡単に落ちた気がする。
609585:2008/01/31(木) 03:30:20
>>586-590
>>595-596

プロバイダの規制が有り、亀レス申し訳ないです。
大変参考になりました、有り難う御座います。
とりあえず、以下を実行いたしました。

//int nResponse = dlg.DoModal();

dlg.Create(IDD_TEST_DIALOG,GetDesktopWindow());
dlg.ShowWindow(SW_SHOW);

にしました。けれど次のエラーが出ています。
C:\Documents and Settings\○○\デスクトップ\サンプル\sample1\Debug\samp\Debug\Test\Test.cpp(62) : error C2664: 'int __thiscall CDialog::Create(const char *,class CWnd *)' : 1 番目の引数を 'const int' から 'const char *' に変換できません。
(新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。

エラーが出ています。
610585:2008/01/31(木) 03:31:01
>>588 様の所で止まっています。
>(1) メインダイアログ(CxxxDialog)を、CxxxxAppクラスのメンバ変数
にする。

(2) DoModal()を、CxxxDialog::Create(nID=CxxxDialog::IDD,...)と、
CxxxDialog::ShowWindow()に書き換える。

を具体的な記述が分からなく難航しています。
(CxxxDialog)を、CxxxxAppクラスのメンバ変数 にすると有りますが、
変数の型は、何でしょうか?

どなたか、お教え下さい。
初めのダイアログのIDを
IDD_TEST_DIALOG
クラスをCTestDialog
としています。
611デフォルトの名無しさん:2008/01/31(木) 15:39:05
モーダルもモードレスも同じ型だろ
612デフォルトの名無しさん:2008/01/31(木) 20:00:40
>>609-610
横レス失礼。
受け答えを見た限り>>588以降が書いてくれていることが理解できるレベルじゃないようだし
このまま続けても泥沼に嵌るだけだと思うよ。

いったん立ち返って、
>>584が「モードレスでやればいい」と答えたのに対して
>>585で「メインがモーダレスって出来るのですか?」と切り返したのはなぜ?
何かメインをモードレスにしなければならない理由があるのか、それとも単なる勘違いなのか?
>>584はもう一方のダイアログをモードレスにすればよいと提案してるんだと思うが。

とりあえずメインの方は弄くらずに、>>596の言う通りに
2つ目のダイアログをDoModal()しているところを
Create()とShowWindow()にしてごらん。
613デフォルトの名無しさん:2008/01/31(木) 20:35:09
>>608

ttp://www.tkb-soft.hmcbest.com/diary_2005_03.htm

にそれらしき事が書いています。
又、マイクロソフト自身が確か、ツールバーに何やら無限ループの
バグがあると情報公開していました。

でも、VC6のフリーズのなおし方の情報は見当たりません。

VC6はやめてVC2005にでも移行したいのですが、
私はFAの制御関係の仕事でソフトを作っていて、
ただでさえリアルタイム処理に向いていないウィンドウズで
managedのC++はかなり不安です。(一応何本か作りましたが)

FAの業界ではVC6はまだまだ現役なんだけどなぁ。
徹夜で頭くらくらでも、ツールバーのアイコンは慎重に、
真ん中目がけて「えいっ」て押すしかないのかなぁ。
614デフォルトの名無しさん:2008/02/01(金) 16:13:30
     ____  
   /      \     
  /  ─    ─\   FA?
/    (●)  (●) \  
|       (__人__)    |    ファイナルアンサー?
/     ∩ノ ⊃  /   
(  \ / _ノ |  |    
.\ “  /__|  |  
 . \ /___ /
615デフォルトの名無しさん:2008/02/01(金) 16:43:03
ふぁくとりぃおおとめぇしょん
616デフォルトの名無しさん:2008/02/01(金) 18:22:16
>>613
> VC6はやめてVC2005にでも移行したいのですが、
> 私はFAの制御関係の仕事でソフトを作っていて、
> ただでさえリアルタイム処理に向いていないウィンドウズで
> managedのC++はかなり不安です。(一応何本か作りましたが)

VC2005や2008に移行して普通にC/C++として使えばいいのに。
617デフォルトの名無しさん:2008/02/02(土) 04:59:19
>>609-610
目的に合うかどうかは別として、そのコードでそのエラーメッセージが出るとは奇怪な。
IDD_TEST_DIALOGってのはデファイン定数だよな?
むーん、我が家にはMFCの開発環境も無いから実験も出来ない。

まずは、モーダルとモードレスの大きな違いは説明できる?
618599:2008/02/02(土) 21:07:16
>>605
>>>599
>SDKの難しさと比べると断然に簡単だと思われ。

そうなんだろうけど、入門書を読んでいてもいまいちライブラリの体系のようなものがみえてこないというか・・・
Boarland C++ Builderみたいに完全に抽象化してほしいなり
619デフォルトの名無しさん:2008/02/02(土) 21:16:03
抽象化はMFCの目的ではないから駄目。
むしろ、そのおかげでWin32API呼び出しもガシガシ突っ込める所が魅力。
620デフォルトの名無しさん:2008/02/02(土) 22:12:19
MFCだとある程度まで理解するのは早いが、完全に理解するのは遅い(出来ない?)って奴かねぇ
621デフォルトの名無しさん:2008/02/02(土) 22:38:32
CWinAppとCWndが理解できたら全部わかったようなもの
Doc-Viewは使わなくてもいいし
他はapi使うのと変らない
622デフォルトの名無しさん:2008/02/02(土) 23:27:08
VBだと簡単にできる(らしい?)エクセルとか呼び出す機能を使えるようにしてくれって言われたけど
VCだとわけわからんかった・・・
VCのアプリからVBのアプリ呼び出すようにしたほうがよかったかな?
623デフォルトの名無しさん:2008/02/03(日) 02:32:10
>>622
IDEの機能でタイプライブラリのインポートをすると、
COleDispatchDriver派生のソースが生成されるから、それ経由でアクセスする。
Excelのタイプライブラリは*.olbか実行ファイルに含まれているか何れか。
624デフォルトの名無しさん:2008/02/04(月) 00:45:20
MDIでアプリケーションを作っています。
保存するファイルにメニューの選択項目の状態を
記録しておいて、ファイルを開いたときに、保存した時
の状態にメニューの選択項目をの状態を再現させたい
と思っています。状態の保存は出来たのですが、
読み込み時に子ウィンドウ用のメニューにチェックを
入れたりする方法が分かりません。どうすれば
いいのでしょうか?
625デフォルトの名無しさん:2008/02/04(月) 01:58:48
>>624

自己解決しました・・・
626デフォルトの名無しさん:2008/02/04(月) 03:02:22
おめでとう!
627デフォルトの名無しさん:2008/02/04(月) 06:06:25
まぁ、良いか悪いかは別として、
抽象化されてないMFCのコードは普通に組んでもうんこになる。
628デフォルトの名無しさん:2008/02/07(木) 04:37:33

激しくスレ違いかもしれませんが、質問です。

PCゲームを多重起動しようと試みたのですがダメでした。
大抵のゲームはWindowsのアカウントを2つ作成し、別々のアカウントで起動すれば問題ありません。

現在、Vistaを使っているのでXPではどうなるかはわかりませんが(XPは右クリックから別ユーザーで起動が可能)、
Vistaでその手法をとる場合、runasコマンドを使用することになります。
しかしこのコマンドで別々に起動しても、後から起動したほうが無効になってしまいました。

で、ここからがわけわかめなのですが、同一のデスクトップからの起動はダメでも、
Windowメニュー→ユーザー切り替えをし、別々に起動すればうまくいきました。

この違いはいったいなんなのでしょうか?
 
629デフォルトの名無しさん:2008/02/07(木) 07:08:45
激しくスレ違い(・∀・)カエレ!!
630デフォルトの名無しさん:2008/02/07(木) 14:35:05
数ある質問スレの中から何故MFCスレを選んだのだろうか?
631デフォルトの名無しさん:2008/02/07(木) 14:38:15
         / ̄\
        |     |
         \_/
          |
       /  ̄  ̄ \
     /  \ /  \
    /   ⌒   ⌒   \      >>628よく質問してくれた
    |    (__人__)     |      褒美としてオプーナを買う権利をやる
    \    ` ⌒´    /   ☆
    /ヽ、--ー、__,-‐´ \─/
   / >   ヽ▼●▼<\  ||ー、.
  / ヽ、   \ i |。| |/  ヽ (ニ、`ヽ.
 .l   ヽ     l |。| | r-、y `ニ  ノ \
 l     |    |ー─ |  ̄ l   `~ヽ_ノ____
    / ̄ ̄ ̄ ̄ヽ-'ヽ--'  / オプーナ  /|
   .| ̄ ̄ ̄ ̄ ̄ ̄|/|    | ̄ ̄ ̄ ̄ ̄ ̄|/| ______
/ ̄オプーナ/|  ̄|__」/_オプーナ  /| ̄|__,」___    /|
| ̄ ̄ ̄ ̄ ̄|/オプーナ ̄/ ̄ ̄ ̄ ̄|/ オプーナ /|  / .|
| ̄ ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/l ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/| /
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
632デフォルトの名無しさん:2008/02/07(木) 17:49:29
ダイアログのタイトルバーの左上の[x]を
表示しない、もしくは灰色表示ってどうやって出来ますか?
633デフォルトの名無しさん:2008/02/07(木) 17:55:56
あのボタンは、システムメニューの「閉じる」(SC_CLOSE)と連動してる。
GetSystemMenu()でメニューもってきてどうにかすればよい
634デフォルトの名無しさん:2008/02/07(木) 23:15:05
左上?
635ゆい:2008/02/08(金) 01:28:55
質問です!
マウスクリックした場所を丸く円を描くように
BITMAPキャラクターが動くといったものを
作りたいのですが、OnLButtonUp(UINT nFlags, CPoint point) とOnTimer(UINT nIDEvent)
にどのような記述を入れたら良いでしょうか?
636デフォルトの名無しさん:2008/02/08(金) 06:22:01
マルチ
637624:2008/02/09(土) 10:14:04
ファイルを開いた時のメニュー状態の復元はフラグセットしておけば、
後はフレームワークがうまくやってくれたのですが、
開いた後にタイトルバーのファイル名の後にファイルの中身を
元に計算した結果で作成した文字列を追加して表示したいのですが、
タイミングが分かりません。どこでやればいいのでしょうか?
ChildFrm のOnCreateClient CXXXXDoc::OnOpenDocument とか、
だと早すぎて後でファイル名で上書きされてしまいました。
638デフォルトの名無しさん:2008/02/09(土) 14:05:01
ダイアログベースのプログラムに、メニューバーが欲しくなった
"MFC ダイアログベース メニューバー"でググると
VC6時代の掲示板やMFCのサンプルが出てきたが、マンドクサくて( ゚д゚)ポカーン
最期のHP開いたら、VS2003のサンプルが載っていて
一分で完了シマスタ
639デフォルトの名無しさん:2008/02/09(土) 20:25:43
>>624
計算後にCDocument::SetTitle( ResultString ) ;

色んな箇所でタイトル弄る場合は、一々呼ぶのが面倒なので
CDocument::SetModifiedFlagをオーバーライドして、そこで書き換えてる。
640デフォルトの名無しさん:2008/02/09(土) 20:36:42
あごめん。Open時に計算してるのか...
だったらCYourView::OnInitialUpdate辺りで
CXXXXXDocのメンバー関数(自作)呼ぶようにして、そこで代える。
たぶんOpen時以外にも呼ぶだろうし。
641デフォルトの名無しさん:2008/02/09(土) 20:38:27
>>637
ChildFrame側だとOnUpdateFrameTitleでいけたけど、>>639のがよさげ。
642624:2008/02/10(日) 00:55:48
>>641
上手くいきました!ありがとうございます。

>>640
実はOnInitialUpdateは試してみたのですが、この関数を抜けた
後で見事に上書きされてしまい、今回の書き込みをさせて頂い
たのです。

起動時以外での書き込みは問題なく出来ていたので問題は
解決しました。皆さん本当にどうもありがとうございました。m(_o_)m
643デフォルトの名無しさん:2008/02/11(月) 07:46:59
>>635
ttp://www.vcppclub.com/
ここの質問掲示板で、中国人の先生にプログラムを習っている
まいという人ラスイ、マルチorz
644デフォルトの名無しさん:2008/02/12(火) 01:16:40
CString banana = "";
banana.IsEmpty();
の答えはどっちになりますか?
645デフォルトの名無しさん:2008/02/12(火) 07:03:23
試せorソース読め
646デフォルトの名無しさん:2008/02/12(火) 14:20:03
ソンナノ ワタシ シラナイ
647デフォルトの名無しさん:2008/02/13(水) 22:51:15
どなたか知っている方がいらっしゃいましたら教えてください。

現在CListCtrlのスクロールバーの色を変えるというのをやっています。
簡単だと思っていたのですが、実はめちゃくちゃ難しくて悩んでいます。
CListCtrlを普通のウィンドウに貼り付ける形でつかっています(ダイアログではない)
当初、OnCtlColorやカスタムドローを用いればできると考えていましたが、これらを用いてもできないようで
リストコントロールのようなウィンドウスタイルレベルで指定されている
「ネイティブスクロールバー」にはWM_CTLCOLORXXX系がこないという点からOnCtlColorでは無理
カスタムドローにスクロールバーの色を変える機能がないという点でこちらも無理
オーナードローもアイテムごとの描画でありスクロールバーを描画する部分がないため限りなく困難
ということがわかりました。
そこで、そもそもネイティブスクロールバーを非表示にしてCScrollBarを貼り付けて動作をエミュレートする形で作ろうとしましたが
ShowScrollBarやShowScrollBarCtrl等々のスクロールバーを非表示にする関数を一度呼び出しても
InsertItem毎に勝手にスクロールバーが復活するのでWM_NCCALCSIZEにてこれらの関数を呼ぶようにしました。
しかし、ここでこれらの関数を呼ぶと2点問題が浮上しまして、
1点目は、親ウィンドウにたいしてWM_ERASEBKGRNDが送信されてしまう
2点目は、単純に何度もShowScrollBarを呼び出すとかなり遅い
といった感じになりました
1点目については、CListCtrlにWS_CLIPSIBLINGSを指定することで解決できましたが(これもかなり謎な動作ですが)
2点目については解決するほうほうが思いつきません。

codeguruなどをあさっていると
FlatSB系のイニシャライズとEnableScrollBar関係の関数を使うと隠せるっぽいものを見つけましたが
自分のコードのOnCreateで呼び出しても無効で、OnSizeなどで呼んでも単なるEnableScrollBarとの違いはありませんでした。

もう手詰まり状態で、最終手段としてスクロールバーの部分をリージョンでくりぬいてその上にスクロールバーコントロールを貼り付けようかと考えているのですが
それ以外に何か解決方法があったら、ぜひご教授願えませんでしょうか?
648デフォルトの名無しさん:2008/02/13(水) 23:30:03
回答じゃないです

それだけ色々試すスキルがある人ならCListCtrlなんか捨てて
自前のコントロールなりクラス作れば良いんでない?
649デフォルトの名無しさん:2008/02/14(木) 15:28:37
なんでム板って突然小学生みたいなこと言いだす奴多いんだろう
ガチでそういう子供が紛れてたりするのかと疑いたくなる
650デフォルトの名無しさん:2008/02/14(木) 18:28:15
スクロールやってるのはコントロールの中の人だからMFC関係ない
651デフォルトの名無しさん:2008/02/15(金) 07:24:39
今からMFC始めるのって遅いでしょうか?
652デフォルトの名無しさん:2008/02/15(金) 08:58:39
EUCなどの文字コードを変更するAPIはないでしょうか?
653デフォルトの名無しさん:2008/02/15(金) 09:27:36
ここAPIスレ?
654デフォルトの名無しさん:2008/02/15(金) 09:54:47
>>651
遅いと思うけれど、必要があるなら必ずしも無駄ではないと思う。

>>652
MFCには該当の関数はありません。
655デフォルトの名無しさん:2008/02/15(金) 09:56:17
>>651
悪いこと言わないからC#でもやっとけ
656デフォルトの名無しさん:2008/02/15(金) 10:05:04
>>651
悪いこと言わないからC#なんかやめとけ
657デフォルトの名無しさん:2008/02/15(金) 10:06:59
じゃあ何がいいんだろう、WinAPIは論外となるからなぁ
658デフォルトの名無しさん:2008/02/15(金) 10:17:12
プロは MFC を使う
アマは VB,C# を使う
659デフォルトの名無しさん:2008/02/15(金) 10:17:41
>プロはMFCを使う
これ本気で言ってる?どんな業界の人?
660デフォルトの名無しさん:2008/02/15(金) 10:19:56
今全体を見渡せばC++ひいてはMFCで開発してるとこは少なくなってるからねぇ
そのせいかMFC使いは変なプライドある奴が多いから鵜呑みにしないこと
そこを見極める程度の力はあってほしい
661デフォルトの名無しさん:2008/02/15(金) 10:28:40
ひとえにプログラミングを行う業界と言っても向いてる方向は思っている以上にばらばらだからね
プログラミング好きで色々自分でやってみたりマな人のコミュニティを回ってる人とかじゃないと
井の中の蛙になりやすい

一行目で言ったような予想以上にプログラミングといっても様々にあることを理解できない
C++使って開発っていうのは結構カバーする範囲が広いというか多いから尚更(ここではMFC使いの人は)勘違いしやすい
662デフォルトの名無しさん:2008/02/15(金) 10:35:45
おめーらみんな MFC で挫折したやつらだろ
低レベルなやつは VB で満足してろよ
663デフォルトの名無しさん:2008/02/15(金) 10:38:59
.netのアプリはあんまり見かけないと思うけど
意外にみんな使ってるのかな?
664デフォルトの名無しさん:2008/02/15(金) 10:49:37
MFCは無償の開発環境がないから他と比べると利用者は少ないかも
無償の場合は利用者は多くても入門者ばっかりなのかもしれない
665デフォルトの名無しさん:2008/02/15(金) 11:04:03
Windowsのアプリを作る場合、

C & SDK(WinAPI) は原理的に何でもできる
ただし、コーディング量は膨大(現代ではアセンブラみたいなもの)

そこで上記の長所を維持しつつ、コーディング量を減らしてくれるのがC++&MFCだ
つまり、きめ細かいこと(付属のライブラリにないこと)をやろうとすれば、
WinAPIを直接叩く必要がある
C++は(Cも)そのときの親和性が高い

他の言語ツールは、そういうときに非常にやっかいになる
したがって、おのずとプロはC++ & MFC に行き着く
666デフォルトの名無しさん:2008/02/15(金) 11:39:05
MFCはまだ更新されてるからやって損はないよ
コードは反面教師として勉強になる
笑い話じゃなくて
667デフォルトの名無しさん:2008/02/15(金) 11:47:11
シロート騙して手っ取り早く儲けるには、バイトにVBで作らせた方がいい。
そのバイトが自分がプロのエンジニアだと勘違いしてるから鬱陶しい。
668デフォルトの名無しさん:2008/02/15(金) 12:36:08
MFCの方向性は合ってると思う。
ただ、煩雑というか整理されきれてないというか、惜しい。
だから、MFCに替わる新しいAPIラッパー作ってよ、M$。
.NETは好かん
669デフォルトの名無しさん:2008/02/15(金) 12:44:37
・作業効率なら.NET。ただし、難読化しないとソースが漏れる。
・MFCは難解な仕様とFAQを奔走することになる。ただし、MSクオリティ
・クロスプラットフォーム用のライブラリ=最大公約数になる。質はMSには劣る。
670デフォルトの名無しさん:2008/02/15(金) 13:11:40
.NET Frameworkのネイティブ版みたいなのがあればなあ
671デフォルトの名無しさん:2008/02/15(金) 13:58:33
GCJ+CNI→Java API for C++
672デフォルトの名無しさん:2008/02/15(金) 17:12:03
>>669
>ただし、MSクオリティ
褒めてるの?貶してるの?w
673デフォルトの名無しさん:2008/02/15(金) 17:13:33
難読化とか言ってる人はjavaのアプリはどう考えてるの?
674デフォルトの名無しさん:2008/02/15(金) 20:20:20
っATL
675デフォルトの名無しさん:2008/02/16(土) 02:32:47
俺のコードは難読なんだからね!
676デフォルトの名無しさん:2008/02/16(土) 12:35:49
なんで俺の職場ではみんなMFC使ってるんでしょうか?
677デフォルトの名無しさん:2008/02/16(土) 12:41:53
訊けよ。
678676:2008/02/16(土) 12:44:40
いや、多分昔の資産が使えるからじゃないかと思います。
679デフォルトの名無しさん:2008/02/16(土) 13:15:10
判ってるなら、ここで訊くな。
680デフォルトの名無しさん:2008/02/16(土) 14:17:40
遊びで2chのブラウザ的なもの作ってみたいんだけどMFCで作れますか?
言語は、C/C++使えますが、MFCは未知の領域なので・・・。
C/C++の知識でもっと簡単に作れるツールとかあれば教えてください。
681デフォルトの名無しさん:2008/02/16(土) 14:25:44
>>680
IEコンポーネント。
682デフォルトの名無しさん:2008/02/16(土) 15:10:29
まだサンプルコードがダウンロード出来るみたいだから貼っとく
ttp://scripts.web.fc2.com/scriptsup/Auto2Get2chNSP.py

元ネタはこちら
http://pc11.2ch.net/test/read.cgi/tech/1201073019/279
683デフォルトの名無しさん:2008/02/16(土) 17:01:14
人によって簡単のレベルが違うからな
684デフォルトの名無しさん:2008/02/16(土) 17:09:33
遊びでWindowsのOS的なもの作ってみたいんだけどMFCで作れますか?
言語は、C/C++使えますが、MFCは未知の領域なので・・・。
C/C++の知識でもっと簡単に作れるツールとかあれば教えてください。
685デフォルトの名無しさん:2008/02/16(土) 17:13:25
>>684
「OS的なもの」の定義にも拠りますが、単に「オペレーティングシステム」を作ってみるのなら
MFCは必要ありませんしMFCがあればできるというものでもありません。
質問を重ねるのなら、スレ違いになるので適当なスレへどうぞ。
686デフォルトの名無しさん:2008/02/16(土) 18:38:32
遊びで〜的なものを作ってみたいんだけどMFCで作れますか?のガイドライン
687デフォルトの名無しさん:2008/02/16(土) 20:29:59
MFCとATLとWTL、3つの中で始めるならどれが良いですか?
688デフォルトの名無しさん:2008/02/16(土) 22:46:04
MFCスレだけどMFCはお勧めしない
689デフォルトの名無しさん:2008/02/16(土) 23:58:56
MFCすれだからWTLはお勧めしない
690デフォルトの名無しさん:2008/02/17(日) 02:32:49
MFCスレだからATLもお勧めしない
691デフォルトの名無しさん:2008/02/17(日) 09:55:04
どれも今更感があるよなぁ
692デフォルトの名無しさん:2008/02/17(日) 10:53:09
WindowsAPIから始めるべき
693Gori:2008/02/17(日) 12:51:18
コントロ-ルIDについて教えて頂けませんか?

マニアルでは IDC_MSG と成っていますが 
僕のコントロールIDは IDC_EDIT1 と成ってます。

これを IDC_MSG に変更設定するには、どの様に
すれば良いのでしょうか?
694デフォルトの名無しさん:2008/02/17(日) 13:23:03
IDC_EDIT1をIDC_MSGという名前に付け直す
695Gori:2008/02/17(日) 13:37:31
>>694

やって見ます。。。m(__)m
696デフォルトの名無しさん:2008/02/17(日) 14:33:08
VC6.0まではIDEにMFC専用のUIが用意されていたけど、
2002以降はプロパティページとかに汎用化されてしまっているから、
今から始めると分かりにくいのかもしれないなあ。
697デフォルトの名無しさん:2008/02/17(日) 16:41:59
.NETf/wとかC#ってMFCのwrapperだと思っていいですか?
698デフォルトの名無しさん:2008/02/17(日) 16:51:40
いいえ。MFCとは殆ど互換性がありません。
699デフォルトの名無しさん:2008/02/17(日) 22:41:47
IDC_EDIT1のIDCってIDカスタム(ID Custum)の略なのでしょうか?
700デフォルトの名無しさん:2008/02/17(日) 22:44:36
どうみてもコントロール
701699:2008/02/17(日) 23:46:46
なるほど!ありがとうございます。今までずっと分からないでいました。
702Gori:2008/02/18(月) 04:44:38
(記述)

// プログラム名をローカル変数に渡す

strPgmName = m_strProgToRun;

***************************************************************************************
(結果)


C:\Day2\Day2Dlg.cpp(327) : error C2065: 'm_strProgToRun' : 定義されていない識別子です。

cl.exe の実行エラー

Day2.exe - エラー 1、警告 0


------------------------------------------------
いろいろやってみましたが。。。なぜエラーに成るのか解りません。
宜しくお願いします。。。m(__)m
703Gori:2008/02/18(月) 04:49:18
(記述)

// プログラム名をローカル変数に渡す

// strPgmName = m_strProgToRun;

***************************************************************************************
(結果)



Day2.exe - エラー 0 警告 0


に成ります。。。はあ〜〜 (-_-;)
704Gori:2008/02/18(月) 04:50:25
宜しくお願いします。。。m(__)m
705デフォルトの名無しさん:2008/02/18(月) 06:22:24

Day2Dlg.hの中に
m_strProgToRun
706デフォルトの名無しさん:2008/02/18(月) 11:09:09
VC++2005で作成した自作アプリ
(プリンタDCに対する描画による印刷処理は実装済み)に
PDF出力機能を追加したいと思っています。

Acrobatが入っているPCだと、印刷時にAcrobatを選択することによって、
既存の描画処理のままPDFを作成することができますが、
ユーザにプリンタを選択させることなく、
「PDF作成」のような直接のボタンを用意し、
その中で同じようにプリンタDCに描画していきたいのです。

Acrobatのように既存の印刷用描画処理を流用でき、
ユーザに操作を意識させないようにするためには、
どのような実装方法が考えられますでしょうか。
707デフォルトの名無しさん:2008/02/18(月) 11:11:02
MFCにAcrobatはついてない
708デフォルトの名無しさん:2008/02/18(月) 11:30:18
Adobe(R) PDF Library を使う
709デフォルトの名無しさん:2008/02/18(月) 11:41:54
>>708
このPDF Libraryって、
自作アプリへのPDF出力機能の組み込みにも使えるということなのですね。

Acrobat用プラグイン開発のためのものだと思っていました。
もう一度メーカーのサイトを読んでみます。
ありがとうございます。
710デフォルトの名無しさん:2008/02/19(火) 01:06:07
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \ 
     |┃     |    (__人__)     | 
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
711デフォルトの名無しさん:2008/02/19(火) 01:06:31
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \ 
     |┃     |    (__人__)     | 
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
712デフォルトの名無しさん:2008/02/19(火) 01:07:55
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \ 
     |┃     |    (__人__)     | 
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
713デフォルトの名無しさん:2008/02/19(火) 15:00:17
CHtmlViewの質問なんですが、メモリ内にあるタグソースを表示させるにはどうすればいいのでしょうか?
メンバ関数調べましたがそのような機能の関数はありませんでした。
一度ファイルに保存してNavigate2()等で表示するしかないのでしょうか?
宜しくお願いします。
714713:2008/02/19(火) 15:26:33
すいません自己解決しました
715713:2008/02/19(火) 16:01:12
about:付けたら行けたのですが文字数が多くなると駄目でした。
なので、他の方法お願いします。
716デフォルトの名無しさん:2008/02/19(火) 16:38:37
IHTMLDocument2::write()
717713:2008/02/19(火) 18:43:14
>>716
ありがとうございます。
どうやってやるか分からなかったんで調べて
ttp://www.nitoyon.com/vc/tips/ie_component.htmの
about:blank のページに動的にページを入れ込みたい
と言う項目を参考にしてやったらとりあえず表示は出来たのですが、
この処理を2回以上行うと、2回目から何も表示されなくなります。
〜->Navigate2("about:blank")のコールを毎回行わずに最初だけにすると前のデータが残っていて、
どんどん追加されていってしまいます。
どうすればいいのかお願いします。
718デフォルトの名無しさん:2008/02/19(火) 19:34:06
>>717
そういう仕様だったはず。
そのリンク先で紹介されているページのリンクが切れているけど
新アドレス貼っとくからClear()のソースも参考にしたらいいよ。

Using the WebBrowser control, simplified.
旧 http://www.thecodeproject.com/useritems/SimpleBrowserForMFC.asp 
   ↓
新 http://www.codeproject.com/KB/miscctrl/simplebrowserformfc.aspx
719713:2008/02/19(火) 20:59:33
>>718
レスありがとうございます。
仕様だったんですか。なら仕方ないですね・・。
諦めて一時ファイル作るなりします。

サイトの方もありがとうございます。参考にさせて頂きます。
720デフォルトの名無しさん:2008/02/20(水) 10:25:37
タブオーダーについて
質問させて戴けないでしょうか?

親ウィンドウに、
タブコントロールとOKボタンを置きます。

タブコントロールの中にもOK2ボタンを置きます。

書式⇒タブオーダーで、
OK2ボタン⇒OKボタンと指定したいのですが
どのようにすれば宜しいでしょうか?
721デフォルトの名無しさん:2008/02/20(水) 12:16:55
OK2ボタンがFocusを失ったタイミングでOKボタンにSetFocusする
722720:2008/02/20(水) 15:57:37
>>721
出来ましたっ。ありがとうございます
723デフォルトの名無しさん:2008/02/20(水) 23:10:05
ピクチャボックスでオブジェクトを動かしいて、領域外に描画した際に
その描画した線を消せずに困っています。
解決策としてInvalidate()を試しましたが、ピクチャボックスの領域も再描画されてしまい
意味がありませんでした。
それともピクチャボックス上で領域外にも描画するような処理を行うのはイレギュラーな使い方なんでしょうか?
724デフォルトの名無しさん:2008/02/21(木) 10:41:12
InvalidateRect()なら、再描画の領域指定出来るが・・・

領域外にはみ出してしまった描画を消すのではなく、
はみ出しても描画させない

つ【CreateRectRgn】【SelectClipRgn】
725デフォルトの名無しさん:2008/02/23(土) 15:19:31
分割ビューの切り替えについて質問があります。
CSplitterWndで左右に分割したとし、押したボタンによって、
右側のビューをツリービューとリストビューに切り替えたいです。
その際、現在のビューを削除するのではなく予め作っておいたツリービューかリストビューを
セットしたいのですがどうすればいいのか分かりません。
そもそもそういう事は可能なのでしょうか?
わかりにくい説明だとは思いますが宜しくお願いします。
726デフォルトの名無しさん:2008/02/23(土) 15:35:05
CSplitterWndにはそういう機能はないけど自分で入れ替えれば可能
727725:2008/02/23(土) 15:39:04
>>726
具体的にどのような手順で行うのか教えて頂けないでしょうか?
728725:2008/02/23(土) 16:10:00
やっぱりなんか出来る気がしてきたので自分でやってみます。
729デフォルトの名無しさん:2008/02/23(土) 16:28:28
よし頑張れ!
730デフォルトの名無しさん:2008/02/23(土) 17:13:04
タブでウインドウ切り替えができれば
ボタンで切り替えも同じようなもの
731725:2008/02/23(土) 18:37:13
えーっと、やっぱり良く分からない・・・アドバイスお願いします。
732デフォルトの名無しさん:2008/02/23(土) 18:44:18
>>731
タブのサンプルを探して読め。理解するまで実験しろ。
そこまで理解できていれば、ボタンでもすぐ書ける。
733725:2008/02/23(土) 19:26:29
はいサンプル探してみます。でも、また出来そうな気がしてきました。
734デフォルトの名無しさん:2008/02/23(土) 22:07:10
735725:2008/02/25(月) 18:27:43
>>734
いきなり英語のサイトを晒されてもわかるかヴォケ
おとなしく聞いているからって調子にのるな
いいかわかたっか!
736デフォルトの名無しさん:2008/02/25(月) 18:42:56
>いいかわかたっか!

餅搗け。この程度の英語も読めないようじゃ、餅搗いてもいられないかも知れんが。
737デフォルトの名無しさん:2008/02/25(月) 18:49:38
若貴のことだろう
738デフォルトの名無しさん:2008/02/25(月) 18:59:27
ちょいと相談。
あるActiveXをダイアログに置いているのだが、こいつがどうもフォーカス移動でおかしな動作をするようだ。
そこで、マウスクリックしてもフォーカスを移さないようにしたいのだけれど何かいい方法はないかな。
Spy++で見る限りSETFOCUSは飛んでいるけどpreTranslateMessageではトラップできないみたいなんだ。
試しに、EnableWindow(FALSE)して親からメッセージを送りつける方法は、そのコントロールがスクロールバーを
持っているのでスクロールバーの操作が親からではできないと言う点で失敗だった。
739デフォルトの名無しさん:2008/02/25(月) 23:21:55
MFCに未来はあるの?
740734:2008/02/25(月) 23:41:23
741デフォルトの名無しさん:2008/02/25(月) 23:46:36
>739
http://blogs.msdn.com/vcblog/archive/2008/01/07/mfc-beta-now-available.aspx
MFC Beta Now Available
A beta version of a major MFC/TR1 feature pack is now available for download.
Please note that this feature pack is only supported on systems which have the English language (ENU) version of
Visual Studio Team System 2008 Team Suite or Visual Studio 2008 Professional Edition installed.
These components allow developers to create applications with the “look and feel” of the most popular Microsoft products - including Office,
Internet Explorer, and Visual Studio. With this update, you’ll be able to build applications that utilize:
・Office Ribbon style interface
・Office 2007, Office 2003 and Office XP look and feel
・Modern Visual Studio-style docking toolbars and panes
・Fully customizable toolbars and menus
・A rich set of advanced GUI controls
・Advanced MDI tabs and groups
・And much more!
742デフォルトの名無しさん:2008/02/25(月) 23:52:58
ないっしょ。
743デフォルトの名無しさん:2008/02/26(火) 10:46:45
>>739

MFC の将来は Windows と同じ
Windows が続く限りMFC も続く
なぜなら、MS が提供するほとんどのソフト(ツール)が
MFC を使っているからだよ
744デフォルトの名無しさん:2008/02/26(火) 12:40:00
マイクロソフト自身はMFC使ってないだろ
745デフォルトの名無しさん:2008/02/26(火) 12:43:25
昔はサンプルもmakefileでcl使う方式だった
VC++で書けよ!と思ったw
746デフォルトの名無しさん:2008/02/26(火) 12:43:39
つーかころころDLLのバージョン変えるの勘弁してほしい
747デフォルトの名無しさん:2008/02/26(火) 13:13:08
C++/CLIに将来はあるの?
748デフォルトの名無しさん:2008/02/26(火) 13:13:36
>>746
DirectXよりマシ
749デフォルトの名無しさん:2008/02/26(火) 23:55:59
VisualStudio2008のMFCの新機能はどんな感じかな?
誰かレポートきぼんぬ
750デフォルトの名無しさん:2008/02/27(水) 00:49:49
http://rararahp.cool.ne.jp/vc/vctips/bar.htm
VC6.0MFCを使っています。
ウィザードでCFrameViewから作成したSDIをつくり、
デフォルトのメニューバーに加え、IDD_DIALOGABARを
プラスしました。
最初に起動したときにファイル読み込みを行ったときには、ファイル読み込みのダイアログが出て、CxxxDocの Serialize関数を読み込みます。
が、なぜか2回目を起動したときにファイル読み込みのダイアログは出るのですが、
Serialize関数まで行きません。それはブレークポイントで調べました。
こういうときに陥りやすい罠とかあったら教えてください。

751デフォルトの名無しさん:2008/02/27(水) 00:55:17
DocTemplate って new してるのに delete 
が要らないのはどうしてですか?

MFCが自動的にメモリを解放してくれているんだろうと
信じて使ってはいるのですが、気になってます。
752デフォルトの名無しさん:2008/02/27(水) 00:56:55
>750
自己レスです、また別のファイルを読んだときはSerializeまで行くみたいです。
ところが同じファイルを読み込んだときは、全く反応がありません。
普通のデフォルトのフォームビューではそんなことはありませんでした。
753デフォルトの名無しさん:2008/02/27(水) 07:37:52
ところでMFCって
Dialog以外でも
ポトペタできるようになったの?
754デフォルトの名無しさん:2008/02/27(水) 09:43:55
>750
そこのサイトに掲示板がある
755デフォルトの名無しさん:2008/02/27(水) 10:12:07
>754
ありがとう。そっちに行きます。
756デフォルトの名無しさん:2008/02/27(水) 11:15:06
>>754
?変わった方ですね… dialogは無し、書き換えてreloadで其の儘とは…
r
757デフォルトの名無しさん:2008/02/27(水) 11:46:37
CEditで右寄せのスタイル時に
キャレットが邪魔で文字が見にくいのですが
キャレットと一番右の文字の間に余白を設定することってできますか?
SetMarginsを使ってもキャレットの邪魔っぷりはどうにもなりませんでした。。
自前でエディット作るしかないのかな。
758デフォルトの名無しさん:2008/02/27(水) 11:56:46
>756
どういうことですか?
意味が分かりません。
759デフォルトの名無しさん:2008/02/27(水) 12:56:39
余白にキャレットが移動するとは思えない
スペース入れてやれば?
それかフォントかキャレットをいじる
760デフォルトの名無しさん:2008/02/27(水) 17:06:03
>750
http://www2.plala.or.jp/t-note/program/tips005.htm
自己レスです。
上記のホームページで対処法がありました。
わざとそのようにしていたんですね。
ダイアログバーをつけたから挙動がおかしくなったのかと
思い見当違いのことをしていました。
761デフォルトの名無しさん:2008/02/27(水) 17:22:04
CPrintDialog dlg(FALSE);
dlg.GetDefaults();
HDC hDC = dlg.GetPrinterDC();
LPDEVMODE pDevMode = dlg.GetDevMode();
//
//印刷処理
//

というルーチンで印刷処理を用意してします。

MSDNのCPrintDialog::GetDevModeの説明には
「この構造体に割り当てられているメモリは、
  Windows の GlobalUnlock 関数でロック解除する必要があります」
と書いてあるんですけど、GlobalUnlockに渡すハンドルって、
GlobalLockに渡すものと同じものですよね?

このハンドルって、CPrintDialog::GetDevModeの戻り値から
わかるものなのでしょうか?
762デフォルトの名無しさん:2008/02/27(水) 20:20:00
http://www.hey-to.net/ML-archive/vcppML/1999/msg09749.html

上のページではCPrintDialog::GetDevModeの戻り値そのもの(DEVMODE*型変数)を
使ってるね。
使ったことないけど、「この構造体に割り当てられているメモリ」という意味ではあってそうな気はするけど。
763デフォルトの名無しさん:2008/02/27(水) 23:13:16
>>751
CDocManagerのデストラクタで
764デフォルトの名無しさん:2008/02/28(木) 23:36:31
VS2005でMFCの開発をしています。
画像を見て頂きたいのですが、
移動させられる点がいっぱい付いているつまみの背景色の色@と、
メニューバー、ツールバー、ダイアログバーの背景色Aが異なっておかしい事になっています。
個人的には、@の背景色に合わせたいのですがどうすればいいのでしょうか?
宜しくお願いします。
ttp://kjm.kir.jp/pc/?p=53616.jpg
765デフォルトの名無しさん:2008/02/29(金) 09:48:03
画像見てないけど
全部変えたかったらスキン使え
766デフォルトの名無しさん:2008/02/29(金) 14:15:57
http://k0me-lab.hp.infoseek.co.jp/Tuto/MFC_Tips.html
ダイアログバーにカラーボタンを作ろうと思ってボタンの色を
換えるのが最終目的ですが、

このホームページの2番が分かりません。
リンク先の英語が分からないのも問題ですが、

2.紹介されているバグがありますので、これにしたがって、CInitDialogBar::Createを
.・・・・・・・・・・・・・
CInitDialogBarの中で呼んでいるCreateを、ベースクラスのもの(CDialogBar::Create)に書き換えるだけです。(引数同じ)

InitDialogBar.cppのCreateを見てもCDialogBar::Createになっています。
どこが間違っているのでしょうか?
それとも既に修正された?

767デフォルトの名無しさん:2008/02/29(金) 14:42:14
何それ?質問?愚痴?
768デフォルトの名無しさん:2008/02/29(金) 14:48:43
>766
自己レスです。
//if(!Create(pParentWnd, MAKEINTRESOURCE(nIDTemplate), nStyle, nID))
if(!CInitDialogBar::Create(pParentWnd, MAKEINTRESOURCE(nIDTemplate), nStyle, nID))
もしかしてこういうこと。
ただ単にCreateだと自分のところ(CInitDialogBar)のCreateになるからってことかな?
769デフォルトの名無しさん:2008/02/29(金) 14:51:38
>768
まちがい
if(!CDialogBar::Create(pParentWnd, MAKEINTRESOURCE(nIDTemplate), nStyle, nID))
でした
770デフォルトの名無しさん:2008/02/29(金) 15:06:15
ぼやき、ひとりごと
771デフォルトの名無しさん:2008/02/29(金) 15:13:49
自分で見てわからないものは使わない
772デフォルトの名無しさん:2008/02/29(金) 15:53:38
>770
レスが付いているとは思いませんでした。質問の仕方が悪かったですね。
改めて質問します。
というのは新しい派生クラスはを親をCDialogとしなさいと書いてあるけど、
そうするとprotectedされている関数にアクセスできないから、
CInitDialogBarに変えています。(これも確証は持てないのですが正しいのでしょうか?)

また、上記のホームページのようにCDialogをCInitDialogに変えると
void CHogeDialogBar::Createの中の

//return CDialog::Create(IDD, pParentWnd); ←デフォルト

の引数は同じにしないといけないことになります?


BOOL CHogeDialogBag::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
//return CDialog::Create(IDD, pParentWnd); ←デフォルト
return CInitDialogBar::Create(pParentWnd, lpszClassName, dwStyle, nID);
//ここの引数も自信がない。
}

これで正しいのでしょうか?
773デフォルトの名無しさん:2008/02/29(金) 15:54:38
>771
自分で考えるともっと分からないかも?
774764:2008/02/29(金) 16:02:36
>>765
レスありがとうございます。スキンですか。調べてみます。
ウィザードから作成したのですがスキンで変更するしかないのでしょうか?
775デフォルトの名無しさん:2008/02/29(金) 16:15:19
>772
また自己レスです。愚痴と言われても仕方ないですね。

BOOL NewDlg::Create(CWnd * pParentWnd, UINT nIDTemplate,
UINT nStyle, UINT nID)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
return CInitDialogBar::Create(pParentWnd, nIDTemplate, nStyle, nID);

}
こうしないといけませんね。たぶん・・・。
何で気づかなかったんだろう。
776デフォルトの名無しさん:2008/02/29(金) 19:04:24
VC6.0のMFCです。
ダイアログバーのCButton上でカラーボダンを作りたいのですが、
うまくいきません。
いろいろと調べたのですがどうもサブクラスかがうまくいっていません。
Assetion Errorが出 てwincore.cpp Line311でエラーが出ます。

MainFrame.h

publicにCDialogBarを継承した派生クラスを

public:
CNewDlg m_wndDialogBar

とし、サブクラス化の部分はこんな感じです。

MainFrame.cpp

CColorButton* pColor1 =(CColorButton*)m_wndDialogBar.GetDlgItem(IDC_BUTTON1);
if(!pColor1->SubclassDlgItem(IDC_BUTTON1, &m_wndDialogBar))
return(FALSE);

この段階でエラーが出るようです。

CColorButtonはCButtonの派生クラスです。

 
777デフォルトの名無しさん:2008/02/29(金) 19:05:10
ダイアログバーを派生クラスにせずに直接CDialogBarにしても
状況は変わりません。
なにとぞご教授お願いします。
778デフォルトの名無しさん:2008/02/29(金) 19:26:42
ダイアログバーが使いものにならないと気がつくといいね。
779デフォルトの名無しさん:2008/02/29(金) 20:43:01
>778
.NETに移行しなさいっとことかしら。
780デフォルトの名無しさん:2008/02/29(金) 21:09:06
>778
オーナードローあきらめてOnPaintにしたよ・・・orz
781デフォルトの名無しさん:2008/02/29(金) 22:05:14
>>776-777
> CColorButton* pColor1 =(CColorButton*)m_wndDialogBar.GetDlgItem(IDC_BUTTON1);
> if(!pColor1->SubclassDlgItem(IDC_BUTTON1, &m_wndDialogBar))
> return(FALSE);

SubclassDlgItem()の意味わかってる?
ダイアログバーの派生クラスを作ってるんなら
その派生クラス(CNewDlg)の変数としてCColorButton m_button;を追加して
m_button.SubclassDlgItem(IDC_BUTTON1, this);とするか、
ClassWizardでCColorButton型の変数m_buttonを追加する。

ダイアログバーの派生クラスを作らないのなら
CMainFrameの変数としてCColorButton m_button;とでもして
m_button.SubclassDlgItem(IDC_BUTTON1, &m_wndDialogBar);
782デフォルトの名無しさん:2008/03/01(土) 01:21:59
>781
ありがとう、使い方を間違えていましたね。
よくサンプルテキストを見るべきでした。
783デフォルトの名無しさん:2008/03/02(日) 09:06:14
CDocument や CView や CWinApp から
CMainFrame の m_wndStatusBar.SetPaneText にアクセスして、
ステータスバーにいろいろ情報を表示したいのですが、
どのようにすればよいのでしょうか?

今はグローバル変数で m_wndStstusBar をポイントする変数をとり、

CStatusBar* stsbar;

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  .................................................................

  stsbar = &( this->m_wndStatusBar );
  .................................................................
}

void CaaaView::OnMouseMove(UINT nFlags, CPoint point)
{
  CString str;
  str.Format( _T( "(%d,%d)" ), point.x, point.y );
  stsbar->SetPaneText( 0, str, TRUE );

  CScrollView::OnMouseMove(nFlags, point);
}

としているのですが、もうすこし MFC のクラス構造から、
CMainFrame のメンバにアクセスできないのかな?と考えております。
784デフォルトの名無しさん:2008/03/02(日) 09:41:06
普通はグローバル変数使わずにCDocument や CView や CWinApp から
CMainFrame にアクセスすると思う。
785デフォルトの名無しさん:2008/03/02(日) 09:51:56
CMainFrameさんが書いてあげるといい
786783:2008/03/02(日) 11:12:29
CView から CDocument だと CView::GetDocument() というのがありますね。

いろんなところから CWinApp だと ::AfxGetApp() というのがありますね。

CDocument から CView というのは、いまのところ再描画ぐらいしか必要がないので
CDocument::UpdateAllViews でまにあっております。

つまづいているのは、まさに >>784 さんにつっこまれているところでございまして、
それの具体的な方法がわかりません。CMainFrame にアクセスする
なんらかの関数などが用意されているのでしょうか?
例えていいますと ::AfxGetApp()->GetMainFrame()->m_wndStatusBar みたいな感じで

>>785 さんのレスは、たしかにそうなのですが、マウスの座標みたいなものは、
やはり CView で取りたいな、と思っております。
こういう場合は CMainFrame でマウス座標を拾って表示するというのが王道なのでしょうか?
MFC の初心者のため、雰囲気がわかっておりません。
(いまさらMFCやってるのかぁ?という突っ込みはかんべんしてください)
787デフォルトの名無しさん:2008/03/02(日) 12:29:28
>>783 786
CView::OnMouseMove()やCDocumentなどから直接更新するなら
GetParentFrame()またはAfxGetMainWnd() と CFrameWnd::GetMessageBar()で
CStatusBarのポインタ取得してSetPaneText()でできるよ。

MFCにはON_UPDATE_COMMAND_UIを使って
メインのステータスバーを更新する仕組みが備わってるけど、
それを使うとこの場合は冗長だろうね。
MFC ライブラリ リファレンス
ステータス バー ペインのテキストの更新
http://msdn2.microsoft.com/ja-jp/library/a9ys3wsb(VS.80).aspx

> MFC の初心者のため、雰囲気がわかっておりません。
> (いまさらMFCやってるのかぁ?という突っ込みはかんべんしてください)

ここはMFCスレなんだし、そんな遠慮は不要。
788デフォルトの名無しさん:2008/03/02(日) 12:35:41
MFCの質問としてはあれなんですが、SDIでアプリを作ってます。
while()の中で条件を満たす限りある処理を行っているのですが、
その途中に途中経過としてウィンドウに文字を表示させたいのですが、
処理中はウィンドウが応答無し状態になり処理が終了と同時に全ての文字が表示されてしまいます。
処理はきちんと行われ、文字表示はCEditViewクラスで行ってます。
文字表示以外の時は応答無しでも良いので文字表示を正しく行いたいのですがどうすればいいのでしょうか?
お願いします。
789788:2008/03/02(日) 12:55:05
自己レスですが、UpdateWindow()でいけました。
が、処理中にクリックすると応答無し状態になりこの状態では文字が表示されなくなります。
ウィンドウは分割して使ってます。
790デフォルトの名無しさん:2008/03/02(日) 13:21:54
>>789
マルチスレッドで。
手抜きするなら
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200110/01100094.txt
(Sleep入れたほうがいいと思うけど)
791デフォルトの名無しさん:2008/03/02(日) 13:30:35
>786
C++の基本を勉強しよう
クラスの外からは直接メンバ変数にアクセスしないように設計する。
792788:2008/03/02(日) 13:33:14
>>790
ありがとうございます。
教えて頂いたサイトのソース追加したら確かにいけました。
でも、マルチスレッドって言うのも興味があるので勉強してみようと思います。
793デフォルトの名無しさん:2008/03/02(日) 13:34:57
AfxGetMainWnd()って別スレッドで使うと
AppのMainFrameが取得できない?ので
AfxGetApp()->m_pMainWndを使うようにしてる
794デフォルトの名無しさん:2008/03/02(日) 13:56:02
>>793
別スレッドのMFCオブジェクトを操作するのはダメ
795デフォルトの名無しさん:2008/03/02(日) 14:21:24
>>794
例えばメインフレームからワーカースレッド起動して
ワーカーから
AfxGetApp()->m_pMainWnd->***()はダメ?
::PostMessage(AfxGetApp()->m_pMainWnd->m_hWnd, ...)なら良い?
796デフォルトの名無しさん:2008/03/02(日) 14:31:59
正直mfcに向いてない思う
797793,795:2008/03/02(日) 14:34:54
まじかorz
もう使って3年になるんだが辞表だしてくる\(^o^)/
798デフォルトの名無しさん:2008/03/02(日) 14:41:20
辞表うp
799793:2008/03/02(日) 14:47:09
>>798
実際辞める時は上司に意思表明だけでいいのよ
800デフォルトの名無しさん:2008/03/02(日) 14:56:04
>>795
http://msdn2.microsoft.com/en-us/library/h14y172e.aspx
>As a general rule, a thread can access only MFC objects that it created.

AfxGetApp()->m_pMainWnd->m_hWnd くらいなら大丈夫だと思うけど
将来はどうなるか知らん。
801デフォルトの名無しさん:2008/03/02(日) 15:04:33
>>800
In other words, if you want to access any MFC object from a secondary thread,
you must create that thread with one of the methods described in
Multithreading: Creating User-Interface Threads or
Multithreading: Creating Worker Threads.
って書いてあるけど、AfxBeginThreadで作成したスレッドからなら
アクセスしていいってことかな?
802デフォルトの名無しさん:2008/03/02(日) 16:19:56
>>801
No
スレッド中でMFCのクラス使うならMFCでスレッド作れ、ということ。
ハンドルとMFCオブジェクトとの対応マップとかスレッド固有の情報を初期化する必要があるため。
803デフォルトの名無しさん:2008/03/02(日) 20:19:43
マルチドキュメントのCChildFrameにツールバーを持たせたのですが、
ツールバーの全ての項目が灰色になっていてボタンを押すことができません。
何故でしょう?

CChildFrame::OnCreateソースです。

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)||!m_wndToolBar.LoadToolBar(IDR_CHILDFRAME)
)
{
TRACE0("ツール バーの作成に失敗しました。\n");
}

// TODO : ここに特定な作成コードを追加してください。

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
804デフォルトの名無しさん:2008/03/02(日) 21:34:41
Visual C++ 2008 Feature PackでMFCに機能追加ができるようだけど、使ってる人いる?
805デフォルトの名無しさん:2008/03/02(日) 21:52:43
>803
無効な場合は押せない仕様
806デフォルトの名無しさん:2008/03/02(日) 22:53:30
>> 802
よく分からんのだけど、PostThreadMessageを使えってこと?
でもあれ取りこぼしあるでしょ?PostMessageでおkと思ってたんだけど…
807デフォルトの名無しさん:2008/03/02(日) 23:32:45
話がかみ合ってない気がする。
CWndのようなMFCオブジェクトの受け渡しは駄目。
回避するにはHWND(ハンドルそのもの)を受け渡す or PostMessageを使えとMSDNには書いてある。
808デフォルトの名無しさん:2008/03/02(日) 23:33:54
>>806
PostMessageはいいけど、ハンドル取り出すためにMFCオブジェクトにアクセスするのが問題だと思われ。
809806:2008/03/02(日) 23:40:03
ラジャー
810803 :2008/03/03(月) 05:02:04
>>805
解決しました
リソースエディタでアクセラレータを設定して、
さらにChildFrameでON_COMMAND_UI_UPDATEイベントを追加してEnableしないと有効にならないんですね。
811デフォルトの名無しさん:2008/03/03(月) 22:08:14
世の中、MFCを使ったプログラムはC++が主流なのでしょうか?
最近習得が出来るよう学習を始めたのですが、教科書代わりに見ている
「猫でも分かるプログラム」のサンプルプログラムがCです。

このまま進んでも大丈夫かちょっと心配になってきまして・・・。
812デフォルトの名無しさん:2008/03/03(月) 22:11:47
Cじゃ無理だろ
813デフォルトの名無しさん:2008/03/03(月) 22:11:55
APIとMFCの違いはわかってるのかな?
814デフォルトの名無しさん:2008/03/03(月) 22:13:13
MFCを使ったプログラムはC++しかありません
815デフォルトの名無しさん:2008/03/03(月) 22:15:37
http://www.kumei.ne.jp/c_lang/index_sdk.html

ここにある章を順番に打ち込んでいっているんですが、これMFCですよね?
816783:2008/03/03(月) 22:19:51
StatusBar の件うまくいきました、皆様ありがとうございました。
817デフォルトの名無しさん:2008/03/03(月) 22:21:24
写経するだけなら中味は何でも同じだから
気にせずどんどん打ち込めばいい。
818デフォルトの名無しさん :2008/03/03(月) 22:22:47
>>815
全然ちゃうわ
819デフォルトの名無しさん:2008/03/03(月) 22:37:59
>>810
コマンドハンドラを作るだけで有効になった気がするが。
メニューもそうだけどコマンドハンドラが無い項目は灰色になる仕様だった希ガス。
820デフォルトの名無しさん:2008/03/04(火) 11:06:35
毎局長考、つるんでる馬鹿晒し


【TAITO INN 大宮】

 ゾウのげり (埼玉)


【ロングラン萬代】

 *APE* (新潟)


821デフォルトの名無しさん:2008/03/04(火) 12:58:15
MFCのCFormViewでダイアログバーをつけて,
CxxxViewのほうにピクチャーボックスをつけています。
グラフを作りたいのですが、MM_ANISOTROPICで
論理座標で指定すると、CPenで作った線までも拡大されてしまいます。
絶対座標のピクセルのX軸が640だとして、
論理座標のX軸を10振り分けたとすると、
640/10倍の太さににってしまうのです。
CPenの太さを0にすればピクセルになると書いてあるので
取りあえずそれで凌いでいますが、ちょっと不便です。
みなさんは、どのようにしてますか?


822デフォルトの名無しさん:2008/03/04(火) 15:29:28
そのCPenどうやって作ってる?
823デフォルトの名無しさん:2008/03/04(火) 16:58:22
CPen NewPen;
NewPen.CreatePen(PS_SOLID, 0, RGB(0,0,0));
こんな感じです。
NewPen.CreatePen(PS_SOLID, 1, RGB(0,0,0));
NewPen.CreatePen(PS_SOLID, 3, RGB(0,0,0));

とかしたいんだけど先ほど言ったように変に拡大されて
だめです。
824デフォルトの名無しさん:2008/03/04(火) 17:31:09
んー、
CDC::SetView〜とかCDC::SetWindow〜を組み合わせてはどうか
825デフォルトの名無しさん:2008/03/04(火) 18:05:04
>824
pDC->SetWindowExtとかいうことですか?
今これらを使っているためにおかしくなっています。
826デフォルトの名無しさん:2008/03/04(火) 19:03:46
ちょっと誤解を招いているかも知れません。
マップモードで座標をを論理的にしたいのですが、
ペンの太さまではそれの影響を受けたくないのです。
827デフォルトの名無しさん:2008/03/04(火) 19:08:24
それはどういうこと?
ペンだけを除外できると思う根拠は何?
828デフォルトの名無しさん:2008/03/04(火) 19:25:25
自分で論理単位でペン幅指定してるのに影響されないようにするとは?
829デフォルトの名無しさん:2008/03/04(火) 20:44:03
>828
例えば
絶対座標Xが200相対座標Xが50、
絶対座標Yが100相対座標Yが20としたら
ペン幅を1としても
200/50で横4倍縦5倍の線ができる。
ペンの幅だけは何とか縦横同じにしたい。
CPenでは縦横両方のペン幅を指定できないので
困っているというわけ。
論理座標を便利に使いながらペンを自由に
使えないかと模索中。
830デフォルトの名無しさん:2008/03/04(火) 21:12:33
模索するのは勝手だけど馬鹿だと思われるから書かない方がいいよ
831デフォルトの名無しさん:2008/03/04(火) 21:25:36
>830
これだと論理マップ使わないほうがいい。
832デフォルトの名無しさん:2008/03/05(水) 05:31:18
CToolBarのUPDATE_COMMAND_UIで下のようなコードを書いたところ、
ツールバーがひっきりなしにちらつきます。

pCmdUI->SetRadio(1);

if( hoge == 0 )
{
pCmdUI->SetCheck(1);
}
else
{
pCmdUI->SetCheck(0);
}

このソースからSetCheck()を削除するとちらつきが無くなりましたので、
SetCheckによる再描画がちらつきの原因だと思うのですが、
ちらつくこと無くSetCheckを使うためにはどうすれば良いのでしょう?
833832:2008/03/05(水) 08:57:50
CToolBarから派生させてERASEBACKGNDをオーバーライドして解決しました(^^)
このバグは早く直してほしいですね
834デフォルトの名無しさん:2008/03/05(水) 18:56:22
FlashやPhotshopにあるようなタイムラインを作りたいのですがMFCでは無理なのでしょうか。
雰囲気がリストビューに似ているのでリストコントロールを色々触っていたのですがどうも上手くいきませんでした。
・セル(行と列)単位の選択が不可能
・カラムがフレームの増増加と共に膨大な量になる
・セルに「○」など全角文字を1文字表示させるためには若干の広さが必要
・特定のセルだけに色が付けられない
など、近づくことさえ出来ず詰んでしまいました。
FlashとPhotshopのタイムラインは似たようなインターフェイスですが特殊なライブラリを使っているとか・・・?
835デフォルトの名無しさん:2008/03/05(水) 19:13:00
MFCは基本的な機能を提供するだけ
それ以外は自分でやる
836デフォルトの名無しさん:2008/03/06(木) 07:54:41
VS2008起動してニュースみてたらMFCがなんか始まりそうな予感
837デフォルトの名無しさん:2008/03/06(木) 08:56:33
>>836
kwsk
838デフォルトの名無しさん:2008/03/06(木) 09:04:45
マクドナルド・フライドチキン
839デフォルトの名無しさん:2008/03/07(金) 00:19:05
>>833
GetCheckで状態調べて、セットしたい状態と異なっている場合のみSetCheckすれば
解決したんじゃないの?
あと、バグっていってるのは、何を指してる?
840デフォルトの名無しさん:2008/03/07(金) 01:12:27
可哀想な子に触っちゃだめ!
841デフォルトの名無しさん:2008/03/07(金) 02:32:54
そうか、ダメだったか。
 
ああ、俺もこれで可哀想な子の仲間入りかな。 パトラッシュ、僕はもう疲れたよ。。
842デフォルトの名無しさん:2008/03/07(金) 03:38:53
>>839
アーッ
UPDATE_COMMAND_UI()以外のメソッド内で設定したスタイルはすべてクリアされると書いてあったので
pCmdUIのメソッドを使うことしか考えていませんでした。
よく調べてみたら、ツールバーにGetCheckedRadioButtonというのがあったんですね。
ありがとうございました(^^)
843デフォルトの名無しさん:2008/03/07(金) 09:33:26
おまえは自分のバグをすべて人のせいにするだろ
ソフト向いてないよ、やめれ
844デフォルトの名無しさん:2008/03/07(金) 09:54:03
お前にお前呼ばわりされる筋合いはありません。
845デフォルトの名無しさん:2008/03/07(金) 10:00:48
わかってないな
ソフト屋ってのは、不具合があったらまずは自分を
疑うところから始めるんだよ
その辺が甘いやつは向いてないよ
846デフォルトの名無しさん:2008/03/07(金) 15:35:35
俺が間違ってるわけがない!
847デフォルトの名無しさん:2008/03/07(金) 16:43:44
>>845
奇麗事ですね(^^
848デフォルトの名無しさん:2008/03/07(金) 16:55:24
まあ現場じゃ何でも人のせいにするあほうに振り回されるからな
849デフォルトの名無しさん:2008/03/07(金) 17:18:07
僕はあなたの同僚ではないのでどうでもいいですが(^^)
現場で使えない人に直接言えないからって、無関係な僕に言うのはお門違いですよね(^^)
850デフォルトの名無しさん:2008/03/07(金) 18:11:40
さらに言えば、そんな使えない人間が居る会社に入ったのも自分の能力の程度の低さのせいですよね(^^)
それをちょっと能力が劣るという理由だけで全部他人のせいにして逃げるなんて、人間としてどうですか(^^)/ヽ(^^)
851デフォルトの名無しさん:2008/03/07(金) 18:18:34
俺の能力がそんなに低いわけがない!
852デフォルトの名無しさん:2008/03/07(金) 18:25:59
大きな会社ほど使えないやつも多いということがわかってないな
853デフォルトの名無しさん:2008/03/07(金) 18:29:48
ってか他でやれと
854デフォルトの名無しさん:2008/03/07(金) 20:31:49
何でも人のせいにするあほうはみんなが思ってりよりかなり多いよ
http://www.amazon.co.jp/products/dp/4794214723
855デフォルトの名無しさん:2008/03/07(金) 21:14:33
どうでもいいよ
856ロリ本 ◆xCHiCkenQ. :2008/03/07(金) 23:00:11
WBS恥また
857856:2008/03/07(金) 23:00:58
誤爆しました、すみません
858デフォルトの名無しさん:2008/03/08(土) 01:56:53
なんかドロドロしてるねぇ
嫌だねぇ

ここで誰かMFC豆知識でも披露してふいんき変えてよ↓
859Gori:2008/03/08(土) 03:31:19
ActiveX 編に入ったのですが

DOSプロンプトを開いてWindowsへ登録しなければ成らない様なのですが
参考書通り やって見るとError と出てしまいます


参考書では
C:\WINDOWS> cd system
C:\WINDOWS\SYSTEM> regsvr32 MYCTL.OCX

これでリターンしたのですが。。。?

もしかしたら。。。リターンじゃ無いのでしょうか。。?



。。。。どうすると。。。良い物でしょうか?。。。。m(__)m
860デフォルトの名無しさん:2008/03/08(土) 06:56:44
VS2005のC++/MFCで
CDBVariant* pVal = new CDBVariant[3];
これdeleteしただけでエラー吐くw
861デフォルトの名無しさん:2008/03/08(土) 07:26:43
>>859
コマンドプロンプト開いて
regsvr32
と打つ(後ろの半角スペースも)、その後VisualStudioでビルドしてできた
ReleaseフォルダのしたのMYCTL.OCXをregsvr32 の後ろにドラッグアンドドロップ
してコマンドプロンプトにフォーカスを当ててからリターンでどうでしょう
862デフォルトの名無しさん:2008/03/08(土) 07:53:55
>>860
CDBVariant* pVal = new CDBVariant[3];
pVal[0] = new CDBVariant;
pVal[1] = new CDBVariant;
pVal[2] = new CDBVariant;
863デフォルトの名無しさん:2008/03/08(土) 09:41:19
regsvr32 ActiveX でぐぐったらいっぱい情報あるじゃないか
864Gori:2008/03/08(土) 13:35:52
>>861 >>863 さん 有難う御座います。

アチコチ検索して見て見ると、
僕の方で概念を理解出来ていない様です。

何が、どう解らないのかも、解らない状態のようです。。。。^^;
もう少しアチコチ読み歩いて見ます。。。。m(__)m
865デフォルトの名無しさん:2008/03/08(土) 20:16:48
MFC終わる終わる騒いでた奴らって何?
866デフォルトの名無しさん:2008/03/08(土) 22:09:46
>>862
それはないだろ...Javaじゃあるまいし...
867デフォルトの名無しさん:2008/03/08(土) 22:24:28
モードレスダイアログのクラスを用意し、
・親ウィンドウがnewで作成
・ダイアログクラスのPostNcDestroy()でdelete thisで自殺
というようにやっているのですが、ダイアログが残っているかどうかは
親ウィンドウはどうやって知ればよいのでしょうか。

親ウィンドウがnewで確保したダイアログのポインタを使う方法は、
自殺でdeleteされていたら不正アクセスになってしまいます。
868デフォルトの名無しさん:2008/03/08(土) 22:40:45
死ぬ前に親に言う
869デフォルトの名無しさん:2008/03/08(土) 22:55:28
そういや俺も親のメソッド呼んだり、ユーザー定義のメッセージポストしたりして
子の死亡を通知してるが、子がなにかしなくても親が知る方法ってあんのかな
870デフォルトの名無しさん:2008/03/08(土) 23:01:14
IsWindow
871デフォルトの名無しさん:2008/03/08(土) 23:04:02
一度作ったら、ダイアログ側で閉じても非表示にしかならない、という方法もある。
872867:2008/03/08(土) 23:40:02
> 死ぬ前に親に言う

やっぱりこういう構造になってしまうのですかね。
せっかく自殺するのに、その前に親に教えるとなると、
親に殺してもらうのと同じになってしまいますよね。

> IsWindow
このIsWindow()を使う方法って、
new後にCreate()したダイアログのm_hWndも別に憶えておくということですか?

この場合、自殺した後に作られた全く他人のウィンドウが
たまたま同じウィンドウハンドル値になって、親がIsWindow()に使ったときに
TRUEが返ってきてしまうことはあり得ないのでしょうか?

> 一度作ったら、ダイアログ側で閉じても非表示にしかならない、という方法もある。

たしかにこの方法もあるのでしょうけど、
ちょっと今の内部ルーチン的には無理があるので、
今回は作成&自殺を繰り返したいと思います。
873デフォルトの名無しさん:2008/03/08(土) 23:58:39
遺書を残して自殺しなよ
874デフォルトの名無しさん:2008/03/09(日) 00:11:56
>>872
GetSafeHwnd()
875デフォルトの名無しさん:2008/03/09(日) 00:23:23
MFCのモードレスダイアログのサンプルでは自殺直前に親に通知してるけど
通知された親がやるのはダイアログのポインタにNULL入れるだけ。

> 親に殺してもらうのと同じになってしまいますよね。 
同じだと何か問題あるの?
876875:2008/03/09(日) 00:29:29
× MFC
○ MSDN
877デフォルトの名無しさん:2008/03/09(日) 03:11:59
>>862
その方法とかいろいろ新クラス作るってテもあるけど
そもそも、なんで生成破棄だけでメモリ空間エラー吐くのかが不明だなぁ
スタックさんの勝手処理だと吐かないのに ふしぎ!
878デフォルトの名無しさん:2008/03/09(日) 15:32:05
産まれた後も臍の緒を繫いでおく
879867:2008/03/10(月) 09:35:31
> 同じだと何か問題あるの?

いや、結局親に伝えるのであれば、
わざわざ自殺するようなクラスにしなくてもよいはずなのに、
なぜこのような方法が推奨されているのかなと疑問に感じまして。

ちなみに、前回の
「親がダイアログのm_hWndを憶えておいてIsWindow()で自殺を断定する」
という方法は、やはり危険ということになりますでしょうか?

> GetSafeHwnd()

GetSafeHwnd()って、親が持っているポインタ先がすでにdeleteで自殺していて
そのポインタがNULLになっていないケースでは、余計危険ではありませんか?
880デフォルトの名無しさん:2008/03/10(月) 11:00:37
やり方はいろいろあるから状況で使い分ければいい。
いろいろ使ってるうちに自殺方式の良さがわかると思う。
881デフォルトの名無しさん:2008/03/10(月) 11:18:38
・子が自発的に死ぬ場合
子、自殺準備する
子「死にます」
子、自殺する
親、死に水を取る

・親が子に死んで欲しい場合
親「死になさい」
子「判りました」
子、自殺準備する
子「死にます」
子、自殺する
親、死に水を取る

・子が死ねない場合(1)
親「死になさい」
子「……」
親、暫く待つ
親、子を殺す

・子が死ねない場合(2)
親「死になさい」
子「判りました」
親、暫く待つ
親、子を殺す
882デフォルトの名無しさん:2008/03/10(月) 14:13:34
せちがらいな
883デフォルトの名無しさん:2008/03/10(月) 15:11:57
delete this嫌う人もいるけど、MFCの中でdelete this使ってるから抵抗するだけ無駄

// self destruction
void CView::PostNcDestroy()
{
// default for views is to allocate them on the heap
// the default post-cleanup is to 'delete this'.
// never explicitly call 'delete' on a view
delete this;
}
884デフォルトの名無しさん:2008/03/10(月) 19:22:44
> 879
MSDNには両方のケースの説明のってるし、別に推奨してないと思う。
産んだ後、面倒見なくて済むからやってるんじゃないかな?
ダイアログ自体がメインウィンドウの場合もあるだろうし。

m_hWndは断定はできないけど危険な気がする。自分なら使わない。
GetSafeHwndは論外。
885デフォルトの名無しさん:2008/03/10(月) 19:27:42
レポート形式のスクロールバーを保持しないリストコントロールにて、スクロールさせたときの状態(位置)を取得することは可能でしょうか。
スクロールバーが無いのでScrollWindowでスクロールさせたのはいいものの
アイテム0番目・カラム0番目の左上の座標が取得できないため
現在どれだけスクロールしているのか、どの列をクリックしたかが分かりません。
スクロールさせた量を自分で管理するしかないのでしょうか。
886デフォルトの名無しさん:2008/03/10(月) 20:53:07
クリックしたアイテムの位置くらいなら、
LVM_HITTESTあたりで何とかならないか?
887867:2008/03/10(月) 21:06:47
> 産んだ後、面倒見なくて済むからやってるんじゃないかな?

今回のようなモードレスダイアログのケースでは
面倒見ないままというわけにもいかないので、
自殺の方法も自殺以外の方法も手間的にはあまり変わらなくなってしまうのですね。

881のような書きかただと、子ダイアログのPostNcDestroy()で

子「私を殺して」
親「わかりました」
親、子を殺して死に水を取る

という方法もありますよね。

> m_hWndは断定はできないけど危険な気がする。自分なら使わない。
> GetSafeHwndは論外。

m_hWndをIsWindow()に渡して自殺を判定する方法が安全なのであれば、
わざわざ親に伝えなくても子が勝手に自殺できるのでしょうけど、
本当に安全なのか確信できる情報が出てこないので、
今回はMSDNのサンプルに従って、
親に報告してからdelete thisを使う方法でやってみたいと思います。
888デフォルトの名無しさん:2008/03/10(月) 21:51:17
>>886
行は取得できるけど列は無理じゃない?時代が変わったのかな。
889デフォルトの名無しさん:2008/03/14(金) 00:02:36
http://msdn2.microsoft.com/ja-jp/library/y0cka9es(VS.80).aspx
http://msdn.microsoft.com/library/ja/vclib/html/vclrfcsimplestringtcopychars.asp
・newの[]が()だ
・というか(ハローワールド入れたいとするなら)添字12は行儀悪い
・new領域ポインタをリテラルで置き換え迷子にしている
・別にいいけどstaticなのに通常メンバ関数だと思ってるっぽい
・思ってるっぽいのに、そのくせ引数として自分自身の持ってる大事な領域ブチ込もうとしてる、まぁいいけど

http://msdn2.microsoft.com/ja-jp/library/y0cka9es.aspx
一応直ってて感動した
890デフォルトの名無しさん:2008/03/14(金) 06:34:10
実行結果がなくなってるし
なんかGetBufferが気持ち悪い
CStringの方が使いやすそう
891デフォルトの名無しさん:2008/03/14(金) 21:58:25
CSimpleStringT自体のインスタンスは作った覚えがないな
ま、メンバ関数の世話にはなるし、基本と凝ってるのをクラスで分けてるぐらいの認識
892デフォルトの名無しさん:2008/03/16(日) 19:15:20
AdjustWindowRectEx を使って、
クライアント領域が512×512ピクセルぴったりにあわせたウインドウを作りたいのですが、
うまくいきません、どこがよくないのでしょうか?

InitInstance()部に下記のウインドウサイズを変更するコードを追加記述しています。
OSは WindowsXP で、スタイルは XP 標準のやつです。(クラシックではありません)
893892:2008/03/16(日) 19:15:53
>>892 です. 具体的にはこういうコードです

BOOL ChogeApp::InitInstance()
{
....................
....................
....................
HWND hwnd = this->m_pMainWnd->GetSafeHwnd();
long style = ::GetWindowLong( hwnd, GWL_STYLE );
long style_ex = ::GetWindowLong( hwnd, GWL_EXSTYLE );

RECT rect;
rect.left = 0;
rect.top = 0;
rect.right = 512;
rect.bottom = 512;
::AdjustWindowRectEx( &rect, style, TRUE, style_ex );

int scrlbar_w = GetSystemMetrics( SM_CXVSCROLL );
int scrlbar_h = GetSystemMetrics( SM_CYHSCROLL );
int window_w = ( rect.right - rect.left ) + scrlbar_w;
int window_h = ( rect.bottom - rect.top ) + scrlbar_h;
::SetWindowPos( hwnd, NULL, 0, 0, window_w, window_h, SWP_NOMOVE );

// メイン ウィンドウが初期化されたので、表示と更新を行います。
m_pMainWnd->ShowWindow(SW_SHOW); // defalut.
m_pMainWnd->UpdateWindow(); // defalut.

return TRUE;

}
894デフォルトの名無しさん:2008/03/16(日) 19:25:06
誤爆?
ここMFCスレですよ
895デフォルトの名無しさん:2008/03/16(日) 20:06:56
>>892
具体的にどううまくいかないかも書いた方がいいのでは無いでしょうか。

自分には良くわからないのですが
SetWindowPosをコメントアウトしてみての動作
window_w,window_hを100,100とか適当な値での動作
SetWindowPosをもっと後に書いてみたときの動作
等を試されてみては如何でしょうか
896892:2008/03/16(日) 21:14:27
すいません、現象を言ってませんでした。
AdjustWindowRectEx を使って取得すると、
予想したよりもウインドウ幅が大きくなって、
ウインドウ高さが小さくなります。

デバッガで追うと、
window_w が 537
window_h が 583
になります。

いろいろ即値で試してみて 523 と 613 にするとぴったりになります。
::SetWindowPos( hwnd, NULL, 0, 0, 523, 613, SWP_NOMOVE );
897デフォルトの名無しさん:2008/03/16(日) 21:28:21
たぶん高さは指定した通りになってて
幅は後から広がったんだと思う。
::GetClientRectか何かで確認してみ
898デフォルトの名無しさん:2008/03/16(日) 21:33:57
ああ、縦横にスクロールバーついてるのか
とりあえず指定したクライアントサイズになってるか調べるんだな
899デフォルトの名無しさん:2008/03/16(日) 21:53:54
ついでにviewのクライアント領域のサイズも調べたら自己解決するんじゃないか?
900デフォルトの名無しさん:2008/03/16(日) 22:56:49
MFCにメンバ関数あるやつまで全部apiで書いてるのは
どっかから丸ごとコピペしたからだろうか?
それでよくMFCスレで質問できるな
901デフォルトの名無しさん:2008/03/16(日) 23:42:13
>>896
AdjustWindowRectExはクライアント領域のサイズから
ウィンドウ領域の大きさを決めるんだから最終的に
GetClientRectしたときの大きさが(0,0,512,512)に
なっていればいいんじゃないですかね?

自分がVS2003のSDIで簡単にやってみた感じだと
クライアント領域がスクロールバーの分だけ大きくなってました
(0, 0, 512+scrlbar_w, 512+scrlbar_h)
902デフォルトの名無しさん:2008/03/17(月) 00:35:37
その辺、いつも比率に合わせてウィンドウサイズを変えてほしいって要望がくるけど
その仕様どおりに作るとロクなことがない
っていうか俺には無理。作れない。
毎回、理由の詳細を書いておけばいいんだけど
絶対に無理。これだけは覚えてる

フレームウィンドウを強引に変えるんじゃなくて
幅か高さのどっちか片方にあわせて必要ない
クライアント領域は黒く塗りつぶしておく仕様にするとみんな満足する
903デフォルトの名無しさん:2008/03/17(月) 02:58:11
> AdjustWindowRectEx 関数の計算では、スタイルの WS_VSCROLL と WS_HSCROLL は考慮されません。
> スクロールバーも考慮したサイズを取得するには、SM_CXVSCROLL または SM_CYHSCROLL を指定して
> GetSystemMetrics 関数を呼び出してください。

こんな使えねー関数は、ぽいだぽい。
904デフォルトの名無しさん:2008/03/17(月) 05:45:35
スクロールバーは、必要に応じて表示・非表示を切り替える設定もあるから、
そこは勘弁してやれ。
905デフォルトの名無しさん:2008/03/17(月) 23:46:31
GetWindowRectとGetClientRectとClientToScreenで計算するのが最善
906デフォルトの名無しさん:2008/03/21(金) 16:30:53
質問です!
この様な使い方はマズいでしょうか?
やりたい内容は、2回目の印刷ダイアログを開く際
1回目で指定した内容を、初期表示させたいのです。

CPrintDialog cd;

cd.DoModal();
(処理1・・・)
cd.DoModal();
(処理2・・・)

GlobalFree(cd.m_pd.hDevNames);
GlobalFree(cd.m_pd.hDevMode);


不安なのは、GlobalFreeで開放していないのに、
2回目のDoModal()を行って良いものかどうか・・・
907デフォルトの名無しさん:2008/03/22(土) 12:33:37
いくつか質問: 環境:VC++2003
MFC DLL:MFCをスタティックリンクした通常のDLL

DLLにダイアログリソースを追加してそのクラスを作成してます
class CDllDialog : public CDialog
{
...
enum{ IDD = IDD_DIALOG1 };
}
DLLにこのクラスを作成する関数を作りました
CDialog* MakeDllDialog()
{
return new CDllDialog();
}

(Q1)
DLLをリンクするEXE側でこのダイアログを使おうと思ったんですが
DLLのリソースを利用してのモードレスダイアログの作成はどうすればいいんでしょうか?
DLL側でCreateまでやるしかない??
CDialog *dlg = MakeDllDialog();
dlg->Create(/*DLLのリソースIDを入れる??*/, NULL);

モーダルは普通にできるみたい
CDialog *dlg = MakeDllDialog();
dlg->DoModal();

(Q2)
DLL側でnew, CreateまでやってEXE側にポインタを返しdlg->ShowWindow(SW_SHOW)と
するとアクセス違反になります。DLL側でCreateの後dlg->ShowWindow(SW_SHOW)なら成功し
表示されました。この違いは??
DLL側でCreateした直後のdlg->m_hWndとEXE側のdlg->m_hWndが異なるのはなぜ??
908907:2008/03/22(土) 12:42:50
(Q3)
ダイアログの実装をDLLに丸投げするならどういう実装にしますか??
EXE側から表示非表示や座標移動等は行いたい

追記:忘れてました
EXE側ではCDllDialogのヘッダファイルはありません

以上よろしくお願いしまう
909デフォルトの名無しさん:2008/03/22(土) 12:52:54
HWNDを返してSendMessageで操作する
910デフォルトの名無しさん:2008/03/22(土) 15:06:44
(A2)
EXE側プロジェクトでMFCを共有リンクしてるんじゃない?
スタティックリンクにすればうまくいくのを確認した。

(A3)
Q2のShowWindowのようにDLLから取得するポインタで操作すればいい。
とりあえずMoveWindowが効くのは確認した。
(ただしCDllDialog独自の処理はその方法ではムリよん。)
911デフォルトの名無しさん:2008/03/22(土) 15:09:48
>>907
Q1
MFC限定なら、
EXE側で、DLLをLoadLibraryして得られるHINSTANCEを、AfxSetResourceHandleすれば
DLLのリソースを利用できたと思った。
912デフォルトの名無しさん:2008/03/22(土) 15:18:15
(A1)
dlg->Create(%リソースID%, NULL)でOKだった。
やってみ。
913907:2008/03/22(土) 18:34:40
早いレスどうもです
>>911,912
リソースIDを指定するにはDLLのresource.hをEXE側でインクルードしないと
駄目ってことですか?インクルードしないとそんなの無いよって怒られます。

>>912の%リソースID%の'%'ってコードに入れるとエラーになったんですが
単なる強調表示と考えていいですか?

>>910 確かにスタティックにすれば上手くいきます。違いが良くわからん。
>>909 ハンドルとメッセージで操作すれば簡単ですね。気付かなかった。

プラグイン形式?でダイアログをどんどん追加できれば便利かなーと
思ってたんですけど、Q2の方法でスタティックライブラリでMFCを使用するなら
出来そうな気がしてきた。
914906:2008/03/22(土) 18:35:23
もしかして、CPrintDialog::DoModal()内で
GlobalFree()してからGlobalAlloc()し直してくれてるのでしょうか?
希望的推測ですが・・・
915デフォルトの名無しさん:2008/03/22(土) 19:03:09
>912
%リソースID%

可変値の意味だったが通じないね。ごめん。
resource.hでリソースIDに対応する数値を調べて指定して。

(例)
dlg->Create(1000, NULL)
916911:2008/03/22(土) 19:05:00
>>913
・リソースIDをDLLとEXE共通にする。
・DLLのリソースIDを、新しいIDとしてEXEで定義する。
・即値で指定する
お好きにどうぞ。
917913:2008/03/22(土) 19:24:29
>>確かにスタティックにすれば上手くいきます。違いが良くわからん。

細かい部分までは分からないが、デバッグで追ってみたら、
ダイアログ作成時の処理のパスが違ってた。

それよりビルドが通るのに驚いた。DLLとexeでそろえないとビルド通らなかった経験があるんだけどな。
基本的には揃えとくのが吉と思う。
918デフォルトの名無しさん:2008/03/22(土) 19:36:24
visualstudio 2005
SDI形式で作ってます。
ある大きさのクライアント領域を指定して、
それにあわせてウインドウを作りたいんですがよくわかりません。
自分なりにググっていろいろ試したんですが、お手上げです。
919デフォルトの名無しさん:2008/03/22(土) 19:42:59
どこかで似たような質問あって回答あったけど質問者が行方不明
920デフォルトの名無しさん:2008/03/22(土) 19:46:51
>>919
そのスレはこの板ですか?
この板なら大体何時ごろのレスか教えて欲しいです。
921デフォルトの名無しさん:2008/03/22(土) 19:48:33
このスレで最近1週間以内
922デフォルトの名無しさん:2008/03/22(土) 20:14:36
>>921
見つかりました。
回答はないんですね・・・
もうちょっと調べます。
923907:2008/03/22(土) 20:36:06
>>917
>>DLLとexeでそろえないと...
DLLもEXEも共有にすれば(Q2)の時にアクセス違反にならずに表示できました。
ただこのときに使われたダイアログリソースがEXE側の同ID番号のリソースが使われた。
スタティックリンク同士だとDLL側のリソースが使われた。
今回はDLLのリソースを使いたいので、共有同士でするなら
DLL側で>>911のAfxSetResouceHandleをすれば問題無し。

DLLとEXEをそろえていないのが元凶っぽいですね

>>915,916
なるほど、覚えときます。

>>922
>>892のコードでは出来ない?
924913:2008/03/22(土) 20:55:36
本当だね。AfxSetResouceHandleでリソースを使い分けられるね。APIではどう実現するんだろう。
925デフォルトの名無しさん:2008/03/22(土) 21:13:53
コモンダイアログとか使ったことない人だろうか?
926デフォルトの名無しさん:2008/03/22(土) 21:47:42
もうちょいkwsk
927デフォルトの名無しさん:2008/03/22(土) 23:47:04
解答wktk
928デフォルトの名無しさん:2008/03/23(日) 00:41:25
AfxSetResouceHandle使える環境なら、
ステップインしてどんなAPIで実現しているかを調べんのは簡単じゃね?
929デフォルトの名無しさん:2008/03/23(日) 01:18:21
MFCはソース提供されているのに何故読まないのか理解に苦しむ。
930デフォルトの名無しさん:2008/03/23(日) 10:52:04
「定義の参照」でソースに飛ぶようにしろや いいかげん・・・
931デフォルトの名無しさん:2008/03/23(日) 10:55:15
読んでるよ。API呼んでない。少なくとも直接的には。

_AFXWIN_INLINE void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource)
{ ASSERT(hInstResource != NULL); afxCurrentResourceHandle = hInstResource; }

#define afxCurrentResourceHandle AfxGetModuleState()->m_hCurrentResourceHandle


932デフォルトの名無しさん:2008/03/23(日) 11:02:53
あと 911 のMFC限定という発言を考慮してもらえるとありがたかった。
933デフォルトの名無しさん:2008/03/23(日) 11:40:11
どうせLoadResourceしたやつだろ
934デフォルトの名無しさん:2008/03/23(日) 15:19:10
MFCでグラフを書こうと思ったらどうするの?
手堅い方法を教えてください.
935デフォルトの名無しさん:2008/03/23(日) 15:33:51
リソグラフ
936934:2008/03/23(日) 15:40:14
>>935
ガリ版っすかwwwww

gnuplotみたいな処理をしてくれるクラスってないんですか?
グラフでつまずきたくないんで,できるだけ簡単に描画させたいんですけど.
それともみなさんLineToとか使って書いてるんですか?
937デフォルトの名無しさん:2008/03/23(日) 16:32:27
>>934
ぐぐってみても無さそうですねぇ
gnuplotってwindowsじゃ使えないんですか?
938デフォルトの名無しさん:2008/03/23(日) 18:01:44
>>937
wgnuplotってのはあるけどな
939934:2008/03/23(日) 20:09:27
>>937
windowsなら>>938にもあるwgnuplotですね.


とりあえずsystem関数でwgnuplotを呼び出すことにしました
http://hooktail.org/computer/index.php?Visual%20C%2B%2B%A5%D7%A
5%ED%A5%B0%A5%E9%A5%E0%A4%AB%A4%E9Gnuplot%A1%CA2%A1%CB
なんでもいいからもっと手軽にグラフを書ければいいんですが・・・
940デフォルトの名無しさん:2008/03/24(月) 12:26:55
941906:2008/03/24(月) 12:37:20
どなたか、判る方おりますかね?
942デフォルトの名無しさん:2008/03/24(月) 12:52:19
>>941
MSDNのPRINTDLGの説明は読んだ? ちょっと読んでみた限り、hDevNameなどはNULLを渡すと勝手にallocateするけど
NULL以外を渡した場合はそこを使うって読めるんだけど。
943906:2008/03/24(月) 15:52:00
>>942
回答ありがとうございます。
そうすると、前回確保した領域をそのまま使うので、
毎回確保するサイズが同じなら、OKという訳ですね。
hDevNameはその都度、サイズが違う可能性が高いっぽいな・・・
944デフォルトの名無しさん:2008/03/24(月) 19:48:58
ListCtrlの描画についてアドバイスをお願い致します。

見た目は幅の狭いExcelの表のようなものを作っています。
オーナードロー、レポート形式にてアイテムの高さとカラムの幅が全て13x13になっています。
スクロールは別のコントロールが管理し、CPoint(10,20)であればアイテム20番目カラム10番目が左上に描画されます。
表示する文字は1セルに1文字。
このListCtrlの領域が1300x1300であればセルの数は100x100で10000個描画されます。
僅かでも再描画の必要性が出てくるとオーバーライドした描画関数が動き、
左上のセルから右下のセルまで(上記の例ですと10000個)毎回描画されて非常に重いです。
描画関数はListCtrlの領域に収まるアイテム数分繰り返されるだけで
再描画が必要な領域が分からず全て再描画という手段をとっています。
少しでも軽くなればいいのですが良い案はありませんでしょうか。
945デフォルトの名無しさん:2008/03/24(月) 21:44:59
仮想リストにすればと思うけど
オーナードローできるか知らない
946デフォルトの名無しさん:2008/03/24(月) 22:19:21
>>944
NM_CUSTOMDRAWのオーバーライドで描画していない予感。
まあ、再描画領域自体はRectVisibleとかでクリップ領域を確認すれば、
必要最小限に抑えられる気もするけど。
947デフォルトの名無しさん:2008/03/25(火) 00:10:29
>>946
msdnにも書かれているDrawItemをオーバーライドして描画していました。
NM_CUSTOMDRAWを初めて知ったのですが、
DrawItemの前に呼び出される・・・つまりNM_CUSTOMDRAWを関知したら
DrawItemの代わりに必要な領域を調べ描画するということで宜しいのでしょうか。
時間的に今から試すのは厳しいので明日触ってみたいと思います。
948デフォルトの名無しさん:2008/03/26(水) 00:14:46
>>944
セル中の1文字表示はどうやって描いてるの?
TextOut系で描いても「非常に重く」感じるなら
もっと根本的なとこで間違ってる気がする。
949デフォルトの名無しさん:2008/03/26(水) 00:19:47
ListView(Ctrl)ってリストとして使うと相当使い勝手悪いから何やっても大抵あきらめるw
950デフォルトの名無しさん:2008/03/26(水) 16:20:02
ゆとりはマジすげぇぞ??
いとこの小学生が遊びに来た時、テストで40℃のお湯と60℃のお湯を同じ量混ぜたら
100℃のお湯になるって答えたら×になったんだけど何で??
とか聞いてきやがった。
もうアホかと思って、それならこの部屋の気温は20℃、廊下の気温は10℃だから
ドア開けて空気を混ぜたら30℃になるのか?それだと夏並に暑くなるよな?って言ってやったよ。

そしたら、?ごめんねお兄ちゃん…わたし馬鹿だから…?
でもね、お兄ちゃんとわたしが一つになったらきっとずっと熱くなるよね??
そう言って服をするりと
951デフォルトの名無しさん:2008/03/26(水) 17:49:44
わっふるわっふる
952デフォルトの名無しさん:2008/03/26(水) 23:35:50
40℃のお湯と60℃のお湯を同じ量混ぜたら
50℃になるかというと実はならないらしいね
953デフォルトの名無しさん:2008/03/26(水) 23:43:22
まあほぼ50℃にはなるよ。
混合熱とかで微妙に誤差が生じるとは思うが。
954デフォルトの名無しさん:2008/03/26(水) 23:46:10
「同じ量」の定義によるのかな。
同じ体積なら60℃の方が僅かに軽いからね。
955デフォルトの名無しさん:2008/03/27(木) 02:07:52
同じ質量
956デフォルトの名無しさん:2008/03/27(木) 15:13:08
VS2005
CListCtrlの複数削除をやろうとしていますがうまくいきません。

以下のように選択されたアイテムのインデックスを取って削除というループをしています。

POSITION pos = this->m_xcLst.GetFirstSelectedItemPosition();
while(pos != NULL)
{
    index = this->m_xcLst.GetNextSelectedItem(pos);
    index -= nDel;
    this->m_xcLst.DeleteItem(index); // アイテム削除
    nDel++;
}

しかし、3つ以上のアイテムを選択していると最後の選択アイテムのインデックスが正しく取れず他のアイテムを削除してしまったりします。
例えば、0〜6のアイテムがあったとして、"1,3,5"を選択していると"1,3,4"と返ってきてしまう。

DeleteItem()が悪いかと思い外してみると、
選択したアイテムのインデックスが正しく返ってくるのを確認しました。
(さっきの例だと"1,3,5"と返ってくる。)

インデックスを配列に取得して後ろから削除する方法も考えたのですがいまいちです。
良い解決策はありませんでしょうか。
よろしくお願いします
957デフォルトの名無しさん:2008/03/27(木) 19:06:27
単純に後ろから削除でいいだろ
958デフォルトの名無しさん:2008/03/27(木) 21:33:50
>>956
nDelの変数の意味が分からん
959デフォルトの名無しさん:2008/03/27(木) 21:53:27
やりかた忘れたけど検索したらすぐ見つかった
960デフォルトの名無しさん:2008/03/28(金) 10:12:18
>>957
>>956です
m_xcLst.GetNextItem(index, LVNI_ABOVE | LVNI_SELECTED);

として、下から選択アイテムを検索していくことで実現できました
アドバイスありがとうございました
961デフォルトの名無しさん:2008/03/28(金) 18:33:58
>>960
>>956から
    index -= nDel;
を消すだけなのに。
962デフォルトの名無しさん:2008/03/29(土) 10:43:50
>>961
ちゃんと確認した?

それだとうまくいかないよ。VC.net 2003
963デフォルトの名無しさん:2008/03/31(月) 02:04:18
VS2005でエディットコントロールを作り、
他のボタンやエディット等のコントロールの上を通った時に説明する機能を作ろうと思っています。
OnNcHitTestを各ボタンごとに設定しれやれば良いかと思ったのですが、
ボタンから作るイベントハンドラにWM_NCHITTESTが有りません。
過去にClassWizardのメッセージフィルタをウィンドウにする、という解決法が
提示されているのは見つけたのですが、
VS2005ではクラスウィザードではなくイベントハンドラウィザードで
イベントハンドラを追加しており、そこにはメッセージフィルタといった
機能は存在しないので困っています。 
VS2005でも同等のイベントハンドラの追加ができないでしょうか?
964デフォルトの名無しさん:2008/03/31(月) 02:33:35
>>963
WM_NCHITTESTはダイアログのいべんとにあんじゃね? エディットでなくてさ。
VC6(クラスウィザード)でもダイアログのイベントだし、な。
965デフォルトの名無しさん:2008/03/31(月) 08:59:56
ウィザード使い方わからなかったら自力で追加することも可能
966デフォルトの名無しさん:2008/03/31(月) 18:37:11
ツリーって特定のアイテムの入れ替えは出来ないのでしょうか?
データ自体をListCtrlなど別に格納しておいて、ツリーの全消去→再構築でも出来ないことはないですがあまり好ましくないですし・・・
967デフォルトの名無しさん:2008/03/31(月) 21:44:47
>>965
なるほど、リストコントロールのWM_NOTIFYのイベントプロシージャが
ウィザードでは1つのリストコントロールにしか割り振れないが(ClassWizardのバグ?)、
それをやれば複数のリストコントロールのWM_NOTIFYのイベントプロシージャを作成出来ると言うわけだな。
968963:2008/03/31(月) 21:47:56
確かにダイアログ側のイベントにWM_NCHITTESTは有るようです、ありがとうございます。

しかしCPointが与えられるだけなので、どのボタンの上をマウスが通過した、等の情報は得られないのですね…
Spy++だとボタン上にマウスがヒットしたイベントを取れているので、できないかと思ったんですが、他の方法を探すしか無いんでしょうか。
座標テーブルを作ってマウス座標に対応したメッセージを表示する…というのも(本質的には違う問題になってしまいますが)できなくはないですね。
969デフォルトの名無しさん:2008/03/31(月) 23:02:15
だからボタンから作るイベントハンドラにWM_NCHITTESTでいいんだろ
970デフォルトの名無しさん:2008/04/01(火) 08:32:18
>>966
InsertItemとDeleteItemで普通にできない?
子があるとちょっと面倒かも。(自信なし)
971デフォルトの名無しさん:2008/04/01(火) 19:01:51
VC8でダイアログにフレーム間の時間(_秒)をリアルタイムで表示するプログラムを組んでいます。
負荷を増していけば整数値で1〜60になると思ったのですが飛び飛びになります。
具体的には0、15か16、31か32、45か46、61か62と言った具合です。
1FPSでも1000msになって欲しいのですが1015msになりました。
この15ms刻みの値の意味は何なのですか?

以下のようなプログラムです(別スレッド)
DWORD BefoeTime = timeGetTime();
while(1){
 DWORD dw = timeGetTime();
 while( BefoeTime+16 >= dw )
  dw = timeGetTime();
 DWORD output = dw - BefoeTime;
 ダイアログのテキストボックスにoutputを表示
}
これだと16msと31msのどちらかが表示されて平均値が約25msになりました。
972デフォルトの名無しさん:2008/04/01(火) 19:14:12
誤爆?
MFCと何の関係が?
973デフォルトの名無しさん:2008/04/01(火) 19:22:28
>>972
あれ、CDialogとかCWndとかをつかっているのでMFCかと思っていたのですが違うのですか?
FPSの固定の方法はCと同じなので違うとすればMFCと思いまして。
974966:2008/04/01(火) 20:11:02
>>970
レスありがとうございます。
確かに少々処理が面倒でしたが無事に導入できました。
ソートがあるんだからアイテム同士の並び替えもデフォルトで実装されていればよかったのになぁ

>>971
リフレッシュレートに合わせているようにも見えますね。
そのプログラムだと16ms/fだけどDialogBoxの更新で同期が取られて31(30?)ms/fの段階で更新しているのではないでしょうか
975デフォルトの名無しさん:2008/04/01(火) 20:20:23
CDialogやCWndはMFCだが971にはMFCに関するものが出てきてないからだよ。

ちょっとよく分からないのだけど、971のコードの出力結果が1,2,・・・16に
なるのを期待してるの?
976975:2008/04/01(火) 20:23:07
ごめん。975は勘違いだ。もう少し考える。
977デフォルトの名無しさん:2008/04/01(火) 21:46:39
>>975
DirectX VC++.net(VS2005)の組み合わせで問題無いから恐らくMFCの仕様
DirectXには垂直同期を切る方法があるがMFCではどうなんだろ
974の通りウィンドウの描画で強制的に同期が行われるのであれば表示更新用スレッドをもう1つ立てることで解決しないかね
978デフォルトの名無しさん:2008/04/01(火) 22:01:50
NT系のQuantumじゃね?15msといえば。
979デフォルトの名無しさん:2008/04/01(火) 22:44:24
質問
MFCでウィンドウのタイトルの部分をダブルクリックしたら最大化するのをやめさせるのはどうやればいいのでしょうか?
980デフォルトの名無しさん:2008/04/01(火) 22:45:17
変数の命名規則を教えてください。
例えば
CRect myRect;
だったら最初小文字で単語と単語のつながりの直後の頭文字を大文字にするって感じであってます?

コントロール変数、DDX変数は
m_〜
m_ddx_〜
ってやってて統一できてます。
981デフォルトの名無しさん:2008/04/01(火) 22:49:06
個人の命名規則なんて個人の好きにすればいいさ。
982デフォルトの名無しさん:2008/04/01(火) 22:59:07
>979
それMFCがやってるわけじゃないだろ
983デフォルトの名無しさん:2008/04/01(火) 23:14:38
VCで一般的な命名規則ってないの?
984デフォルトの名無しさん:2008/04/01(火) 23:18:48
>>983,980です
自分なりに決めます
スレ汚しすみませんです・・・
985デフォルトの名無しさん:2008/04/01(火) 23:20:35
CRect rect;
これが一般的
986デフォルトの名無しさん:2008/04/02(水) 04:32:24
LPCTSTR lpszStr;
987デフォルトの名無しさん:2008/04/02(水) 07:56:45
Long Pointer to Constant Tchar STRing
988デフォルトの名無しさん:2008/04/02(水) 08:28:37
型なんて変数名に反映するのは無意味
グローバルか?メンバか?ローカルか?スタティックか?引数か?
ってわかるようにしたほうがいいと思う
989デフォルトの名無しさん:2008/04/02(水) 14:27:55
元々のハンガリー記法も、型ではなく意味を変数名に付与するものだった。
なぜか型を付与するようにねじ曲げられたが。
990デフォルトの名無しさん:2008/04/02(水) 16:01:03
秒速20kmで飛んでるロケットと逆方向に秒速30kmで飛んでるロケットをみると
正確には秒速50kmにはならないらしい
991デフォルトの名無しさん:2008/04/02(水) 18:32:57
>>990
見ている人が動いていなければ秒速0kmだしね。
992デフォルトの名無しさん:2008/04/02(水) 20:43:09
質問です。
ダイアログの上にタブコントロールとリストコントロールを重ねるような形で置いています。
リストコントロールにフォーカスがある状態で他のウインドウが重なるとリストコントロールが消えるのですが
回避方法などありますでしょうか?
タブオーダーはリストコントロールの方が後です。フォーカスがない状態ではちゃんと表示されます。
Win2000, VC++.NET(VS2002)
993デフォルトの名無しさん:2008/04/02(水) 22:44:03
>>992
今実行環境が無いので憶測ですまんが、リストコントロールのParentをタブにすれば出来ないかな。
Z値が同じであれば恐らく親(タブ)が奥で子(リスト)が手前に表示されると思う。
994デフォルトの名無しさん:2008/04/03(木) 01:23:38
見た目しか効用の無いタブコントロール使うぐらいなら
ダイアログやビューへの埋め込みプロパティシート&複数プロパティページのほうがリソース管理的にもおすすめ
親→シート→ページの関係も自動でできるしね
995デフォルトの名無しさん:2008/04/03(木) 09:07:58
>>992
当方VS2005
タブ上のダイアログにリストコントロールを置いてるとき同様の現象が起きた
リストコントロールのプロパティでTransparentをTrueにしたら直った
996デフォルトの名無しさん:2008/04/03(木) 21:04:15
CWnd::SetWindowText("1000ゲット!");
997992:2008/04/03(木) 21:16:06
>>993
>>994
レスサンクス。
SetWindowPosでwndTopに設定したらなんとか回避できました。

>>995
Transparent=Trueを試したら、こちらでもOKでした。
リソースレベルで回避できるならこちらの方がいいのかな。
その後、トラブルとかないですか?
998デフォルトの名無しさん:2008/04/03(木) 21:45:48
馬鹿すぎ
999デフォルトの名無しさん:2008/04/03(木) 22:36:10
二月(花札)
1000デフォルトの名無しさん:2008/04/03(木) 22:41:20
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。