5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

■MFC相談室 mfc15d.dll■

1 :デフォルトの名無しさん:2005/11/14(月) 18:01:44
Microsoft Foundation Classライブラリ専用スレです。 

前スレ
■MFC相談室 mfc14d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1121200124/l50


2 :デフォルトの名無しさん:2005/11/14(月) 18:02:31
前スレの990氏ね

3 :デフォルトの名無しさん:2005/11/14(月) 18:06:51
直交性について熱く語ろうか。

■MFC相談室 mfc14d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1121200124/774n-

774 :デフォルトの名無しさん :2005/10/21(金) 17:49:53
CArrayとCListのナントカ性がないのでCArrayからCListに直すのが面倒。
何て言うんだっけ。

777 :774さん :2005/10/21(金) 18:19:16
直交性だった。
http://www.hey-to.net/ML-archive/vcppML/1999/msg03973.html
> MFCだと、たとえばCArrayで書いてた部分をCListに取り替えたとき、
> 書き直さなければならないコードの量がすんごいです。やってらんない。
> クラスとメソッドの直交性が皆無なんだな...
> MFCコレクションの唯一のメリットといえば、
> シリアライズがちょびっと楽なことくらいでしょうか。

4 :前990:2005/11/14(月) 18:17:23
結局CArrayが良いのかCStringArrayが良いのかどうか分からなくなったので、
CStringList部分をそのままにしてまつ。

でも、どれを積極的に使うべきかわからないですね。

いっそ、文字列リストはSTL?

5 :3:2005/11/14(月) 19:06:23
>>4
CStringArray と CArray<CString,CString&> の違い分かる?

6 :前990:2005/11/14(月) 19:07:33
分からないから相談室に着ます他。

7 :デフォルトの名無しさん:2005/11/14(月) 21:42:04
RichEditCtrlでENLINKを使えばマウスがリンクの上に来たときに
メッセージが捕まえられるのですが、リンクから外れたときは
どうやって判断すればいいんでしょうか?

8 :デフォルトの名無しさん:2005/11/14(月) 23:25:53
リソースの追加で「Dialog」を追加して、そのDialogのクラスを
「クラスを追加」で追加したのですが、「完了」ボタンを押下しても
何の反応もありません…。
何か手順に問題ありますでしょうか…?

9 :デフォルトの名無しさん:2005/11/15(火) 11:18:23
リストビューにファイルのリストを表示して、
リストビューで選択状態になっているファイルの総容量を
ステータスバーに表示したいです。
リストビューのアイテムの選択状態が変わったことを
知る方法があれば教えてください。

10 :デフォルトの名無しさん:2005/11/15(火) 13:29:56
>>9
ItemDataにそのファイルのサイズか
サイズの入った構造体のポインタを1つずつ入れといて
Lボタンダウンかアップで
GetNextItem(index, LVNI_ALL |LVNI_SELECTED)
を使って選択状態のitemをGetItemDataして加算して表示してみるとか

11 :デフォルトの名無しさん:2005/11/15(火) 18:29:12
PUSHBUTTONをディセイブルにすると、ビットマップが消えてしまいますが、どうしたら良いで塚?

12 :11:2005/11/15(火) 18:41:27
ディセイブル時のビットマップも設定できるのかなぁ?

13 :デフォルトの名無しさん:2005/11/15(火) 18:46:52
>>11
CBitmapButton クラスでは、ラベルがテキストではなくビットマップ
イメージのプッシュ ボタン コントロールを作成できます。CBitmapButton
オブジェクトは、最大 4 つのビットマップを持ちます。それぞれの
ビットマップのイメージは、ボタンの状態を示します。つまり、ボタンが
押されていない (通常) 状態、押された (選択された) 状態、フォーカスを
得た状態、無効な状態の 4 つです。通常の状態を表すビットマップは
必要ですが、その他のビットマップは省略できます。

14 :11:2005/11/15(火) 19:05:56
サンクス>CBitmapButton

IDEでペタペタ貼り付けたり、できるんでしょうか?

15 :11:2005/11/15(火) 19:24:07
ぐぐってますが、
VC++でCBitmapButtonをCDialogに貼る方法が、
分かりません。

16 :13:2005/11/15(火) 19:27:58
俺様用メモ。
ActiveX コントロールの [Microsoft Forms 2.0 CommandButton] でも
画像を貼れるが無効にすると灰色になる。

17 :11:2005/11/15(火) 19:29:24
じゃ、解決方法はCBitmapButtonしか無いわけですか。

18 :13:2005/11/15(火) 19:36:41
>>11
CBitmapButtonはCButtonの派生クラスなんだから、
サブクラス化してごにょごにょしたらいい。

19 :7:2005/11/15(火) 21:23:20
EM_CHARFROMPOSでマウスの位置から文字の位置調べて
GetSelectionCharFormatでLINKのフラグ調べて何とかできました。

20 :前スレの908:2005/11/15(火) 21:52:07
>>9
LVN_ITEMCHANGED通知メッセージ。前スレくらい、チェックしろよ。


21 :9:2005/11/16(水) 04:10:32
LVN_ITEMCHANGEDでいけました。
最近も同じ質問があったとは思わず申し訳ない。

22 :デフォルトの名無しさん:2005/11/16(水) 08:40:41
>サブクラス化してごにょごにょ

ごめん、自分MFC初心者なので、クラス派生なら分かるんだけど、
MFCで逝うサブクラスって何を指すか分からないんだ。

MFC特有が悪いだけじゃなくて、サブクラスって人によって、
「派生」を指したり「メンバ」を指したり、曖昧だおね。

23 :13:2005/11/16(水) 08:50:39
>>22
「サブクラス化」で一つの用語。
例えば、ダイアログに貼った元の CButton に、
(CButton のサブクラスである)CBitmapButton の機能を持たせるイメージ。

> MFC特有が悪いだけじゃなくて、サブクラスって人によって、
> 「派生」を指したり「メンバ」を指したり、曖昧だおね。

メンバを指す場合なんかある?

24 :デフォルトの名無しさん:2005/11/16(水) 09:18:45
VC++のIDEでのサブクラス化手順説明サイトきぼんにゅ。

25 :24:2005/11/16(水) 09:28:11
ググッて色々読んで予想しますた。

1.IDEでCButtonを貼る

2.ソースの宣言をCBitmapButtonに変更

3.OnInitDialog()で.SubclassDlgItem

で、おk?

26 :24:2005/11/16(水) 09:37:56
ttp://www.geocities.jp/chiakifujimon/control/control2.html

を見ると、25の手順でヨサゲとなので、やってみようと思います。

ところで、上サイトではCButtonをCBitmapButtonにサブクラスという感じですが、
PushButtonでも可能ですか?

今貼ってるのがPushButtonなのでそのままやってみようかな、と思ってます。

27 :デフォルトの名無しさん:2005/11/16(水) 09:37:59
1.IDEでCButtonを貼る
2.IDEでコントロール変数をCBitmapButtonクラスで宣言

は、どう?

28 :24:2005/11/16(水) 09:45:30
>>27
それだけで良いんですか?_?

先ず、それでやってみます。

29 :24:2005/11/16(水) 09:55:50
あれ?

IDEではPushButtonなのに、ヘッダーではCButtonになってるし、実装部でもインスタンス差し替えも無い。。。

MFCって結構不思議じゃない?

30 :24:2005/11/16(水) 10:24:59
.LoadBtimapsだけじゃ動作しませんね。

.AutoLoadするとエラーになるし。。。

.SubclassDlgItemとか色々メソッドコールしないといけないのかなぁ?

31 :24:2005/11/16(水) 10:37:22
.SetButtonStyleと.LoadBitmapsでできたっぽいです。

.SubclassDlgItemしなきゃならない局面てどいうときだろう。

32 :13:2005/11/16(水) 11:00:00
>>27の別解
1. ダイアログにボタンを貼る。
2. CBitmapButton派生のクラスを作る(例えばCBmpBtnとか名付ける)。
3. 1.のボタンを右クリックして[変数の追加]。
 メンバ変数の追加ウィザードが出るので、
 変数の種類をCButtonから(自作の)CBmpBtnに書き換える。

これもSubclassDlgItemは不要。

33 :13:2005/11/16(水) 11:10:21
ビットマップ ボタンの場合は>>32の処理に加えて
ボタンのプロパティで[オーナー描画]をTrueにする。
>>31のSetButtonStyle()も動的に同等の処理をやっている。

--------
また、CBitmapButton::SizeToContent() でボタンのサイズを
ビットマップに合わせることができる。
実行時のWindowsのフォント サイズによってはレイアウトが崩れますな。

--------
CBitmapButton::AutoLoad()を使う場合は、
ボタンのキャプションとビットマップのIDをそろえる必要がある。
・ボタンのキャプション。IDは任意。
 MYBTN
・4つのビットマップのID
 MYBTNU (通常)
 MYBTND (選択状態)
 MYBTNF (フォーカス)
 MYBTNX (無効状態)

参考
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_mfc_cbitmapbutton.asp

34 :デフォルトの名無しさん:2005/11/16(水) 11:25:31
レスサンクス

何だか難しいね。
絵でもあれば良いんだろうけど、M$DNも文字ばかり。

35 :デフォルトの名無しさん:2005/11/16(水) 15:17:07
CBitmapButtonに普通のビットマップとグレイのビットマップを設定して完成しました。

が、フォーカスを受け取った場合はほっといて良いとして、
ボタン押した瞬間の画像も作らないといけなくなるかも知れません。

それって簡単に作れるのでしょうか?
それともCBitmapButtonの設定で押されたとき、へこむイメージになったりするのでしょうか?

36 :デフォルトの名無しさん:2005/11/16(水) 15:22:02
聞くより先に自分の手を動かせ。

37 :デフォルトの名無しさん:2005/11/16(水) 15:35:32
CBitmapButtonってCButtonの派生でつか?

38 :デフォルトの名無しさん:2005/11/16(水) 15:48:00
>それともCBitmapButtonの設定で押されたとき、へこむイメージになったりするのでしょうか?

手を動かさなくても、設定でへこむイメージにする方法きぼんゆ。

39 :37:2005/11/16(水) 16:00:39
ヘッダーファイル見たら分かりました。
> class CBitmapButton : public CButton

40 :デフォルトの名無しさん:2005/11/16(水) 17:26:00
CStatusBar を Create して
ステイタスバーを表示したのはいいものの
これを 非表示/表示 切り換えるにはどうしたらいいのでしょう?

41 :デフォルトの名無しさん:2005/11/16(水) 17:29:41
sdiやmdiがやってるのを真似するだけ

42 :デフォルトの名無しさん:2005/11/16(水) 17:47:42
OnPaint()イベントで、画面全体にBitBltして、
その後にTextOutコールしてますが、その文字が描画されない場合があります。

画面全体がリフレッシュする場合は問題無いのですが、
例えばエクスプローラを被せて、マウスでスライドした場合等、
BitBltは動作しますが、TextOutが忘れられる場合があるようです。

どうしたら良いでしょうか?

43 :42:2005/11/16(水) 18:04:24
CDialogがフォーカス受け取ったとき再描画かけようかと思いましたが、
そんなイベントありますか?

44 :42:2005/11/16(水) 18:27:34
WM_KILLFOCUSしか無いよ・゚・(つД`)・゚・ウワアン

45 :13:2005/11/16(水) 18:47:53
>>35
フォーカスも用意しておかないと
タブキーを押したときにフォーカスがどこにいくか分からないし、
スペースキーを押したときにどのボタンが押されるか分からない。

BOOL CDC::DrawEdge( LPRECT lpRect, UINT nEdge, UINT nFlags );
void CDC::Draw3dRect( LPCRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight );
void CDC::Draw3dRect( int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight );
なんてのもある。

46 :13:2005/11/16(水) 18:50:48
>>43
CDialogはそういう描画に向いてない。

>>35
> ボタン押した瞬間の画像
というのが選択状態。ボタンならへこんだところ

47 :デフォルトの名無しさん:2005/11/16(水) 18:57:05
TextOutの戻り値は調べた?

48 :デフォルトの名無しさん:2005/11/16(水) 19:09:39
OnActivateでいけました

49 :42:2005/11/16(水) 19:14:41
CDialogの上にCDialogを貼ってるのが原因でした。

台紙のDialogのWM_PAINTで上のDialogにRedrawWindowコールで解消しました。

でも、画面チラチラします。

50 :デフォルトの名無しさん:2005/11/16(水) 19:15:51
>>45
1枚のビットマップから、残りの3種類のビットマップを生成出来るようなツールは無いんでしょうかね?

51 :13:2005/11/16(水) 19:26:49
これだ。ボタンでも何でもない場所にでもボタンを描画できるw
ボタン、チェック、ラジオ、閉じる、最大化、最小化、スクロールバー、メニューのマーク、など

指定した種類とスタイルでフレーム コントロールを描画します。
BOOL CDC::DrawFrameControl(LPRECT lpRect,UINT nType,UINT nState);

DFC_BUTTON
 DFCS_BUTTON3STATE 3 ステート ボタン
 DFCS_BUTTONCHECK チェック ボックス
 DFCS_BUTTONPUSH プッシュ ボタン
 DFCS_BUTTONRADIO オプション ボタン
 DFCS_BUTTONRADIOIMAGE オプション ボタンのイメージ (四角形のイメージは必要ありません。)
 DFCS_BUTTONRADIOMASK オプション ボタンのマスク (四角形のマスクは必要ありません。)

DFCS_CHECKED ボタンがチェックされてる
DFCS_FLAT ボタンにフラットな境界がある
DFCS_HOT ボタンがホット トラックされてる
DFCS_INACTIVE ボタンがアクティブでない(灰色)
DFCS_MONO ボタンにモノクロの境界がある
DFCS_PUSHED ボタンが押されてる
DFCS_TRANSPARENT 背景を触らずに残す

52 :デフォルトの名無しさん:2005/11/16(水) 19:47:18
CScrollViewを継承したビューのOnDrawでCDC* pDCを使うと勝手に描画位置がオフセットされますが、オフセットさせないためにはどうしたらいいでしょう。

53 :デフォルトの名無しさん:2005/11/16(水) 20:06:29
>>52
CView派生クラスを使う

54 :デフォルトの名無しさん:2005/11/16(水) 21:51:33
MFCから使えてTHogeTextViewみたいなリッチエディットより軽いのありませんか?

55 :デフォルトの名無しさん:2005/11/16(水) 21:56:48
>>54
MFCじゃないから他いけ

56 :デフォルトの名無しさん:2005/11/16(水) 21:59:12
>>55
やだ

57 :デフォルトの名無しさん:2005/11/17(木) 03:36:59
CViewで適切なScroll係イベントハンドラの処理してくれる関数ありませんか。
自分でOnVScrollに
switch( SBCode )
{
case SB_DOWN......
}
とか書かないと駄目ですか?
上のように書いてみて動いたものの、汚いしソース長くなるし、別のScroll使ったVIEWつくったときコピペするのがいやなんです。
CScrollViewは使いたくないのです。

58 :デフォルトの名無しさん:2005/11/17(木) 08:02:18
CViewにスクロールの処理を自前で書いたらいいじゃない。
CScrollViewもCViewもソースがあるんだし。

59 :デフォルトの名無しさん:2005/11/17(木) 11:45:57
MFCのCDialogポトペタって、
後からヘッダーファイルのクラス名変えれるということは、
位置あわせのとりあえずコントロール貼りだと思えば良いのでしょうか?

60 :デフォルトの名無しさん:2005/11/17(木) 13:44:03
mfcでフラクタルのプログラムしてるんですが
mfcになれないってのもあって苦労してます。

一番困ってるのが処理速度なんですが
フラクタルという性質上ランダムウォークさせたり
10万回とかのループも多いのですが
なにより描画にものすごく時間がかかります。
高速化を考えているのですが一番気を使うべきところってどこでしょうか?
抽象的な質問で申し訳ありませんが相談乗ってほしいです。

61 :デフォルトの名無しさん:2005/11/17(木) 15:38:02
>>60
何を描画してるのか・どうやって描画してるのかも書かずに、何を答えろと言うのか?

62 :デフォルトの名無しさん:2005/11/17(木) 15:46:42
SetPixelで1ドットづつ書いてるとかいう話じゃないのかねー


63 :デフォルトの名無しさん:2005/11/17(木) 16:40:50
UnicodeアプリでCPageSetupDialogを開いてOKすると、
その後の印刷関係の操作でassartがでてしまいます。
現在のプリンタをappのGetPrinterDeviceDefaultsで
取得してCPageSetupDialogにセットしています。

いろいろ検索してみましたが見つかりません。
知っている人がいれば原因を教えてください。


64 :デフォルトの名無しさん:2005/11/17(木) 16:52:40
>>63
assertが出たのならそのメッセージ貼れや

65 :sage:2005/11/17(木) 17:00:31
assartですが、印刷プレビューの場合、
 appprnt.cpp 42行

MFCのソースは、
LPDEVNAMES lpDevNames = (LPDEVNAMES)::GlobalLock(m_hDevNames);
 ASSERT(lpDevNames != NULL);
です。
appのm_hDevNamesのハンドルが壊れているようです。
なぜ壊れてしまうんでしょうか

66 :デフォルトの名無しさん:2005/11/17(木) 17:40:16
壊してるから。

67 :63:2005/11/17(木) 17:46:44
ウィザードで空のdoc/viewアプリ作って、
Viewのコマンドを追加して以下の文を書くだけでも発生しました。
ちなみにVCのバージョンは2003です。

PRINTDLG pd;
CPageSetupDialog dlg(PSD_INHUNDREDTHSOFMILLIMETERS, this);
AfxGetApp()->GetPrinterDeviceDefaults(&pd);
dlg.m_psd.hDevNames = pd.hDevNames;
dlg.m_psd.hDevMode = pd.hDevMode;
dlg.DoModal();

68 :デフォルトの名無しさん:2005/11/17(木) 18:10:03
DoModalがIDOKで戻ってきたときの処理が足りんようだな。
CPageSetupDialogコンストラクタのヘルプサンプル見てみろ

69 :63:2005/11/17(木) 18:17:26
IDOKの後にSelectPrinterが必要ということでしょうか?
つけて見るとSelectPrinter内で同じようなassartが出ました。
他に何か必要でしょうか?

70 :デフォルトの名無しさん:2005/11/17(木) 18:23:09
書いてないけど、SelectPrinterの最後の引数にFALSE指定しないと、
無効なハンドルを解放しようとしてエラーになる。

71 :デフォルトの名無しさん:2005/11/17(木) 18:24:20
「この場合は」だけどね。


72 :63:2005/11/17(木) 19:05:44
ありがとうございます。FALSE指定でエラーはでなくなりました。
前のハンドルはCPageSetupDialogの中で開放しているのでしょうか?
ヘルプとの違いも気になりますが・・・。一応少し調査してみます。

73 :デフォルトの名無しさん:2005/11/17(木) 19:16:09
CPageSetupDialogっつか、::PageSetupDlgが解放しやがる。
まあ、あのダイアログからプリンタ変えられるから無理もないんだけど。

74 :デフォルトの名無しさん:2005/11/17(木) 23:40:28
おたずねします。
3つのビューをスプリッタで分割して表示しているのですが、そのうち2つのViewでGetDocument()が失敗します。
成功するViewはMFCウイザードでデフォルトで作られるViewで、あとの2つは自分で追加したViewです。
どうしたら他のviewでもGetDocumentが使えるようになるのでしょうか。

75 :デフォルトの名無しさん:2005/11/17(木) 23:45:11
CView::GetDocumentが失敗することなんか無いはずだが。
CDocumentと関連付けていなければNULLは返るが。

76 :デフォルトの名無しさん:2005/11/18(金) 00:13:29
>>75
おっしゃるとおりでした。AddViewをしていませんでした。
しかし、以下のようにするとAddViewで強制終了してしまいます。
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT p,
CCreateContext* pContext)

 Splitter1.CreateStatic( this, 2 , 1 );
Splitter2.CreateStatic( &Splitter1 , 1,2,WS_CHILD | WS_VISIBLE | WS_BORDER,
Splitter1.IdFromRowCol(1,0));

Splitter2.CreateView(0,0,RUNTIME_CLASS(CLeftView), CSize(200,0),
pContext);
Splitter2.CreateView(0,1,RUNTIME_CLASS(CHogeView), CSize(0,0), ←デフォルトで作られるview
pContext);
Splitter1.CreateView( 0,0,RUNTIME_CLASS( TopView), CSize(0,180),
pContext);

CView* c = (CView*)Splitter1.GetPane( 0,0);
pContext->m_pCurrentDoc->AddView(c);
}
いったい何が悪いのでしょう。

77 :76:2005/11/18(金) 01:39:18
すみません。解決しました。
GetDocument()を呼び出したCViewのインスタンスがそもそも無効なオブジェクトでした。
だから失敗したんですね。
スレを汚してすみません。

78 :デフォルトの名無しさん:2005/11/19(土) 18:13:27
リソースエディタでみるときに
IDR_MAINFRAMEの
ファイル(&N),編集(&E)等にはIDは割り当てられていないようなのですが、
IDはないのでしょうか?

79 :デフォルトの名無しさん:2005/11/19(土) 18:34:26
GetMenuItemIDで調べてみたけど
UINT(-1)になってた。
ルートメニューの検索ためにこうなってるのかな...

80 :デフォルトの名無しさん:2005/11/19(土) 19:04:32
>>78
ポップアップにしない


81 :デフォルトの名無しさん:2005/11/19(土) 20:16:43
>>78
ヘッダなどあらゆる場所から AFX_IDS_ で始まる ID を探してみな。
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_mfc_standard_command_and_window_ids.asp

82 :デフォルトの名無しさん:2005/11/20(日) 01:09:01
>>80
なるほど
「指定された項目がポップアップ メニュー (ポップアップ メニュー内の項目ではなく) の場合は、-1 を返します。」
ポップにするとUINT(-1)になるのか...
>>81
みてみましたが、ポップアップの場合のIDは見あたりませんでした。でも、参考になりました。

ポップアップの項目を見つけるの場合は
メニュー内をトラバースして文字列照合することにしました。

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


83 :デフォルトの名無しさん:2005/11/20(日) 06:18:52
ちょっとお聞きしたいのですが、
自アプリのツールバーをCToolBarで作る際、
googleツールバーやMSNツールバーみたいに、
画像のみのボタンで、大きさが違うものって作れますか?
大きな画像を貼ろうとすると、全てのボタンが大きくなってしまうんですよね…。

84 :デフォルトの名無しさん:2005/11/20(日) 10:20:34
CToolBarのボタンの大きさは一定。
それが嫌ならCDialogBarで自作しろ。

85 :デフォルトの名無しさん:2005/11/20(日) 11:45:17
>>83
ツールバーボタンではなく、コンボボックスをツールバーに持たせる要領で独自のボタンコントロール貼れ

86 :デフォルトの名無しさん:2005/11/20(日) 14:15:05
CStringやその他のMFCを使いたいのでDLLを作る際に”MFC DLL”というプロジェクトをウイザードから作りました。
よく見てみるとこのDLLにはCWinAppクラスとそのインスタンスがありました。
このDLLをクライアントアプリケーションに動的にリンクした場合、
CWinAppが2つ、つまりプライマリスレッドが2個できてしまうと思うのですが、そうなのですか?


87 :デフォルトの名無しさん:2005/11/20(日) 15:53:29
DLL側とクライアント側の両方でAfxGetApp()呼んで比べてみたら?

88 :デフォルトの名無しさん:2005/11/21(月) 01:07:19
リソースの言語をプロパティで
日本語->英語
に変更すると エディタで*.rcファイルみると
単に ?で置換されてるようにみえるけど
英語->日本語
に戻すと文字列が復元されてるようなんだけど
rcファイル以外のどこかに保存されてるのかな?


89 :デフォルトの名無しさん:2005/11/21(月) 01:18:34
>>88
rc をコンパイルしたのが aps にキャッシュされるんじゃないかな。
キャッシュを消して言語を変えるとどうなるか報告よろしくな。

90 :88:2005/11/21(月) 01:32:12
>>89
thx.
apsファイルを削除したところ、見事
置換された?が表示され、文字列は復元されませんでした。
apsから復元してたのか...

MSDN引用
「filename.aps
現在のリソース スクリプト ファイルのバイナリ形式。このファイルは読み込みを高速化するために使用されます。 」


91 :デフォルトの名無しさん:2005/11/21(月) 01:36:05
質問です
IDD_DIALOGXXが定義されていませんというコンパイルエラーが出ます
しかしこれはリソースエディタで定義済みのはずで、今までずっとこのリソースを使ってコンパイルが通っていました。
これまで2回あり、何かの拍子に突然未定義になるのです。
こうなると自分で#define IDD_DIALOGXXと定義しなければコンパイルできません。
リソースエディタを見るとちゃんとIDD_DIALOGXXが入っていて、しかもフォームエディタで作った通りのダイアログが作成できます。
VCのバグでしょうか?

92 :デフォルトの名無しさん:2005/11/21(月) 01:49:21
>>91
お前の頭のバグ。
・resource.hにIDD_DIALOGXXを定義しろ。
・resource.hを書き換えたらリビルド(クリーン+ビルド)しろ。
・何でもかんでもVCのバグのせいにするな。

93 :デフォルトの名無しさん:2005/11/21(月) 01:57:57
解決しました。頭のバグでした。
なんとcppでResource.hをインクルードするまえにダイアログのヘッダをインクルードしてました。
基本的なことでおさわがせしてすみまんお(^ω^;)

94 :86:2005/11/21(月) 02:03:10
DLL側のtheAppとクライアントアプリ側のtheAppは異なりますね。
エクスポートされた関数の内部でAfxGetAppするとクライアントAPのtheAppではなくDLLのtheAppがとれました。
デバッガでとめてみるとスレッドは一個しかないようです。
なぜスレッドが一個なんですか?


95 :デフォルトの名無しさん:2005/11/21(月) 04:17:36
リソースのインクルードで
日本語のリソースファイルのincludeを英語版に変更したところ、
スタティックリンクを指定した場合は変更が反映されたのですが、
なぜか共有DLLの場合は変更が反映されません。
こういうものなのでしょうか?
それとすぐ上に
LANGUAGE 17, 1
という記述もあるのですが、
プライマリー言語のID,サブ言語のIDでよいのでしょうか?

#include "l.jpn\afxres.rc" //標準のコンポーネント(jp)
#include "l.jpn\afxprint.rc" //印刷/印刷プレビュー リソース(jp)
JP->ENG
#include "afxres.rc" // 標準のコンポーネント
#include "afxprint.rc" // 印刷/印刷プレビュー リソース


96 :デフォルトの名無しさん:2005/11/21(月) 15:52:09
ダイアログを表示させた直後に処理を開始したいと思って調べてたら
ttp://mtakahashi.com/old/00125.html#00106
を見つけました。
結論としてこのようになっていました↓
1、
OnInitDialogで、
-----
EnableWindow(FALSE);
m_bFirst = TRUE;
-----

2、
OnPaintで
-----
if (m_bFirst){
m_bFirst = FALSE;
PostMessage(WM_COMMAND, MAKEWPARAM(ID_START, 0), NULL);
}
-----

3、
OnStartで
-----
EnableWindow(TRUE);
(長い処理)
-----

これって独自メッセージを定義しなくても
OnPaintの部分で(長い処理)をやればいいと思ったんですけど
それじゃダメなんですか?

97 :デフォルトの名無しさん:2005/11/21(月) 17:15:39
IEツールバー作ってるんですが、
GoogleとかMSNのツールバーみたいに、一番左のボタンを画像のみで大きくする方法がわかりません。
苦肉の策でボタンサイズの違うツールバーをもう一つ作って、ドロップダウンコントロールみたいにツールバーを貼り付けると、
貼り付ける側にTBSTYLE_TRANSPARENTを加えると、真っ黒になっちゃうしで苦しんでいます。

できれば1つのツールバーで実現する方法を、もしくは黒くなるのを防ぐ方法をご存知の方、ご教授ください。

98 :デフォルトの名無しさん:2005/11/21(月) 17:19:55
>>97
だからCDialogBarで作れって。何度も同じこと言わせるな。
分からないならSpy++で他のツールバーがどうなってるか調べろ。

99 :仕様書無しさん:2005/11/21(月) 17:22:47
>>96
OnPaintは、他のウィンドウに隠れていた対象のウィンドウが前面に移動したり、
最小化の解除(元のサイズに戻す)やサイズ変更などのイベントが発生すると、
何度でも呼ばれてしまうんだが?

100 :96:2005/11/21(月) 17:28:40
>>99
すいません。そこで

if (m_bFirst){
m_bFirst = FALSE;
(長い処理)
}

というふうにOnPaintの if 文の中でやればいいのじゃないかなと思ったんです。
実際やると、うまくいくみたいなんです。

101 :デフォルトの名無しさん:2005/11/21(月) 17:29:54
OnPaintで
-----
if (m_bFirst){
m_bFirst = FALSE;
EnableWindow(TRUE);
(長い処理)
}
-----
と書いたら長い処理の処理時間が長いときは、
入力できる状態になるまでの時間が長くなる。
長い処理は別のスレッドで処理するべき。

102 :デフォルトの名無しさん:2005/11/21(月) 17:31:26
OnPaint()は描画のためのものなのだから、
本来は描画以外のことは書くべきでない。

103 :96:2005/11/21(月) 17:36:59
>>101
あぁ〜なるほど。と思ったんですが、
この独自のメッセージはOnPaintで最初の一回きりでしか呼ばれないんですよね。
となるとやはり同じ気がしてきました。

>>102
なるほど。ただメッセージマップを自分で登録しなきゃいけないのが面倒です。
こういうダイアログってよくあると思うんですけど、本当みんなどうやってるのかな。

104 :仕様書無しさん:2005/11/21(月) 17:41:25
>>103
#defineでユーザーメッセージ定義して、メッセージマップにハンドラを登録
して、.hファイルにメッセージ処理関数の宣言書いて、cppファイルにメッ
セージ処理関数の実体を書けば済む話だろ。

ごちゃごちゃ言ってないで、初心者は熟練者の3倍は手を動かせよ。

105 :96:2005/11/21(月) 17:42:03
>>104
わかりました。そのようにします。

106 :デフォルトの名無しさん:2005/11/21(月) 17:47:33
>>103
分かってないな。例えば5秒かかる処理だったら、
ウィンドウが出てきてから操作できる状態になるまで5秒かかる。
長い処理って何だよ。
あと、OnCreate()とかPreCreateWindow()とかあるんだからいろいろ使い分けろ。

107 :95:2005/11/21(月) 22:40:15
やっぱり17はLANG_JAPANESEで
1はSUBLANG_DEFAULTみたいでした。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_61df.asp

でも
#include "afxres.rc" // 標準のコンポーネント
#include "afxprint.rc" // 印刷/印刷プレビュー リソース
をコメントアウトしてもなぜかコンパイルできるんだけど
(どこからかインクルードされてる?)
共有DLLでMFCを使用したときは問題なかったけど
スタティックリンクにしたら
docsingl.cpp(213)のAFX_IDS_UNTITLEDで
アボーンした。

108 :デフォルトの名無しさん:2005/11/22(火) 05:33:19
>>98
MSNツールバーってCDialogBarなん?

109 :デフォルトの名無しさん:2005/11/22(火) 07:38:53
>>108
MSNツールバーが、MFCを使ってるかどうかって問題もあるんだが?既存の
MFCクラスを活用する近道がCDialogBarであることは間違いない。CWndの
派生クラスを定義して、ドッキングバー相当の機能を独自にゼロから実装
することだってできる。MFCはソースも公開されているしな。いずれにしろ
答え(実装方法)は1つではない。

110 :デフォルトの名無しさん:2005/11/22(火) 19:31:32
MFCサポートのコンソールアプリから、ダイアログのインスタンス(dlg)を作成しています。
そのdlgにメッセージハンドラを作成し、SendMessage() で呼び出しています。
そのハンドラ内でSetTimer()しているのですが、OnTimerが発効されません。
dlg は、Create() なり、ShowWindow() なりをしてから、等いろいろ
やってみたのですが、うまくSetTimer() されません。
何か他にやらなければいけないとか、コンソールアプリの制限とかが
あるのでしょうか?
(要はCWndの派生クラスを作成して、メッセージとタイマーのハンドラが
登録したいだけなんですが・・・)

111 :デフォルトの名無しさん:2005/11/22(火) 19:47:36
>>110
タイマを使うならウィンドウ ハンドルが有効である必要がある。
タイマが終わったことをウィンドウに知らせるからな。
dlg.GetSafeHwnd()の結果を書け。話はそれからだ。
長文のくせに重要なことを書いてない。

112 :デフォルトの名無しさん:2005/11/22(火) 20:12:49
>>111
dlg.GetSafeHwnd() の戻りは 0x0019078a で有効なようです。
もうひとつ、大事なことを書いていませんでした。
ダイアログはDLLで実装しています。
そこで問題となったのは、どうしても、コンストラクタのリンクエラーが
取れない為、通常の「MFC共有DLL」ではなく「MFC拡張DLL」を使って、
class の定義を class AFX_EXT_CLASS CMyDlg : public CDialog
としています。

113 :デフォルトの名無しさん:2005/11/22(火) 21:25:43
試しに DoModal() の SetTimer() は、問題なく登録されました。
ただ、タイマーとメッセージの実装が目的なので、DoModal() は
目的とズレてしまいます。
DoModal() の内部でやっている「何か登録する部分」だけの
CWndのメンバー関数を呼び出せば、いいのだと思います。
Create(IDD_TEST_DLG) と ShowWindow(SW_SHOW) だけでは
どうも駄目なようです。

114 :デフォルトの名無しさん:2005/11/23(水) 01:27:44
>>113

http://hp.vector.co.jp/authors/VA000092/win32/multi-lang-mfc.html
http://homepage2.nifty.com/DSS/VCPP/DLL/dllresource2.htm
http://www.microsoft.com/japan/developer/library/vccore/_core_extension_dlls.htm
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200206/02060099.txt
http://www.microsoft.com/japan/msdn/net/books/ProgVCNET/contents.asp
http://www.vcppclub.com/kouza/dll/dll2.html

115 :デフォルトの名無しさん:2005/11/23(水) 04:13:23
派生クラスでメッセージマップに関数登録すると
基本クラスの関数が検索されなくなって、呼び出されなくなるんだけど。
WindowProcいじるしかないよね?


116 :デフォルトの名無しさん:2005/11/23(水) 06:15:24
>>115
派生クラスのオーバーライドした関数内で、基本クラスの関数を呼び出せば
済むだろ。MFC以前にC++を勉強し直した方が賢明だな。

117 :115:2005/11/23(水) 07:12:14
>>116
言い方が悪かった。「基本クラスの関数が検索されなくなって」
じゃなくてメッセージマップに登録したことで基本クラスの動作が阻害された場合。
だから関数がCallできるかは不定なのでその手法は使えません。


118 :デフォルトの名無しさん:2005/11/24(木) 14:50:16
>>113
俺もやってみたが、コンソールアプリからは、SendMessage() で
メッセージハンドラーの呼び出しは成功するが、その中での
SetTimer() が失敗する
当然の話だがダイアログベースのダミーからは、問題ない
何か必要な手続きがあるのかな
MFCレベルでなくて、Win32APIかAFXのコアなスキルが要るかも

119 :デフォルトの名無しさん:2005/11/24(木) 18:18:51
>>118
俺もやってみたが、コンソールアプリからは、SendMessage() で メッセージ
ハンドラーの呼び出しは成功するし、その中での SetTimer() も成功するな。

当然、DLL内のダイアログ派生クラスのWM_TIMERメッセージハンドラである所の、
CDlgInDLL::OnTimer()も呼び出されるのも確認した。

> MFCレベルでなくて、Win32APIかAFXのコアなスキルが要るかも

特に要らんラベルだと思うな。

120 :デフォルトの名無しさん:2005/11/25(金) 21:31:25
誘導されてきますた
MFCでスレッドを使ったプログラム書いています。
DialogAppを書き換えたものでプログラム自体はWndクラスとAppクラスのみで動いてます。
そいでCXXApp::InitInstance()にてWindowを生成
生成後に
m_pThread = ::AfxBeginThread(ThreadProc, this) ;
AutoDeleteはfalseに設定
見たいな感じでスレットを開始しています。
呼び出されたスレッドでは
UINT CXXApp::ThreadProc(LPVOID pParam)
{
CXXApp*pApp = (CXXApp*)pParam ;
CWnd* pWnd = pApp->m_pMainWnd ;
while(pApp->m_isActive == true)
{
  pWnd->SetWindowText(FPSの数値) ; //ここが問題の場所です。
  描画処理
}
return 0 ;
}
これでとりあえずは意図した動作はしているのですが
閉じるときにAssertErrorが出てしまいます。
プログラムを閉じる際にExitInstanceにてループしながらスレッドの終了を待つように
しています。実際エラーは、スレッドが終える前に起きています。
ASSERTの内容はSetWindowTextの一行目
ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
で出てるみたいです。でもよくわかりません(><
なんかスレッドの場合必要な処理とかがあるんでしょうか?よろしくお願いします。

121 :デフォルトの名無しさん:2005/11/25(金) 23:57:21
普通にWM_CLOSEとかで判断すればいいのでは?

122 :デフォルトの名無しさん:2005/11/25(金) 23:59:13
スレッド WM_CLOSE の検索結果 約 667 件中 1 - 10 件目 (0.58 秒)

123 :デフォルトの名無しさん:2005/11/26(土) 00:17:01
>>120
ワーカスレッド終了前に、プライマリスレッドのウィンドウを破棄して
いるんでは?

124 :デフォルトの名無しさん:2005/11/26(土) 00:41:54
>>120
関係あるかどうか分からんけど、CWnd*を別スレッドに持ち出すと、
CWnd::AssertValid()の中で怒られたりするし、そうでなくても
後々変な挙動になったりするので止めた方が良い。

125 :デフォルトの名無しさん:2005/11/26(土) 02:25:26
なにかを別スレッドに持ち出すとき
普通に注意スレということですね

126 :デフォルトの名無しさん:2005/11/26(土) 04:03:22
>>121-123
やっと出来ました。ExitInstanceでやっていたものをCxxWnd::OnCloseで
やったらASSERTエラーが起きなくなりました。
多分ExitInstanceって呼ばれた時点で既にウィンドウを破棄してるんですね。
物凄い勘違いしてますた
>>124
これもMSDNのヒントのとこで読みました
でネットでいろいろ検索してみたんですがなんかすげぇ難しいっす><
自分の場合は同じウィンドウのCWndだったのでエラーの類や
不具合は出なかった(?)みたいですがいろいろ読んでるとなんかマズイらしいです。
HWNDで渡してattachするって言うのもいまいち理解できてません・・・・

とりあえずもう少しやってみます。有難うございました。

127 :デフォルトの名無しさん:2005/11/26(土) 19:52:49
MDIのようなスプリットでない複数のViewをSDIで行いたいんですが、
どのようにすれば良いでしょうか?


128 :デフォルトの名無しさん:2005/11/26(土) 20:27:27
>>127
ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/splitter.html

129 :デフォルトの名無しさん:2005/11/26(土) 22:59:26
スプリットでない複数のViewということは
IEのようにウインドウをたくさん開きたい?

130 :デフォルトの名無しさん:2005/11/27(日) 00:32:14

マウスのグローバルフックについての質問です。


1.まず下記のサイトを参考に(つーかほとんど丸写し)、
  ttp://www.nakka.com/lib/
  Win32SDKベースのdllを作成し、MFCのダイアログからこのdll使用してグロー
  バルフックを行ったところ、想定の動作をしました。

2.次に
  ttp://www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/06.html
  を参考にマウスフッククラスをdll化し実装したところ、若干想定外の動作を
  します。

1.で想定の動作とはMFCで作成したダイアログがフォーカスを失っても、dllから
マウスメッセージが通知されることです。

続く、

131 :130:2005/11/27(日) 00:33:58
>>130 の続き

2.で想定外の動作とはMFCで作成したダイアログ上にマウスポインタがあればdll
からメッセージが通知されるが、ダイアログ上からマウスポインタが外れると通知
されない動作です(キーボードのフックはマウスポインタが外れても通知されるの
を確認しました)。
また、dllのフックプロシージャを下記の様に記述しているため、
LRESULT CALLBACK CMyMHook::MProc(int fCode, WPARAM fwParam, LPARAM flParam) {
  if( fCode < 0 || fCode == HC_NOREMOVE )
     return ::CallNextHookEx( m_hMHook, fCode, fwParam, flParam );
fCodeに上記フィルタに該当する値が設定されているのかと、上記if文にブレーク
を貼ったところ、ブレークがかかりませんでした。
(マウスポインタが外れている時はフックプロシージャ自身がOSからコールされない)

以上の内容から、上記2の私の想定外の動作はどうしてそうなるのか分かる方居
ませんか?
いらっしゃったら何故そうなるのかお教え願います。

要望があればソースをどこかに置きますが、かなり丸写しに近いので少ししのび
がたい状況です。

尚、私の作成しているツールは1で対応しているため特に影響はありません。

132 :デフォルトの名無しさん:2005/11/27(日) 00:35:41
単にSetCapture忘れてるだけだったりして。

133 :130:2005/11/27(日) 00:43:08
>>132
そういうことではないです。
キャプチャーをダイアログが失っている時に、dllがシステムフックして
ダイアログに通知する仕組みに関する質問です。

134 :デフォルトの名無しさん:2005/11/27(日) 03:13:35
>>129
そうです。複数のViewをフレーム付きで子ウィンドウとして扱い、同時に表示したいのですが、
MDIにはしたくないのです。
この考え自体が間違えなのでしょうか?


135 :デフォルトの名無しさん:2005/11/27(日) 03:21:28
>>134
学生なら Visual Studio .NET the Spoke Premium 2003 買いなさい。

○ シングル ドキュメント (SDI のこと)
○ マルチ ドキュメント (MDI のこと)
○ ダイアログ ベース
 □ HTML ダイアログを使用する
● 複数のトップレベル ドキュメント

136 :デフォルトの名無しさん:2005/11/27(日) 15:34:24
>>134
「子ウィンドウ」と「ポップアップウィンドウ」の違いは理解しているのか?
「子ウィンドウ」は「親ウィンドウ」の外には出られない。

137 :デフォルトの名無しさん:2005/11/27(日) 23:28:46
>>135
買うと何かいいことが?

138 :デフォルトの名無しさん:2005/11/28(月) 02:02:15
>>137
Visual Studio 2005 Professionalが無料で手に入る。

139 :デフォルトの名無しさん:2005/11/28(月) 11:48:19
>>134
ドキュメント・ビューアキテクチャを使わないのが前提だが、
CViewを格納するArrayクラスを作って、それを持つCWnd派生クラスを作る

140 :デフォルトの名無しさん:2005/11/28(月) 14:24:00
>>135が言うように「複数のトップレベル ドキュメント」使えば一発。

141 :デフォルトの名無しさん:2005/11/28(月) 14:28:27
最近のはそういう選択肢があるんだ

142 :139:2005/11/28(月) 15:07:29
なんだ、タブブラウズ機能みたいの想像してた。orz

143 :デフォルトの名無しさん:2005/11/29(火) 12:31:13
>>137
現行のthespokeユーザ(もしくは期間中に新規登録したユーザ)は
Visual Studio 2005 Professionalが無償でダウンロードできるようになる。

ソース
thespokeフォーラム
ttp://thespoke.net/forums/810300/ShowPost.aspx
公式
ttp://www.microsoft.com/japan/presspass/detail.aspx?newsid=2477

【学生】 Visual Studio .net 4980円 【専用】
http://pc7.2ch.net/test/read.cgi/software/1087583296/l50
[MS謹製]theSpokeについて語るスレ[名物工房]
http://pc8.2ch.net/test/read.cgi/blog/1092222072/l50

144 :デフォルトの名無しさん:2005/11/29(火) 18:51:13
VC6.0のMFCでMSChartを利用してグラフ表示しています。
CFormViewにMSChart貼り付けている

グラフを印刷するには、どうすればいいんですか?

145 :デフォルトの名無しさん:2005/11/29(火) 18:59:32
印刷処理を入れればいい。

146 :デフォルトの名無しさん:2005/11/29(火) 19:19:26
.Net 2003を使用しています。
ライブラリでmfc70d.libが必要と怒られているのですが、mfc71d.libを使用するように
プロジェクトの設定をかえる事って出来ないでしょうか?

147 :デフォルトの名無しさん:2005/11/29(火) 20:10:40
>>146
プロジェクトメニュー → プロパティ → MFCの使用「スタティック ライブラリでMFCを使用する」
Standard版にもスタティックライブラリが使えたかどうかは不明・・・

148 :デフォルトの名無しさん:2005/11/29(火) 21:14:35
なんだ実行時の話か
デバッグビルド配布したんだろ

149 :デフォルトの名無しさん:2005/11/29(火) 21:17:15
問題は〜d.libなことではなく、70か71かの違いだろ。

150 :デフォルトの名無しさん:2005/11/29(火) 21:22:37
>>146
デバッグビルドを配布しちゃいけません。

151 :デフォルトの名無しさん:2005/11/29(火) 21:30:13
でもなんで2003なのにmfc70が必要なの?

152 :146:2005/11/29(火) 21:47:07
皆様回答ありがとうございます

すいません、実行時ではなくリンク時です。
利用しなければならないライブラリがmfc70でないといけないらしいのですが
開発環境は2003しかないので困っております。
>>147さんの方法を試しましたが今度は
大量の「〜はすでにmfc71d.libで定義されています」というエラーが吐かれました。
(例:LNK2005: "public: __thiscall CMDIFrameWnd::CMDIFrameWnd(void)" (??0CMDIFrameWnd@@QAE@XZ) は既に mfc71d.lib(MFC71D.DLL) で定義されています。)

どこぞからmfc70.libを入手するしかないのでしょうか…

153 :デフォルトの名無しさん:2005/11/29(火) 21:53:13
>利用しなければならないライブラリがmfc70でないといけないらしいのですが
アホかと。

154 :デフォルトの名無しさん:2005/11/30(水) 00:15:39
>>152
そのエラーはmfc71d.libをすでに君のアプリにリンクしていて、且つ、そのなかに入っている関数とか変数が別のlibにもあって、
どっちを使ったらいいか分りません。っていうエラー。

ランタイムがインストールされていないPCでVC7で作ったexeを実行するとmfc7x.dllがないとか、いっぱい怒られるよ



155 :146:2005/12/01(木) 20:22:15
皆様本当に回答ありがとうございます。
対象のライブラリを使用せず書けるめどが立ちそうなので
ひとまず自己解決ということでよろしくお願いいたします。

156 :デフォルトの名無しさん:2005/12/01(木) 23:50:16
AfxBeginThreadが失敗したときの戻り値はNULLなんでしょうか?

157 :デフォルトの名無しさん:2005/12/02(金) 00:39:07
>>156
ソース見るとNULLが返るようになってるが、MSDNには
>Pointer to the newly created thread object.
としか書かれてないな。
まあNULLでいいんでないかい。

158 :デフォルトの名無しさん:2005/12/02(金) 00:55:05
>>157
どうもありがとうございました。

159 :デフォルトの名無しさん:2005/12/02(金) 01:39:32
MSDNはいい加減だからな

160 :デフォルトの名無しさん:2005/12/03(土) 04:38:49
APIの仕様が必ずしも全て記述されてないものがあり困る時がある
M$だから仕方ないとあきらめてるが
多分バイトにでも書かせてるんだろう

161 :デフォルトの名無しさん:2005/12/03(土) 11:32:46
低学歴を寄せ付けない仕様

162 :デフォルトの名無しさん:2005/12/04(日) 22:34:02
スレ違いのためこちらに誘導されてきました。
今アプリケーションを作成していまして、検索ダイアログを
作ったのですが、いったん検索ダイアログを閉じてしまうと、
CFindReplaceDialogオブジェクトがNullになってしまうので
すが、どうにかして状態を残しておくことはできないでしょうか?
CFindReplaceDialogオブジェクトを残しておきたい理由としまして、
ダイアログを閉じても、F3ボタンで検索の続きができるように
したいのです。どなたか教えていただけないでしょうか?

163 :デフォルトの名無しさん:2005/12/04(日) 22:46:22
ダイアログ閉じてもデストラクタ呼ばれるまでオブジェクトは消えないと思うけど

164 :デフォルトの名無しさん:2005/12/04(日) 22:49:01
>>163
ご返答のほうありがとうございます。
CFindReplaceDialogのデストラクタを
探しているのですが、CFindReplaceDialogクラスの
定義を見ると、コンストラクタのみで、デストラクタは
存在しません。どこか他の場所に宣言されているの
でしょうか?

165 :>>162:2005/12/05(月) 00:24:47
それはアプリケーションの別の場所で文字列を持っておいたほうが
スマートじゃないかな?

166 :デフォルトの名無しさん:2005/12/05(月) 11:31:02
>>162
つ[m_fr メンバ変数]

167 :デフォルトの名無しさん:2005/12/05(月) 23:24:21
ダイアログベースのC***Dlgクラスで、色々な終了処理をまとめた
メンバ関数を作成しました。
この関数をデストラクタから呼ぶと、当然怒られてしまいます。
こういう場合はどのメッセージハンドラを使うのが適切ですか?
DestroyWindow,WM_CLOSE,WM_DESTROY等色々ありますが、
どれでも問題ないでしょうか?

168 :デフォルトの名無しさん:2005/12/06(火) 07:14:13
>>167
終了処理の内容と、処理の仕方による。デストラクタで問題ないことも
ある。

デストラクタでエラーが出るのは、終了処理の中でGetDlgItem()など、
ダイアログのウィンドウハンドルを必要とするメンバ関数からだろ。

169 :デフォルトの名無しさん:2005/12/07(水) 16:19:51
DestroyWindow ウィンドウを破棄する関数であって、破棄されたときに呼ばれる関数じゃない。
WM_CLOSE が来たからといって必ずウィンドウが破棄されるとは限らない。
WM_DESTROY は大丈夫。


170 :デフォルトの名無しさん:2005/12/09(金) 00:42:26
>>168
>>169
どうもです。当面WM_DESTROYを使いながらボチボチ勉強していこうと思います。

171 :デフォルトの名無しさん:2005/12/09(金) 14:50:37
ファイルからデータを読み出してint型変数に格納し、
そのデータを基にOnDraw関数でグラフィックスを描きたいのですが
どのようにプログラムを記述すればいいのでしょうか?
誰か教えてください

172 :デフォルトの名無しさん:2005/12/09(金) 14:59:23
普通に。

173 :デフォルトの名無しさん:2005/12/09(金) 15:08:47
ファイルも読めない、グラフィックも書けないアフォか。

174 :デフォルトの名無しさん:2005/12/09(金) 15:21:22
方眼紙にグラフ書くのと同じ

175 :デフォルトの名無しさん:2005/12/09(金) 15:23:37
>int型変数に格納し、
CxxxDocクラスにメンバー変数追加
>ファイルからデータを読み出して
すでにファイルフォーマットが存在するなら
メニューに読み込みのメニューでも追加して、CxxxDocクラスに
そのメニューのハンドラ追加して、そこで読み込み。読み込んだらUpdateAllViews() ;
ファイル選択したければCFileDialogクラス使う。
まだフォーマットが存在しないのなら
MFCのシリアライズを使ってもいいが、フォーマットは自由にはできない
>そのデータを基にOnDraw関数で
数値を表示するならpDC->TextOut()とか、
線ならMoveTo(), LineTo()とかCDCのメンバー関数使う。

※データはCxxxDocクラスに置く、描画はCxxxViewクラスで行う、
 データが変更されたらCxxxDocオブジェクトのUpdateAllViews()呼ぶ

176 :デフォルトの名無しさん:2005/12/09(金) 15:24:53
そんなレベルのことをいちいち解説する奴も、なかば荒らしだな。

177 :デフォルトの名無しさん:2005/12/09(金) 15:31:02
>>175
ありがとうございます

レベル低くてすいませんでした

178 :デフォルトの名無しさん:2005/12/11(日) 21:24:51
MFCが嫌スレ見たらひどい言われようなんですけど、
MFCを使ったアプリをパッケージ製品なんかにしたら
作った会社のレベルは低いと業界ではみなされるんですか???


179 :デフォルトの名無しさん:2005/12/11(日) 21:47:00
嫌スレでやれ

180 :デフォルトの名無しさん:2005/12/12(月) 00:59:07
>>179は頭が弱い子です
放置しましょう。

181 :デフォルトの名無しさん:2005/12/12(月) 03:50:25
MFCはフレームワークに合ってれば良いでしょ。
でもウインドウ出さずにタスクトレイに入るユーティリティのような、
純粋なデスクトップアプリでないケースではWTLの方がいいね。

182 :デフォルトの名無しさん:2005/12/12(月) 13:23:45
うはっwwwwwwwwwwwwwwwwwwwwwww >>176 のレベル、テラタカスwwwwwwwwwwwwwwwwwwwww

183 :デフォルトの名無しさん:2005/12/12(月) 18:24:14
スレに合ってるかちょっと分からないんですが、
templateクラスを自作してドキュメント派生クラスにメンバを加えた所、
Class Viewに表示されず、入力アシストにも出ないばかりか、
CListのメンバも同じ事になってしまいました。

何かよい解決策はありますでしょうか?


184 :デフォルトの名無しさん:2005/12/12(月) 18:52:54
>>178
糞アプリだったらな。

185 :デフォルトの名無しさん:2005/12/12(月) 19:49:28
仕事でMFCなのにその利点を活かさないという現場にあった事がある。
わざわざVBと全く同じに作るならネットワーク関連だけVCで作ればいいのに。

186 :デフォルトの名無しさん:2005/12/12(月) 21:46:35
>>184
実際マイクロソフト以外でそんなパッケージあったら”えっ!!”と思うかな俺は。
(実際あった。)
出来が良けりゃいいってのも正論だけど、なんかねぇ。

187 :デフォルトの名無しさん:2005/12/12(月) 22:02:49
>>186
詳しく

188 :デフォルトの名無しさん:2005/12/14(水) 19:25:02
>>187
「えっ!!」と思ったといってもアプリの出来が悪かったわけではありません。
またパッケージソフトとも言わんかな?

自分の作ったMFCダイアログアプリケーションをデバッグしながら、暇つぶしに
ネット○ーブルの野○村を裏で走らせてた。クラス名が"#32770"だったから、
てっきり自分のデバッグしているダイアログかと思ってメッセージモニタしてると
何かおかしい。しばらくして"えっ!!野○村ってMFCなの?"って驚いたしだい
です。

189 :デフォルトの名無しさん:2005/12/14(水) 20:51:40
ダイアログ出すだけでMFCアプリ認定される日が来ましたか。

190 :デフォルトの名無しさん:2005/12/14(水) 22:14:14
>>183 です。
templateクラスで参照のつもりでコピーの戻り値を受け取り、内容を変更し損なうのを
防ぐ為、コピー演算子及びコピーコンストラクタをprotectedにし、
template classをfriend classに設定したのですが、何故かそのtemplate classをメンバとして
定義しているファイル内に宣言するとこのような現象が起きました。
templateにするクラスを別のファイルに記述すると、メンバ宣言するファイルにincludeしても
入力アシストが有効になります。

191 :デフォルトの名無しさん:2005/12/14(水) 23:34:23
>>189
野菜○はMFCアプリだけどね。

192 :デフォルトの名無しさん:2005/12/15(木) 10:13:43
>>186
なんか、何?
MFC は確かに稀代の出来悪フレームワークだが
その事と、それを使ったアプリケーションとの出来に
何の関係が?

193 :デフォルトの名無しさん:2005/12/15(木) 21:20:40
MFCダイアログベースアプリってだめなのか?


194 :デフォルトの名無しさん:2005/12/15(木) 22:56:52
何使って作ろうが出来上がったものが素晴らしけりゃそれでいい

195 :デフォルトの名無しさん:2005/12/17(土) 23:29:53
MFCが糞とか言ってる香具師が設計した、自慢のクラスライブラリってのを
見てみたいものだな。

196 :デフォルトの名無しさん:2005/12/18(日) 01:10:42
>>195
いやぁ、クソ呼ばわりするタイプの多くは
MFCよりとっつきやすくて自分には便利なライブラリを見つけたってのが
MFCをクソよばわりする根拠なんではないかな?

じっさいデバッグとかでぐちゃつくとMFCのソースも見てるわけでしょ?
ドロドロとまどろっこしい印象も受けるわけで。
クソと言う人も生まれるのも致し方ないのではないかなあと思う。

197 :デフォルトの名無しさん:2005/12/18(日) 01:14:53
まぁ、実際糞だしね^^

198 :デフォルトの名無しさん:2005/12/18(日) 08:26:54
>>197
いや、クソかどうかはどうでもいいんだよw(頭悪いの?)
クソ呼ばわりするヤツがどの程度かってことを195、196はやってるわけだ?
たとえば、お前とはクソといっては見るものの195には答えられないわけでw
196の言ってるレベルなんでしょ?
ま、それ以前にスレの流れも読めんアホだとするとこの板ならクダすれがお似合いだね


199 :デフォルトの名無しさん:2005/12/18(日) 14:17:35
失敗と宣言すべき壮大な実験
それがMFC

200 :デフォルトの名無しさん:2005/12/18(日) 18:35:52
VBよりはまだマシ

201 :デフォルトの名無しさん:2005/12/18(日) 18:54:07
VBのほうがまだましだろ
MFC使うくらいなら
何も使わないほうがいい

202 :デフォルトの名無しさん:2005/12/18(日) 18:56:33
よく嫁
http://msdn.microsoft.com/visualc/whidbey/mfc2005/default.aspx

203 :デフォルトの名無しさん:2005/12/18(日) 19:21:37
198はなんであんなに必死なんだろう

204 :デフォルトの名無しさん:2005/12/18(日) 19:24:48
MFCに求めてるのはWin32との親和性だけ。
親和性が低いBorland OWLなんか話にならない。

205 :デフォルトの名無しさん:2005/12/18(日) 20:01:18
MFCは何かしら後世に残したものがある
失敗したシリアライズ。失敗した例外。
その実験コードは再利用されている。

VBには何一つない。論外。

206 :デフォルトの名無しさん:2005/12/19(月) 00:27:38
>>203
クソしか言えない低脳を煽りたいからかな

207 :デフォルトの名無しさん:2005/12/20(火) 22:33:24
タブコントロールを用いて、
親ダイアログに子ダイアログを表示させる
というものを作っています。

子ダイアログの表示を切り替えることまではできたのですが、
子ダイアログ上の、タブオーダが
最後のコントロールでTabキーを押すと必ずフリーズします。

親ダイアログ:
 タブコントロール

子ダイアログ:
 ボタン1、ボタン2
 スタイル:チャイルド
 境界線 :しない
 コントロール:チェック有

開発環境:VisualC++6.0

わかる方、教えてください。

208 :デフォルトの名無しさん:2005/12/20(火) 23:12:33
> 親ダイアログに子ダイアログを表示させる
ってなに?

209 :デフォルトの名無しさん:2005/12/20(火) 23:18:43
再描画が上手くいってないだけじゃなくて?
エンターキーでリストコントロールが消えるとか。
それならInvalidate()で回避出来るけど。

210 :デフォルトの名無しさん:2005/12/20(火) 23:37:18
>>208
わかりにくくてすいません。
こんな感じです
http://uploader.fc2.com/file/4237.png

211 :デフォルトの名無しさん:2005/12/21(水) 00:14:32
PreTranslateMessageで条件付けて何とかすれば?

212 :デフォルトの名無しさん:2005/12/21(水) 00:16:43
>>207
MFC雑技団に載ってるTABのと同じ方法だな。
ほんとにフリーズしてるのか気になるところだ。
TAB押した後Shift+TAB押して戻ってくるか確かめた?

213 :デフォルトの名無しさん:2005/12/21(水) 00:33:27
>>212
shift + Tabを押しても戻ってきませんでした。
フリーズした後、何を押しても反応しないので、
その度、タスクマネージャで終了しています。

214 :デフォルトの名無しさん:2005/12/21(水) 00:40:13
どこでフリーズしてるのかデバッガ使って調べたら?

215 :デフォルトの名無しさん:2005/12/21(水) 00:52:59
>>211の方法で回避出来なかったのか?

216 :デフォルトの名無しさん:2005/12/21(水) 01:24:34
>>208
>>209
>>211
>>212
>>214
>>215
PreTranslateMessage でTabキーが押されたときに、
SetFocusを用いて強制的にフォーカスをタブオーダの先頭に
変更する方法でフリーズしなくなりました。
本当にありがとうございました。


217 :デフォルトの名無しさん:2005/12/23(金) 16:52:05
MFCが糞だとすると、皆さんはどんなフレームワークをお使いで?
WindowsAPI?

218 :デフォルトの名無しさん:2005/12/23(金) 17:08:51
もちろんMFCです

219 :デフォルトの名無しさん:2005/12/23(金) 17:51:57
>>217
もういいよ、そのネタは先週でオワタ
MFCがクソかどうかの話になる前に終わったので、このスレでMFCをクソというやつは
利用機会すらなかったヤツか機会はあったが歯が立たなかったヤツらだったらしい。
それに代わるもの提示すらしないまま>>197>>201>>203を最後に消えた。
煽りは、>>206で終了 

以後は普通の流れなんだよ

220 :デフォルトの名無しさん:2005/12/23(金) 22:50:46
ドッキングツールバーを作りたいのですが、
どこを参考にすればいいのでしょうか?

作り方としてMicrosoft公式のものがあるのでしょうか?
それとも、CodeGuruやCodeProjectを参考にしないといけないのでしょうか?

221 :デフォルトの名無しさん:2005/12/23(金) 22:56:10
MFCのでよければソースが公開されてる。

222 :220:2005/12/23(金) 22:58:04
>>221
CodeProjectのソースコードはGETしました。
では、そのソースのとおりに組めば問題ないんですね。

できれば、MSDNかなんかに解説があるのをご存知でしたら助かったんですが。

223 :デフォルトの名無しさん:2005/12/23(金) 23:09:29
CReBarとかじゃないの?

224 :220:2005/12/23(金) 23:10:20
>>223
いえ、VisualStudioで使われているドッキングツールバーです。
MSDNで探してるんですが、
公式のドキュメントが見当たりません。

ご存知なかたはいますか?

225 :デフォルトの名無しさん:2005/12/23(金) 23:21:39
>>224
ドッキング ツールバーとフローティング ツールバー
http://www.microsoft.com/japan/developer/library/vccore/_core_toolbars.3a_.docking_and_floating.htm
CDockState
http://www.microsoft.com/JAPAN/developer/library/vcmfc/_mfc_cdockstate.htm
DOCKTOOL サンプル : ドッキング可能ツール バー
http://www.microsoft.com/japan/msdn/library/ja/vcsample/html/_sample_mfc_docktool.asp

まあ違うんだろうけど。

226 :デフォルトの名無しさん:2005/12/23(金) 23:21:54
// TODO: ツール バーをドッキング可能にしない場合は以下の3行を削除
// してください。
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);


227 :220:2005/12/23(金) 23:58:43
>>225・226
ありがとうございます。
それを参考にしたいと思います。

あと、
http://www.codeproject.com/docking/prod_profuis.asp
のソースコードを解析したいと思います。

228 :デフォルトの名無しさん:2005/12/24(土) 10:16:47
CMiniDockFrameWndのドキュメントがMSDN内にないのですが、
どうしてでしょう?

229 :デフォルトの名無しさん:2005/12/24(土) 10:48:34
>>228
ぐぐればリンク先開かなくてもわかるよ。
ttp://www.google.co.jp/search?hl=ja&q=CMiniDockFrameWnd&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

230 :デフォルトの名無しさん:2005/12/25(日) 10:59:15
VC6.0のダイアログプリケーションを作成しています。
VCのIDEにあるビルド出力のような、コンソールアプリケーション(ダイアログのボタンから呼び出す)
の出力を、テキストボックスにリダイレクト(?)する手段を探しています。
 どなたか経験のある方、手段について教えていただけますでしょうか?

231 :デフォルトの名無しさん:2005/12/25(日) 11:10:54
>>230
#include "stdafx.h"

#include <stdio.h>
#include <windows.h>
#include <tchar.h>

extern "C"
{
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, int nCmdShow);
};


int _tmain(int argc, TCHAR *argv[])
{
TCHAR szBuf[256];
HINSTANCE hInst;
int i;

hInst = (HINSTANCE)GetModuleHandle(NULL);

szBuf[0] = 0;
for (i = 1; i < argc; i++) {
_tcscat(szBuf, av[i]);
_tcscat(szBuf, _T(" "));
}

return _tWinMain(hInst, NULL, szBuf, SW_SHOWNORMAL);
}

232 :デフォルトの名無しさん:2005/12/25(日) 11:18:44
>>230 Pipe

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_a_child_process_with_redirected_input_and_output.asp

233 :デフォルトの名無しさん:2005/12/25(日) 18:31:26
あるコントロールpWndに対し、pWnd->EnableWindow(FALSE)とやっても
ぜんぜん無効にならないんですが、なぜですか?
pWndはスパイで見る限り正しいウインドハンドルをもってるし、EnableWindowの結果もTRUEです。

コントロールにはリソースIDがありますが、これに対応するハンドラが無い場合、無効になったりしますから
なにか条件がいろいろあるんですよね。



234 :233:2005/12/25(日) 18:34:44
ちなみにダイアログバー上のボタンです。


235 :デフォルトの名無しさん:2005/12/25(日) 20:51:40
ああ、それは俺も嵌ったことがある。
「ダイアログバー EnableWindow」あたりでgoogle検索すれば、すぐ分かるよ。

236 :デフォルトの名無しさん:2005/12/25(日) 20:57:21
CButton pButton = (CButton*)m_dlg_bar.GetDlgBar(IDC_BUTTON1);
pButton->EnableWindow(FALSE);

確かこんな感じで解決したと思う。

237 :236:2005/12/25(日) 20:58:05
失礼。一行目は
CButton* pButton = (CButton*)m_dlg_bar.GetDlgBar(IDC_BUTTON1);
ね。

238 :デフォルトの名無しさん:2005/12/25(日) 21:01:18
ダイアログバーに載ってるコントロールも、
ツールバーのボタンと同じように OnUpdateCmdUI じゃないかな?

239 :235:2005/12/25(日) 21:22:06
>>236
いや、それだと嵌るんだよ

240 :デフォルトの名無しさん:2005/12/25(日) 21:27:47
ダイアログバーはCmdUIとダイアログの両方の性質を持ってるから複雑。

CmdUIはツールバー、メニューの項目などのコマンドターゲット。
クリックやアクセラレータなどで始動する。

241 :デフォルトの名無しさん:2005/12/25(日) 23:36:28
皆さんありがとうございます。
やっぱOnUpdatCmdUIですか。。
これだとメインスレッドがアイドルの時しか更新されないんですよね。
その場合、本当はボタンを禁止したいタイミングでユーザがボタンを押せちゃうなんていう
心配は無用ですか?


242 :238:2005/12/25(日) 23:39:34
メインスレッドがアイドルにならないようなアプリを書かないからキニシナイ。

243 :デフォルトの名無しさん:2005/12/25(日) 23:42:37
CFormViewでボタンを貼り付けて作り直したらEnableWindowで変更の方法で大丈夫でしょうか?


244 :238:2005/12/25(日) 23:49:08
>>243
もちろん。あるいはCSplitterWndでViewを分割してみるのもいい。

俺は何でもCDialogで作ってしまうけどな。

245 :デフォルトの名無しさん:2005/12/25(日) 23:55:28
>>244さん、ありがとうございます。
とりあえず気にしないことにしてOnUpdateCmdUIで実装して、
万が一、連打操作によってクラッシュ等出てしまったら
そのときFormViewとかにします。


246 :デフォルトの名無しさん:2005/12/27(火) 18:34:03
環境:WindowsXP,VC++6.0SP5
MFCでOCXを作成しています。
このOCXの中から別のOCXを使おうとしているのですが、うまくいきません。
ソースは次の通りです。
---
//OCXのラップクラスをメンバ変数として宣言
CUserOcx m_OCX;

//OCXのラップクラスを生成
m_OCX.CreateControl("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}",
"UserOCX", WS_VISIBLE, CRect(0,0, 10, 10), this, IDC_OCX);
---
CreateControlで
実行時エラー'-2147417848(80010108)'
オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
とエラーが出てしまいます。
同じソースをMFCのダイアログベースで作ったEXEに組み込んだ時には
ちゃんとOCXのクラスが出来て操作が可能でした。
OCXから別のOCXを使う方法をどなたかご存知でしたらお教え下さい。
よろしくお願いします。

247 :デフォルトの名無しさん:2005/12/28(水) 00:30:13
>>246
簡単なOCXを2個作って試してみたけど、うまくいかんね。
ただオブジェクトの作成(CreateDispatch)と解放(ReleaseDispatch)はできる。
自分で追加したOCXオブジェクトの公開メソッド呼び出すと例外が発生する。。
なんでだろ??


248 :246:2005/12/28(水) 14:13:52
>>247
私の使ってるOCXに問題があるのかとも思ったのですが、
そうでもないようですね。
うーん、どうすればよいのでしょう…。

249 :デフォルトの名無しさん:2005/12/28(水) 14:37:47
双方のOCXを使う側にブリッジ関数を用意してもらうとか。

250 :246:2005/12/28(水) 16:10:34
>>249
私の使おうとしているOCXは製品なので改造とかは出来ません。
ブリッジ関数というのがよく分からないのですが、どのようにすればよいのでしょうか?

251 :デフォルトの名無しさん:2005/12/28(水) 16:52:55
仮に、作っているOCXをAとして、使っているOCXをBとする。

AからBを呼びたいとき、次のようにブリッジ(橋渡し)を呼び出し元にやってもらう。

・Aの関数ではBを呼ぶための情報と共に呼び出し元にメッセージを投げるなどして待機。
・呼び出し元はメッセージを受け取るなどしたらBを呼び出して、結果をAに通知。

・問題点
*Aと呼び出し元の通信がメッセージなどで巧くできるか。
*AからBを呼ぶために必要な情報を巧く呼び出し元に引き渡せるか。

252 :デフォルトの名無しさん:2005/12/28(水) 20:57:11
>>246&>>250
今ちょっと試してみたけどOCXの中からOCXを使えたよ。
外側はMFC利用のOCXで中に入れたのはMSFlexGrid。
AfxEnableControlContainer()呼んでる?

試したのはWin2000&VC6SP5

253 :252:2005/12/28(水) 21:00:44
あ、SPは最新のだからWin2000&VC6SP6

254 :デフォルトの名無しさん:2005/12/29(木) 06:16:30
__int64をCString::Formatやsprintfに渡したいのですが書式は%I64とか言うのがあった気がしたのですが
いまやって見ると変換できないらしく、まったく無かったかのように結果の文字列から削除されています。
正しくはどうやるのでしょうか?

255 :デフォルトの名無しさん:2005/12/29(木) 06:20:12
事故解決しました
単純にdが抜けてた。。
正しくは%I64dです。皆さんわかりましたね?
orz


256 :246:2005/12/29(木) 13:17:53
>>252
ありがとうございます。
InitInstance内で、AfxEnableControlContainer()を呼び出したところ、うまくいくようになりました!


257 :デフォルトの名無しさん:2005/12/29(木) 13:24:33
そういう落ちかい。

258 :246:2005/12/29(木) 16:57:18
もう一つ質問があります。
>>246の場合、CUserOcx m_OCX からのイベントの受け取り方(イベントマップの書き方)が分かりません。

ON_EVENT(CMyCtrl, IDC_USEROCX, 1 /* StatusUpdateEvent */, OnStatusUpdateEventSuica1, VTS_I4)
と書くと、コンパイルで
error C2440: 'initializing' : 'char [1]' から 'enum AFX_EVENTMAP_FLAGS' に変換することはできません。
などのエラーが沢山出てしまいます。
どなたかご教授お願い致します。

259 :252:2005/12/29(木) 22:58:32
>>258 (>>246)
おそらくON_EVENTを書く場所を間違えてる。
BEGIN_EVENT_MAP()〜END_EVENT_MAP()の中にでも書いたのでは?
(試しにそこに書いたら同じエラーがズラズラ出た)
イベントの受け取り側だから、取り敢えず↓↓を調べて
・DECLARE_EVENTSINK_MAP()
・BEGIN_EVENTSINK_MAP()〜END_EVENTSINK_MAP()

#外のOCXと中のOCXが頭の中でごっちゃになってるのではないか?
#念のため書いとくと252のAfxEnableControlContainer()は
#中のOCXを使うために外のOCXが準備するためのものであって
#外のOCXを使う準備をするためのものじゃないよ。
#余計混乱させてしまったらゴメン


260 :246:2005/12/30(金) 04:19:58
>>259
早速のレスありがとうございます。
確かにBEGIN_EVENT_MAP()〜END_EVENT_MAP()の中に書いていた気がします。
家にはソースが無いので休みが明けたら早速会社で見直してみます。

261 :デフォルトの名無しさん:2005/12/31(土) 16:15:11
CFileDialogで初期表示されるディレクトリを指定する方法を教えてください。
複数の入力ファイル種類ごとに初期表示させるディレクトリを変えたいので、
CFileDialogで「開く」を押下したときに自動で覚えてくれる動作を変えたいのです。
ちなみに以下のようにしたら、DoModalを呼ぶなり、何も表示されずに戻ってきてしまいました。
 static char szfilter[] = "xyzファイル(*.xyz)|*.xyz||";
 CFileDialog dlg(TRUE
      , "xyz"
      , "c:\\temp\\"
      , 0
      , szfilter);
 if(dlg.DoModal() == IDOK)
 {
  ・・・
よろしくお願いします。


262 :デフォルトの名無しさん:2005/12/31(土) 22:50:55
>>261
m_ofn は OPENFILENAME 型の構造体です。

…カスタマイズするには、オブジェクトを構築後、DoModal メンバ関数を使って表示させる前に、この構造体を変更します。
たとえば、ダイアログ ボックスにキャプションを付けるには、m_ofn の lpstrTitle メンバを設定します。

例)初期表示させるディレクトリが e:\testaa だとしたら

CFileDialog cfdg(TRUE,"bmp","*.bmp");

cfdg.m_ofn.lpstrInitialDir ="e:\\testaa";
if(cfdg.DoModal() != IDOK){
以下略



263 :デフォルトの名無しさん:2005/12/31(土) 23:27:53
>>262
ありがとうございます!助かりました
来年も今年同様よろしくお願いしますw

264 :デフォルトの名無しさん:2006/01/01(日) 12:21:18
だが、断る

265 :デフォルトの名無しさん:2006/01/01(日) 16:01:44
264はツンデレ

266 :デフォルトの名無しさん:2006/01/02(月) 01:39:36
味も見ておこう

267 :246:2006/01/05(木) 09:59:50
>>259
ソースを確認したところ、やはり
1)DECLARE_EVENTSINK_MAP() の漏れ
2)BEGIN_EVENTSINK_MAP()〜 がBEGIN_EVENT_MAP()〜 になっている
の2点でした。
どうもありがとうございました。


268 :デフォルトの名無しさん:2006/01/05(木) 16:13:43
CListCtrl で,
100個単位で InsertItem() をして,
それをまた数十回繰り返すという処理を書きました.

ところがその処理の最中に,
そのリストヴユーのスクロールバーを動かしたり
カラムをクリックしたりすると例外が発生するようになり,
ヴユーに対する操作が不安定になりました.

100個単位で InsertItem() している最中はヴユーに対する操作の
イベントハンドラをいっさい無視するというようにしたいのですが
どう書けばいいのでしょうか?


269 :デフォルトの名無しさん:2006/01/05(木) 16:39:15
ヒント:
BOOL bInserting = FALSE;
...
// 挿入する前
bInserting = TRUE;
...
// 挿入した後
bInserting = FALSE;
...
// イベントハンドラの先頭
if (bInserting) {
 return;
}
// 以降、イベントの処理
...

270 :デフォルトの名無しさん:2006/01/05(木) 16:46:03
>>269

というかそれぞれのイベントハンドラに
処理を書くのはきりがないので
ヴユーに対するすべてのイベントを一時的に
停止する方法はないものかと

271 :デフォルトの名無しさん:2006/01/05(木) 16:50:45
ShowWindow
EnableWindow

272 :デフォルトの名無しさん:2006/01/05(木) 16:53:57
CWnd::PreTranslateMessage

273 :デフォルトの名無しさん:2006/01/05(木) 17:06:44
>>268
根本解決:仮想リストビュー

274 :デフォルトの名無しさん:2006/01/05(木) 17:10:31
>>273
それはなんですか?
最中はリストヴユーは見せておかなければならないのですが

275 :デフォルトの名無しさん:2006/01/05(木) 17:11:02
イヤです。

276 :デフォルトの名無しさん:2006/01/05(木) 17:29:14
>>274
妄想リストビュー

277 :デフォルトの名無しさん:2006/01/05(木) 17:48:03
>>274
夢のリストビュー

278 :デフォルトの名無しさん:2006/01/05(木) 18:02:29
>>276
あっちゃんかっこいー

279 :デフォルトの名無しさん:2006/01/06(金) 12:51:13
VC++ MFC環境(非.NET)で、dllを実装しています。

GetModuleFileName(AfxGetApp()->m_hInstance, path, _MAX_PATH);

これだと、ロードしたEXEのパスになっちゃいます。
これではなくて、実際にロードされたときに、DLLがあるパスを(DLL内部)で取得したい
のですが、どうすればよいですか?

ググッたら、.NETのは有りましたが、MFCなど従来の方法がわかりませんでした。
(.NETでは、Assembly.GetExecutingAssembly().Locationらしい)




280 :デフォルトの名無しさん:2006/01/06(金) 13:03:30
>>279
勘だが多分AFX_MANAGE_STATEが関係してる

281 :デフォルトの名無しさん:2006/01/06(金) 13:09:58
>>280
す!すばらしい。

AFX_MANAGE_STATE(AfxGetStaticModuleState());
GetModuleFileName(AfxGetInstanceHandle(), path, _MAX_PATH);

これで、いけました。サンクス。多謝


282 :デフォルトの名無しさん:2006/01/10(火) 09:54:07
リストヴユーのスクロールバーを
全体の半分ほど以降に場所に持っていくと
OnNotify のところで例外が発生します

スクロールバーを全体の半分ほど以降に場所に
持っていったときに起こるイベントがなんなのかが
わからず,調べる手だてがなくて
こまっています

283 :デフォルトの名無しさん:2006/01/10(火) 10:02:30
>>282
そんなの無いと思うけど。

284 :デフォルトの名無しさん:2006/01/10(火) 10:14:07
>>282
そう、そんなのない。
http://www.google.co.jp/search?q=%A5%EA%A5%B9%A5%C8%A5%F4%A5%E6%A1%BC&ie=EUC-JP

285 :デフォルトの名無しさん:2006/01/10(火) 11:29:18
PostMessageで独自のメッセージUM_UNKOを飛ばし、処理させたく存じます。 
PreTranslateMessage関数では、ちゃんとメッセージが飛んできて、処理可能ですが、 
メッセージマップで追加設定した関数OnUnko()には、処理が飛んで来ません・・・ 
なにがいけないのでしょうか?? 
ちなみに、メッセージはPostMessage(UM_UNKO)で飛ばしております 
(SendMessageでは、PreTranslateMessageに飛んでこない・・・) 


BEGIN_MESSAGE_MAP(Cxxx, CDialog) 
   ON_MESSAGE(UM_UNKO, OnUnko) 
END_MESSAGE_MAP() 

BOOL Cxxx::PreTranslateMessage(MSG* pMsg) 

   switch (pMsg->message){ 
     case UM_UNKO: 
        ・・・ // 飛んでくる 
        break; 
    }


LRESULT Cxxx:OnUnko(WPARAM wParam, LPARAM lParam) 

   ・・・ // 飛んでこない 
   return 0; 





286 :デフォルトの名無しさん:2006/01/10(火) 11:50:54
VBでボタン1をクリックするとテキストボックス1に入力された数を変数su1に
読み取り、1+2+3...+su1の値をテキストボックス2に表示するというプログラムは
どうやって書けばいいんでしょうか?

287 :デフォルトの名無しさん:2006/01/10(火) 11:56:24
>>285
うちでは正しく動く。
君のOnUnkoの定義は問題ない。
UM_UNKOの値は何にしてる? 例えば0なら無理。

ちなみにPreTranslateMessageでなくWindowProcになら両方飛んでくる。

LRESULT CTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)

288 :287:2006/01/10(火) 12:00:58
>>286
なあお前、この中でどれか1つでもできるやつあるか?
MFCじゃないし、あんまりじゃないか?

・テキストボックス1から値を取得する
・1+2+3...+su1を足し合わせる
・テキストボックス2に値を設定する

289 :デフォルトの名無しさん:2006/01/10(火) 12:12:44
>>285
PreTranslateMessage で TRUE 返してた、というオチはないよね?

290 :286:2006/01/10(火) 12:15:12
dim su1,goukei,k as integer
su1=val(textbox1.text)
goukei=0
for k = 1 to su1
goukei=su1+k
next k
textbox2.text=goukei
ではどこが違うんでしょう?

291 :デフォルトの名無しさん:2006/01/10(火) 12:17:25
>>290
出て行け

292 :287:2006/01/10(火) 12:17:30
メモ:呼び出される順番

== SendMessage
WindowProc
OnWndMsg
OnUnko

== PostMessage
PreTranslateMessage
WindowProc
OnWndMsg
OnUnko

293 :デフォルトの名無しさん:2006/01/10(火) 12:22:57
>>286
スレ違い。

>>288
スレ違いを構うな。

294 :285:2006/01/10(火) 12:35:01
>>287
UM_UNKOは(WM_APP + 1)です(WM_USER + 1)でも駄目でした・・・
PostMessageを発行しているのが、ダイアログ上に配置されたボタン(サブクラス化した自作クラス)の
クラス内で行っており、親のダイアログのメッセージマップまで届いていないのでしょうか?
(ダイアログ上に普通のボタン貼って、そこのイベントで発行した場合は上手くいきました。)

295 :285:2006/01/10(火) 12:41:04
GetParent()->PostMessage(WM_UNKO)
で解決致しました。m(_ _)m

PreTranslateMessageでは引っかかったので、
GetParent()が必要だとは思いませんでした・・・



296 :287:2006/01/10(火) 12:53:26
大事なことを>>294で言うんだもんなあ。
わざわざ試したのに。

297 :デフォルトの名無しさん:2006/01/10(火) 12:59:06
>>296
まぁまぁ、気持ちは判るが、その「大事なこと」に気付くくらいなら質問していないだろうから。

298 :デフォルトの名無しさん:2006/01/10(火) 13:02:01
ふむ

299 :285:2006/01/10(火) 13:05:14
|_・)   >>296
|⊂  カタジケナイ・・・




300 :デフォルトの名無しさん:2006/01/10(火) 14:38:45
CWnd の派生クラスのイベントハンドラで
例外が出ていて,
それがなんのクラスのイベントハンドラなのかを
調べる方法はありますか?

301 :デフォルトの名無しさん:2006/01/10(火) 14:40:37
>>300
実行するときに
メニューの実行(Ctrl+F5)ではなく
F5(デバッグ実行)で実行する。
これ知らない子が多いね。

302 :デフォルトの名無しさん:2006/01/10(火) 20:13:04
今書いているファイルとClassViewとの同期ってどうすればいいのですか?

関数をファイルから検索して、「ファイルから検索1」に出てきた奴をダブルクリックすれば
該当のファイルの位置に飛ぶんだが、ソレがどのクラスのどこら辺に居るのか
ClassViewのツリーの中を目で追いかけるのが面倒っす。

書いていた関数を削除したいとき、ツリーの該当箇所右クリックしてDELしたいんですけど
左に目をやると、てんで違うクラスの位置に居ることが多く、ClassViewの森の中を
縦横無尽に右往左往してますんで、どなたか助けてください。


303 :デフォルトの名無しさん:2006/01/10(火) 20:19:39
>>302
ソースエディタの上にクラス名とメンバ関数が出てるじゃない。

304 :デフォルトの名無しさん:2006/01/11(水) 00:18:20
>>294 に対し、便乗で質問です。
WM_USER+0x1000(0x300だったか?)ぐらいまでMFCが使っている
と記憶しています。
WM_APPの場合は、それ以降のメッセージIDをMFCで使用しないこ
とが保障されていますか(今後においても)?

305 :デフォルトの名無しさん:2006/01/11(水) 00:21:03
今後は知らんが、まぁ大丈夫だろ。

306 :デフォルトの名無しさん:2006/01/11(水) 00:30:59
>>304
ヘッダにコメントとして書いてあるはずだ。
Visual C++とPlatform SDKの両方のヘッダを調べるべき。

307 :デフォルトの名無しさん:2006/01/11(水) 00:56:02
イヤです

308 :デフォルトの名無しさん:2006/01/11(水) 01:08:52
ダメです

309 :デフォルトの名無しさん:2006/01/11(水) 02:35:36
>>303
うん。それでも迷っちゃうんだ。
CFORMで良かったのか単にFORMだったのか勝手に脳内変換してごちゃごちゃしてくる。

310 :デフォルトの名無しさん:2006/01/14(土) 20:15:53
VC6にて、プロパティシート上で、複数行を有効にしているEDITBOXに
フォーカスがあたっているときに、EnterやESCキーでのデフォルトボタン
が有効にならないのですが。(無反応となる)
複数行でないEDITBOXであれば、問題ありません。

複数行のEDITBOXの場合、何かコードを追加しないとだめでしょうか?


311 :デフォルトの名無しさん:2006/01/14(土) 22:57:09
あのなぁ

312 :デフォルトの名無しさん:2006/01/14(土) 23:25:32
>>310
複数行のEditなんだから文字列が「改行」されるのは当たり前。

313 :310:2006/01/15(日) 03:09:01
状況足りなすぎなので補足。
プロパティシートでなくて、単純なダイアログ上での、
複数行EDITBOXであれば、EnterやESCは有効でした。

>>312
ES_WANTRETURNは未指定なので、EDITBOX上の文字列は
改行されないです。


314 :デフォルトの名無しさん:2006/01/15(日) 13:17:54
画像ファイルをスライドショーするフラッシュファイル(swf)を作成する
アプリを作りたいのですが、フラッシュファイル(.swf)を書き出すAPI・仕様とか、
サンプルプログラムがあったらURLを教えてください。
(QuickTime APIで可能でしたでしょうか?)
ご教授よろしくおねがいします



315 :デフォルトの名無しさん:2006/01/15(日) 13:48:56
釣りマルチ乙

316 :デフォルトの名無しさん:2006/01/15(日) 23:16:48
ヘルプファイルの作成について質問させてください。
.NET2003を使用しています。
プロジェクトでchmファイルを作成していたのですが、
別のソフトでchmを生成したら作成したソフトから起動ができなくなってしまいました。
その別ソフトでhhkなどが変更された形跡はあるのですが
そもそも同ファイル名なのに別ソフトで生成したchmファイルが開けないというのが謎です。
また、プロジェクトをリビルドしても、今まで見えていたDos窓のヘルプファイルのコンパイル画面が
立ち上がらなくなり、コンパイルすらできない状態になってしまいました。

別ソフトで生成したchmファイルを使う方法、もしくは.NETで再度コンパイルできるようにする方法を
どなたかご存じであれば、回答宜しくお願いいたします。

317 :デフォルトの名無しさん:2006/01/16(月) 01:25:43
CEDITに全角で入った数字をintとして認識したいんだけど
どういうソース書いていいのかわからない。

318 :デフォルトの名無しさん:2006/01/16(月) 02:17:15
そうですね。

319 :デフォルトの名無しさん:2006/01/16(月) 02:34:43
こんなのか?
「六萬五千五百参拾五」

320 :デフォルトの名無しさん:2006/01/16(月) 11:25:07
MFCにはそういうのないから自作することになると思うが
そういうことでスレ違い。

321 :デフォルトの名無しさん:2006/01/16(月) 13:12:22
MFCで線を引くときなど(LineToなど)にアンチエイリアスをかける方法ってありますか?

322 :デフォルトの名無しさん:2006/01/16(月) 13:19:17
スレ違い

323 :デフォルトの名無しさん:2006/01/16(月) 14:31:47
>>321
おっ、もってけ
つgdiplus

324 :デフォルトの名無しさん:2006/01/16(月) 22:48:01
>>323
カッコイー

325 :デフォルトの名無しさん:2006/01/17(火) 19:43:23
化石コンパイラーVC6sp6と
ポンコツ マシンのセレロン2。0+MB815から
最新のマシーンに環境移行を考えていますが、
移行して問題ないですか。

大好評、eMachines6448のAMD64が更にパワーアップ。
グラフィックス、サウンド、HDDなど、
マルチメディアを快適にするスペック満載です。







326 :デフォルトの名無しさん:2006/01/17(火) 19:48:34
>>325
絶対ダメだ。移行すべきでない。

327 :デフォルトの名無しさん:2006/01/17(火) 19:59:30
すいません。
理由をきかせて下さい。
アーキテクチャーに共通性がないと思うのですが
(8086系というのですか。)
しかし、結構売れているのは、何かエミューな仕掛けが
有って、問題ないと勝手に想像してます。
 vc6で作られたソフトがごまんとあるので、私のプログラマー
人生も32ビットと一緒に死滅する決意です。
 余談ですが、3年ぶりに公開されたEM EDは性器なし、具烈婦なし
逝ってよし、MFC4.2で上等て感じですね。


328 :デフォルトの名無しさん:2006/01/17(火) 20:40:39
いちよう↓の本は立ち読みしました。
  はじめて読むPentium マシン語入門編
  蒲地 輝尚
アセングラ系の本はヘたれが書いた本が多いが
この本は優秀な本で、★をつける奴がへたれである。
ーていうと
東大卒業してから発言してね。ーて

329 :デフォルトの名無しさん:2006/01/17(火) 20:50:00
エスパーより医者が必要だな。それもちょっと特殊な医者が。

330 :デフォルトの名無しさん:2006/01/17(火) 20:55:57
おもろい

331 :デフォルトの名無しさん:2006/01/17(火) 21:21:27
>>325
>絶対ダメだ。移行すべきでない。
VC6SP6はM$最高のコンパイラーですかね。
mfcは使いやすいと思いますよ。
フリーソフトのJWCADなんかMFCで作っている割には、
昨今のcpuではさくさく動作しますね。特にファイル開く
時に3×4列のサムネイルが毎回ご丁寧に再描写してくれる
もんで、これでも動くんだと関心してます。

332 :デフォルトの名無しさん:2006/01/17(火) 21:40:39
.NETは安いのに6.0はいまだに高いなと・・・

333 :デフォルトの名無しさん:2006/01/17(火) 22:49:50
>>331
開発環境とコンパイラとEXEがごっちゃになってないか?

334 :デフォルトの名無しさん:2006/01/18(水) 01:39:34
それ以前に痛すぎる

335 :デフォルトの名無しさん:2006/01/18(水) 11:00:55
>>331
開発環境とコンパイラとEXEがごっちゃになってないか?
小室哲也は演奏するときに
左にキーボード
正面にシンセサイザー2段置
右にシーケンサー用キーボード
体が1つなのに一杯並べて1つで言いと思うが
 さてここで、プロのプログラマーは、左に開発環境マシーン
正面にコンパイラー 右にEXE用のパソコンと揃えるのか聞きたい。
貧乏な俺は、
1台のマシーンでごっちゃになってる。
これって、普通だと思う。
 天田64bitで動く、OS、コンパイラーは特別なのか。

336 :デフォルトの名無しさん:2006/01/18(水) 11:24:48
MFC が何なのかも、微妙に解って内気ガス

>>327
>EDは性器なし
使えないものは無いも同然、か。深いな。

337 :デフォルトの名無しさん:2006/01/18(水) 11:51:32
32bitで64bitが動くんたぞ
メモリーを2G以上、アロケートできるんだぞ。
つまり、VC6でも今までの制約の上限がなくなるわけで
64専用コンパイラーに移植しなくてもメモリー管理を
見直すだけでMFCモッサリ、遅い、糞ということが無くなる。
今流行の外部アレイメモリーは、邪道で、CPUの近くに
好きなだけメモリーを搭載できる。
ーだから天田64bitはどうなの?

お舞等の頭では、理解できないだろ。
俺の脳内は知性のかたまりだ。intel入ってる!

(インテル® EM64T) に対応したシステムでは、
物理メモリ、仮想メモリともに 4 GB 以上のアドレス空間が
利用可能になり、パフォーマンスが向上します。また、
インテル EM64T は
64 ビット・コンピューティングもサポートしているため、
将来のアプリケーション環境にも余裕で対応できます。

338 :デフォルトの名無しさん:2006/01/18(水) 11:59:27
和紙のことを害基地と呼んでおる低脳がおるが
 お舞等の頭では、理解できないだろ
32bitで64bitが動くんたぞ
だからこのマシーンでMFC6を動かした奴はいるのか?

AMD64は、32ビット・コンピューティングと
64ビット・コンピューティングを、同時に、
しかも性能を低下することなく実行できるよう設計されています。
ダイレクトコネクト・アーキテクチャを採用した
AMD64プロセッサでは、すべてをCPUに直接接続することで、
システム・アーキテクチャが直面する課題に対処し、
ボトルネックを軽減します。



339 :デフォルトの名無しさん:2006/01/18(水) 15:29:10
うん、確かに理解できんわ。それは認めるから、
窓に鉄格子の嵌った病院に早く帰ってくれ。

340 :デフォルトの名無しさん:2006/01/18(水) 16:25:36
>>310 DM_GETDEFIDを作る必要がありそうです。

Spy++で動作を追ってみました。
WM_GETDLGCODEの後、ページにDM_GETDEFIDが送られ、ページはid=1を返す。
しかし、ページ上にid=1のボタンが無いので、反応しないようです。


341 :デフォルトの名無しさん:2006/01/18(水) 18:07:24
ドキュメントビューをサポートしないアプリケーションで、CSplitterWndで
分割ウインドウにすると、分割したペインに割り付けたCWndが表示されません。
これはどうしたら治るでしょうか?


342 :デフォルトの名無しさん:2006/01/18(水) 21:08:35
>>325
>絶対ダメだ。移行すべきでない。
あんたが止めても俺は移行することにした。
パラダイス パラダイス

http://wiki.mm2d.net/win64/
動作したやつ †

開発環境 †

統合環境 †
Visual C++ .NET Standard 2003
Visual C++ 6.0

343 :デフォルトの名無しさん:2006/01/18(水) 21:15:18
>>342
はいはい、もう分かったから消えてくれ。

344 :デフォルトの名無しさん:2006/01/19(木) 04:16:47
こいつは、蟲の仕業だな。

この蟲は人間に憑く。普段はおとなしくしているが、
16bit -> 32bit、PC98 -> PC/AT、COM -> .NET のように
移行期になると活動が活発になる。
活発になると憑かれた人間は、盲目的に移行したくなり、
周りの人間も移行させようとし、妙な行動を起こしたりする。
Win95を買うために夜中並んでたのも、おそらく蟲の仕業だろう。
>>325 の行動も蟲に憑かれた人間の典型的な行動だな。


345 :デフォルトの名無しさん:2006/01/19(木) 11:46:39
ギンコさんキタ━━━(・∀・)━━━!!

346 :デフォルトの名無しさん:2006/01/19(木) 17:23:27
すみません、質問です。
MDI形式のアプリにツールバーをドッキングさせてるのですが、
ツールバー以外の領域の色を変更したいのです。
(ドッキングさせたときに、”ニョキ”って出現する領域のことです)
…わかりにくくて済みません(^^;

この場合、MainFrameで何らかのイベントを取って、変更処理を入れるのか?
それともToolBarの方で何らかのイベントを取って、変更処理を入れるのか?
何らかのイベントも含めて教えて下さい。
よろしくお願いします。

347 :デフォルトの名無しさん:2006/01/19(木) 18:38:48
>盲目的に移行したくなり、
>周りの人間も移行させようとし、妙な行動を起こしたりする。
別に某宗教と違って勧誘してませんよ。
君等は一生カローラを乗り続けるつもりか。
今でも箱スカを乗っている人はカッコイイと思うが

VC6にSDKをインストールすれば、環境出来上がりらしい。
報告を求む



348 :デフォルトの名無しさん:2006/01/19(木) 18:53:00
>>347
まず自分で試せよ。クズが。

349 :デフォルトの名無しさん:2006/01/19(木) 20:07:06
一生カローラ乗ってろ じじい

350 :デフォルトの名無しさん:2006/01/19(木) 20:22:27
一生同じ車を乗り続ける人は俺はかっこいいと思う

351 :デフォルトの名無しさん:2006/01/19(木) 20:44:57
じじいには
ゲイツさまのMSDOSが似合ぞ!

352 :デフォルトの名無しさん:2006/01/20(金) 11:35:29
にあぞ!

353 :デフォルトの名無しさん:2006/01/20(金) 11:37:19
>>347
ネタにマジレスする、その行動原理が解らない。

354 :デフォルトの名無しさん:2006/01/21(土) 01:49:55
どうかスルーでお願いする

355 :デフォルトの名無しさん:2006/01/21(土) 12:02:24
>>346 同じようなとこで躓いてる人がおった。

同じような質問なのですが、
MDIでチャイルドウィンドウの背景色を変更する方法ってありませんか?
OnDraw()など再描画が必要なタイミングでクライアントのRectを取って範囲内塗りつぶしとかやったのですが、
メッセージに対応し切れていないらしく、
OpenFileDialogを開いたとき、ウィンドウを移動したときなどなど、表示が崩れます。
OnSize()やOnMove()で同じ処理を入れても、まだ崩れます。

CWndか、その派生のCViewの持っているブラシを変更することができればいい…のですかね?
方法が見当たりませんが。
ダイアログの背景色を変更する方法は見つかったのですが、
そのままCView派生クラスに流用できる方法ではなさそうなので、
ご存知の方がいらっしゃいましたらお願いします。

環境はXP、Pen4、VC++6.0です。

356 :デフォルトの名無しさん:2006/01/21(土) 12:21:31
viewによる
あとsdiだろうがmdiだろうがviewは同じ

357 :デフォルトの名無しさん:2006/01/21(土) 12:27:08
>>355
BOOL CTestView::OnEraseBkgnd(CDC* pDC)
{
// TODO : ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。
//■ここから追加
CRect rc;
GetClientRect(&rc);
CBrush brush;
brush.CreateSolidBrush(RGB(0xCC, 0xFF, 0xFF));
pDC->FillRect(&rc, &brush);
return TRUE;
//■ここまで追加

return CView::OnEraseBkgnd(pDC);
}

358 :デフォルトの名無しさん:2006/01/21(土) 12:35:33
>>355
これの方がシンプル。
int elem = COLOR_WINDOW;
COLORREF cr = RGB(0xCC, 0xFF, 0xFF);
SetSysColors(1, &elem, &cr);

359 :355:2006/01/22(日) 02:42:15
>>357, >>358
そのあたりの方法で出来るかどうか試してみます。
ありがとうございました〜!


360 :デフォルトの名無しさん:2006/01/22(日) 02:55:10
ちょっとお聞きしたいのですが、
ダイアログベースのプログラムについてなのですが、
コンストラクタとOnInitDialogの違いって何でしょうか?

361 :デフォルトの名無しさん:2006/01/22(日) 03:03:00
C++はわかるの?

362 :デフォルトの名無しさん:2006/01/22(日) 15:37:38
>コンストラクタとOnInitDialogの違いって何でしょうか?
これは酷い。

363 :デフォルトの名無しさん:2006/01/22(日) 16:08:15
つまり 全く関係がない ということです

364 :デフォルトの名無しさん:2006/01/22(日) 23:17:41
Rect内に縦書きにしたいんだけど・・・。
現状270度回転と@付フォントで縦書きまで出来ました。
DT_CENTER||DT_VCENTER||DT_SINGLELINEな配置で縦書きに
したいんだけど位置合わせのロジックがわからないんです。
どなたかご教授ください。

//.h
CFont m_fontV10;
//コンストラクタ
m_fontV10.CreateFont(10,0,2700,2700,
FW_NORMAL,
FALSE,FALSE,FALSE,
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_LH_ANGLES,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_MODERN,"@MS ゴシック");
//ソース
CString str;
CRect rect;
CFont *pFont;
CFont* pOldFont;

str="hoge";
rect=CRect(10,10,30,110);
*pFont=&m_fontV10;


pOldFont=(CFont*)pDC->SelectObject(pFont);
pDC->DrawText(str, rect, DT_CALCRECT );

//ここになんて書いたらいいの?

pDC->DrawText(str,rect,DT_NOCLIP);
pDC->SelectObject(pOldFont);

365 :346:2006/01/23(月) 22:17:11
>>355
いや、なんか違います。
ビュー云々の話ではなく、
CDockBarの背景色の変え方がわかりません。
がんばって調べているのですが、うーむ…。

ついでになんですが、
CPropertyPageで背景色を変えたときに
タブ部分(つまみ?)だけ色が変わりません。
OnNCPaintで色を変えてみてもダメでした。

がんばって調べますが、知っている方いたら
教えて下さい。

#MFC難しいッス…orz

366 :365:2006/01/24(火) 13:48:01
CPropertyPageのタブの色変更に関しては出来ました。
CDockBarがどうにも…orz

367 :デフォルトの名無しさん:2006/01/24(火) 17:04:47
CListCtrl の方で InsertItem() すると
CListView の方で OnUpdate() しなくても
追加した項目は表示されるんですか?


368 :デフォルトの名無しさん:2006/01/25(水) 00:19:54
>>360-362
コンストラクタはダイアログクラスの初期化ですよね。
OnInitDialogはダイアログの初期化ですよね。
どちらも初期化ですし、何か似てるのでどっちで初期化を少しだけ迷うのですよ。
メンバ変数はコンストラクタとか、SetTimer()みたいに
ウィンドウズっぽいものはOnInitDialogへとか、
なんとなくはわかるんですが、クリアにわかってないんです。

369 :デフォルトの名無しさん:2006/01/25(水) 00:21:59
何だよウィンドウズっぽいものって。はっきりさせろよ。

370 :デフォルトの名無しさん:2006/01/25(水) 00:27:45
これは酷い

371 :デフォルトの名無しさん:2006/01/25(水) 00:29:45
>>368
大体そんな感じでOK.

372 :デフォルトの名無しさん:2006/01/25(水) 00:33:22
>>368
コンストラクタの時点とOnInitDialogの時点での
ダイアログの状態の違いは何だ?

373 :デフォルトの名無しさん:2006/01/25(水) 06:09:34
入居前入居後

374 :デフォルトの名無しさん:2006/01/25(水) 08:14:39
普通はコンストラクタはデストラクタとペアで使う
たとえば new と delete とか

MFCの場合は基底クラスを継承して使うから
用がなければコンストラクタは使わなくてもいい。

375 :デフォルトの名無しさん:2006/01/25(水) 12:18:51
>>368
MSDN の「ダイアログ ボックスの作成と表示」にも
>ダイアログ オブジェクトの作成は 2 段階で行います。
>第 1 段階でダイアログ オブジェクトを構築し、
>第 2 段階でダイアログ ウィンドウを作成します。
と書かれている通り
第 1 段階 → コンストラクタによるインスタンス初期化
第 2 段階 → Create() メンバ関数によるウィンドウ作成・初期化
         (実際にウィンドウが作られた後、OnInitDialog() が
          呼び出される)
なので、その「なんとなく」は概ね正解。

376 :デフォルトの名無しさん:2006/01/25(水) 15:18:49
new 出会い
OnInitialize セックル
delete 別れ
ASSERT 妊娠

377 :デフォルトの名無しさん:2006/01/25(水) 22:38:14
>>376 残念。それは実行時エラーだ。

378 :368:2006/01/25(水) 23:50:37
おかげさまで、疑問点がクリアになりました。
ありがとうございました。

379 :デフォルトの名無しさん:2006/01/25(水) 23:59:07
>>368
>>373が正解で、
ウィンドウが存在するかしないか、
ウィンドウハンドルが有効か無効か、の違い。
「ウィンドウズっぽいもの」とか言ってたら恥ずかしいぞ。

380 :デフォルトの名無しさん:2006/01/26(木) 00:10:38
CToolBarで右クリックを感知する方法は何かありませんか?

381 :デフォルトの名無しさん:2006/01/26(木) 01:19:26
>>379
なんの価値もないレスだな。
わざわざそんないやみ言う必要があるんかい

382 :デフォルトの名無しさん:2006/01/26(木) 13:50:26
>>380
普通にON_WM_LBUTTONDOWN( ) afx_msg void OnLButtonDown( UINT, CPoint ); で、
いいけどCMiniDockFrameWndに入ってたりするときもあるのでそこでも
ON_WM_LBUTTONDOWN( )とかいる。

383 :デフォルトの名無しさん:2006/01/26(木) 16:44:57
現在、Sleipnir2のようなタブコントロールを作っているんですけど、
複数行のタブ時に、
デフォルトでは、一番下の行以外の行のタブをクリックすると、
クリックしたタブの行が一番下にシフトされてしまいます。
この機能をなくしたいんですけど、なんとかならないでしょうか?

よろしくお願いします。

384 :デフォルトの名無しさん:2006/01/26(木) 17:07:19
ボタンとかのスタイルにする

385 :383:2006/01/26(木) 17:14:28
>>384

できました。ありがとうございました。

386 :380:2006/01/26(木) 22:53:39
>>382 AppWizardおよびClassWizardが,
そのあたりをうまいこと隠してしまっていたので困っていたのですが、
その感じだとどうもメッセージはきちんと送られていて、受け取れるみたいですね。
ということはWizardに頼らずに手書きでやればどうにか実装できるという事ですかね。
ちょっといろいろ試してみます。
ありがとうございました。

387 :デフォルトの名無しさん:2006/01/27(金) 13:59:36
>>386
ウィザードで派生クラス作ればいいよ。
ツールバーのクラスはCMainFrameにあるのを自分の作ったのに置き換えて
CMiniDockFrameWndは
m_pFloatingFrameClass = RUNTIME_CLASS(MyMiniDockFrameWnd) ;
をCMainFrame::OnCreate()で

388 :デフォルトの名無しさん:2006/01/27(金) 20:12:08
ところで皆さん、
間違えて追加してしまったリソース、必要なくなったソースファイル、
入力をミスったシンボル、その他諸々どうしています?
プロジェクトから作り直すのも手間ですし、
何か削除する方法はないのですかね?
シンボルは未使用のものに限り、シンボルブラウザで消せるみたいですが。

389 :デフォルトの名無しさん:2006/01/27(金) 21:29:10
Delやって消えたらOK.
おかしくなったらマイクロソフトの責任。と自分に言い聞かせながら

390 :デフォルトの名無しさん:2006/01/27(金) 21:39:50
IDEとWindowsエクスプローラから普通に消してるが

391 :デフォルトの名無しさん:2006/01/27(金) 21:45:13
resource.hのIDがとびとびになるのがイヤだから手動で書き換える。

392 :390:2006/01/27(金) 21:52:19
あ resource.hは手で直してるな

393 :デフォルトの名無しさん:2006/01/27(金) 22:01:41
resource.hを手で書き換えると、明示的にリコンパイルしなきゃ
おかしなことになるので注意が必要だ。

394 :デフォルトの名無しさん:2006/01/27(金) 22:19:19
シンボルブラウザという便利なものがあったはず。

395 :394:2006/01/27(金) 22:20:24
ガイシュツorz

396 :デフォルトの名無しさん:2006/01/27(金) 22:22:16
シンボルブラウザって信用できるの?

397 :デフォルトの名無しさん:2006/01/27(金) 22:50:50
may be

398 :デフォルトの名無しさん:2006/01/29(日) 03:59:18
エクセルみたいなセルを入力できるダイアログを作る
エレガントな方法って、何かありますか
調べてはみたんですが。ピンと来るものが無くて・・

399 :デフォルトの名無しさん:2006/01/29(日) 10:24:04
>>398
つ[FlexGrid]

400 :デフォルトの名無しさん:2006/01/29(日) 12:30:55
>>398
つExcelCOM

401 :デフォルトの名無しさん:2006/01/29(日) 12:32:31
>>398
エレガントにサラサラっと自作。チョロいもんだ。

402 :デフォルトの名無しさん:2006/01/29(日) 17:26:58
回答ありがとうございます

>>399
中々良さ気ですね
環境的には、アプリ起動の時、MFC42DLLさえあればOKですか?

>>400
COMと言う事は、エクセルがインストールされていないと
APLを作成できない・動かない・・ですか?


403 :デフォルトの名無しさん:2006/01/29(日) 17:39:52
>>402
FlexGridは、VC6ならMicrosoft版(MicrosoftFlexGrid)がバンドルされているからocxがあればいいはず。
VC7以降はバンドルされていないから、製品版(FlexGridPro)を買わないとダメ。
Excelがインストールされているなら、名前は忘れたけどFlexGridに似たようなOCXが使えたはず。

404 :デフォルトの名無しさん:2006/01/29(日) 17:44:22
MSFlexGrid は直接入力できないんですね
「工夫」すれば何とかなりそうなんですが・・・

405 :デフォルトの名無しさん:2006/01/29(日) 17:58:50
>>404
そうだったっけ。それだったら、セルをクリックされたらそのセルに重ねてEditはっつけるとか。
#って、そこまでするならListCtrlでも入力可能なようにみせることが可能だけど。
##そのような例は、確かCodeGuruで幾つか見つけた希ガス。

406 :デフォルトの名無しさん:2006/01/29(日) 18:07:26
ちなみに、
エクスプローラでのファイル名の変更のときも
一時的にEditが貼り付けられてる

407 :デフォルトの名無しさん:2006/01/29(日) 19:01:28
みたな

408 :デフォルトの名無しさん:2006/01/29(日) 19:10:47
>>406
実際には動かしていませんが、そんなこと書いてあるサイトがありました
>CodeGuru
初耳なので、ちょいと調べてみます

>>407
なるほど・・
ひょっとしてエクセルも、そうやってるんですかね??

409 :デフォルトの名無しさん:2006/01/29(日) 19:15:03
編集中の時点のすべてのウインドウ一覧を取得するプログラムを書いてみたら分かるお。
タイマーとか使ってさ。

410 :デフォルトの名無しさん:2006/01/29(日) 22:12:41
MFC Grid control は?
http://www.codeproject.com/miscctrl/gridctrl.asp

411 :デフォルトの名無しさん:2006/01/30(月) 11:03:51
>>393
タイムスタンプ更新されるから関連ソースは自動的にリコンパイルされんか?

412 :デフォルトの名無しさん:2006/01/30(月) 11:30:19
>>411
resource.hだけ特殊で
//{{NO_DEPENDENCIES}}
が書かれてるので依存関係が無視される。
なのでリビルド必須。

コントロール貼るたびに、
依存関係によって、すべてのソースが再コンパイルされたら大変だからな。

413 :デフォルトの名無しさん:2006/01/30(月) 23:11:27
質問です。
ドラッグしたときなどに、マウスカーソルが変わったり、
枠が表示されたり、画像が表示されたりするアプリケーションが沢山あるわけですが、
あれはどうやって実装するのでしょうか?

アバウトな質問で申し訳ありませんが、
何か調べるor考えるための取っ掛かりが欲しいのです。

414 :仕様書無しさん:2006/01/30(月) 23:28:10
>>410
そのサイトのMFC Grid controlが、CodeGuru の発展形みたいです。
これを使うか、>>405 の様にMSFlexGridに、Editを貼りつけるか・・
(唯。これは貼り付ける時に座標指定が微妙みたいですが・・)

簡単なコントロールがあると思ったのですが、意外と面倒そうです。
あんまり、こう言う入力の仕方は需要が無いんですかね??

415 :デフォルトの名無しさん:2006/01/30(月) 23:43:22
初歩的な質問ですが、
クライアント領域に二種類のViewを貼り付けるにはどうすればいいでしょうか?
できればSplitterのように動かせたりしないものがいいです。

416 :デフォルトの名無しさん:2006/01/30(月) 23:58:35
>>413
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/cursors/aboutcursors.asp


417 :デフォルトの名無しさん:2006/01/31(火) 09:15:25
Splitterを固定なら調べたら一発で見つかったけど
いったい何がやりたいんだ?

418 :デフォルトの名無しさん:2006/01/31(火) 09:26:48
>>415
Viewに子ウィンドウを2枚貼り付ければいいじゃない。

419 :デフォルトの名無しさん:2006/01/31(火) 14:12:40
CWnd のオブジェクトにメッセージをとばして
それに対するイベントハンドラが呼ばれるとき,
これはあらたなスレッドが起こされて処理されるんでしょうか?

420 :デフォルトの名無しさん:2006/01/31(火) 15:23:56
>>419
こんにちは。
イベントハンドラの中でSleep()してみると分かりますよ。

VOID Sleep(
DWORD dwMilliseconds // 中断の時間
);

421 :デフォルトの名無しさん:2006/01/31(火) 16:16:50
>>420
ありがとうございます
やってみたところ処理が止まるので
あらたなスレッドが起きるわけではないのですね

422 :デフォルトの名無しさん:2006/01/31(火) 18:10:37
CRichEditCtrlクラスを用いて、エディターを作ってます
ベースラインより下の部分の空白を取り除くために、
CHARFORMAT構造体のyOffsetメンバを用いたのですが、
「-」の値を入れても認識してくれず、下にずれてくれません。
フォントの関係等でできないのでしょうか?
yOffset以外で現在CHARFORMAT構造体に設定しているのは
cf.bPitchAndFamily = FIXED_PITCH | FF_SWISS;
strcpy(cf.szFaceName, "FixedSys");
です。
よろしくお願いします。

423 :デフォルトの名無しさん:2006/02/02(木) 19:13:03
FixedSysは固定

424 :デフォルトの名無しさん:2006/02/02(木) 22:45:09
みなさんフォントを選択して文字列をGDIで描くとき
何をつかってフォントを作りますか?
CreateFontはパラメータがいっぱいあってしかもちょっと間違えると
ぜんぜん違うフォントが勝手に選ばれるし。
あれってもうどのシステムでも絶対あるフォントを決まった幅とか高さとかその他のパラメータ
の組み合わせのみを与えるしか使いようがなくないですか?


425 :デフォルトの名無しさん:2006/02/02(木) 22:58:02
>>424

LOGFONT lf;
CFont *pSysFont;
CFont NewFont;

pSysFont=CFont::FromHandle((HFONT)::GetStockObject(DEFAULT_GUI_FONT));
pSysFont->GetLogFont(&lf);
lf.lfHeight=-MulDiv(9,pDC->GetDeviceCaps(LOGPIXELSY),72); // 12Pt
lf.lfWeight=FW_BOLD; // 太字

NewFont.CreateFontIndirect(&lf);

とか。

426 :デフォルトの名無しさん:2006/02/02(木) 23:14:57
>>425
ありがとう。そんな難しいやり方ぜんぜん思いつきませんでした。
高さを14Ptにしたかったらどうすればよいのですか・・?
なんども聞いてすいません。


427 :デフォルトの名無しさん:2006/02/02(木) 23:19:17
>>925
それ9ptじゃね?

428 :デフォルトの名無しさん:2006/02/02(木) 23:31:57
>>427
コピペした時、直し忘れた。orz

× : lf.lfHeight=-MulDiv(9,pDC->GetDeviceCaps(LOGPIXELSY),72); // 12Pt

○ : lf.lfHeight=-MulDiv(12,pDC->GetDeviceCaps(LOGPIXELSY),72); // 12Pt

>>426
lf.lfHeight=-MulDiv(14,pDC->GetDeviceCaps(LOGPIXELSY),72); // 14Pt


429 :デフォルトの名無しさん:2006/02/02(木) 23:43:44
>>428
ありがとうございます。さっそくありがたく使わせていただきます。


430 :デフォルトの名無しさん:2006/02/02(木) 23:48:18
なんで MulDiv??

431 :デフォルトの名無しさん:2006/02/02(木) 23:54:39
>>430
MulDivの存在意義

432 :デフォルトの名無しさん:2006/02/03(金) 01:15:48
class MyClass(){
protected:
CCriticalSection m_cs;
public:
void AAA(); void BBB();
}

void MyClass::AAA(){
CSingleLock SLA(&m_cs, TRUE); ←ロックされる
BBB(); ←何故、m_csは既にロックされているのにデッドロックにならない?
}

void MyClass::BBB(){
CSingleLock SLB(&m_cs, TRUE); 
//適当な処理
CString str;
str="abcedfg";
}

//メインの処理
MyClass myclass;
myclass.AAA();

こんなことしてもデッドロックにならないのは何故なのか教えてくれませんか。
AAA()からBBB()が呼び出されている時は、SLAはスコープ外だから??
もし、スコープ外であるのが理由となると、BBB()のstrへの文字列代入処理中は、
SLBはスコープ外になってしまう言うことになると考えて良いでしょうか。

少し混乱しています。この疑問について教えてください。
よろしくお願いします。

433 :デフォルトの名無しさん:2006/02/03(金) 02:05:14
>>432
登場人物がひとりだからデッドロックにはならないだろう。
CSingleLock SLA(&m_cs, TRUE);
CSingleLock SLB(&m_cs, TRUE);
2回目は無視される?


434 :デフォルトの名無しさん:2006/02/03(金) 10:11:12
>>432
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/entercriticalsection.asp

>After a thread has ownership of a critical section,
>it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution.
>This prevents a thread from deadlocking itself while waiting for a critical section that it already owns.
>The thread enters the critical section each time EnterCriticalSection and TryEnterCriticalSection succeed.
>A thread must call LeaveCriticalSection once for each time that it entered the critical section.

435 :デフォルトの名無しさん:2006/02/03(金) 10:28:02
>>432
各スレッドはクリティカルセクションの所有権を取得した後は、自らの実行を
ブロックすることなく、EnterCriticalSection または TryEnterCriticalSection 関数を
追加で呼び出すことができます。
この結果、スレッドが既に自ら所有しているクリティカルセクションを
待機しようとしてデッドロックに陥ることを防止できます。

以下略

436 :デフォルトの名無しさん:2006/02/03(金) 12:45:05
CWinApp(のサブクラス)にコマンドハンドラ(OnFileCloseとか)を記述した場合、
コマンドハンドラ内でそのコマンド(メッセージ)が、どのウィンドウに向けて送られたか分かるのでしょうか?
CWnd::GetCurrentMessage()で取れるかと思ったらprotectedでした。orz
ご存じの方いましたら教えてください。

437 :デフォルトの名無しさん:2006/02/03(金) 13:13:05
そりゃメニューがくっついてるウインドウだな
そこから先はメッセージマップによる

438 :デフォルトの名無しさん:2006/02/03(金) 13:19:46
CFrameWnd

439 :デフォルトの名無しさん:2006/02/03(金) 13:23:53
ハンドラをどこに書くかによってFrameWndでもViewでも受け取れる。

コマンドを発動させる方法はメニューだけでなく
アクセラレータとかツールバーとかいろいろあるから、
どのウィンドウに送られたかなんて一概には言えないし、言う意味がない。

440 :デフォルトの名無しさん:2006/02/03(金) 13:27:49
>>439
それはMFCが内部でやってくれてるだけだ

441 :デフォルトの名無しさん:2006/02/03(金) 13:49:10
http://www.microsoft.com/japan/msdn/library/ja/vccore/html/_core_message_sending_and_receiving.asp


442 :436:2006/02/03(金) 13:52:44
回答ありがとうございます。

>>437,438
知りたいのは、「(最初に)送られた先のウィンドウハンドルを取得したい」ということです。
その後のメッセージマップは今は問題にしていません。
TrackPopupMenuを使えば、送り先のウィンドウは自由に指定できるので、フレームウィンドウとは限りません。

>>439
コマンドを送る場合には、必ず送り先のウィンドウを指定しなければならないと思います。
(アクセラレータやツールバーであっても内部的にはそうなっているのでは?)
コマンドがウィンドウ自体に関することであれば、どのウィンドウに送られたか言う意味が出てきます。


443 :デフォルトの名無しさん:2006/02/03(金) 13:54:47
Viewクラスのメンバ関数内で、メッセージを自分(Viewクラス)に送って、
それをPreTranslateMessage内でキャッチしたいのですが、
SendMessage(WM_APP, 0, 0);
で発行しても、キャッチできません・・・
PostMessage(WM_APP, 0, 0);
だと、ちゃんとメッセージが飛んでくるのですが・・・

SendMessageでViewクラスからViewクラスにメッセージを送るには、どうしたら良いのですか?
また、なんで、PostMessageだと大丈夫なのですか?


444 :デフォルトの名無しさん:2006/02/03(金) 14:12:04
>SendMessage メンバ関数は、直接ウィンドウ プロシージャを呼び出し
PostMessageはメッセージをキューに入れるだけなので流れが少し違う、
このへんの違いはぐぐればすぐ見つかるんじゃないか?

445 :デフォルトの名無しさん:2006/02/03(金) 14:20:29
>>442
なにが聞きたいのかよくわからんね。
MFCのメッセージルーティングとかの類の理解が足りないんじゃないか?

>知りたいのは、「(最初に)送られた先のウィンドウハンドルを取得したい」ということです。
答えはこのあたりと予想。
>現在アクティブな子コマンド ターゲット オブジェクト
>コマンド ターゲット自身
>その他のコマンド ターゲット

446 :443:2006/02/03(金) 14:28:10
444様
ウィンドウプロシージャで処理出来ました
PreTranslateMessageでなんでも捕まえられると思ってました・・・

447 :デフォルトの名無しさん:2006/02/03(金) 14:51:33
>>442
アプリ側でそういう仕組みを作らなきゃ駄目だと思う。(フックするとか)

>コマンドがウィンドウ自体に関することであれば、どのウィンドウに送られたか言う意味が出てきます。
そのウィンドウに関係するコマンドなら、そのウィンドウで処理した方がいいんじゃないの?

448 :チラシの裏:2006/02/03(金) 14:55:38
子ウィンドウはメニューを持てない

449 :チラシの裏の裏:2006/02/03(金) 15:00:54
メニューがなければツールバーにすればいいじゃない

450 :デフォルトの名無しさん:2006/02/03(金) 15:02:20
つ AfxGetCurrentMessage

451 :デフォルトの名無しさん:2006/02/03(金) 15:02:53
CPropertyPage::OnOKってどういうときに使えばいいんでしょうか?
呼ばれないときが時々あるきがするんですが

452 :デフォルトの名無しさん:2006/02/03(金) 15:06:43
>>450
それは非公開関数では?

453 :436:2006/02/03(金) 15:40:03
>>450
ありがとうございます。まさにこれが求めていた答えです。

>>447
>>そのウィンドウに関係するコマンドなら、そのウィンドウで処理した方がいいんじゃないの?
それはそうなんですが、複数のウィンドウクラスに同じコマンドを送っているので、処理を1カ所に記述したかったのです。
それらの共通の親クラスを定義して...とも思いましたが、CWinAppで処理できるならそちらの方が簡単なので。


454 :仕様書無しさん:2006/02/03(金) 15:51:04
>>453
それらのウィンドウが、全て同じドキュメントを参照しているなら、ドキュメント
クラスで処理すべきだと思うが?

455 :デフォルトの名無しさん:2006/02/03(金) 16:09:43
まあくだらない理由で質問してるみたいだし

456 :デフォルトの名無しさん:2006/02/03(金) 16:50:33
Doc-Viewのフレームワークというか設計理念を無視してるな。

457 :デフォルトの名無しさん:2006/02/03(金) 16:52:39
>>446
>>292

458 :デフォルトの名無しさん:2006/02/03(金) 17:28:37
>コマンドがウィンドウ自体に関することであれば、どのウィンドウに送られたか言う意味が出てきます。

ビューが複数あるってことか?
ビューもウインドウだろうけどビューのことウインドウとは呼ばんな

459 :デフォルトの名無しさん:2006/02/03(金) 17:45:23
どのウィンドウに送られたかって言っても
・現在のアクティブなビュー
・マウスポインタの位置にあるビュー
のどっちかしかないし

460 :デフォルトの名無しさん:2006/02/03(金) 19:03:19
なんだ結局CWinAppで処理することにしたのか
ウィンドウと全然関係なくなくなってるのが痛い


461 :432:2006/02/03(金) 21:44:15
>>433
>>434
>>435
疑問が解消しました。
回答ありがとうございました。

462 :デフォルトの名無しさん:2006/02/04(土) 02:24:52
画像ビュワー作ってます。
メモリDCとMM_ANISOTROPICで拡縮させたいのですが
拡縮が上手くいきません。
メモリDC作成は上手くいっているのは確認できましたが、
拡縮が上手くいきません。


463 :462:2006/02/04(土) 02:25:42
2倍表示の場合はこれでOK?
void CBmpView::OnInitialUpdate()
{
pDC = GetDC();
m_MemoryDC.CreateCompatibleDC(pDC);
m_pBitmap->CreateCompatibleBitmap(pDC, BMP_WIDTH, BMP_HEIGHT);
m_pOldBitmap = m_Memory.SelectObject(m_pBitmap);
ReleaseDC(pDC);
}
void CBmpView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
CScrollView::OnPrepareDC(pDC, pInfo);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(1, 1);
pDC->SetViewportExt(2, 2);
}
void CBmpView::OnDraw(CDC* pDC)
{
CRect rcClip;
int result = pDC->GetClipBox(rcClip);
if(result == ERROR || result==NULLREGION)
return;
pDC->BitBlt(
rcClip.left, rcClip.top,
rcClip.Width(), rcClip.Height(),
&m_MemoryDC,
rcClip.left, rcClip.top,
SRCCOPY);
}


464 :デフォルトの名無しさん:2006/02/04(土) 08:05:08
CAsyncSocketについて質問をしたいのですが、

create
connect
send
OnRecieve
で、サーバにGETした要求がレスポンスされデータがうまく受信できました。

その後なんですが、
OnCloseが呼び出され、回線が切断されます。

再度sendを呼び出そうと思い、
connect
を呼び出すと、エラー(WSAENOTSOCK)になってしまいます。

で、再度
create
をして、
connectすると、回線が接続されます。

これはsendでデータ送信すると必ずOnCloseされ、
再度データ送受信をしたい場合は、再度createをしないといけないという仕様なのでしょうか?

OnCloseされても、再度connectすれば回線接続されるとばかり思ってました。
私の勘違いなのでしょうか?

465 :デフォルトの名無しさん:2006/02/04(土) 09:06:28
>>462
「上手くいかない」じゃわかんねえよ。
現象を具体的に説明しろよ。

466 :デフォルトの名無しさん:2006/02/04(土) 09:11:39
>>464
何やってるのか分かりやすく説明しろよ。
行数の割に中身は空っぽじゃないか。
そんなんで分かるわけないだろ。エスパーじゃあるまいし。

467 :デフォルトの名無しさん:2006/02/04(土) 09:34:47
>>462
StretchBlt()とかStretchDIBitsは?

468 :デフォルトの名無しさん:2006/02/04(土) 16:16:38
>>462
拡大縮小されません。
>>464
http://forums.belution.com/ja/vc/000/347/91.shtml
>>467
MM_ANISOTROPIC限定でお願いします。


469 :デフォルトの名無しさん:2006/02/04(土) 16:47:03
MFCなんて糞ライブラリ使ってる奴ってまだいたんだ。
MFC使うくらいなら Windows Forms の方が1000倍マシだわ。


470 :デフォルトの名無しさん:2006/02/04(土) 17:41:07
>>469
FormsとMFCを比較するツワモノ

471 :デフォルトの名無しさん:2006/02/04(土) 17:43:06
>>468
>MM_ANISOTROPIC限定でお願いします

何を?

472 :デフォルトの名無しさん:2006/02/04(土) 18:04:47
>>471
それを利用した拡縮の事

473 :デフォルトの名無しさん:2006/02/04(土) 18:52:21
それってベクトルじゃなかったかな?
ラスタ画像でもできたっけ?

474 :デフォルトの名無しさん:2006/02/04(土) 19:22:03
ああビットマップででもできそうだな
関数わけちゃってるのが問題のような気もするけど
調べんのめんどくさいや

475 :デフォルトの名無しさん:2006/02/05(日) 02:30:17
CHttpConnectionを使ってクッキー認証のページを取得するにはどうすればよいですか?

476 :デフォルトの名無しさん:2006/02/05(日) 13:08:31
> 拡大縮小されません。
1:1で描かれるということですか。
とりあえず、ClipBoxの替りに(0, 0, BMP_WIDTH, BMP_HEIGHT)で試すとどうなりますか。
というか、ClipBoxはこのような目的では使いません。

477 :デフォルトの名無しさん:2006/02/05(日) 19:51:12
>>476
拡縮されるようになりました!
しかし、拡大は大丈夫ですが、縮小時に画像にノイズが出ます。
所々に赤や紫の線が・・。

478 :デフォルトの名無しさん:2006/02/05(日) 20:00:55
>>477
縮小するときのどのピクセルを間引くかというのは難しい話。
少しは勉強しなさい。
ちなみに、Windows標準のペイントで縮小してみたら、
Windowsの縮小アルゴリズムの頭の悪さは分かるだろう。

479 :デフォルトの名無しさん:2006/02/05(日) 20:29:14
明らかに元画像に無い色のノイズが出ているので、
間引きや補間が原因ではないと思う。



480 :デフォルトの名無しさん:2006/02/05(日) 21:14:28
mfcでの外部ツール実行って、

void CMyDlg::OnBnClickedButton1()
{
// TODO : ここにコントロール通知ハンドラ コードを追加します。
ShellExecute(NULL, "open","explorer.exe",NULL,NULL,SW_SHOWNORMAL);
}

でいいと思うんだが、VC2005のMFCではLPCWSTRに変換できないとか出る。
2003からアップグレードしたプロジェクトのShellExecuteは正常に実行できるのに…。
↑のコード間違ってます?

481 :デフォルトの名無しさん:2006/02/05(日) 21:26:07
BitBlt()でSetStretchBltMode()は効果ありませんか。
だめならBitBlt()はあきらめてください。

ところで、最初のコードだとどのようになったのですか。
1:1で出力される/描画せず/でたらめな絵が出る/終了する


482 :デフォルトの名無しさん:2006/02/05(日) 22:02:55
>>480
何言っての良くわかんないけど
UNICODEビルドになってんじゃないの?
そのまま通したければ
ShellExecute(NULL, _T("open"),_T("explorer.exe"),NULL,NULL,SW_SHOWNORMAL);

これでどう?

483 :480:2006/02/05(日) 23:27:25
>>482
ご回答ありがとうございます。
482さんので通りました。
仰るとおりUnicodeになってました…orz

484 :デフォルトの名無しさん:2006/02/05(日) 23:29:05
デフォルト設定が変わったからだろう

485 :デフォルトの名無しさん:2006/02/06(月) 00:56:42
StretchBltすると綺麗に縮小できますか?
DirectShowのレンダラはサイズを変えても綺麗に表示されるけど。
あと、それらはグラフィックボードの機能に依存しますか?
つまりStretchBltでもあるマシンでは綺麗で別のマシンではつぶれるなど。

486 :デフォルトの名無しさん:2006/02/07(火) 00:50:46
1:1で出力でした。

487 :デフォルトの名無しさん:2006/02/07(火) 00:51:54
マシン依存はないと思います。
DirectXは使って無いです

488 :デフォルトの名無しさん:2006/02/07(火) 02:02:03
あなたは「スレ違い」という言葉をまず学びなさい。

489 :デフォルトの名無しさん:2006/02/07(火) 02:37:18
拡大縮小する場合、BitBlt()はStretchBlt()の中を使います(たぶんPetzold本)。
そして、StretchBlt()の縮小のデフォルト動作は、重なる色のANDを採ると思います。
つまり、予期せぬ色が出る可能性があります。
試しに、BitBlt()の前にSetStretchBltMode(COLORONCOLOR);。
これで駄目だったら、BitBlt()はあきらめ、SetStretchBltMode()とStretchBlt()。

490 :デフォルトの名無しさん:2006/02/07(火) 09:13:10
もはやMFCとは何の関係もないな

491 :デフォルトの名無しさん:2006/02/07(火) 17:26:21
「CFileDialogをDoModal中に削除する」
ってことをやりたい。

具体的に講じた手順は以下。

MFCを使ってDLL1を作成。
DLL1のtheAppは「DoModalされているダイアログのポインタ」を格納する
CObArray m_DialogPointerArrayをメンバーとして持つ。
CFileDialog(CDialogではない)を継承したダイアログを
newしてDoModalさせ、m_DialogPointerArrayにポインタを登録。
DoModal中に他DLLからDLL1に「今の処理を全部終了」命令を飛ばす。
命令を受け取ったDLL1はCObArrayにポインタを格納されたダイアログを
片っ端から削除(EndDialog)していく。

が、普通にCDialogから生成したダイアログは上記でうまく
消えてくれるのだが、CFileDialogを継承したものは消えてくれない。
(続く)


492 :デフォルトの名無しさん:2006/02/07(火) 17:27:34

削除する方法は
for(i = 0; i < dialogCount; i++) {
CDialog* pDialog = (CDialog*)m_DialogPointerArray.GetAt(i);
int nRet = 0;
//pDialog->EndDialog(nRet);
//pDialog->ShowWindow(SW_HIDE); //気休め。しかし、消えない
//pDialog->OnClose();
//::PostMessage(pDialog->m_hWnd, WM_CLOSE, NULL, NULL);
//::SendMessage(pDialog->m_hWnd, WM_CLOSE, NULL, NULL);
pDialog->DestroyWindow();
}
などを試した(コメント部分とDestroyWindow)。

最後の手段として出したDestroyWindowしても死なないっていったい。
親ダイアログをdeleteするのも試してみたけどダメだった。

CFileDialogのDoModalの中を追っていくと完全に独自実装されている模様。

解決法はそもそもあるのかないのか?
あるなら教えてください。

493 :デフォルトの名無しさん:2006/02/07(火) 17:30:19
DoModal中に削除するというのは、要するに手動でボタンとか押さずに
プログラムから直接コントロールしてダイアログを終了させたいと?

494 :デフォルトの名無しさん:2006/02/07(火) 17:35:24
おぉ、サンキュー。

そう。
例えば通信中にいきなり切断されるとかそういうの。

495 :デフォルトの名無しさん:2006/02/07(火) 17:35:59
OnCancel呼べば?

496 :デフォルトの名無しさん:2006/02/07(火) 17:36:02
てっきりdeleteでもするのかと思った

497 :デフォルトの名無しさん:2006/02/07(火) 17:38:39
普通のダイアログとか普通のメッセージボックスはEndDialog(0)で閉じられる

498 :デフォルトの名無しさん:2006/02/07(火) 17:40:23
OnCancelはプロテクテッドメソッドだからそもそも違う。
ラッピングして呼んだが無理。

deleteもダメ。


499 :デフォルトの名無しさん:2006/02/07(火) 18:28:42
CFileDialogの継承クラスって、実はファイルダイアログの子ダイアログだということは
知っているかね。

500 :デフォルトの名無しさん:2006/02/07(火) 18:37:27
普通の継承クラスと違うってこと?

501 :デフォルトの名無しさん:2006/02/07(火) 18:47:02
YES

502 :デフォルトの名無しさん:2006/02/07(火) 18:54:55
おぉ、教えてください。
それが解決方法につながれば。

503 :デフォルトの名無しさん:2006/02/07(火) 19:55:02
試してないけど。
pDialog->PostMessage(WM_COMMAND, MAKELONG(IDCANCEL, BN_CLICKED), (LPARAM)pDialog->GetSafeHwnd());


504 :デフォルトの名無しさん:2006/02/07(火) 20:02:52
((CDialog *)pDialog->GetParent())->EndDialog(IDCANCEL)

505 :デフォルトの名無しさん:2006/02/07(火) 23:23:22
おぉ、ありがとう。
今環境がないので明日試します。
報告はその時。
サンキュウ。

506 :デフォルトの名無しさん:2006/02/08(水) 02:06:23
503とかは一目見て試す価値ないのがわかるな。

507 : ◆G...gjbMvE :2006/02/08(水) 07:47:34


508 :デフォルトの名無しさん:2006/02/08(水) 09:57:32
キタ━━━━(゚∀゚)━━━━ッ!!
504でできました。

>504
サンキュー。
あんたすげえよ。

>503
やってないけど、ありがとうな。

509 :デフォルトの名無しさん:2006/02/08(水) 16:39:33
教えてください。お願いします。

コントロールがクリックされたっていうメッセージを
そのコントロール自身がうけとって処理するのってどうするんですか?

クリックイベントはViewでは受け取れるんですがコントロールの中では
受け取れないんで、困っています。

510 :デフォルトの名無しさん:2006/02/08(水) 16:43:09
コントロールはダイアログかフォームに貼って使うもの。
FormView以外のViewに貼るのは特殊。そりゃ困るだろ。

511 :デフォルトの名無しさん:2006/02/08(水) 16:45:06
>コントロールがクリックされたっていうメッセージを
>そのコントロール自身がうけとって処理するのってどうするんですか?
コントロールの派生クラスは?

512 :デフォルトの名無しさん:2006/02/08(水) 16:52:40
どの種類のビューにどんなコントロールをどう貼ったかとか書いた方が
レスしやすいと思うよ。

513 :デフォルトの名無しさん:2006/02/08(水) 17:30:20
サブクラス

514 :デフォルトの名無しさん:2006/02/08(水) 17:50:34
>>511>>512
一応CStaticです。

CStaticのサブクラスを作ってそこにCButtonとか
いろいろつけようと思ってるんですけど、
CButtonをクリックしたっていうメッセージは
そのコントロールで処理できるんですけど
そのコントロール自体がクリックされたっていうメッセージを
そのサブクラス内で受け取れないんです。

説明不足ですみませんが、お願いします。

515 :デフォルトの名無しさん:2006/02/08(水) 18:06:41
CButtonのサブクラスを作ってCStaticのサブクラスに
クリックされたっていうメッセージを投げる

516 :デフォルトの名無しさん:2006/02/08(水) 18:15:38
返答ありがとうございます。

CButtonのサブクラスからCStaticのサブクラスに
メッセージを投げるのは、具体的にどうするか
教えてもらいたいんですが。

517 :デフォルトの名無しさん:2006/02/08(水) 18:19:34
<<515
<516
すみません。
CButtonは関係なくてCStaticがクリックされたていう
メッセージをCStatic自身で受け取る方法を知りたいんですけど。
わかりづらくてすみません。


518 :デフォルトの名無しさん:2006/02/08(水) 18:23:22
上にあるように、フォームビュー以外のビューは
コントロールを貼ったりそういうことをするのに向いてない。

519 :デフォルトの名無しさん:2006/02/08(水) 18:34:05
>>517
>>512 の質問を答えなければ答えにくい。

520 :デフォルトの名無しさん:2006/02/08(水) 18:37:09
>>514,517
CStaticのサブクラス内でWM_LBUTTONDOWNなりWM_LBUTTONDBLCLK
のハンドラを追加。
さらに、コントロールのstyleにSS_NOTIFYを追加。

Dialogベースの例だけど↓
ttp://www.athomejp.com/goldfish/mfc/static/onclick.asp

521 :520:2006/02/08(水) 18:45:05
一行目ちょっと訂正

CStaticのサブクラス内でWM_LBUTTONDOWNなりWM_LBUTTONDBLCLKなり
BN_CLICKEDのハンドラを追加。

522 :デフォルトの名無しさん:2006/02/09(木) 09:29:22


class CSettingBox:public CStatic
{
public:
CSettingBox(void);
~CSettingBox(void);
// 生成された、メッセージ割り当て関数
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnStnClicked();
};

BEGIN_MESSAGE_MAP(CSettingBox, CStatic)
ON_WM_LBUTTONDOWN(IDC_SettingBox,OnStnClicked)
END_MESSAGE_MAP()

void CSettingBox::OnStnClicked()
{
// TODO : ここにコントロール通知ハンドラ コードを追加します。
//ブレイク
}

一応ここにブレイクかけてデバッグしてみたんですけど
引っかかりません。
どうもわからないんですけど、
どなたかわかりませんか。

>>519
申し訳ありません。
一応MFCのFormView上で作成してみたんですけど。

523 :デフォルトの名無しさん:2006/02/09(木) 09:57:07
スタティックからの通知メッセージを自分で受けてどうするのか。
ハンドリングするのはWM_LBUTTON*だろ。

524 :520-521:2006/02/09(木) 10:58:46
>>522
なんか全く無視されてしまったようだけど・・・
1) afx_msg void OnStnClicked();
  ON_WM_LBUTTONDOWN(IDC_SettingBox,OnStnClicked)
  void CSettingBox::OnStnClicked()
 じゃなく、
  afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  ON_WM_LBUTTONDOWN()
  void CSettingBox::OnLButtonDown(UINT nFlags, CPoint point)
 ではないのか?
2)CSettingBoxのコードを書くだけじゃなく、FormView上のStaticをちゃんとサブクラス化しているのか?
 (ウィザードでCSettingBox型のコントロール変数を追加するか
  自分でSubclassDlgItemしているのか?)
3)スタイルにSS_NOTIFYを追加するかダイアログエディタで「通知」にチェック入れたのか?

ttp://www.codeproject.com/staticctrl/
ttp://www.codeproject.com/staticctrl/CBitmapSlider.asp
ttp://www.codeproject.com/staticctrl/cmyhyperlink.asp
多少参考になると思うが

525 :デフォルトの名無しさん:2006/02/09(木) 11:19:18
>>524
すみません。無視する形になって、
自分なりに520-521のおっしゃられたとおりやってみた
つもりだったんですけどだめだったみたいですね。

524の1)に変更してみましたらゲットできました!
ありがとうございます。


526 :デフォルトの名無しさん:2006/02/09(木) 11:28:17
普通クリックってBUTTONUPなんだけどね。

527 :デフォルトの名無しさん:2006/02/09(木) 18:29:12
491ですがまた困ったことがあったので助けてください。

「MessageBoxを表示中に他DLLから終了メッセージが来たらMessageBoxも終了させる」
ということをやりたい。

MessageBoxがコードの中に結構な勢いで埋まっているので
なんとか少ない手数で修正したい。

現状使用しているのは全てCWndのMessageBoxメソッド。
Class::Method()
{
CString strCaption = GetCaption();
CString strText = GetText();
MessageBox(strText, strCaption, MB_ICONWARNING | MB_OK);
/*以下処理*/
}
みたいな感じ。
結構/*以下処理*/の部分でアプリごと落ちる。
(続く)

528 :デフォルトの名無しさん:2006/02/09(木) 18:30:30
解決方法としては

1.現状の方法の延長でなんとかMessageBoxクラスで生成するダイアログを捕まえて殺しに行く。
2.現状の方法をあきらめてMessageBoxと同じ機能を持った別クラスを用意して実装する。
3.現状の方法をあきらめて気合で全MessageBoxを個別にCDialogに乗せかえる。

の3パターンが考えられると思うが、どれが良いのだろう。

2はかなり大変そう(あくまで予想)。
3はおそらく解決するだろうがマンパワーが必要だし、スキルのアップにならない。
ちゅうことで、できれば1で。
無理だったら諦めて2か3の方法で。

知恵を貸してください。

529 :デフォルトの名無しさん:2006/02/09(木) 18:39:43
MFCと関係ない。
メッセージボックスをやめてログウィンドウとか作れ。

530 :デフォルトの名無しさん:2006/02/09(木) 18:55:46
すまん。
書き方が悪かった。
落ちるのは原因が分かっている。
だからログとか取る必要はない。
別スレッドから親クラスが死ぬと自動的にメッセージボックスが死ぬ。
がPCが残っているので死んだはずのクラス(上記のClass)のメソッド
(上記で言えば/*以下処理*/の部分)をプログラムが進行する。
それはチェックすれば良いだけなので死ぬこと自身は問題ない。

最初にも書いているがやりたいことは
Modalで走っているMessageBoxのダイアログを別スレッドから殺したいということだ。

531 :デフォルトの名無しさん:2006/02/09(木) 19:29:01
あちこちでメッセージボックスに何を出したいのか知らないけどさ、
いちいちメッセージボックスを出さなくても、
その内容をログ用のリストボックスとかに追加したりしていけばいいだろ?
頻繁にメッセージボックスが出てくるアプリなんかうざいだろう。

あとCWnd::MessageBox()のソースくらい見れ。
中で::MessageBox()呼んでる。

532 :デフォルトの名無しさん:2006/02/09(木) 20:26:57
んなもん、MsgBoxの親のウインドウハンドルからFindWindowExで廻して
探すしかねーだろ。

533 :デフォルトの名無しさん:2006/02/09(木) 21:59:00
初歩的なことかもしれませんorここで訊いていいものかわかりませんが、すみません教えてください!
MFCでプログラムを実行してウィンドウに表示される画像をaiかepsにしてWordなどの文書に貼り付けるにはどうしたらよいのでしょうか?
何かソフトを使って切り取ると聞いたのですが詳細がわかりません。
よろしくお願いいたします!

534 :デフォルトの名無しさん:2006/02/09(木) 22:41:24
キーボードのPrint Screenボタンを押して
Wordなどに貼り付ける

535 :デフォルトの名無しさん:2006/02/09(木) 22:52:35
>>533
アクティブなウィンドウのみだったら
Altを押しながらPrintScreen。
卒論か何かだろ?ガンガレよ。

536 :デフォルトの名無しさん:2006/02/09(木) 22:53:27
>>530
別スレッドでいいんだよね? 別タスクじゃないよね?
だったら、HWNDを確保して PostMessage( WM_CLOSE で解決しないかな?


537 :デフォルトの名無しさん:2006/02/09(木) 23:04:19
>>536
違います別タスクです。その場合はどうすればいいのでしょう?

538 :デフォルトの名無しさん:2006/02/09(木) 23:38:27
>>531
見るくらいなら書く前に見た。
::MessageBox()のなかで結局入力待ちになる。
そこの部分のコードは変更が効かない。
というか、何回も書くが解決したいのは
「MessageBoxが生成するダイアログを別スレッドからの命令で殺す」
ということだ。
悪いけど「アプリが悪い」とか話を変えないでくれ。

>>532
おぉ、サンキュウ。
今環境が手元にないから確認できないんだけど
staticに生成されるMessageBoxクラスの子ダイアログとして生成されるんじゃないのか?
違うか?
そこからでもなんとでもなるのか?
とにかく明日一度スパイで見てみる。

>>536
その確保するためのHWNDをMessageBoxから取得する方法があるんだろうか?
俺は無知なために知らない。

539 :デフォルトの名無しさん:2006/02/09(木) 23:40:44
537
適当書かないでくれ。

540 :533:2006/02/10(金) 13:21:56
>>534
>>535

スミマセンダメでしたorz
exeだからダメなのでしょうか?
もともと専門ではなくCの知識しかないのでよくわかりません(><)

卒論頑張ってるんですケド。。。

541 :デフォルトの名無しさん:2006/02/10(金) 13:58:52
http://pc8.2ch.net/test/read.cgi/tech/1135817069/660 ?

ai, eps はドロー(ベクター)系のデータみたいだな。
PrtScはビットマップだからデータ形式がまったく異なる。
ai, eps の詳細は知らないから俺は何もいえないけど。

542 :デフォルトの名無しさん:2006/02/10(金) 14:18:15
527だができた。

532の言うとおりFindWindowExでひたすらまわすでいけた。

hWnd = FindWindowEx(pParent->m_hWnd,NULL,_T("#32770"),NULL);
でいけるかと思ったがは取得できなかったので

hWnd = FindWindowEx(NULL,NULL,_T("#32770"),NULL);
while(hWnd) {
if(GetParent(hChild) == pParent->m_hWnd) {
/*処理*/
}
hWnd = FindWindowEx(NULL,hWnd,_T("#32770"),NULL);
}
して処理した。


>>532
サンキュウ

543 :デフォルトの名無しさん:2006/02/10(金) 20:50:50
質問です

MFCで自作のライブラリを使ってみようと思い、使ってみたんですが
↓のようなリンクエラーがずらっと出てきました。
また、ライブラリ使わずに使う関数が書かれた.cppと.hをプロジェクトに入れて
ビルドしたら普通に成功しました。
なぜなんでしょうか?


AI_chapter2 error LNK2005: _free は既に msvcrtd.lib(MSVCR71D.dll)
で定義されています。


544 :デフォルトの名無しさん:2006/02/10(金) 21:02:02
MFCに未来はあるのか
いやマジで

545 :デフォルトの名無しさん:2006/02/10(金) 21:08:34
>>543
MFCと無関係

546 :デフォルトの名無しさん:2006/02/10(金) 21:09:07
文字通り既に定義されているからエラーが出た。


547 :デフォルトの名無しさん:2006/02/10(金) 21:20:15
msvcrtd.libの中にある関数が自作のライブラリの中にも
あったのでリンクエラーとなった。

548 :デフォルトの名無しさん:2006/02/10(金) 22:15:28
回避策提示しないと何の意味も無いだろw

549 :543:2006/02/10(金) 22:44:18
解決したんだが、原因はよくわからん。
まあ、とりあえず報告っと

#pragma comment(lib,"自作のライブラリ")
でライブラリをリンクするとエラーが出る。

プロパティ→リンカ→入力→依存の追加ファイル
で自作のライブラリをリンクするとエラーが出ない。
正常にビルドできた。


これ↓を見る限り、リンクの順番が関係してるのかもしれない・・
http://support.microsoft.com/default.aspx?scid=kb;ja;148652
しかし、↑この解決策では駄目だった。


550 :デフォルトの名無しさん:2006/02/10(金) 22:50:05
#pragmaでは、リンクの順番までは指定できない
よって、その解決方が正解

551 :デフォルトの名無しさん:2006/02/10(金) 22:51:15
自作のライブラリ作るときにマルチスレッド対応ライブラリを
リンクしたのか、シングルsureddo用を
リンクしたのか確認し、使うときにも乱タイムがどっちになっているのか
かくにんしないとけない。

552 :デフォルトの名無しさん:2006/02/11(土) 03:18:06
VC6です。AppWizardが作ってくれるスケルトンについてです。
ふと気になったことを質問させて下さい。用語の誤用などあればすみません。

ダイアログベースだと、CDlgから派生させたメインのダイアログオブジェクトを、
CAppのInitInstance内で作成してます。つまり、オブジェクトはスタックに
確保されているんですよね。なぜ、newでメモリを確保しないのでしょう?

もちろん、サイズ的に余裕である事が明らかなら別に構わないのでしょうが、
あえてnewしない(自動変数というのでしょうか)メリットが思いつきません。
「deleteとか面倒だし」以外に大人の事情があったりするのでしょうか?

// デフォルトのスタックサイズは1MBで、sizeofは100だったので、
// 確かに余裕っちゃ余裕っぽいんすけど


553 :デフォルトの名無しさん:2006/02/11(土) 03:52:34
あえてnewするメリットがないから

554 :デフォルトの名無しさん:2006/02/11(土) 06:16:33
CStringで考えてみろ
いちいちnewしてたらめんどくさくて使ってられないだろ
めんどくさいことやんなくていいために存在するクラスなんだし

555 :デフォルトの名無しさん:2006/02/11(土) 08:53:49
モーダルの場合はウインドウが1つだからいいけど、
動的に任意の数のダイアログを作りたい場合はnewするしかないのでは?
そういえばモードレスダイアログの場合はnewしてdelete thisで自殺させるよね


556 :デフォルトの名無しさん:2006/02/11(土) 11:48:35
>>552
deleteとか面倒だし、というのは立派な理由に思える。
スタック上に作成できる場合はそうできるのが
C++のメリットのひとつじゃまいか?

557 :デフォルトの名無しさん:2006/02/11(土) 11:52:39
>>552
君の感性に合わないならば書き直してnewすれば?
554の言うとおり、CStringやCPoint,CSizeなんかもちゃんとnewしろよと・・・

558 :デフォルトの名無しさん:2006/02/11(土) 11:57:29
普通のintやcharもnewで領域確保せんとな。

559 :デフォルトの名無しさん:2006/02/11(土) 11:58:43
Javaあたりから入ったひとなんでしょ・・・

560 :デフォルトの名無しさん:2006/02/11(土) 13:20:11
BREW開発に毒されちゃったんじゃね?
あれ全部mallocでしょ?

561 :デフォルトの名無しさん:2006/02/11(土) 23:49:05
「スタックを使ういんちきガベージコレクション」って言ってた人がいたな

562 :デフォルトの名無しさん:2006/02/11(土) 23:55:03
なんかそれガベコレ自体に価値があるという思想だろうか…

563 :561:2006/02/12(日) 00:24:34
>なんかそれガベコレ自体に価値があるという思想だろうか…
あっ、その人組み込み系の人だから。多分そうだと思う

564 :552:2006/02/12(日) 02:51:27
>>553-563
たくさんのお返事ありがとうございます。
色々聞いてすっきりしましたです。

経験の浅い趣味グラマなんすけど、最近メモリ関連の知識を仕入れて、
そういや何でnew/mallocって必要なんだろうと見つめ直してたお年頃なのです。

勉強になりました。ありがとうございました

565 :デフォルトの名無しさん:2006/02/12(日) 20:07:21
MFC共有DLLにGUI(ダイアログなど)とそのメッセージループを詰め込んで
Win32アプリから呼び出したいんですが、どうすれば可能でしょうか?


566 :デフォルトの名無しさん:2006/02/12(日) 21:45:22
CListCtrl の背景って透過できないのでしょうか?

カスタムドローのCDDS_PREPAINTでNULL_BRUSHを使って
クライアント領域を塗りつぶしてみたのですがダメでした。

567 :デフォルトの名無しさん:2006/02/12(日) 22:05:39
>>565
Win32アプリからMFCクラスを生成したことあるか?

>>566
オーナー描画

568 :565:2006/02/12(日) 22:18:27
>>567
あります。でもMFCがどうやってメッセージループを隠匿してるかとかは知りません。

569 :デフォルトの名無しさん:2006/02/12(日) 22:25:37
>>568
そういうことを調べもせずに>>565みたいな質問ができる根性に驚愕


570 :デフォルトの名無しさん:2006/02/12(日) 22:45:24
>>565
単に↓みたいな感じのをエクスポートして、
アプリ側でGetProcAddress()して...っていう話じゃないの?

STDAPI ShowMyDlg()
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());

 CMyDlg dlg;
 return dlg.DoModal();
}


571 :566:2006/02/12(日) 22:57:48
>>567
ありがとうございます
残念ながらアイコンビューなのでオーナードローはできないのです
継続調査してみます

572 :デフォルトの名無しさん:2006/02/13(月) 22:16:28
MFCに限ったことじゃないのかもしれないんだけど、
作ったアプリが何のエラーも出さずにいきなり終了するのって、
どういう原因が考えられるんだろう?

メモリとかリソースとかリークしてる感じもないし、
エラーのログがないから皆目検討つかない。

偉い人教えてください。

573 :デフォルトの名無しさん:2006/02/13(月) 23:09:24
>>572
エラーが出ないなら自分でエラーを出せばいいじゃない

574 :デフォルトの名無しさん:2006/02/13(月) 23:30:28
エラー出さないまでもブレーク貼って何がトリガで死んでるのか探るべし。

575 :デフォルトの名無しさん:2006/02/13(月) 23:36:42
ブレークポイント絨毯爆撃。
他にもdprintf()とかなんかいろいろあるっしょ。

576 :572:2006/02/14(火) 00:06:32
ありがとうです。

やはりしらみつぶしにするしかないですかね。
再現性が低いもんでステップで追っかけてても全然起きないのに、
走らせとくとふっといなくなってて鬱なのです。

検索かけてみるとスタックオーバーフローで発生するみたいなのが
引っかかるんだけど、どうなんでしょう?

今まで異常終了するときにはなんかメッセージ出るような
落ち方しかみたことなかったんだけど、こういう、何も言わずに
異常終了ってのはよくあることなんでしょうか?

577 :デフォルトの名無しさん:2006/02/14(火) 00:31:56
じゃあスタックのサイズをふやしてみれば良い。

578 :デフォルトの名無しさん:2006/02/14(火) 00:32:30
>>576
俺はOSやフレームワークがエラーを見せてくれるのは
ラッキーとまでは言わないがむしろ良いケースだと思ってる。
例外そのものがズバリ表示されればそれこそ幸運。
それでわからないところからお仕事が始まるわけで。

579 :デフォルトの名無しさん:2006/02/14(火) 00:34:26
>>576
スタックオーバーフローはまずいだろ。

後、何も言わずに終了って言っても、ウインドウを終了させる
関数に飛んでるだけかも知れんし、別に不思議だとは思わん。
良くあるとも思わんがな。

580 :デフォルトの名無しさん:2006/02/14(火) 10:20:06
スタック使い切るのは異常
実はものすごくでかい領域をメンバで持つオブジェクトを
オートで作ったんじゃないのか

581 :デフォルトの名無しさん:2006/02/14(火) 23:10:34
ダイアログにツリーコントロール貼り付けてます。
ツリーアイテムのラベルの編集して、Enter押すとダイアログが閉じてしまうんですが、
良い解決法はありますか?

ダイアログのOnOKで、閉じるのを禁止すると、ラベルの編集まで終了しなくなって
しまう(インプレイスのエディットボックスが消えない)...

582 :581:2006/02/15(水) 00:19:28
サブクラス化したCTreeCtrlのPreTranslateMessageで、エディットにWM_KEYDOWNを
再送しつつ return FALSE ...などと怪しことをやってましたが(これはこれで、一応うまくいった)、
↓でシンプルに解決しました
ttp://search.acty-net.ne.jp/mfc_search/archive/2005-2/msg00144.html

583 :デフォルトの名無しさん:2006/02/15(水) 12:06:48
SetWindowRgnした角の丸いウィンドウのリサイズってどうするのでしょうか?

サイズ変更枠のあるウィンドウにするとフレームがはみ出てしまいます。
ウィンドウスタイルを変更するとサイズ変更を枠を消してリサイズできるようになるのですが
この場合キャプションやシステムメニューも消えてしまいます

OnNcHitTestをオーバーライドしてOnMouseMoveでウィンドウリージョンを再設定すれば
いいような気もしますが・・・

584 :デフォルトの名無しさん:2006/02/15(水) 15:20:50
リッチエディットコントロールからリッチエディットコントロールへ
書式ごとコピーするには、どうすれば良いでしょうか?


585 :584:2006/02/15(水) 15:22:28
クリップボード非経由でおねがいしますm( _ _ )m

586 :デフォルトの名無しさん:2006/02/15(水) 16:56:24
ファイルに書き出して

587 :デフォルトの名無しさん:2006/02/15(水) 16:57:50
CListView から派生したクラス(のオブジェクト)に
WM_APP+n で定義した自前のメッセージを
PostMessage() したのですが,
それに対するメッセージハンドラが呼ばれません.

CListView ではなく CWnd の派生クラスの場合は
ちゃんとメッセージを受けて,
メッセージハンドラが呼ばれます.

なぜこのような違いが起きるのでしょうか?


588 :デフォルトの名無しさん:2006/02/15(水) 17:52:27
CListView::GetListCtrl()
を使ってリストビューのリストコントロール部分に対して
行ってみる

589 :587:2006/02/15(水) 18:00:05
>>588

CListCtrl は CWnd から派生されてないですから
メッセージは受けられないですよね?

590 :デフォルトの名無しさん:2006/02/15(水) 18:41:49
はあ?

591 :デフォルトの名無しさん:2006/02/15(水) 19:18:48
話変わるけど、メンバ関数呼ぶのにPostMessage使いたがるやつは
C++が苦手なのかね?

592 :デフォルトの名無しさん:2006/02/15(水) 19:30:32
メンバ関数呼びたいからでなく、「(ウィンドウ)メッセージをポストしたい」
から呼ぶわけですが、何か?

593 :デフォルトの名無しさん:2006/02/15(水) 19:41:35
何も

594 :デフォルトの名無しさん:2006/02/15(水) 19:45:43
MFCでPostMessage使ってるサンプルあんまり見たことないぞ
一応MFCのソースとMSDNのサンプルで確認したけど、ほとんど使ってない。

595 :デフォルトの名無しさん:2006/02/15(水) 19:47:04
サンプルなんぞ基準にされてもなあ

596 :デフォルトの名無しさん:2006/02/15(水) 20:14:51
スレッド違うといろいろあるんですよ

597 :デフォルトの名無しさん:2006/02/15(水) 21:08:32
CListViewにPostMessageでスレッド?

598 :デフォルトの名無しさん:2006/02/15(水) 21:32:12
>>591
(☉◇☉)Σ

599 :デフォルトの名無しさん:2006/02/15(水) 21:34:20
>>591
スレ違いです。こちらへどうぞ。
http://pc8.2ch.net/test/read.cgi/tech/1136651593/l50


600 :デフォルトの名無しさん:2006/02/15(水) 21:38:21
CListCtrl は CWnd から派生されてないですから
メッセージは受けられないですよね?

601 :デフォルトの名無しさん:2006/02/15(水) 21:48:54
atlmfc\include>grep CListCtrl *
File afxcmn.h:
class CListCtrl;
// CListCtrl
class CListCtrl : public CWnd

602 :デフォルトの名無しさん:2006/02/15(水) 22:11:38
>>587
ビューに載ってるリストコントロールの方にpostしちゃってるとか。

603 :デフォルトの名無しさん:2006/02/15(水) 22:39:14
>>587
自前のメッセージ受信用にViewをもうひとつ作って
メッセージが来たらCListView から派生したクラスのメッセージハンドラを呼ぶ

604 :デフォルトの名無しさん:2006/02/15(水) 22:42:08
CCtrlViewは、無理やりCView派生クラスにしてるから
勘違いが多くなるんだろう。

605 :デフォルトの名無しさん:2006/02/15(水) 22:53:27
自前のメッセージならどこでメッセージ受けても良いのでは?
Viewにこだわる必要ないような

606 :デフォルトの名無しさん:2006/02/15(水) 23:10:37
>>587
>>なぜこのような違いが起きるのでしょうか?

違いが起こるも何も
そもそも前者の現象がおかしい。
今確かめたが、ちゃんと呼ばれる。
どっか間違ったコード書いてるんだろ。

607 :デフォルトの名無しさん:2006/02/15(水) 23:42:43
MFCを使ったら負けかなと思ってる


608 :デフォルトの名無しさん:2006/02/15(水) 23:47:47
リストコントロールに書かれた内容を吸い出す方法ありませんか?
オーナードローの場合も含めて。
リストコントロールを実装しているDLLのフックしかないですか?


609 :デフォルトの名無しさん:2006/02/16(木) 00:47:47
>>608
ただ吸い出したいだけなら「ListView to CSV」ってソフトがあるので
それを使えばいい。
自作したいのなら、別プロセスから文字列を吸い出すのはちょっと面倒。
そのソフトのヘルプに簡単な原理とソースが載ってるので
それを参考にすればいい。

610 :デフォルトの名無しさん:2006/02/16(木) 01:13:33
>>609
さんくる!!!!



611 :587:2006/02/16(木) 09:51:33
その後,調べたところ
メッセージはたしかに受けていることを確認しました.
ところがそれに対するハンドラが起こされていませんでした.
なぜなんでしょうか…

WM_FUGA という自前のメッセージに対して
OnFuga というハンドラを用意しています.
メッセージマップに以下にように書いています:

BEGIN_MESSAGE_MAP(CHogeView, CListView)
ON_MESSAGE(WM_FUGA, OnFuga)
END_MESSAGE_MAP()

CWnd から派生した場合に,
まったく同じように書いて,
ハンドラは呼ばれます.


612 :606:2006/02/16(木) 12:42:11
>>611
もしかして、テストしているのはダイアログベース?
もしダイアログに貼り付けているリストビューなら、
CListCtrlの派生クラスでやればうまくいくよ。(これも当方で確認済み)
名前が紛らわしいけど、一般にListView,TreeViewと呼ばれているコントロールは
MFCではCListCtrl,CTreeCtrlでカプセル化されている。
MFCのCListView,CTreeViewはDocument/Viewアーキテクチャ用に
カプセル化されているもの。

613 :デフォルトの名無しさん:2006/02/16(木) 18:37:07
CEditViewがXPスタイルだと、SJISが扱えなくなるのはもうどうしようもありませんか?

614 :デフォルトの名無しさん:2006/02/16(木) 19:23:12
>>613
宿題は終わったんだ、よかったね

615 :デフォルトの名無しさん:2006/02/16(木) 23:58:57
で、VC++ は C++ としては良い環境なのですが、Windows系のプログラムを作ろうとすると、MFCというクラスライブラリが出てきて、急に難しくなるのです。(個人的にはMFCは VC++ の唯一の汚点だとも思っています^^;)ので、Windows系のプログラムを作るならこれ↓
ボーランド http://www.borland.co.jp/
C++Builder http://www.borland.co.jp/cppbuilder/index.htmlが良いと思います。
 VB と似た RAD 環境と C++ というなんとも不思議な取り合わせの環境です。(というか VC++ もこのくらい簡単に Windows プログラムが作れるべきであると思いますけど。^^;)

616 :デフォルトの名無しさん:2006/02/17(金) 00:31:15
>>615
そんなものWindowsとの親和性の低いただのおもちゃだ。

617 :デフォルトの名無しさん:2006/02/17(金) 01:12:40
この時期に某を勧めるって・・・釣られた?

618 :デフォルトの名無しさん:2006/02/17(金) 03:49:41
>>615
どっかで見たことある文章
どこだっけ

619 :デフォルトの名無しさん:2006/02/17(金) 08:43:20
クマー

620 :デフォルトの名無しさん:2006/02/17(金) 10:52:24
すみません、CEditコントロールでenterキー入力を受け取るのって
どうしたらいいですか?
OnKeyDownでハンドルしてみたんですが
ほかの[a]とか[1]とかは受け付けるんですが、
enterキーではイベントが発生しないんです。

621 :デフォルトの名無しさん:2006/02/17(金) 10:59:46
>>620
ES_WANTRETURN
だっけか、、、綴り自信が無い

622 :621:2006/02/17(金) 11:03:33
エディットコントロールのプロパティに、Want Return と言う項目があるので true を。
マルチラインかな

623 :デフォルトの名無しさん:2006/02/17(金) 14:48:30
>>621
>>622

おっしゃられたとおりエディットボックスのCreate時にES_WANTRETURNを
加えましたが、やはりEnterキーではイベントが発生しませんでした。
他の数字やアルファベットではできましたが。

Edit.Create(WS_BORDER|WS_CHILD|WS_CLIPSIBLINGS|ES_WANTRETURN,CRect(0,0,60,30),this,ID)

ちなみにシングルラインです。

624 :デフォルトの名無しさん:2006/02/17(金) 15:05:25
一度クリックすると凹んだままになり、
もう一度クリックすると元に戻るボタンはどうすれば作れますか?

625 :デフォルトの名無しさん:2006/02/17(金) 15:14:56
>>624
チェックボックスを作り、Push Like をtrueにする

626 :デフォルトの名無しさん:2006/02/17(金) 15:19:37
>>623
ヘルプすら見ないのは、バカだから?


627 :デフォルトの名無しさん:2006/02/17(金) 15:32:37
>>625
ありがとうございました。
チェックボックスがプッシュボタンになってビックリ。

628 :デフォルトの名無しさん:2006/02/17(金) 16:02:06
>>618
ここ
ttp://www.01-tec.com/document/advise_to_programmer.html

629 :623:2006/02/17(金) 16:45:01
バカでした↓
PreTranslateMessage()
でなんとかやってみます。

630 :デフォルトの名無しさん:2006/02/18(土) 00:45:34
SDIでプロジェクト(hogehoge)内が
・hogehoge.cpp
・hogehogeDoc.cpp
・hogehogeView.cpp
・hogerightView.cpp:右のビュー用クラス
・hogeleftView.cpp:左のビュー用クラス

となってる場合、Doc-ViewでhogehogeViewにてデータのやりとりをしていますが、
hogerightViewでhogehogeViewにアクセスするためにhogehogeView.hをインクルードすると

public:
CPassManagerDoc* GetDocument() const;
でなぜかエラーとされます。

やりたいことはhogerightViewでhogehogeView内の関数を使いたいのですが何か良い方法はありますでしょうか?
もしくはhogehogeDocのデータをhogerightViewに読み込ませる方法はありますか?


631 :デフォルトの名無しさん:2006/02/18(土) 00:55:10
単に〜Doc.hをインクルードしていないからでは?
コンパイルエラーは99%「なぜか」ではなく理由があって出ているので、
そのエラーメッセージもちゃんと書くこと。

632 :デフォルトの名無しさん:2006/02/18(土) 01:03:33
リストコントロールでダブルクリックされた項目のテキストを取得させてます。
ソースはこんなです。
--------------------■
int item = list1.GetHotItem();
CString csItem = list1.GetItemText( item, 0 );
--------------------■

これWinXPなら、int item にはしっかりダブルクリックされた項目のインデックス値が返っているのですが、
なぜかWin2000では -1 が返ってきます。
ググってGetFirstSelectedItemPositionを使えば解決すると知ったのですが、
XPでは正常に値が返ってきてWin2000では-1が返るのはいったい何故?

633 :デフォルトの名無しさん:2006/02/18(土) 01:58:17
UNICODEビルドしたMFCアプリ(共有DLL使用)から、
MBCSビルドしたMFC DLL(共有DLL使用)を呼ぶと
内部でメモリリークするみたいなんだけど、しょうがないんだっけ?


634 :デフォルトの名無しさん:2006/02/18(土) 02:08:37
あぁ、これか
ttp://support.microsoft.com/default.aspx?scid=kb%3Bja%3B167929

635 :630:2006/02/18(土) 02:13:00
>>631さん
ありがとうございます。ご指摘通り〜Doc.hを読み込んだら
public:
CPassManagerDoc* GetDocument() const;
でのエラーはなくなりました。

なぜエラーとなっているか考えることをしませんでした。
今回はありがとうございました。

636 :デフォルトの名無しさん:2006/02/18(土) 14:22:28
>>632
「ダブルクリックされた項目」==「ホットアイテム」だっけ?

ダブルクリックイベントのハンドラでフォーカスのある項目を取得するのはできたと思ったけど。

637 :デフォルトの名無しさん:2006/02/18(土) 17:48:09
classViewのツリーってMSDNのヘルプ見たく「同期」取る事出来ないんですか?
たまに勝手に折りたたまれちゃったり、ひとつ隣のクラスが選択されちゃったり
しているんですけど、

638 :デフォルトの名無しさん:2006/02/18(土) 17:55:14
CFileクラスでComポートからデータを読み込みたいのですが
Readで読み込むところまではうまくいきました。
その際、もしデータがこなかったら制御を返すような方法はないでしょうか。
Readでそのままやると来るまで待ち続けてしまうので、タイムアウトなり設定する方法はないでしょうか。

639 :デフォルトの名無しさん:2006/02/18(土) 18:34:34
SetCommTimeouts

640 :デフォルトの名無しさん:2006/02/18(土) 18:39:58
>>638
ある。

641 :デフォルトの名無しさん:2006/02/18(土) 19:27:56
MFC限定でお願いします

642 :デフォルトの名無しさん:2006/02/18(土) 21:04:29
>>638
system("com1: baud=9600 parity=n data=8 stop=1 to=on xon=on odsr=off octs=off dtr=on rts=on idsr=off");

643 :デフォルトの名無しさん:2006/02/18(土) 21:06:31
おじゃまします。
C〜Doc.hで
public:
CString mydata;
と宣言されている変数に
C〜Doc.cppで
mydata = 〜
と代入をした場合
0x7c17787a (mfc71d.dll) で初回の例外が発生しました : 0xC0000005: 場所 0x00000054 を読み込み中にアクセス違反が発生しました。
0x7c17787a (mfc71d.dll) でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00000054 を読み込み中にアクセス違反が発生しました。
というエラーが出てしまいます。
直前までのデータは異常がありません。
代入するデータをC〜Doc.cpp内で宣言した変数に入れる場合は問題ありません。

確認すべきことは何でしょうか?

644 :デフォルトの名無しさん:2006/02/18(土) 21:09:31
thisがNULL

645 :デフォルトの名無しさん:2006/02/19(日) 02:00:20


646 :デフォルトの名無しさん:2006/02/19(日) 11:53:21


647 :デフォルトの名無しさん:2006/02/19(日) 11:59:14


648 :デフォルトの名無しさん:2006/02/19(日) 12:24:20
<わからない理由>
1. 読まない ・・・説明書などを読まない。読む気などさらさらない。
2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。
4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。
5. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。
6.感謝しない・・・教えてもらって当たり前。事がすんだらさようなら。
7.逆切れする・・・自分の思うようにならないと逆切れする。

649 :デフォルトの名無しさん:2006/02/19(日) 20:54:47
>>648
なんで俺の事知ってるの?ストーカー?

650 :デフォルトの名無しさん:2006/02/20(月) 00:34:12
MFCの勉強を始めました。

WinAPIでがりがり書くより楽だわ。


651 :デフォルトの名無しさん:2006/02/20(月) 04:09:36
気楽に適当なのをつくるのは楽チンだね。
俺は長く使いそうなのはWinAPI,みたいな使い分けをしているよ。

652 :デフォルトの名無しさん:2006/02/20(月) 23:04:15
はじめまして、 Jpg画像を、作成しようと思い
CImageを使っているのですが、うまく出来ません。
今のところ、テスト段階として、1本かの線があるJPG画像を作ろうと思い、

CImage image;
image.Create(120, 120, 8);
HDC hDC = image.GetDC();
SetDCPenColor(hDC, RGB(255,0,0));

LineTo(hDC, 110, 10);
image.Save("test.jpg");

image.ReleaseDC();
image.Destroy();
としてみましたが、真っ黒なjpg画像が出来るのみでした。
どうしたらよいか教えてください。

環境
WindowsXP Pro
Visual C++ .net 2003

653 :デフォルトの名無しさん:2006/02/20(月) 23:20:26
まず各呼び出しの戻り値を確認しようか。

654 :デフォルトの名無しさん:2006/02/20(月) 23:42:27
ReleaseDCが遅いんじゃね?

655 :デフォルトの名無しさん:2006/02/20(月) 23:57:40
>>653
ありがとうございます。
今から確認します。

>>654
ありがとうございます。
Releaseの位置についても確認してみます。

656 :デフォルトの名無しさん:2006/02/21(火) 14:02:52
>>652
えーと、、、
8ビットのイメージを作ってるのにパレットが無いから。
とりあえず、24ビットでやってみ。

あと、いきなりLineToだと起点がないけど、平気?
まあ0,0だろうけどな。

657 :656:2006/02/21(火) 14:05:21
パレットっていうのはカラーテーブルのことね
(もはやパレットは通じないか)

658 :デフォルトの名無しさん:2006/02/21(火) 14:24:19
常駐パレットを常駐させておけば済む話

659 :デフォルトの名無しさん:2006/02/21(火) 14:26:21
また懐かしいことをw

660 :623:2006/02/21(火) 17:01:41
CStatic上でマウスポインタを変更しようと思うんですが、
CStaticのMouseMoveハンドラ内で

SetCursor(LoadCursor(NULL,IDC_IBEAM));

としたのですが、変更されませんでした。
直後にGetCursor()で値を調べたところNULLになってました。

ちなみにCViewで同じようにしたところうまくいきました。

どう違うのでしょうか?

661 :デフォルトの名無しさん:2006/02/21(火) 17:04:49
マウスカーソル変更のタイミングはWM_MOUSEMOVEなんぞではなく、
WM_SETCURSORなんだけど、それでもだめかね?

662 :660:2006/02/21(火) 17:10:55
すみません。解決しました。
SetCursor(

::SetCursor(
としたところうまくいきました。

663 :デフォルトの名無しさん:2006/02/22(水) 00:15:44
VC6からVS2005に乗り換えたんですが、
「共有DLLでMFCを使う」でコンパイルしたexeを
VS2005のインストしていないマシンで起動させる動作条件を教えてもらえないでしょうか

客先(WinXP Home SP2)で起動してもらったら、
mfc80.dllがないから起動しないと言われたので、
x86のmfc80.dllとmsvcr80.dllを送って起動してもらったら、
「このアプリケーションの構成が正しくないため、
アプリケーションを開始できませんでした。
アプリケーションを再度インストールすることにより
問題が解決する場合があります。」
と出て起動しませんでした。
「スタティックライブラリでMFCを使用する」でコンパイルしたexeなら起動しました。
mfc80.dllとmsvcr80.dll以外に必要なDLLや条件がありましたら教えてもらえないでしょうか
よろしくお願いいたします。

664 :デフォルトの名無しさん:2006/02/22(水) 00:30:29
>>663
一応MFCとは間接的にしか関係ないが答えとく。
(VSインストールフォルダ)\Common7\Tools\Bin\Depends.Exe
で実行ファイルがどのdllを要求するかがわかる。
(VSインストールフォルダ)\1041\redist.txtに再頒布可能なファイルの一覧があるから
(VSインストールフォルダ)\VC\redist以下にあるファイルを自分で配布しなさい。
手段は実行ファイルと同じフォルダにzipで固めるなりVSでインストーラを作成するなりご自由に。

665 :デフォルトの名無しさん:2006/02/22(水) 04:12:57
インストーラ作るとdllはSideBySideでexeと同じフォルダになるから
最近はスタティックリンクにしてる俺。

666 :デフォルトの名無しさん:2006/02/22(水) 05:34:25
スタティックリンクにした時の肥大さがもぅたまんない!
でももっと小さく出来る仕掛けってないの??

667 :デフォルトの名無しさん:2006/02/22(水) 10:46:21
VC++8ってこのへん結構わかりにくいことになってるのよねえ
http://www.codeproject.com/cpp/vcredists_x86.asp

668 :デフォルトの名無しさん:2006/02/23(木) 11:41:37
SetCapture()でキャプチャリングしたんですが
ReleaseCapture()以外でキャプチャが外れることってあるんですか?
LButtonDownでキャプチャリングしてドラッグしてるときはちゃんと
キャプチャしてるんですが、ボタンを離すとキャプチャが外れるんですけど
どうしてなんでしょう?

669 :デフォルトの名無しさん:2006/02/23(木) 13:27:46
MSDNに書いてありそうな気がする

670 :668:2006/02/23(木) 13:50:39
MSDNでSetCapture調べたら

カーソルの位置に関係なく、以降のすべてのマウス入力が現在の
CWnd オブジェクトに送信されます。

てかかれてたんですけど、一切ReleaseCapture()を記述してないのに
キャプチャが外れたんで
どこか中の方の処理でReleaseCaptureみたいなことをやってるのかなぁと
おもったんですけど。
なにかこの単語で検索してみたらみたいなことありますか?
お願いします。



671 :デフォルトの名無しさん:2006/02/23(木) 13:53:18
本当にキャプチャ外れてるか?
WM_MOUSEMOVEが来てないだけじゃない?

672 :デフォルトの名無しさん:2006/02/23(木) 14:04:08
>>671
WM_MOUSEMOVEは来てると思うんですが

あと、不思議なのが、OnLButtonDownでSetCapture()を設けてるとこに
ブレイクポイントを作ってデバッグしたら、F5で復帰時にはちゃんとキャプチャ
できてました。
ブレイクしないとキャプチャできません。

理由がわからないんで困ってます。

673 :デフォルトの名無しさん:2006/02/23(木) 17:54:39
キャプチャはマウスを押下している限りにおいて有効だったきもするけど。

674 :デフォルトの名無しさん:2006/02/23(木) 17:56:48
プリエンプティブなマルチタスクになってからはそういう挙動になった気がする

675 :デフォルトの名無しさん:2006/02/23(木) 17:59:13
英語版SDKのドキュメントによれば
>SetCapture captures mouse input either when the mouse is over the capturing window,
>or when the mouse button was pressed while the mouse was over the capturing window
>and the button is still down.
というわけなので、ずっと押してないとだめ(という文章だとおもう)

676 :デフォルトの名無しさん:2006/02/24(金) 07:06:01
質問です。

常時、とあるデバイスを監視し続け、何らかのアクションがあると
それに対応した処理をしたいのです。
デバイスを監視するタイミングは、どのように起こせば良いのでしょうか?
WM_ENTERIDLEが良いのでしょうか?
とりあえず、1秒以内に反応出来るなら、問題ないのです・・・。

677 :676:2006/02/24(金) 07:18:57
ごめんなさい。
追記です。

実験のため、
WM_ENTERIDLEイベントでメッセージボックスを発生させるようにしたら・・・。
普段アイドル状態だと思われる状況でも発生しなくて、、何故かウインドウ上部のタイトルの部分を右クリックしたら
発生するようになりました・・・。

こういうものなのでしょうか?


678 :デフォルトの名無しさん:2006/02/24(金) 07:50:47
タイマで監視するか、hEventがもらえるなら、それを(Msg)WaitForするか。

679 :デフォルトの名無しさん:2006/02/24(金) 08:39:04
>>676
それ、メインのウインドウ操作してると、永遠にハードウェア監視出来ないぞ。
監視だって、直ぐに完了するのか?その時アイドル状態でも、それが重いと全体のパフォーマンスが落ちる。

恐らく、ハードウェアの監視に関しては、別スレッド作って、メインのウインドウにメッセージ送る形にした方が良いと思われ。


680 :デフォルトの名無しさん:2006/02/24(金) 10:21:59
エディットボックスで直接入力以外に
近くにリストが出てきてそこから選択できるようにするのって
どういうやり方が好ましいんですか?

リストボックスとかポップアップメニュー使うんですか?

681 :デフォルトの名無しさん:2006/02/24(金) 10:35:56
>>680
コンボボックスの何が不満なんだ?

682 :デフォルトの名無しさん:2006/02/24(金) 13:04:09
つ 複数行エディット

683 :680:2006/02/24(金) 14:48:08
コンボボックスだと左に表示されてる↓ボタンが少し邪魔なんで
デフォルトではエディットボックスと同じで
ボタンを押されると(又はフォーカスを得ると)↓ボタンが表示されて
選択可能というようにしたいんです。

Create時には可能なんですけど、
動的に↓ボタンの有無を切り替えるメンバとかってありますか?

684 :デフォルトの名無しさん:2006/02/24(金) 15:01:59
ある

685 :デフォルトの名無しさん:2006/02/24(金) 15:08:13
Create時に可能なら可能
方法はCreate時に可能の内容による

686 :デフォルトの名無しさん:2006/02/24(金) 15:42:04
Create時にCBS_DROPDOWNスタイルを指定したら↓ボタン出てきて
指定しなかったから出なかったんで、
そのスタイル変更する関数とかあるのかなと思いまして。
あれば教えていただきたいんですが・・
ShowDropDownとかじゃないですよね。


687 :デフォルトの名無しさん:2006/02/24(金) 16:29:50
~CBS_DROPDOWN

688 :デフォルトの名無しさん:2006/02/24(金) 16:48:40


689 :デフォルトの名無しさん:2006/02/24(金) 17:06:07
http://forums.belution.com/ja/vc/000/127/96.shtml

690 :デフォルトの名無しさん:2006/02/24(金) 17:12:59
2つ作って切り替える

691 :デフォルトの名無しさん:2006/02/24(金) 17:19:52
コンボボックスは複数のコントロールが組み合わさってるせいか
スタイルの変更がむずかしいのかも
http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_10156859.html

692 :デフォルトの名無しさん:2006/02/24(金) 17:48:19
返答ありがとうございます。
コンボボックスのスタイルの変更は難しいんですね。
2つ作って切り替えるっていうのもあれなんで、
ポップアップメニュー使って
同じようになるようにやってみたいと思います。

693 :デフォルトの名無しさん:2006/02/24(金) 18:30:45
切り替えるほうが楽だけどな。
表示非表示をかえるだけ。

694 :デフォルトの名無しさん:2006/02/24(金) 21:59:15
コンボボックスの矢印部分を何かで上書きして隠したら?w

695 :デフォルトの名無しさん:2006/02/25(土) 01:08:27
切り替え法最高〜♪
何でもこれでさくっと解決

696 :デフォルトの名無しさん:2006/02/25(土) 01:51:08
CHTMLViewで作ったウィンドウにファイルをドロップした時にIEにドロップする感じじゃなくて
OnDropFilesなどで自分で処理したいのですが分かりません。
どうしたら出来ますでしょうか?
PreTranslateMessageではWM_DROPFILESが来てなくて出来ませんでした。

697 :デフォルトの名無しさん:2006/02/25(土) 09:15:52
Visual Studio 2005 を使っています。
ダイアログの生成時のイベントハンドラを追加しようと思ったんですが、
CDialog::OnInitDialog() はもう使われないんでしょうか?
リソースエディタで WM_INITDIALOG が見つからないんですが。

698 :デフォルトの名無しさん:2006/02/25(土) 09:42:11
すんません、そういやオーバーライドでした。
すっかり忘れてました。

699 :デフォルトの名無しさん:2006/02/26(日) 22:54:47
VS 2003を使っています。
MFCをCFormViewを使ったアプリを作っています。

リソースエディタで、タブコントロールを置いたのですが、
これのプロパティのOwner Draw Fixedという項目が、
グレーアウトしていて選択できない状態なのですが、なぜでしょうか?
通常、オーナードローはプロパティで設定できないものですか?

700 :デフォルトの名無しさん:2006/02/27(月) 15:50:01
すいません。

コンボボックスをCreate時にサイズを反映できないんですが
コンボボックスってサイズ固定なんですか?

なんか方法あります?

701 :デフォルトの名無しさん:2006/02/27(月) 15:58:25
>>700
> コンボボックスをCreate時にサイズを
日本語でおk

702 :デフォルトの名無しさん:2006/02/27(月) 16:07:58
>>700
Createのrectはエディットコントロールのサイズじゃなくてリストボックスのサイズ。

>>701
チョン乙

703 :デフォルトの名無しさん:2006/02/27(月) 16:11:17
>>700
つ SetItemHeight

704 :デフォルトの名無しさん:2006/02/27(月) 16:13:30
<<702
おおっ
なるほど。

ということはエディット部分のサイズ変更はできないってことですか?

705 :デフォルトの名無しさん:2006/02/27(月) 16:19:42
>>703
サンクスです。

706 :デフォルトの名無しさん:2006/02/27(月) 16:34:45
子ウィンドウからビューのハンドラを取得するのってどうするんですか?

this->GetParent()->GetParent()->‥
みたいにやっていったらできそうなんですけど、
なにか一気に取得する方法ってありますか?
AfxGetApp()みたいな。

707 :デフォルトの名無しさん:2006/02/27(月) 17:01:22
>>706
ハンドラでなくハンドル。

この3つの関数を使う
CWnd* ::AfxGetMainWnd()
CView* CFrameWnd::GetActiveView()
HWND CWnd::GetSafeHwnd();

注意点
・型の違い
・返ってきた値が正しいかチェック
・MDIにはビューが複数あること

708 :デフォルトの名無しさん:2006/02/27(月) 17:18:31
>>707

ヘルプでGetActiveView調べたらできました!
恩に着ます。

CMDIFrameWnd *pFrame =
(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;

// Get the active MDI child window.
CMDIChildWnd *pChild =
(CMDIChildWnd *) pFrame->GetActiveFrame();

// or CMDIChildWnd *pChild = pFrame->MDIGetActive();

// Get the active view attached to the active MDI child
// window.
CView *pView = (CView *) pChild->GetActiveView();

709 :デフォルトの名無しさん:2006/02/27(月) 17:25:29
>>708
MDIだと子フレームがあるから、もう一段階GetActiveFrameが入るね。
こちらこそどうも。

710 :デフォルトの名無しさん:2006/02/28(火) 01:16:22
つまらない質問ですみません。
左にツリービュー、右にリストビューというIEみたいなサンプルコードは
どこかに落ちてないですか?

ところで、最近MFCの本はさっぱり見ませんね。翔泳社のMFCバイブル全部
持っててよかった。

711 :デフォルトの名無しさん:2006/02/28(火) 03:43:30
windows media playerのように多重起動をせずに、
2つ目以降の起動で渡されたデータを、一つ目に起動させたアプリケーションに渡したいのですがどうしたらいいのでしょうか?

具体的には、WMPに関連付けられている動画をクリックしてWMPを起動し、
起動したまま、別の動画をクリックすると最初に起動したWMPで再生するような感じにしたいんです。


712 :デフォルトの名無しさん:2006/02/28(火) 09:24:58
>>711
多重起動防止→mutex
プロセス間のデータ受け渡し→共有メモリ、WM_COPYDATA、socketなど

713 :711:2006/02/28(火) 17:38:13
>>712
出来ました。ありがとうございました。

714 :デフォルトの名無しさん:2006/02/28(火) 19:19:46
>>710
> 左にツリービュー、右にリストビューというIEみたいなサンプルコードは

ウィザードでスケルトンは作れるじゃない。

715 :デフォルトの名無しさん:2006/03/01(水) 04:05:01
ネット将棋の Java アプリが画面に表示している将棋盤のイメージを取得して
局面図を出力する VC++ ツールを作成しています。
9x9 の盤面を表現するウィンドウは、FindWindow(),EnumChildWindows()で取得できました。
そのウィンドウに描画されているイメージはどのように取得すれば良いでしょうか?

716 :デフォルトの名無しさん:2006/03/01(水) 10:08:27
>>715
GetDC, BitBlt

717 :デフォルトの名無しさん:2006/03/01(水) 10:56:27
>>715
画面をコピーするだけでなく、
何の駒が置かれてるか判断するには、
ビットマップを比較する方法と、
ある座標の点が塗られている色で見分ける方法がある。

前者はすべての駒のビットマップを保持する必要がある。

後者はある座標が黒だったらとか駒の色だったらとか、
場合分けで何の駒が置かれてるか判断する必要がある。

718 :717:2006/03/01(水) 11:04:09
>>715
フリーセルの盤面を取得して自動で解くソフト
http://hp.vector.co.jp/authors/VA007799/vfc.htm

719 :デフォルトの名無しさん:2006/03/01(水) 11:50:37
盤面取得24
ttp://www.geocities.jp/outlandsll/download.html#BanGet24


720 :デフォルトの名無しさん:2006/03/01(水) 16:09:28
すみません。質問です。

あるクラスに、
自分自身のオブジェクト情報をファイルに保存する
という機能を持った操作を実装したいんですけど、

CArchiveクラスを使って、

CFile outFile( "myfile.txt", CFile::modeWrite | CFile::modeCreate );
CArchive serializer( &outFile, CArchive::store );
serializer << ○○;
serializer.Close();

てやるのかなとイメージしてみました。
そこで○○のところに入るクラスの実体を
どのようにして得るのかがわからないんです。

thisはポインタなのでだめですよね。
ポインタから実体を作る方法ってありますか?

また、なにか他のいいほうがあれば教えていただけないでしょうか?

721 :デフォルトの名無しさん:2006/03/01(水) 16:27:39
1. *this
2. WriteObject

722 :720:2006/03/01(水) 17:46:18
すみません。

WriteObject(this)
で書き込んでみたんですけど
書き込み先のファイルを見たらたかだか32バイトで
(どう見ても足らない)
arLoad.ReadObjectで読み込んでみても
正しい値を返さないんですが。

はてさて?


723 :デフォルトの名無しさん:2006/03/01(水) 17:48:11
>>722
>>721
> 1. *this

724 :デフォルトの名無しさん:2006/03/01(水) 17:52:48
読み込み時に動的に生成してほしいなら
DECLARE_SERIAL
IMPLEMENT_SERIAL
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_storing_and_loading_cobjects_via_an_archive.asp

725 :デフォルトの名無しさん:2006/03/01(水) 22:00:24
複数段タブで、タブを選択してもタブの行が入れ替わらないようにするいい方法ないですかね?

行が入れ変わらないようにするにはBUTTONスタイルを指定すればいいのだけど、
これだとタブ札の間にスキマができてしまう。
あと、タブ札の中身はOnDrawItemでかいてて、タブ札の枠線はOnPaintで書いてるみたいで、
(BUTTONスタイルならボタンの陰影をOnPaintで描画)、
きちんとタブ札の外見にするにはOnPaintをオーバーライドしなきゃいけないのでしょうか。
もしこの場合、各タブ札の描画領域を知るうまい方法ってないでしょうか?

726 :デフォルトの名無しさん:2006/03/01(水) 22:20:52
行が入れ替わらないタブなんて見たことない。

727 :デフォルトの名無しさん:2006/03/01(水) 23:08:35
MFCって、この先も生き残り続けるのか?
勉強して大丈夫?

釣りじゃないぞ。

728 :デフォルトの名無しさん:2006/03/01(水) 23:16:06
この先のことは誰にもわからんけど
ソースが公開されてるから好きなように使える。

729 :デフォルトの名無しさん:2006/03/02(木) 00:16:03
>726
そうだけど、行が入れ替わるってのはUIの使い勝手として悪いと思わない?

730 :デフォルトの名無しさん:2006/03/02(木) 00:22:55
>>729
入れ替わらなかったら、隠れるタブが出てくるわけなんだが、それはどうするつもりだ?

731 :デフォルトの名無しさん:2006/03/02(木) 00:33:45
選択されたタブは上と横方向にでかくすりゃいいんじゃないの、ぐらいしか考えてないかな。
うん。
隠れるってどんな状態だろう?

732 :715:2006/03/02(木) 00:48:28
>>716
的確なアドバイス、ありがとうございます。
確保したメモリDCにイメージを転送してゴニョゴニュできるようになりました。

>>717
ご指摘の通り、解析を行わなければなりません。
今回は駒のビットマップを全て保持して比較する予定です。

>>718
こんなのもあるんですね。知りませんでした。
ソースが付いてるともっとよかったり(何

>>719
まさにコレを作ろうとしていました。やっぱり需要はあったのですね・・・
ただ、作者さんも書いておられますが、MS JavaVM でしか確認していないのか
こちらの Sun JavaVM の環境では動作しませんでした。
いろいろ勉強がてら、ツールの製作は続行しようと思います。

皆様、御指導ありがとうございました。

733 :デフォルトの名無しさん:2006/03/02(木) 01:12:15
>>726
今時のタブブラウザにあるような奴かな

>>729
禿胴
コモンコントロールでTCS_MULTILINEスタイルの奴ね

734 :デフォルトの名無しさん:2006/03/02(木) 03:44:01
>>727 オレもちょと不安。
オレの感じ(あくまでも感じね)では、
もうネイティブGUIアプリは現状のMFCで打ち止めFIX
と考えてるんじゃないだろうか、Microsoftは。

今後出てくるテクノロジは .NET Framework の
インターフェイスで使ってね、ってことで。
Avalon ってネイティブのインターフェイスと
.NET のインターフェイスとどっちもあったっけ?

735 :デフォルトの名無しさん:2006/03/02(木) 08:51:08
>>733
タブのスタイルをボタンにしてるんだろ
タブじゃ実現不可能だからみんなボタンにしてるわけだし
それが理解できないやつは池沼

736 :デフォルトの名無しさん:2006/03/02(木) 22:07:29
何で怒るんだ・・・('A`;)

タブブラウザだと位置固定の多段タブって使われてるけど、
あれってCWndから派生してちまちま書いてたりするんだろうか。

もしくはTCS_MULTILINEを指定して、更にサイズ調整を行って、
ボタンのスキマをぴっちりつめて、オーナードローする方法なんだろうか?
TCS_MULTILINEとボタンスタイルを指定した場合に、タブ札のサイズ(横幅)をいじくる
方法って誰か知らんとですか?

737 :デフォルトの名無しさん:2006/03/03(金) 04:28:43
>>736
お前はSpy++も使えないのか?

738 :デフォルトの名無しさん:2006/03/03(金) 09:15:30
('∀`)使えん

ちゅーわけで使える人が調べてくれるならとてもうれすぃ

739 :デフォルトの名無しさん:2006/03/03(金) 09:27:24
こっちはうれしくない。>>737はSpy++が使えなければ、プログラム以前の問題だと、こう申しておる

740 :デフォルトの名無しさん:2006/03/03(金) 10:57:52
CListCtrlのカスタムドローでプログレスを描画したいと考えています。
任意セル固定プログレスは試してみたんですが、ソートに対応させたいので、
どこかに参考になるソースとか助言なんかいただけませんか?

現状、セル固定だとアイテムデータとCListCtrl&プログレスデータに分けられて
再利用性が高まるのですが、ソートを可能にするとアイテムデータ、CListCtrlと
プログレスデータが絡み合って再利用性が減少する(ような気がする)し、
(スマートさからほど遠い)余分な処理が増えるので、コンテナ等データの
持たせかたで悩んでいます。

741 :デフォルトの名無しさん:2006/03/03(金) 11:17:15
あるダイアログで、
>CDialog::OnOK();
をコールしてます。

ところが、同じ処理をダイアログを非表示にしてメソッドコールすると、
モーダル開いているウィンドウのディセイブルがイネイブルになっちゃうようです。

何でこんなことになるんでしょうか?

742 :デフォルトの名無しさん:2006/03/03(金) 12:20:39
>>741
自分には判っていることでも相手に伝わらないこともある。
「ダイアログ」、「ウィンドウ」がそれぞれ何を指しているのか整理してくれたまえ。

743 :デフォルトの名無しさん:2006/03/03(金) 12:25:44
実は全部CDialog(の派生)でつ。


「メインDlg モーダルで開く → メニューDlg モーダルで開く→ 処理Dlg」

と3つのDlgがあります。

で、問題無いのですが、
処理Dlgを非表示にして動作させると、
メインDlgのディセイブルが解除されます。

ちょっと変な作りで、処理DlgをnewしてるのはメインDlgです。

744 :デフォルトの名無しさん:2006/03/03(金) 12:28:51
>>740
「プログレス」って何だ? プログレスバー?
プログレスバーだったら、ソートは全体の回数が判らないので無理。
ソート自体はMSDNでSortItemsの説明を読めば判る。
ソートに対応すると場合によってはソート用の配列を設ける必要があって余分な手間が
掛かったりはするが、再利用性が高いとか低いとか言う問題は有るはずがない。
そもそも、似て非なるものを創るときくらいしか再利用なんてできない。

745 :デフォルトの名無しさん:2006/03/03(金) 12:44:45
これはひどい「俺用語」ですね。

746 :デフォルトの名無しさん:2006/03/03(金) 13:07:39
プログレスバーなんだからデータが変わったら更新するわけだろ
だったらソート後のデータで普通に更新するだけじゃないか?

カスタムドローなんだから自分で描画してるんだろ?

747 :デフォルトの名無しさん:2006/03/03(金) 13:08:36
CDialogのVisibleはどうやって見るんだっけ?
ShowWindowはあるけど、GetShowWindowが無いお。

748 :デフォルトの名無しさん:2006/03/03(金) 13:19:17
CWnd::IsWindowVisible() かな

>処理Dlgを非表示にして動作させると、
>メインDlgのディセイブルが解除されます。
これが理解できん
もう少し翻訳してくれ

749 :デフォルトの名無しさん:2006/03/03(金) 13:27:22
>処理Dlgを非表示にして動作させると、
>メインDlgのディセイブルが解除されます。

処理DlgをdoModalして、処理Dlgのボタンを押してCDialog::OnOK();
を行っても問題は発生しません。

ところが、処理Dlgを表示させずにメソッドを読んで、
どうもその中でCDialog::OnOK(); が呼ばれてるのですが、
そこでメインDlgがディセイブルだったのがイネイブルに変わってしまいます。

CWnd::IsWindowVisible() で判定して、CDialog::OnOK(); を呼ばないようにすると直りましたので、
一応解決ですが、MFCの中の人が何やったのか、何が不味かったのか、ヨクワカンネ。

750 :740:2006/03/03(金) 13:33:54
>>744
あ、プログレス(進捗状況)ってのはMFCのプログレスバーもどきです。
OnCustomDraw内でFillSolidRect使って任意セルに直接書き込んでます。
(MFCのプログレスバーも使用してみたのですが、ちらつきが激しいのでやめました)
あと、現状ではオーナーデータを考えています。(可能なら拡張も)
ソートはOnColumnclickで勝手に処理してます。

ダウンローダ系やP2P系にありがちな気がしますが、日本語英語その他言語を問わず、
その手のソフトでソースが公開されているものってありませんかね?
(これはスレ違いかな…?)

751 :デフォルトの名無しさん:2006/03/03(金) 13:52:46
プログレスバーでちらつくって使い方が悪いだけなんだが、
オチとしてはリストコントロールのセルに被せているってところか。
まあ、どのみちエスパーさんの登場を待つしかないだろうな。

752 :デフォルトの名無しさん:2006/03/03(金) 14:04:30
ソートしたら困るような構造なら
プログレスバーじゃなくて数字の更新もできないだろ

753 :740:2006/03/03(金) 14:20:01
>>751
ちょいと試してみたいので、ちらつかないプログレスバーの使い方を教えてください。


754 :デフォルトの名無しさん:2006/03/03(金) 15:27:25
>>753
どうやったらちらつくのか、それを教えてくれよ。
バックグラウンドをいちいち書いてるのか?
チャイルドをクリップして無いのか?

755 :740:2006/03/03(金) 17:40:55
>>754
ダイアログにCListCtrlの派生クラスをメンバにもたせ、さらに
その派生クラスにCProgressCtrlを持たせました。
リストヘッダのドラッグは派生クラスのOnNotifyで検知し、そこで
プログレスバーのサイズを変更しています。

派生クラスのOnEraseBkgndでTRUEを返しても、ダイアログで子ウィンドウ
のクリップをしてもちらつきに関して差は感じられません。

756 :デフォルトの名無しさん:2006/03/03(金) 18:00:41
相手するのやめようぜ。

757 :デフォルトの名無しさん:2006/03/03(金) 19:11:20
やっぱりリストコントロールに被せているってオチか。イトワロス

758 :デフォルトの名無しさん:2006/03/03(金) 20:08:38
部外者だがこのスレいらねーな

759 :デフォルトの名無しさん:2006/03/03(金) 20:09:04
お前がいらねーな

760 :デフォルトの名無しさん:2006/03/03(金) 20:22:04
俺もいらねーな

761 :デフォルトの名無しさん:2006/03/03(金) 20:41:50
>>740
ソートに対応しているかどうかわからんがCodeProjectにある

762 :デフォルトの名無しさん:2006/03/03(金) 21:55:30
>737 >739
使ってみたぜ('∀`)
で、メッセージ多すぎてどのイベント拾えばいいのかわかんね。

んで、>737と>739の人はspy++を使えば、どう問題に対処対処できるのか
って部分を教えて。

763 :デフォルトの名無しさん:2006/03/03(金) 21:57:23
お前が無能なことがわかったので、皆さんの問題は解決しますた。

764 :デフォルトの名無しさん:2006/03/03(金) 22:07:08
まあ無能だよ('∀`)

↓今ここまで
@
>もしくはTCS_MULTILINEを指定して、更にサイズ調整を行って、
>ボタンのスキマをぴっちりつめて、オーナードローする方法なんだろうか?
>TCS_MULTILINEとボタンスタイルを指定した場合に、タブ札のサイズ(横幅)をいじくる
>方法って誰か知らんとですか?
A
>お前はSpy++も使えないのか?

spy++を使えば問題が解決する見込みがあるらすぃ。
でも、どういう理由で解決する見込みがあるのか、書かれていないので、
わかってないところ。

765 :デフォルトの名無しさん:2006/03/03(金) 22:15:08
>>764
なるほど。そういうところか。

766 :デフォルトの名無しさん:2006/03/03(金) 23:11:41
>>760
おまいはいるよ

767 :デフォルトの名無しさん:2006/03/03(金) 23:38:07
>765
そんなこじゃれた反応もステキだけど、問題解決に寄与してくれるともっとステキだよヾ('∀`)ゞエッサッサ

768 :デフォルトの名無しさん:2006/03/04(土) 03:03:06
いまCStatic派生クラスを作って棒グラフとか描画するウインドを作成中です。
この上をマウスが通過したときに座標をポップアップしたり、クリックしたときに棒グラフを選択したりしたいと思っています。
スパイでまずはCStaticにくるメッセージをみてみたのですが、
マウスが動くとWM_NCHITTESTはくるのですが、
WM_NCLBUTTONDOWNなどは来ませんでした。
WM_NCLBUTTONDOWNはどうしたら取得できるのですか?

あとこういうメッセージはダイアログの子にどういうルールで送られるのですか?
たとえばWM_MOUSEMOVEは親のダイアログにはくるけど子供にはきませんね。

ご教授いただけるとありがたいです。

769 :デフォルトの名無しさん:2006/03/04(土) 06:14:01
ID

770 :740:2006/03/04(土) 10:03:11
>>761
レスどうもです。
以前CodeProjectとかGuruを見て回って↓のと他に2つ3つは調べたのですが、
ソートに対応したものはなかった気がします。(対応させてた人はいるみたいでしたが)
とは言え、CXListCtrlは固定プログレスの際に大いに参考に(というか、一部流用)
させてもらったほどよくできていました。

CXListCtrl
http://www.codeproject.com/listctrl/xlistctrl.asp
napster
http://www.codeproject.com/listctrl/napster.asp
ProgressList
http://www.codeguru.com/cpp/controls/listview/article.php/c4187/

一応、ソート後に整合性をとることでソートに対応させました。
レスくださった方はありがとうございました。


771 :デフォルトの名無しさん:2006/03/04(土) 14:35:52
>>769
シンプルなお答えありがとうございます。
つまりリソースIDの範囲でフィルタがかかってるとかですかね?
勝手にresource.hを編集してIDをつけるとメッセージが届けられないとかありますか?

772 :デフォルトの名無しさん:2006/03/04(土) 15:54:54
>>768
>WM_NCLBUTTONDOWNなどは来ませんでした。
>WM_NCLBUTTONDOWNはどうしたら取得できるのですか?
字面だけで来るって思い込んでるでしょ。
名前から予測するのは構わないけど実際使えるかどうかはちゃんとMSDN読まないと。

>あとこういうメッセージはダイアログの子にどういうルールで送られるのですか?
>たとえばWM_MOUSEMOVEは親のダイアログにはくるけど子供にはきませんね。
そんなわけない。来なかったら困る。
他のコントロールでも調べてごらん。
スタティックコントロールの場合はダイアログエディタで「通知」にチェックつけるか
コード上でSS_NOTIFYを追加すれば来るよ。
(WM_NCHITTESTを捕まえてHTCLIENTを返すという方法もある)

あと、座標をポップアップさせるのはCToolTipCtrlを使うのも手の一つ。


773 :デフォルトの名無しさん:2006/03/04(土) 16:58:08
スタティックコントロールのハンドラ
http://homepage2.nifty.com/DSS/VCPP/MFC/Other/CStaticHandler.htm

774 :デフォルトの名無しさん:2006/03/04(土) 18:08:14
>>772-773
ありがとうございます。
ちゃんとMSDNも読ませていただきます。

775 :772:2006/03/04(土) 18:10:47
一応補足。
773が教えてくれてるのは、送られてきた通知メッセージを親ダイアログで捕まえるためのコード。
772で書いたのは、メッセージがどうやったら飛んでくるかって話で、
773のリンク先の2.に書いてあることと同じ。
もし、派生クラス側で捕まえたければ、2.までは同様にして
派生クラス内のハンドラでWM_LBUTTONDOWNを捕まえればいい。
(もちろんWM_LBUTTONUPでもいいが、STN_CLICKEDはWM_LBUTTONUPではなく
WM_LBUTTONDOWNで出されるので、一応それを考慮)

あと、リンク先のコードで動くだろうし間違いではないが
ON_BTN_CLICKEDじゃなくON_STN_CLICKED使うべき。
全く同じものとはいえ、より忠実に。


776 :772:2006/03/04(土) 18:15:26
あれ、書いてるうちに。
ちょっと遅かった。

>>774
MSDNなら"Static Control Default Message Processing"(英語)の辺り
とくに最初と最後の文章と表中のWM_NCHITTESTの項とWM_LBUTTON*の項。


777 :デフォルトの名無しさん:2006/03/04(土) 23:22:21
>>772さん、本当にありがとうございます。
この機会にじっくりよんで理解したいと思います。
(いままで苦手で来ていたので)

778 :デフォルトの名無しさん:2006/03/04(土) 23:28:52
メッセージが来ないのは魅力がないから。
魅力的な俺にはばんばんメッセージが来ます。

779 :デフォルトの名無しさん:2006/03/05(日) 01:19:15
エムエフシーってなぁにぃ?
WindowsAPIマスター達が代表して設計した汎用クラス群?

780 :デフォルトの名無しさん:2006/03/05(日) 01:21:45
キチガイ登場

781 :デフォルトの名無しさん:2006/03/05(日) 01:57:02
>>778
それは業者からのダイレクトメッセージだろプギャー(AAry

782 :デフォルトの名無しさん:2006/03/05(日) 21:34:05
男なら黙ってAPIのみでC言語で組め

783 :デフォルトの名無しさん:2006/03/05(日) 22:06:10
やだ

784 :デフォルトの名無しさん:2006/03/06(月) 19:24:50
突然ですが、MFCのSocket通信を使って
指定したIPのPCのレジストリの中身を
参照するようなことはできるのでしょうか?

785 :デフォルトの名無しさん:2006/03/06(月) 19:26:26
できる


786 :デフォルトの名無しさん:2006/03/06(月) 19:40:40
妹レジストリ。

787 :デフォルトの名無しさん:2006/03/06(月) 19:44:24
弟メーション

788 :デフォルトの名無しさん:2006/03/06(月) 20:22:52
対義語
兄メーション

789 :デフォルトの名無しさん:2006/03/06(月) 20:40:35
笑点の収録会場はここですか?

790 :デフォルトの名無しさん:2006/03/07(火) 00:15:32
もう取れる座布団がねーぞ。


791 :デフォルトの名無しさん:2006/03/07(火) 09:56:17
爺DI+

792 :デフォルトの名無しさん:2006/03/07(火) 11:24:44
婆ちゃるAlloc

793 :デフォルトの名無しさん:2006/03/07(火) 16:43:54
メニューの表示を変更したいのですが、

ファイル
   開く
   閉じる

この場合、「開く」「閉じる」はUPDATE_COMMAND_UIで処理すれば良い事が分かりました。
では、ルートにある「ファイル」を実行中に変更するには、どのようにするのでしょうか?

794 :デフォルトの名無しさん:2006/03/07(火) 17:05:06
ウィンドウにあるメニューが変更されたときは (ウィンドウが表示されているかどうかにかかわらず)、
アプリケーションは CWnd::DrawMenuBar 関数を呼び出す必要があります。

795 :793:2006/03/07(火) 17:23:06
あざーす!
できました!

796 :デフォルトの名無しさん:2006/03/07(火) 22:38:17
画像を表示するビューにcScrollViewクラスを使ってスクロールバーをつけているのですが、
スクロールバーをドラッグして動かすとものすごい勢いでちらつきます。
OnVScroll関数およびOnHScroll関数内で表示の更新をしているのが原因かと思い、
試しに更新をやめてみたところ、
残像のように伸びて絵が残るのかと思いきや、同じようにちらつくため、そうでもない様子。

原因は何なのでしょう?
ダブルバッファリング的なことはやっています。
アバウトな質問で申し訳ありませんが、よろしくお願いします。

797 :デフォルトの名無しさん:2006/03/08(水) 00:02:24
描画処理がおかしい。

以上

798 :デフォルトの名無しさん:2006/03/08(水) 00:14:16
WM_ERASEBKGND


799 :デフォルトの名無しさん:2006/03/15(水) 21:08:28
CDC::SelectObjectで指定した(CFont)オブジェクトは、その使用中は
保持していないとまずいですか?(そのオブジェクトでCreateFontIndirect
に用いたLOGFONTは保持してます)
一応、スコープを外れても動いてますが…

800 :デフォルトの名無しさん:2006/03/15(水) 22:52:26
>>799
「使用中」が何を意味するかが謎

801 :デフォルトの名無しさん:2006/03/15(水) 23:19:06
誰がどこでそのフォントを使うかによるだろうね

802 :デフォルトの名無しさん:2006/03/16(木) 00:42:01
本当にフォントが破棄されていたら動かないよ

803 :デフォルトの名無しさん:2006/03/16(木) 11:44:39
単に代替フォントが使われるだけじゃないのか?

804 :デフォルトの名無しさん:2006/03/16(木) 12:22:01
フォントを破棄してもいい場合
http://www.kumei.ne.jp/c_lang/sdk/sdk_27.htm

フォントを破棄するとうまく行かない場合
http://www.kwi.co.jp/tips3.htm

805 :デフォルトの名無しさん:2006/03/16(木) 12:40:08
GDIオブジェクトってなんで参照カウントで管理するようになってないんだろうね?

806 :デフォルトの名無しさん:2006/03/16(木) 14:10:55
LOGFONTなんかは逆に保持してても無駄。

807 :デフォルトの名無しさん:2006/03/16(木) 14:22:22
LOGFONTはフォントの設計図

808 :799:2006/03/16(木) 19:18:30
なんで動いたのか分かりませんが、まあCFontをメンバで持たせました。
レスどうもでした。

809 :デフォルトの名無しさん:2006/03/16(木) 19:26:23
逆にCFont(HFONT)はSelectされっぱなしでは削除できないからかと。

810 :デフォルトの名無しさん:2006/03/16(木) 22:30:40
VC++、MFCを使い始めて2ヶ月の初心者です。

質問ですが、
キーが押された時にキーイベントをどのプロセスよりも早くキャッチして
選択中のプロセスに、本来とは違った動作させるプログラムを作りたいと思ってます。

たとえば、メモ帳を開き 'A'キーを押すと、'AAA'と入力される。
といった具合です。

キーをフックさせるなどの情報にはたどりついたのですが、
他のプロセスに働きかける方法がわかりません。
開発環境はVC++6.0、XPProです。

どうぞよろしくお願いします。

811 :デフォルトの名無しさん:2006/03/16(木) 23:00:14
そういうろくでも無いプログラムを、質問されなきゃ作れない低脳が書かないように。

812 :デフォルトの名無しさん:2006/03/16(木) 23:00:47
s/されなきゃ/しなきゃ/

813 :デフォルトの名無しさん:2006/03/16(木) 23:23:55
そういうろくでもないレスを、頭に批判しか浮かんでこないひねくれものがしないように。

お願いしますね。

814 :デフォルトの名無しさん:2006/03/16(木) 23:30:05
>>810
「グローバルフック」でググれ

815 :デフォルトの名無しさん:2006/03/16(木) 23:30:43
がんばれば、いつかは出来ます。

でも、スレ違いなので二度と来ないでください。

お願いしますね。 

816 :デフォルトの名無しさん:2006/03/16(木) 23:38:17
>>814
ありがとうございました。
なんか僕のせいで荒れてしまってるようで申し訳ないです。

あと、813は僕じゃないです。
>>811-812
確かにろくでもないですねw
ただまだ知識も少なく、自分の作りたいものしか意欲がわかないので・・。

>>815
ありがとう。やっぱりAPIですか。ごめんなさい。

817 :デフォルトの名無しさん:2006/03/17(金) 00:04:37
知識のない人間に沸くような意欲の対象となる作りたいものって一体なんだ?

818 :デフォルトの名無しさん:2006/03/17(金) 00:09:38
>>817
今作りたいと思っているものは810に書いたような物です。

819 :デフォルトの名無しさん:2006/03/17(金) 00:18:35
>>818

817みたいな奴はいくら構っても知識ペイすることはないからほっとけよw

820 :デフォルトの名無しさん:2006/03/17(金) 00:39:09
相談室で質問内容にけちつけるだけの奴って何で居るんだろうな。。

821 :デフォルトの名無しさん:2006/03/17(金) 00:54:02
>>810に至っては特に質問内容がおかしいとも思えないが・・

822 :デフォルトの名無しさん:2006/03/17(金) 01:08:21
>>819-821
そこまで言う事でも・・w

>>ALL
おかげさまでできそうです。
詳しく解説しているサイトがいくつもあり自分の検索する力が足りなさ過ぎる事を実感しました。
今度からはもう少し気合いれて調べてみます。
ご迷惑をおかけしました。


823 :デフォルトの名無しさん:2006/03/17(金) 11:23:39
  「選択中のプロセスに、本来とは違った動作させるプログラムを作りたいと思ってます。

   たとえば、Web ブラウザを開きパスワードを入力すると、僕のところに送信される。
   といった具合です。」

こう書くとあら不思議、碌でもないプログラムになる。

824 :デフォルトの名無しさん:2006/03/17(金) 11:25:41
MFCと何の関係もない

825 :デフォルトの名無しさん:2006/03/17(金) 11:45:13
キーフックつーとまず思うのがキーロガーだよなあ

826 :デフォルトの名無しさん:2006/03/17(金) 14:22:42
キーロガーつーとまず思うのがフェイスハガーだよなあ

827 :デフォルトの名無しさん:2006/03/17(金) 15:02:58
フェイスハガーつーとまず思うのが芳賀書店だよなあ

828 :デフォルトの名無しさん:2006/03/17(金) 19:36:34
何この流れ?


829 :デフォルトの名無しさん:2006/03/17(金) 19:50:58
>>828
823の自演

830 :823:2006/03/17(金) 19:57:02
俺かよ!

831 :デフォルトの名無しさん:2006/03/17(金) 20:02:38
俺は?

832 :デフォルトの名無しさん:2006/03/17(金) 20:28:34
>>823を悪くいう香具師は
俺が許さんぞ

833 :デフォルトの名無しさん:2006/03/17(金) 20:36:57
君たちやけに浮かれてるが
まさか4連休なんて事はないだろうね?

834 :デフォルトの名無しさん:2006/03/17(金) 22:38:25
前と後ろにつけて4連休ってわけはないだろ

835 :デフォルトの名無しさん:2006/03/17(金) 23:57:41
今年も365連休〜\(^o^)/

836 :デフォルトの名無しさん:2006/03/18(土) 10:54:50
VC++ 6.0でフラッシュ(swfファイル)をBMPに変換するアプリを作成しています。
今はActiveXを使ってフラッシュを表示し、デバイスコンテキストをコピーして
BMPを作成する方法でつくっています。
静止画のswf限定で構わないので、画面に表示する事無くBMPファイルに
変換する方法がわかる方居ましたら教えてください。
よろしくお願いします。

837 :デフォルトの名無しさん:2006/03/18(土) 11:08:25
誤爆?

838 :http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 18:41:25
TextSS の64bit化おながいします

もしくは64bitにネイティブ対応した置換ソフトないですか?

839 :デフォルトの名無しさん:2006/03/18(土) 19:23:10
>>838
スレ違い。マルチ乙。
あと氏ね。

840 :デフォルトの名無しさん:2006/03/21(火) 23:55:57
VC6をWinXPで使ってます。
ダイアログにCRichEditCtrlを張り付けて
タブオーダーを1にセットしたところ、DoModalで最初に表示されたときに
コントロール内のテキストが全て選択状態になってしまいます。
(OnInitDialogの最後でテキストをセット)
コントロールのSetWindowTextを使っても、SetSel(-1, -1)のあとに
ReplaceSelでテキストセットしても同じ現象を起こします。
テキストをセットした後にSetSel(0,0)などをしても直りませんでした。

とりあえずOnInitDialogで1秒後にコールされるようにタイマーをセットしておき
OnTimerでタイマー解除とSetSel(0,0)をしたところなんとか対策は出来ましたが、
他にOnInitDialogの後で選択状態を解除するスマートな方法はどんな方法がありますか?

841 :デフォルトの名無しさん:2006/03/22(水) 01:29:48
>>840
OnInitDialog()の段階では未だ表示されてないからねぇ。
タイマー使わなくても初回のOnIdle()で選択解除してもよさそうだけど。

842 :デフォルトの名無しさん:2006/03/22(水) 03:44:33
>>841
なるほどOnIdleという手もありますが、今回は
子ダイアログ(書き忘れましたが)なのと、モードレスダイアログ時でも
使えるようにメッセージでも試してみました。
1・子ダイアログのOnInitDialogの最後で親ダイアログにPostMessage
2・親ダイアログのWindowProcでメッセージを受信すると、子ダイアログにSendMessage
3・子ダイアログのWindowProcで応答メッセージを受信して、CRichEditCtrlのSetSel(0,0)実行

という具合です。結果は一応これでも出来ました。でもヘッダにメッセージを#defineするのと
両クラスのWindowProcで応答を書く手間を考えたらOnTimerの方がまだマシかも・・・

843 :デフォルトの名無しさん:2006/03/24(金) 03:40:18
ブラウザのお気に入りボタンのように、押すと新しいウィンドウを出して、
動的な分割ウィンドウっぽく表示したいのですがどうすればいいのでしょうか?
CSplitterWndだとOnCreateClient()内でしか呼べないようで生成できるタイミングが限られてしまうのですが。

844 :デフォルトの名無しさん:2006/03/24(金) 09:05:37
どれでも好きなやつを

Splitter Windows
http://www.codeproject.com/splitter/

Toolbars / Docking Windows
http://www.codeproject.com/docking/

845 :デフォルトの名無しさん:2006/03/24(金) 11:00:11
>>843
MFC 動的 分割でぐぐればヒットするがな。

846 :デフォルトの名無しさん:2006/03/24(金) 11:06:56
それだとほとんど動的分割にヒットしてしまう

847 :デフォルトの名無しさん:2006/03/24(金) 11:34:17
ダイアログベースのアプリでSetWindowText()しても、ダイアログのタイトルは直ぐに更新されますが、タスクバーの表示がリアルタイムで更新されません。
なにか、おまじないがあるのでしょうか?

OSはXP Pro SP2です。

848 :デフォルトの名無しさん:2006/03/24(金) 12:33:36
さあ?
別になんともない

849 :デフォルトの名無しさん:2006/03/24(金) 15:17:24
オブジェクトAがCString Data[256]を保持
オブジェクトBがオブジェクトAのDataのポインタを保持

こうしてオブジェクトAのDataの内容が変わるとオブジェクトBでもそれが
反映されるというようにしました。

この二つのオブジェクトをSerialize()関数をアップデートして、
シリアル化しファイルに保存しました。

これを読みこんで再び関連付けられた二つのオブジェクトを
再生成するにはどうしたらいいのでしょうか?

おそらく再生成されたオブジェクトAのDataのアドレスは
オブジェクトBの保持しているアドレスと変わってしまっているとおもうので。

あとポインタの指す先のオブジェクトのSeriarize関数を呼び出すには
どうしたらいいのでしょうか?

(CArchive)Arc<<(CObject*)pObj;
としたら
error C2678: 二項演算子 '<<' : 型 'CArchive' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。

のように表示されるのですが。

850 :デフォルトの名無しさん:2006/03/24(金) 15:24:41
読み込んだ後に オブジェクトB->Data = オブジェクトA->Data する。

851 :849:2006/03/24(金) 16:19:51
ということは
オブジェクト保存時に、
どれどれのオブジェクトのどのデータを参照する
という意味のポインタ(というかポインタ全般)は意味をなさないんですね。

上記以外で解決方法はありませんか?
ポインタ以外で参照先のデータを示す方法とか。




852 :デフォルトの名無しさん:2006/03/24(金) 16:33:35
独自形式

853 :851:2006/03/24(金) 16:36:50
独自形式っていうのは
アプリケーションで全オブジェクトの全データにIDかなんかをつけて
それを保持させるようなやり方ですか?

854 :デフォルトの名無しさん:2006/03/24(金) 16:48:07
ポインタ保存する意味が理解できない

855 :デフォルトの名無しさん:2006/03/24(金) 17:35:22
ポインタは意味がないってわかったんで
ポインタのようなものを保存したいんです。

オブジェクト間の関連を残したまま、
別々に保存するっていうのを。

無理みたいですけど。

856 :デフォルトの名無しさん:2006/03/24(金) 18:49:05
独自形式=そんな仕組みはないから自分でこさえろ
だと思うYO

857 :デフォルトの名無しさん:2006/03/24(金) 19:33:40
アルゴリズムとか一般的なプログラムの手法を勉強したほうがいいよ

858 :デフォルトの名無しさん:2006/03/25(土) 01:31:21
コピーしまくりで遅くなるけどCStringArrayじゃだめなのか?

859 :デフォルトの名無しさん:2006/03/25(土) 12:27:44
>>840
タブオーダが1番だからRichEditにフォーカスがきて選択状態になってるとか?

860 :843:2006/03/25(土) 13:11:37
>>844
>>845
遅ればせながらありがトン。
ググってもCSplitterWndばっかりで困ってたんです。
どうにも「ドッキング」てやつがやりたいことに近そうです。
キーワードに"ドッキング"をつけたらいい感じにでてきました。

861 :デフォルトの名無しさん:2006/03/25(土) 14:33:40
>>849
オブジェクトBにどういう働きをさせようとしてるのかいまいちわからないが・・・
そもそものこの表現が不明

>> オブジェクトAがCString Data[256]を保持
>> オブジェクトBがオブジェクトAのDataのポインタを保持
>>
>> こうしてオブジェクトAのDataの内容が変わるとオブジェクトBでもそれが
>> 反映されるというようにしました。

反映されるというか、単純にポインタ持ってるだけでしょ?

862 :デフォルトの名無しさん:2006/03/25(土) 14:34:35
つーことで、

保存時
オブジェクトAの値を保存
読み込み時
オブジェクトAを構築し、オブジェクトBにDataのポインタを渡す

オブジェクトBは保存する必要はない

863 :デフォルトの名無しさん:2006/03/25(土) 14:53:16
ああ、850で答え書いてるじゃん

>> オブジェクト間の関連を残したまま、別々に保存するっていうのを。
君が挙げた例だとそもそも関連を保存する必要もなく、後付で関連づけられるのだが。
例は別としてこういうことがやりたいってこと?

864 :デフォルトの名無しさん:2006/03/25(土) 16:11:06
仕様がまともじゃないんだから
考えるだけ無駄

865 :デフォルトの名無しさん:2006/03/25(土) 16:35:09
ポインタがおぼろげに見えてきたってんだから
教えようとすると先は長いぞ
本人がガンガレ

866 :デフォルトの名無しさん:2006/03/25(土) 16:36:40
もういいです。

867 :デフォルトの名無しさん:2006/03/25(土) 17:16:25
皆さん口先だけですね。

868 :デフォルトの名無しさん:2006/03/25(土) 19:27:49
そりゃ、金のひとつももらわないとな。口先だけでも赤字だ。


869 :デフォルトの名無しさん:2006/03/26(日) 10:18:57
>>868 がいい事言った。

870 :デフォルトの名無しさん:2006/03/26(日) 11:20:35
トリノは金ひとつでしたが不満でも?

871 :デフォルトの名無しさん:2006/03/27(月) 12:38:37
JavaやC++はクラスの使い方が解るぐらいでテンプレートは自信なし。
WindowsプログラミングはWin32でちょこっと。
COMやMFCやSTLは言葉は聞いた事あるけどいまいち理解しておらず。

こんな自分ですがMFCを覚えるのに良い本はありますか?


872 :デフォルトの名無しさん:2006/03/27(月) 12:45:08
MFC本買ったこと無い。自然に使えた。
MFCの範囲で作るんなら
STLやテンプレート要らんよ。


873 :デフォルトの名無しさん:2006/03/27(月) 16:48:27
ダイアログに画像を貼り付けて使っています。
その上にのせるコントロールの背景色を透明にして、コントロールの文字:白、背景:下地の画像としたいため、ダイアログの OnCtlColor() で
        pDC->SetBkMode(TRANSPARENT);
        pDC->SetTextColor(RGB(255, 255, 255));
        CBrush objBrs;
        objBrs.CreateStockObject(NULL_BRUSH);
        return (HBRUSH)objBrs;
としています。
スタティックテキストの背景を透明にする事は出来たのですが、ラジオボタンの背景が透明にならず、黒くなってしまいます。
色々調べると「スタイル適用時はラジオボタンの背景を透明には出来ないかも」とあったので、スタイル非適用に変えて確かめるとラジオボタンの背景は透明になっていました。
やっぱりラジオボタンの背景はスタイル適用時は透明にできないのでしょうか?

874 :873:2006/03/27(月) 18:03:06
ひとまずラジオボタン全てに SetWindowTheme() をかませて、
ラジオボタンのみビジュアルスタイルを適用しない、という逃げで
対応する事にしました。
お騒がせいたしました。

875 :840:2006/03/30(木) 08:22:24
>>859
そういうことなんでしょうが、その選択状態になった直後に解除することが出来なかったのでした。
・・・が、無事解決できますた。RichEditCtrlのOnSelChangeをオーバーライド(もちろん初期化時に
ENM_SELCHANGEフラグを登録)して、そのなかで最初の一度だけ実行するように
静的変数のフラグを用意して、そのフラグが立っているときだけSetSel(0,0)を実行すれば
よかったみたいです。


876 :デフォルトの名無しさん:2006/03/30(木) 15:12:57
VC6.0でMFCでダイアログベースで開発をしています。
スクロールバーのついた子ダイアログを描画用に作成したんですけど、
派生クラスを作って機能を追加したいんですが、どのように作成するのが一般的なんでしょうか。

877 :840:2006/03/30(木) 20:30:56
度々スマソ。OnSelChange()でもダメポ。
RichEditCtrlを初期化するときに SetOptions(ECOOP_OR, ECO_SAVESEL)
を使うのが正解だた。

878 :デフォルトの名無しさん:2006/03/31(金) 09:29:46
MFC ってこれからどうなっていくんだろう。
これからもメンテナンスされ続けるんだろうか。

879 :デフォルトの名無しさん:2006/03/31(金) 10:23:00
api使えれば使える
api使えないと使えない

880 :デフォルトの名無しさん:2006/04/03(月) 07:06:09
メインウィンドウとは別に CFrameWnd派生のウィンドウクラスを作って、
LoadFrame(IDR_xxx, WS_OVERLAPPEDWINDOW, NULL, NULL)
として、タスクバーに表示されるモードレスダイアログを実装してみた。

そのダイアログから、
AfxMessageBox(Message, MB_OKCANCEL|MB_DEFBUTTON2|MB_ICONQUESTION, 0);
を呼ぶと、メインウィンドウの中央にメッセージボックスが表示されてしまうんだが、
これをダイアログの中央にできないかな?


881 :デフォルトの名無しさん:2006/04/03(月) 10:00:42
MessageBox

882 :876:2006/04/03(月) 13:42:38
派生元のクラスでクラスウィザードが作成したafx_msgのついた関数の宣言にvirtualをつけたら
派生クラスで関数のオーバーライドができるようになったけど、これって一般的なやり方なんでしょうか?
初心者なんで自分のやり方が合ってるか間違ってるのかわかりません。

883 :デフォルトの名無しさん:2006/04/03(月) 17:02:00
派生先でオーバーライドしたいメッセージハンドラを登録するんじゃないの普通は。

884 :876:2006/04/04(火) 14:43:45
>>883 クラスウィザードでメッセージハンドラをつけることができませんでした。

派生先のクラスの作成するときに「クラスの新規作成」ダイアログで
クラスの種類に「Genericクラス」を選んでクラスを作成してました。
派生先のクラスの作成の仕方をこう変えてみました。
1.クラスウィザードで基本クラスがCDialogクラスのクラスを作成する。
2.クラスの宣言でClass xxxx : public CDialog ←ここを派生元のクラスに替える
これでクラスの継承っぽいことはできるようになりました。
派生クラスを作るときの一般的なやり方というものを知らないため、変な作り方になったのかも知れません。


885 :デフォルトの名無しさん:2006/04/05(水) 10:28:29
SAFEARRAY *p;
get_safearray(&p)
みたいにLPSAFEARRAYを返すAPIがあるんだけど、そのポインタって
そのままCOleSafeArrayに変換できるんでしょうか?


886 :デフォルトの名無しさん:2006/04/05(水) 11:53:09
「そのまま変換」はできない。

コンストラクタに渡せるので、要素の型も与えて、
COleSafeArray a(p, VT_UI1) とかする。
作成されるのはコピーなので、元のSAFEARRAYは
破棄すること。

コピーじゃなくそのまま納めて欲しいときには、

COleSafeArray a;
VARIANT v;
v.parray = p;
v.vt = VT_ARRAY | VT_UI1;
a.Attach( &v );
とか。

887 :885:2006/04/05(水) 14:45:23
>>886
サンクス、Attachでできた。
ASSERT(vt & VT_ARRAY)の意味を逆に取ってた。
VT_SAFEARRAYじゃなくてVT_ARRAYなんだね。
SAFEARRAYの配列の時にVT_ARRAY | VT_SAFEARRAYって感じで使うものなのかな。


888 :デフォルトの名無しさん:2006/04/07(金) 00:03:13
>>847
以前、タイトルバーに進捗率を表示する(SetWindowTextを連続的に呼ぶ)場合に
XP/2003で同じ現象を確認しました。

いろいろ試したところ、どうもSetWindowTextの呼び出し間隔が短い場合
(〜数10ms)に現象が発生するようです。詳しい原因や回避策(おまじない)に
ついては良く分かりません。

889 :デフォルトの名無しさん:2006/04/07(金) 06:24:24
そりゃぁ、タスクバーとしては一アプリの都合なんていちいち構ってられないしな。

890 :デフォルトの名無しさん:2006/04/10(月) 20:29:25
889はタスクバーの中の人

891 :デフォルトの名無しさん:2006/04/13(木) 01:24:41
APIの質問かもしれませんが、質問させてください。

あるアプリケーションのウィンドウクラスがマシンが違うと
Afx:400000:8:10013
Afx:400000:8:10011
というように、(コロンで区切って)4番目の値が変わります。
Afxで始まるのでMFCを使っていると仮定すると、4番目はLoadCursorの
戻り値だと思うのですが、なぜLoadCursorの戻り値がマシンによって変わるのでしょうか。


892 :デフォルトの名無しさん:2006/04/13(木) 01:42:28
そういう実装になっているから、としか答えられない。
ついでに言うと、カーソルハンドルはプロセス内で固有値になっていればいいので
同一マシンでもプロセスが違えば違うハンドル値になってもおかしくない。

893 :デフォルトの名無しさん:2006/04/13(木) 09:53:17
ダイアログベースのアプリを作りました。
そのダイアログからボタンクリックでモードレスダイアログを発生させ、交互に操作が可能です。

モードレスダイアログの方は、ダイアログを選択する度にダイアログは前に表示されますが、元々のダイアログの方は選択しても画面が前に来ません。

調べてみると、選択したときダイアログを前に表示するにはリソースエディタ上ではなく、リソースコードをいじる必要があるみたいですがそこから行き詰まってしまいました。

894 :デフォルトの名無しさん:2006/04/13(木) 11:02:33
なるほど。

895 :デフォルトの名無しさん:2006/04/13(木) 12:41:29
ザ・ワールド

896 :デフォルトの名無しさん:2006/04/13(木) 15:09:00
春の祭典

897 :デフォルトの名無しさん:2006/04/13(木) 15:28:19
ポロリもあるよ

898 :デフォルトの名無しさん:2006/04/13(木) 19:34:35
おまえら死ね

899 :デフォルトの名無しさん:2006/04/13(木) 23:53:38
>>893
CreateWindowの第2引数に、this を指定してて、親(Modal)より
前にいけんだけでは?
GetDesktopWindow()を第2引数に指定したらうまく動くと思われ。

900 :デフォルトの名無しさん:2006/04/14(金) 00:02:45
モードレスダイアログ2個たてるほうが楽な気がするなぁ

901 :デフォルトの名無しさん:2006/04/14(金) 15:17:25
画面分割で上下にわけて、
下っかわをCEditViewでつくってるんだけど
CEditViewに文字を表示する事ができないんですが、
CEditViewでthis->SetWindows("あああ");
とやっても表示されないんですが、どうやったらいいでしょうか。。。

どうやって表示すれば。。。

902 :デフォルトの名無しさん:2006/04/14(金) 15:24:52
SetWindowText

903 :901:2006/04/14(金) 15:28:01
あああ、みすです。
this->SetWindowText("あああ");
でできなかったです><

904 :デフォルトの名無しさん:2006/04/14(金) 15:30:24
this->SetWindowText(_T("あああ"));

905 :デフォルトの名無しさん:2006/04/14(金) 16:35:15
そのCEditViewは本当に表示されているの?
非表示になってたり、領域外に隠れちゃってるとかはない?

906 :デフォルトの名無しさん:2006/04/14(金) 16:48:59
GetEditCtrl

907 :デフォルトの名無しさん:2006/04/14(金) 17:29:00
質問です。
メンバ変数を参照、代入するときに自動的にget,set関数を
呼び出してアクセスしたいんですけど、
どうやるんでしょうか?

908 :デフォルトの名無しさん:2006/04/14(金) 17:30:34
本日は超能力者が出払っております。
日を改めてお越しください。

909 :デフォルトの名無しさん:2006/04/14(金) 17:32:56
>>907
C++, MFC にはそのような機能はない。
BCBにはあったような気がする。

910 :エスパー3級:2006/04/14(金) 17:35:00
>>907
メンバ変数をその変数を管理するクラスに置き換えりゃ良いんじゃないの?

911 :デフォルトの名無しさん:2006/04/14(金) 17:48:53
プロパティシートのウイザードモードでラジオの選択肢によって
次へ進むボタン押すと表示されるページを分岐できますか?

912 :デフォルトの名無しさん:2006/04/14(金) 18:09:35
>>907
__declspec( property(...) )
非標準だけど。

913 :デフォルトの名無しさん:2006/04/14(金) 18:13:23
>>908-909はまだ未熟だな。答えるにはまだ早い。

914 :デフォルトの名無しさん:2006/04/14(金) 18:48:09
ここはMFC相談室

915 :デフォルトの名無しさん:2006/04/14(金) 18:52:24
>>911
すげーラジオ作ってんの?

916 :デフォルトの名無しさん:2006/04/14(金) 18:57:56
ラジオぐらい作れるだろ
もちろんラ製とトラ技は読んでるだろうし

917 :デフォルトの名無しさん:2006/04/14(金) 19:32:16
ラジオボタンじゃないか

918 :デフォルトの名無しさん:2006/04/14(金) 19:41:46
それぐらいできないとウイザードモード使う意味がないな

919 :デフォルトの名無しさん:2006/04/14(金) 20:35:57
アプリの最大化領域の制限について質問です。

画面いっぱいを使って、自作の2つのアプリを上下で表示させています。
(下に「ソフトキーボード」プログラムを表示させ、その上に「業務アプリ」を表示)

業務アプリ(やその他のアプリ)の最大化実行時に、
ソフトキーボードを除いた領域で最大化させたいのですが
どうすればよいでしょうか?

「ソフトキーボード」がグーグルのサイドバー的な立場になればよい
ようなきがしますが…


920 :デフォルトの名無しさん:2006/04/14(金) 21:17:31
OnWizardNext

921 :デフォルトの名無しさん :2006/04/15(土) 14:08:00
ダイアログボックスのeditboxの背景色を変更できません。
教えてください。

922 :デフォルトの名無しさん:2006/04/15(土) 15:22:01
マジレスすると、ラジオとラジオボタンは違う。
ラジオのボタンってのもある。

923 :デフォルトの名無しさん:2006/04/15(土) 15:39:25
>>921
好みの色のサングラスを買って来い

924 :デフォルトの名無しさん :2006/04/15(土) 16:32:20
うお

925 :デフォルトの名無しさん :2006/04/15(土) 16:34:51
MFCのエディットってプロパティで変更できないですね
OnCtlColor使う方法がありましたがうまく変更されないです。

926 :デフォルトの名無しさん:2006/04/15(土) 16:37:32
WM_CTLCOLOREDIT
WM_CTLCOLORSTATIC

927 :デフォルトの名無しさん:2006/04/15(土) 17:32:25
フォント、文字色、背景色、複数行の背景色、
全部やると結構めんどくさいな

928 :デフォルトの名無しさん :2006/04/15(土) 18:08:28
入力チェックの時にエラーのあったコントロールの色だけを変えたいのですが
その場合はどのタイミングがいいですか?

929 :デフォルトの名無しさん:2006/04/15(土) 18:39:47
作る人と使う人の好みの問題

930 :デフォルトの名無しさん:2006/04/15(土) 19:04:09
入力チェックしたとき

931 :デフォルトの名無しさん:2006/04/16(日) 16:14:48
MFCでアプリを作りました。
リンクする外部ライブラリで、
結果を stdout、stderr に出力するものがあるのですが、
これをアプリで受け取るにはどうすればいいでしょうか?

MFCアプリだと、stdout、stderr が閉じられているのか、
NULL参照になります。


932 :デフォルトの名無しさん:2006/04/16(日) 16:32:31
コンソールアプリでMFCを使う設定にすればいい

933 :931:2006/04/16(日) 16:34:25
>>932

普通の Windows アプリで、ライブラリの出力はコンソールに吐くんじゃなくて
アプリ側で受け取りたいんだけど。

934 :デフォルトの名無しさん:2006/04/16(日) 16:54:56
コンパイラみたいなコンソールアプリをWindowsアプリから呼んで使う場合は
stdin stdout stderrで受け渡しするわけだけど
それと同じだろ

935 :デフォルトの名無しさん:2006/04/16(日) 17:09:12
freopen?

936 :デフォルトの名無しさん:2006/04/16(日) 17:49:01
>>933

パイプ作って、stderrを置き換える。


937 :デフォルトの名無しさん:2006/04/16(日) 22:25:48
>>931
方法としてはすでにレスがついている通りパイプを作ってその
ライブラリの出力(stdout,stderr)を受けてやる。
パイプからのデータ読み出しにはReadFileを使う。
ここの説明がわかりやすいんじゃないかな。
ttp://nhiro4.ld.infoseek.co.jp/program/windows/pipe.html

938 :931:2006/04/17(月) 22:55:41
>>936

stderr を置き換えるところがよくわからんかった。
パイプを作って、SetStdHandle で stderr に設定してみたんだが、
stderr に fprintf してみても、パイプから読み出せなかった。

>>937

別プロセスなら楽なんだが、Windowsアプリが自分の stderr を作って、
それを読み出す方法がわからないんだ。

939 :デフォルトの名無しさん:2006/04/17(月) 23:07:07
すでにMFCと関係ないし

940 :デフォルトの名無しさん:2006/04/18(火) 12:00:11
>>938
だったら別スレッドでその外部ライブラリとやらを呼び出せばいいだろうに。

941 :931:2006/04/19(水) 12:58:59
>>940

Windowsサブシステムのexeファイルなので、
そもそも stdout、stderr がないわけだ。
その、stderr を自分でつくるところではまってるんだが。
別スレッドとかいう問題ではない。

942 :デフォルトの名無しさん:2006/04/19(水) 13:12:00
だから、MFCと関係ないでしょって。

943 :デフォルトの名無しさん:2006/04/20(木) 00:28:33
>>941
よく調べれば、MSDNに乗っていたはず。
つーか、俺、昔やったことあるし。

944 :デフォルトの名無しさん:2006/04/20(木) 12:36:49
_AfxDispatchCmdMsgのなかで

(pTarget->*mmf.pfn_COMMAND)();
を呼ぶとON_COMMANDに登録したメンバ関数に飛ぶのはpTargetがメンバ関数のthisになってるから
だろうけどこれはC++的に正しいの?それともMFCだけの拡張(実装依存?)なの?

945 :944:2006/04/20(木) 13:10:34
すまん、自分で調べたら実装依存だった
AfxFindMessageEntryで関数ポインタテーブル(?)から検索するときにインラインアセンブラで書いてあるところまで追っかけれた
すまそ

946 :デフォルトの名無しさん:2006/04/20(木) 22:53:42
 画面上に複数(不定)の線を描くために、始点と終点、線の色をまとめた構造体
の配列を作って、描画部分を書いていたのですが、うまくいきませんでした。

// 構造体
typedef struct _LINEPROT{
  POINT    poFrom;
  POINT    poTo;
  COLORREF  LineColor;
} LINEPROT, *LPLINEPROT;

// 失敗部分(抜き出し)
LINEPROT m_LineList[10];
CPen cpLine, *pPenOld;
for(uiCnt = 0; uiCnt < 10; uiCnt++){
  // ペンの色を指定
  cpLine.CreatePen(PS_SOLID, 1, m_LineList[uiCnt]->LineColor);   //ここでASSERT

  pPenOld = pDC->SelectObject(&cpLine);
  pDC->MoveTo(m_LineList[uiCnt].poFrom);
  pDC->LineTo(m_LineList[uiCnt].poTo);

  pDC->SelectObject(pPenOld);
  cpLine.DeleteObject();
}
 色の変更をもくろんでこういう書き方にしてみたのですが、CreatePen()のところでASSERT。
ループ外でCreatePen()して固定色で書く事は成功しているので、抜き出し範囲外の問題
では無いと思います。
 上のようなことをやろうとする場合、どのような書き方が正しいのでしょうか?

947 :デフォルトの名無しさん:2006/04/20(木) 23:08:26
わざわざASSERT出して原因教えてくれてるのに
なぜか読もうとさえしないんだよな

948 :デフォルトの名無しさん:2006/04/20(木) 23:30:43
>947
ヘタレなのと英語読めないのとで、適切な手段思い浮かぶより前に
時間切れになってしまいまして orz

949 :デフォルトの名無しさん:2006/04/21(金) 14:33:57
初めてこれを使わなければいけなくなったんですが
皆さんどんな本で・もしくはサイトで?勉強しました?
よろしければ分かりやすい本など教えてください。
ド素人なのでスレ違いでしたらすみません。

950 :デフォルトの名無しさん:2006/04/21(金) 14:35:37
いや、スレ違いではなく存在自体が間違い。

951 :デフォルトの名無しさん:2006/04/21(金) 14:37:26
そこまでですか…
すみませんでした。

952 :946=951:2006/04/21(金) 14:38:57
上のは私です。連投すみません。
出直してきます。

953 :デフォルトの名無しさん:2006/04/21(金) 14:39:19
推薦図書/必読書のためのスレッド PART30
http://pc8.2ch.net/test/read.cgi/tech/1141805746/l50


954 :946:2006/04/21(金) 14:43:53
>>953
こんなスレあったんですね。
テンプレにMFCのこともありましたしかなり助かりました。
ありがとうございます。

955 :デフォルトの名無しさん:2006/04/21(金) 17:48:06
SDIでViewにコントロールをクリエイトしたいのですが
どこに書けばいいんでしょう?

OnDrawだと再描画時にエラーになってしまうんですが。

956 :デフォルトの名無しさん:2006/04/21(金) 17:58:55
OnInitialUpdateはどう?

957 :デフォルトの名無しさん:2006/04/21(金) 18:00:34
ViewにOnInitialUpdateがありませーん。
SDIだから?
どうしよ。

958 :デフォルトの名無しさん:2006/04/21(金) 18:02:36
無いって…

959 :デフォルトの名無しさん:2006/04/21(金) 18:56:36
ろくに勉強もしないでいきなり作ろうとしたって壁にぶち当たるぞ
基礎ぐらいちゃんとやっとけ

960 :デフォルトの名無しさん:2006/04/22(土) 17:29:46
MFCでVisualStudio2005にあるメニューバーやツールバーなど、
マネージコードで使えるようなコントロールはどうすればできますか?
基本クラスから独自に派生していちいち作らないとだめなのでしょうか?


961 :デフォルトの名無しさん:2006/04/22(土) 17:47:41
>>960 無理。
MFC のプロジェクトを /clr:pure でビルドするつもり?


962 :デフォルトの名無しさん:2006/04/22(土) 18:38:09
そういうの使いたかったらさっさと引越し引越し

963 :デフォルトの名無しさん:2006/04/23(日) 15:29:44
MFCでファイルを圧縮するクラスまたはメンバはあるのでしょうか?


964 :デフォルトの名無しさん:2006/04/23(日) 16:12:42
expressでソリューションのビルドを
したんですが、実行ファイルは何処にできてるんでつか
あと、フォームのコマンドボタンを押したときの
 コードはふぉーむのとこにしかかけないんでつか
おしえてください。

965 :デフォルトの名無しさん:2006/04/23(日) 16:19:44
expressでMFCでフォームなんだ
へぇー

966 :デフォルトの名無しさん:2006/04/23(日) 16:36:58
>>964 ここMFCのスレですよ?

967 :デフォルトの名無しさん:2006/04/23(日) 16:54:15
MFCとATL無しで頑張ります。ありがとうございました。

968 :デフォルトの名無しさん:2006/04/23(日) 21:12:10
お前ら冷たいな
MFCぐらい買ってやれよ

969 :デフォルトの名無しさん:2006/04/23(日) 21:17:09
>>968
お前「ら」?
買ってやれ?

どういう流れそういうレスをつけたのかわからん
MSDNよりわからん

970 :デフォルトの名無しさん:2006/04/25(火) 12:01:32
ここでいいのかな。質問させてください。
エクスプローラみたいなものを作っています。
縮小版表示アイコンを表示させたいです。
画像のサムネイル表示は出来ましたが、画像以外ファイルのアイコンを
エクスプローラで表示されているような、
黒枠の中に小さいアイコンがぽつんとあるアイコンが取れません。
32×32のアイコンを引き伸ばして表示することは現在可能です。
IExtractImage, IExtractIcon, SHGetFileInfoなどつかいましたが同じ状況です。
開発環境はWin2000, VC++6.0です。

971 :デフォルトの名無しさん:2006/04/25(火) 12:17:03
なんだろね
アイコン持ってないファイルのアイコン表示?
MFCとかんけあるかな?

972 :デフォルトの名無しさん:2006/04/25(火) 12:56:11
無いよ

973 :デフォルトの名無しさん:2006/04/25(火) 12:59:42
どこのスレできけばいいでしょうかね?

974 :デフォルトの名無しさん:2006/04/25(火) 14:07:49
Win32API質問箱 Build42
http://pc8.2ch.net/test/read.cgi/tech/1144962549/

975 :デフォルトの名無しさん:2006/04/25(火) 14:09:30
>974
ありがとうございました。

976 :デフォルトの名無しさん:2006/04/25(火) 14:16:26
>>977
ありがとうございました。

977 :デフォルトの名無しさん:2006/04/25(火) 14:32:12
どういたしまして。

978 :デフォルトの名無しさん:2006/04/25(火) 23:52:23
libファイルを作成するプロジェクトにリソースファイルを追加して、ダイアログボックスを表示させるメソッドを作成しました。
実行ファイルを作成するプロジェクトのほうで上記のメソッドを実行してもダイアログボックスが表示されないんですけど(DoModal()の戻り値が-1になる)、どうすればよろしいのでしょうか。

979 :デフォルトの名無しさん:2006/04/26(水) 01:15:59
リソースってlibに入れられなかったような希ガス

980 :デフォルトの名無しさん:2006/04/26(水) 13:12:29 ?
どうしてもリソースを分離したかったらdllにしてLoadResource。

981 :デフォルトの名無しさん:2006/04/27(木) 02:57:34
VisualStudio2005ではWindowsフォームプロジェクトの
デザインでコントロールを移動すると、たて横に線が表示され、
均等な配置ができますが、MFCプロジェクトのダイアログエディタでは
何もでないので調整が難しいです。

これはどうにかならないのでしょうか?


982 :デフォルトの名無しさん:2006/04/27(木) 08:10:39
どうにでもなる

983 :デフォルトの名無しさん:2006/04/27(木) 08:32:50
どうにでもして

984 :デフォルトの名無しさん:2006/04/27(木) 12:49:26
>>981
Win32アプリでリソースファイルをテキスト編集使ったことない?
猫も使ったことない?
なんたら.rcをコピーして.txtに変換して、テキストでメタ数値で編集
そして、.rcに戻して、プロジェクトに吸い込むんだよ
MFCというかVCの基本

985 :デフォルトの名無しさん:2006/04/27(木) 12:55:37
>>984
素朴な疑問なんだが、何で又一々変換なんかするんだ?
普通に*.rcを編集すればいいと思うのだが。

986 :デフォルトの名無しさん:2006/04/27(木) 12:56:13
> .txtに変換
初耳だ。

987 :デフォルトの名無しさん:2006/04/27(木) 12:56:55
VBのようにスナップ・グリッド使うわけでもなし
ターゲット(たて横に線)の重なりで調整じゃ
コントロールの正確な位置決めできてないな



988 :アマグラマ:2006/04/27(木) 12:59:31
>>986
.rcを.txtに変換して開いてからレスヨロシク

989 :デフォルトの名無しさん:2006/04/27(木) 13:04:51
普通やらないめんどうな方法しか教えないのはわざとですか?
それともマジでそうやってる?

990 :985:2006/04/27(木) 13:09:17
>>989
少なくとも漏れはグリッドを設定してそれを使って位置調整しているが。
でもコピペした部品の調整やら大量の部品の順序変更は*.rc直接編集だな。

991 :アマグラマ:2006/04/27(木) 13:14:58
>大量の部品の順序変更
タブオーダという言葉くらい使って欲しい

992 :デフォルトの名無しさん:2006/04/27(木) 13:16:56
>>981
ん?6.0 にも 2003 にもあったグリッドが 2005 ではなくなったの?
>>984
ん?6.0 でも 2003 でもテキストファイルだった .rc が 2005 ではバイナリなの?

993 :デフォルトの名無しさん:2006/04/27(木) 13:22:25
>>988
やってみたけど、理解不能です

ソリューションエクスプローラーの.rcを右クリックでコードの表示とどう違うの?

994 :985:2006/04/27(木) 13:24:05
>>991
んじゃ、大量の部品のタブオーダの変更ってことで。
#数点ならダイアログエディタでやっちゃうよっと。

995 :デフォルトの名無しさん:2006/04/27(木) 13:30:11
>ソリューションエクスプローラーの.rcを右クリックでコードの表示

2005にはその機能が追加されてるんですか。6.0には無かった。

996 :デフォルトの名無しさん:2006/04/27(木) 13:37:26
ちなみに、6.0でプロジェクトフォルダから右クリックでアプリケーションから開く>メモ帳でやって
変更して保存するやり方だと、
何故か、プロジェクト上の.rcアイコンが.txtのアイコンになってしまう。
だから、コピーして.txtで変更しておいて、.rcに戻して吸い込んだほうがよい

997 :デフォルトの名無しさん:2006/04/27(木) 13:47:25
>>993
2003にも無かった

998 :デフォルトの名無しさん:2006/04/27(木) 13:57:41
元がfoo.rcならフォーー.txtにでも変えておいて、
それで数値で編集して、foo.rcに戻してやるのがよいと思う。

999 :デフォルトの名無しさん:2006/04/27(木) 14:05:55
VC5の頃から(たぶんもっと前から)
ファイル-開く
からなら、テキストファイルとして開けるわけだが。

1000 :デフォルトの名無しさん:2006/04/27(木) 14:16:47
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

252 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)