■MFC相談室 mfc15d.dll■
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/11/14(月) 18:01:44前スレ
■MFC相談室 mfc14d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1121200124/l50
0002デフォルトの名無しさん
2005/11/14(月) 18:02:310003デフォルトの名無しさん
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コレクションの唯一のメリットといえば、
> シリアライズがちょびっと楽なことくらいでしょうか。
0004前990
2005/11/14(月) 18:17:23CStringList部分をそのままにしてまつ。
でも、どれを積極的に使うべきかわからないですね。
いっそ、文字列リストはSTL?
00053
2005/11/14(月) 19:06:23CStringArray と CArray<CString,CString&> の違い分かる?
0006前990
2005/11/14(月) 19:07:330007デフォルトの名無しさん
2005/11/14(月) 21:42:04メッセージが捕まえられるのですが、リンクから外れたときは
どうやって判断すればいいんでしょうか?
0008デフォルトの名無しさん
2005/11/14(月) 23:25:53「クラスを追加」で追加したのですが、「完了」ボタンを押下しても
何の反応もありません…。
何か手順に問題ありますでしょうか…?
0009デフォルトの名無しさん
2005/11/15(火) 11:18:23リストビューで選択状態になっているファイルの総容量を
ステータスバーに表示したいです。
リストビューのアイテムの選択状態が変わったことを
知る方法があれば教えてください。
0010デフォルトの名無しさん
2005/11/15(火) 13:29:56ItemDataにそのファイルのサイズか
サイズの入った構造体のポインタを1つずつ入れといて
Lボタンダウンかアップで
GetNextItem(index, LVNI_ALL |LVNI_SELECTED)
を使って選択状態のitemをGetItemDataして加算して表示してみるとか
0011デフォルトの名無しさん
2005/11/15(火) 18:29:12001211
2005/11/15(火) 18:41:270013デフォルトの名無しさん
2005/11/15(火) 18:46:52CBitmapButton クラスでは、ラベルがテキストではなくビットマップ
イメージのプッシュ ボタン コントロールを作成できます。CBitmapButton
オブジェクトは、最大 4 つのビットマップを持ちます。それぞれの
ビットマップのイメージは、ボタンの状態を示します。つまり、ボタンが
押されていない (通常) 状態、押された (選択された) 状態、フォーカスを
得た状態、無効な状態の 4 つです。通常の状態を表すビットマップは
必要ですが、その他のビットマップは省略できます。
001411
2005/11/15(火) 19:05:56IDEでペタペタ貼り付けたり、できるんでしょうか?
001511
2005/11/15(火) 19:24:07VC++でCBitmapButtonをCDialogに貼る方法が、
分かりません。
001613
2005/11/15(火) 19:27:58ActiveX コントロールの [Microsoft Forms 2.0 CommandButton] でも
画像を貼れるが無効にすると灰色になる。
001711
2005/11/15(火) 19:29:24001813
2005/11/15(火) 19:36:41CBitmapButtonはCButtonの派生クラスなんだから、
サブクラス化してごにょごにょしたらいい。
00197
2005/11/15(火) 21:23:20GetSelectionCharFormatでLINKのフラグ調べて何とかできました。
00219
2005/11/16(水) 04:10:32最近も同じ質問があったとは思わず申し訳ない。
0022デフォルトの名無しさん
2005/11/16(水) 08:40:41ごめん、自分MFC初心者なので、クラス派生なら分かるんだけど、
MFCで逝うサブクラスって何を指すか分からないんだ。
MFC特有が悪いだけじゃなくて、サブクラスって人によって、
「派生」を指したり「メンバ」を指したり、曖昧だおね。
002313
2005/11/16(水) 08:50:39「サブクラス化」で一つの用語。
例えば、ダイアログに貼った元の CButton に、
(CButton のサブクラスである)CBitmapButton の機能を持たせるイメージ。
> MFC特有が悪いだけじゃなくて、サブクラスって人によって、
> 「派生」を指したり「メンバ」を指したり、曖昧だおね。
メンバを指す場合なんかある?
0024デフォルトの名無しさん
2005/11/16(水) 09:18:45002524
2005/11/16(水) 09:28:111.IDEでCButtonを貼る
2.ソースの宣言をCBitmapButtonに変更
3.OnInitDialog()で.SubclassDlgItem
で、おk?
002624
2005/11/16(水) 09:37:56を見ると、25の手順でヨサゲとなので、やってみようと思います。
ところで、上サイトではCButtonをCBitmapButtonにサブクラスという感じですが、
PushButtonでも可能ですか?
今貼ってるのがPushButtonなのでそのままやってみようかな、と思ってます。
0027デフォルトの名無しさん
2005/11/16(水) 09:37:592.IDEでコントロール変数をCBitmapButtonクラスで宣言
は、どう?
002924
2005/11/16(水) 09:55:50IDEではPushButtonなのに、ヘッダーではCButtonになってるし、実装部でもインスタンス差し替えも無い。。。
MFCって結構不思議じゃない?
003024
2005/11/16(水) 10:24:59.AutoLoadするとエラーになるし。。。
.SubclassDlgItemとか色々メソッドコールしないといけないのかなぁ?
003124
2005/11/16(水) 10:37:22.SubclassDlgItemしなきゃならない局面てどいうときだろう。
003213
2005/11/16(水) 11:00:001. ダイアログにボタンを貼る。
2. CBitmapButton派生のクラスを作る(例えばCBmpBtnとか名付ける)。
3. 1.のボタンを右クリックして[変数の追加]。
メンバ変数の追加ウィザードが出るので、
変数の種類をCButtonから(自作の)CBmpBtnに書き換える。
これもSubclassDlgItemは不要。
003313
2005/11/16(水) 11:10:21ボタンのプロパティで[オーナー描画]を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
0034デフォルトの名無しさん
2005/11/16(水) 11:25:31何だか難しいね。
絵でもあれば良いんだろうけど、M$DNも文字ばかり。
0035デフォルトの名無しさん
2005/11/16(水) 15:17:07が、フォーカスを受け取った場合はほっといて良いとして、
ボタン押した瞬間の画像も作らないといけなくなるかも知れません。
それって簡単に作れるのでしょうか?
それともCBitmapButtonの設定で押されたとき、へこむイメージになったりするのでしょうか?
0036デフォルトの名無しさん
2005/11/16(水) 15:22:020037デフォルトの名無しさん
2005/11/16(水) 15:35:320038デフォルトの名無しさん
2005/11/16(水) 15:48:00手を動かさなくても、設定でへこむイメージにする方法きぼんゆ。
003937
2005/11/16(水) 16:00:39> class CBitmapButton : public CButton
0040デフォルトの名無しさん
2005/11/16(水) 17:26:00ステイタスバーを表示したのはいいものの
これを 非表示/表示 切り換えるにはどうしたらいいのでしょう?
0041デフォルトの名無しさん
2005/11/16(水) 17:29:410042デフォルトの名無しさん
2005/11/16(水) 17:47:42その後にTextOutコールしてますが、その文字が描画されない場合があります。
画面全体がリフレッシュする場合は問題無いのですが、
例えばエクスプローラを被せて、マウスでスライドした場合等、
BitBltは動作しますが、TextOutが忘れられる場合があるようです。
どうしたら良いでしょうか?
004342
2005/11/16(水) 18:04:24そんなイベントありますか?
004442
2005/11/16(水) 18:27:34004513
2005/11/16(水) 18:47:53フォーカスも用意しておかないと
タブキーを押したときにフォーカスがどこにいくか分からないし、
スペースキーを押したときにどのボタンが押されるか分からない。
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 );
なんてのもある。
0047デフォルトの名無しさん
2005/11/16(水) 18:57:050048デフォルトの名無しさん
2005/11/16(水) 19:09:39004942
2005/11/16(水) 19:14:41台紙のDialogのWM_PAINTで上のDialogにRedrawWindowコールで解消しました。
でも、画面チラチラします。
0050デフォルトの名無しさん
2005/11/16(水) 19:15:511枚のビットマップから、残りの3種類のビットマップを生成出来るようなツールは無いんでしょうかね?
005113
2005/11/16(水) 19:26:49ボタン、チェック、ラジオ、閉じる、最大化、最小化、スクロールバー、メニューのマーク、など
指定した種類とスタイルでフレーム コントロールを描画します。
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 背景を触らずに残す
0052デフォルトの名無しさん
2005/11/16(水) 19:47:180053デフォルトの名無しさん
2005/11/16(水) 20:06:29CView派生クラスを使う
0054デフォルトの名無しさん
2005/11/16(水) 21:51:330055デフォルトの名無しさん
2005/11/16(水) 21:56:48MFCじゃないから他いけ
0056デフォルトの名無しさん
2005/11/16(水) 21:59:12やだ
0057デフォルトの名無しさん
2005/11/17(木) 03:36:59自分でOnVScrollに
switch( SBCode )
{
case SB_DOWN......
}
とか書かないと駄目ですか?
上のように書いてみて動いたものの、汚いしソース長くなるし、別のScroll使ったVIEWつくったときコピペするのがいやなんです。
CScrollViewは使いたくないのです。
0058デフォルトの名無しさん
2005/11/17(木) 08:02:18CScrollViewもCViewもソースがあるんだし。
0059デフォルトの名無しさん
2005/11/17(木) 11:45:57後からヘッダーファイルのクラス名変えれるということは、
位置あわせのとりあえずコントロール貼りだと思えば良いのでしょうか?
0060デフォルトの名無しさん
2005/11/17(木) 13:44:03mfcになれないってのもあって苦労してます。
一番困ってるのが処理速度なんですが
フラクタルという性質上ランダムウォークさせたり
10万回とかのループも多いのですが
なにより描画にものすごく時間がかかります。
高速化を考えているのですが一番気を使うべきところってどこでしょうか?
抽象的な質問で申し訳ありませんが相談乗ってほしいです。
0061デフォルトの名無しさん
2005/11/17(木) 15:38:02何を描画してるのか・どうやって描画してるのかも書かずに、何を答えろと言うのか?
0062デフォルトの名無しさん
2005/11/17(木) 15:46:420063デフォルトの名無しさん
2005/11/17(木) 16:40:50その後の印刷関係の操作でassartがでてしまいます。
現在のプリンタをappのGetPrinterDeviceDefaultsで
取得してCPageSetupDialogにセットしています。
いろいろ検索してみましたが見つかりません。
知っている人がいれば原因を教えてください。
0064デフォルトの名無しさん
2005/11/17(木) 16:52:40assertが出たのならそのメッセージ貼れや
0065sage
2005/11/17(木) 17:00:31appprnt.cpp 42行
MFCのソースは、
LPDEVNAMES lpDevNames = (LPDEVNAMES)::GlobalLock(m_hDevNames);
ASSERT(lpDevNames != NULL);
です。
appのm_hDevNamesのハンドルが壊れているようです。
なぜ壊れてしまうんでしょうか
0066デフォルトの名無しさん
2005/11/17(木) 17:40:16006763
2005/11/17(木) 17:46:44Viewのコマンドを追加して以下の文を書くだけでも発生しました。
ちなみに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();
0068デフォルトの名無しさん
2005/11/17(木) 18:10:03CPageSetupDialogコンストラクタのヘルプサンプル見てみろ
006963
2005/11/17(木) 18:17:26つけて見るとSelectPrinter内で同じようなassartが出ました。
他に何か必要でしょうか?
0070デフォルトの名無しさん
2005/11/17(木) 18:23:09無効なハンドルを解放しようとしてエラーになる。
0071デフォルトの名無しさん
2005/11/17(木) 18:24:20007263
2005/11/17(木) 19:05:44前のハンドルはCPageSetupDialogの中で開放しているのでしょうか?
ヘルプとの違いも気になりますが・・・。一応少し調査してみます。
0073デフォルトの名無しさん
2005/11/17(木) 19:16:09まあ、あのダイアログからプリンタ変えられるから無理もないんだけど。
0074デフォルトの名無しさん
2005/11/17(木) 23:40:283つのビューをスプリッタで分割して表示しているのですが、そのうち2つのViewでGetDocument()が失敗します。
成功するViewはMFCウイザードでデフォルトで作られるViewで、あとの2つは自分で追加したViewです。
どうしたら他のviewでもGetDocumentが使えるようになるのでしょうか。
0075デフォルトの名無しさん
2005/11/17(木) 23:45:11CDocumentと関連付けていなければNULLは返るが。
0076デフォルトの名無しさん
2005/11/18(金) 00:13:29おっしゃるとおりでした。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);
}
いったい何が悪いのでしょう。
007776
2005/11/18(金) 01:39:18GetDocument()を呼び出したCViewのインスタンスがそもそも無効なオブジェクトでした。
だから失敗したんですね。
スレを汚してすみません。
0078デフォルトの名無しさん
2005/11/19(土) 18:13:27IDR_MAINFRAMEの
ファイル(&N),編集(&E)等にはIDは割り当てられていないようなのですが、
IDはないのでしょうか?
0079デフォルトの名無しさん
2005/11/19(土) 18:34:26UINT(-1)になってた。
ルートメニューの検索ためにこうなってるのかな...
0080デフォルトの名無しさん
2005/11/19(土) 19:04:32ポップアップにしない
0081デフォルトの名無しさん
2005/11/19(土) 20:16:43ヘッダなどあらゆる場所から AFX_IDS_ で始まる ID を探してみな。
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_mfc_standard_command_and_window_ids.asp
0082デフォルトの名無しさん
2005/11/20(日) 01:09:01なるほど
「指定された項目がポップアップ メニュー (ポップアップ メニュー内の項目ではなく) の場合は、-1 を返します。」
ポップにするとUINT(-1)になるのか...
>>81
みてみましたが、ポップアップの場合のIDは見あたりませんでした。でも、参考になりました。
ポップアップの項目を見つけるの場合は
メニュー内をトラバースして文字列照合することにしました。
ありがとうございました。
0083デフォルトの名無しさん
2005/11/20(日) 06:18:52自アプリのツールバーをCToolBarで作る際、
googleツールバーやMSNツールバーみたいに、
画像のみのボタンで、大きさが違うものって作れますか?
大きな画像を貼ろうとすると、全てのボタンが大きくなってしまうんですよね…。
0084デフォルトの名無しさん
2005/11/20(日) 10:20:34それが嫌ならCDialogBarで自作しろ。
0085デフォルトの名無しさん
2005/11/20(日) 11:45:17ツールバーボタンではなく、コンボボックスをツールバーに持たせる要領で独自のボタンコントロール貼れ
0086デフォルトの名無しさん
2005/11/20(日) 14:15:05よく見てみるとこのDLLにはCWinAppクラスとそのインスタンスがありました。
このDLLをクライアントアプリケーションに動的にリンクした場合、
CWinAppが2つ、つまりプライマリスレッドが2個できてしまうと思うのですが、そうなのですか?
0087デフォルトの名無しさん
2005/11/20(日) 15:53:290088デフォルトの名無しさん
2005/11/21(月) 01:07:19日本語->英語
に変更すると エディタで*.rcファイルみると
単に ?で置換されてるようにみえるけど
英語->日本語
に戻すと文字列が復元されてるようなんだけど
rcファイル以外のどこかに保存されてるのかな?
0089デフォルトの名無しさん
2005/11/21(月) 01:18:34rc をコンパイルしたのが aps にキャッシュされるんじゃないかな。
キャッシュを消して言語を変えるとどうなるか報告よろしくな。
009088
2005/11/21(月) 01:32:12thx.
apsファイルを削除したところ、見事
置換された?が表示され、文字列は復元されませんでした。
apsから復元してたのか...
MSDN引用
「filename.aps
現在のリソース スクリプト ファイルのバイナリ形式。このファイルは読み込みを高速化するために使用されます。 」
0091デフォルトの名無しさん
2005/11/21(月) 01:36:05IDD_DIALOGXXが定義されていませんというコンパイルエラーが出ます
しかしこれはリソースエディタで定義済みのはずで、今までずっとこのリソースを使ってコンパイルが通っていました。
これまで2回あり、何かの拍子に突然未定義になるのです。
こうなると自分で#define IDD_DIALOGXXと定義しなければコンパイルできません。
リソースエディタを見るとちゃんとIDD_DIALOGXXが入っていて、しかもフォームエディタで作った通りのダイアログが作成できます。
VCのバグでしょうか?
0092デフォルトの名無しさん
2005/11/21(月) 01:49:21お前の頭のバグ。
・resource.hにIDD_DIALOGXXを定義しろ。
・resource.hを書き換えたらリビルド(クリーン+ビルド)しろ。
・何でもかんでもVCのバグのせいにするな。
0093デフォルトの名無しさん
2005/11/21(月) 01:57:57なんとcppでResource.hをインクルードするまえにダイアログのヘッダをインクルードしてました。
基本的なことでおさわがせしてすみまんお(^ω^;)
009486
2005/11/21(月) 02:03:10エクスポートされた関数の内部でAfxGetAppするとクライアントAPのtheAppではなくDLLのtheAppがとれました。
デバッガでとめてみるとスレッドは一個しかないようです。
なぜスレッドが一個なんですか?
0095デフォルトの名無しさん
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" // 印刷/印刷プレビュー リソース
0096デフォルトの名無しさん
2005/11/21(月) 15:52:09ttp://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の部分で(長い処理)をやればいいと思ったんですけど
それじゃダメなんですか?
0097デフォルトの名無しさん
2005/11/21(月) 17:15:39GoogleとかMSNのツールバーみたいに、一番左のボタンを画像のみで大きくする方法がわかりません。
苦肉の策でボタンサイズの違うツールバーをもう一つ作って、ドロップダウンコントロールみたいにツールバーを貼り付けると、
貼り付ける側にTBSTYLE_TRANSPARENTを加えると、真っ黒になっちゃうしで苦しんでいます。
できれば1つのツールバーで実現する方法を、もしくは黒くなるのを防ぐ方法をご存知の方、ご教授ください。
0098デフォルトの名無しさん
2005/11/21(月) 17:19:55だからCDialogBarで作れって。何度も同じこと言わせるな。
分からないならSpy++で他のツールバーがどうなってるか調べろ。
0099仕様書無しさん
2005/11/21(月) 17:22:47OnPaintは、他のウィンドウに隠れていた対象のウィンドウが前面に移動したり、
最小化の解除(元のサイズに戻す)やサイズ変更などのイベントが発生すると、
何度でも呼ばれてしまうんだが?
010096
2005/11/21(月) 17:28:40すいません。そこで
if (m_bFirst){
m_bFirst = FALSE;
(長い処理)
}
というふうにOnPaintの if 文の中でやればいいのじゃないかなと思ったんです。
実際やると、うまくいくみたいなんです。
0101デフォルトの名無しさん
2005/11/21(月) 17:29:54-----
if (m_bFirst){
m_bFirst = FALSE;
EnableWindow(TRUE);
(長い処理)
}
-----
と書いたら長い処理の処理時間が長いときは、
入力できる状態になるまでの時間が長くなる。
長い処理は別のスレッドで処理するべき。
0102デフォルトの名無しさん
2005/11/21(月) 17:31:26本来は描画以外のことは書くべきでない。
010396
2005/11/21(月) 17:36:59あぁ〜なるほど。と思ったんですが、
この独自のメッセージはOnPaintで最初の一回きりでしか呼ばれないんですよね。
となるとやはり同じ気がしてきました。
>>102
なるほど。ただメッセージマップを自分で登録しなきゃいけないのが面倒です。
こういうダイアログってよくあると思うんですけど、本当みんなどうやってるのかな。
0104仕様書無しさん
2005/11/21(月) 17:41:25#defineでユーザーメッセージ定義して、メッセージマップにハンドラを登録
して、.hファイルにメッセージ処理関数の宣言書いて、cppファイルにメッ
セージ処理関数の実体を書けば済む話だろ。
ごちゃごちゃ言ってないで、初心者は熟練者の3倍は手を動かせよ。
0106デフォルトの名無しさん
2005/11/21(月) 17:47:33分かってないな。例えば5秒かかる処理だったら、
ウィンドウが出てきてから操作できる状態になるまで5秒かかる。
長い処理って何だよ。
あと、OnCreate()とかPreCreateWindow()とかあるんだからいろいろ使い分けろ。
010795
2005/11/21(月) 22:40:151は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で
アボーンした。
0108デフォルトの名無しさん
2005/11/22(火) 05:33:19MSNツールバーってCDialogBarなん?
0109デフォルトの名無しさん
2005/11/22(火) 07:38:53MSNツールバーが、MFCを使ってるかどうかって問題もあるんだが?既存の
MFCクラスを活用する近道がCDialogBarであることは間違いない。CWndの
派生クラスを定義して、ドッキングバー相当の機能を独自にゼロから実装
することだってできる。MFCはソースも公開されているしな。いずれにしろ
答え(実装方法)は1つではない。
0110デフォルトの名無しさん
2005/11/22(火) 19:31:32そのdlgにメッセージハンドラを作成し、SendMessage() で呼び出しています。
そのハンドラ内でSetTimer()しているのですが、OnTimerが発効されません。
dlg は、Create() なり、ShowWindow() なりをしてから、等いろいろ
やってみたのですが、うまくSetTimer() されません。
何か他にやらなければいけないとか、コンソールアプリの制限とかが
あるのでしょうか?
(要はCWndの派生クラスを作成して、メッセージとタイマーのハンドラが
登録したいだけなんですが・・・)
0111デフォルトの名無しさん
2005/11/22(火) 19:47:36タイマを使うならウィンドウ ハンドルが有効である必要がある。
タイマが終わったことをウィンドウに知らせるからな。
dlg.GetSafeHwnd()の結果を書け。話はそれからだ。
長文のくせに重要なことを書いてない。
0112デフォルトの名無しさん
2005/11/22(火) 20:12:49dlg.GetSafeHwnd() の戻りは 0x0019078a で有効なようです。
もうひとつ、大事なことを書いていませんでした。
ダイアログはDLLで実装しています。
そこで問題となったのは、どうしても、コンストラクタのリンクエラーが
取れない為、通常の「MFC共有DLL」ではなく「MFC拡張DLL」を使って、
class の定義を class AFX_EXT_CLASS CMyDlg : public CDialog
としています。
0113デフォルトの名無しさん
2005/11/22(火) 21:25:43ただ、タイマーとメッセージの実装が目的なので、DoModal() は
目的とズレてしまいます。
DoModal() の内部でやっている「何か登録する部分」だけの
CWndのメンバー関数を呼び出せば、いいのだと思います。
Create(IDD_TEST_DLG) と ShowWindow(SW_SHOW) だけでは
どうも駄目なようです。
0114デフォルトの名無しさん
2005/11/23(水) 01:27:44http://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
0115デフォルトの名無しさん
2005/11/23(水) 04:13:23基本クラスの関数が検索されなくなって、呼び出されなくなるんだけど。
WindowProcいじるしかないよね?
0116デフォルトの名無しさん
2005/11/23(水) 06:15:24派生クラスのオーバーライドした関数内で、基本クラスの関数を呼び出せば
済むだろ。MFC以前にC++を勉強し直した方が賢明だな。
0117115
2005/11/23(水) 07:12:14言い方が悪かった。「基本クラスの関数が検索されなくなって」
じゃなくてメッセージマップに登録したことで基本クラスの動作が阻害された場合。
だから関数がCallできるかは不定なのでその手法は使えません。
0118デフォルトの名無しさん
2005/11/24(木) 14:50:16俺もやってみたが、コンソールアプリからは、SendMessage() で
メッセージハンドラーの呼び出しは成功するが、その中での
SetTimer() が失敗する
当然の話だがダイアログベースのダミーからは、問題ない
何か必要な手続きがあるのかな
MFCレベルでなくて、Win32APIかAFXのコアなスキルが要るかも
0119デフォルトの名無しさん
2005/11/24(木) 18:18:51俺もやってみたが、コンソールアプリからは、SendMessage() で メッセージ
ハンドラーの呼び出しは成功するし、その中での SetTimer() も成功するな。
当然、DLL内のダイアログ派生クラスのWM_TIMERメッセージハンドラである所の、
CDlgInDLL::OnTimer()も呼び出されるのも確認した。
> MFCレベルでなくて、Win32APIかAFXのコアなスキルが要るかも
特に要らんラベルだと思うな。
0120デフォルトの名無しさん
2005/11/25(金) 21:31:25MFCでスレッドを使ったプログラム書いています。
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));
で出てるみたいです。でもよくわかりません(><
なんかスレッドの場合必要な処理とかがあるんでしょうか?よろしくお願いします。
0121デフォルトの名無しさん
2005/11/25(金) 23:57:210122デフォルトの名無しさん
2005/11/25(金) 23:59:130123デフォルトの名無しさん
2005/11/26(土) 00:17:01ワーカスレッド終了前に、プライマリスレッドのウィンドウを破棄して
いるんでは?
0124デフォルトの名無しさん
2005/11/26(土) 00:41:54関係あるかどうか分からんけど、CWnd*を別スレッドに持ち出すと、
CWnd::AssertValid()の中で怒られたりするし、そうでなくても
後々変な挙動になったりするので止めた方が良い。
0125デフォルトの名無しさん
2005/11/26(土) 02:25:26普通に注意スレということですね
0126デフォルトの名無しさん
2005/11/26(土) 04:03:22やっと出来ました。ExitInstanceでやっていたものをCxxWnd::OnCloseで
やったらASSERTエラーが起きなくなりました。
多分ExitInstanceって呼ばれた時点で既にウィンドウを破棄してるんですね。
物凄い勘違いしてますた
>>124
これもMSDNのヒントのとこで読みました
でネットでいろいろ検索してみたんですがなんかすげぇ難しいっす><
自分の場合は同じウィンドウのCWndだったのでエラーの類や
不具合は出なかった(?)みたいですがいろいろ読んでるとなんかマズイらしいです。
HWNDで渡してattachするって言うのもいまいち理解できてません・・・・
とりあえずもう少しやってみます。有難うございました。
0127デフォルトの名無しさん
2005/11/26(土) 19:52:49どのようにすれば良いでしょうか?
0128デフォルトの名無しさん
2005/11/26(土) 20:27:27ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/splitter.html
0129デフォルトの名無しさん
2005/11/26(土) 22:59:26IEのようにウインドウをたくさん開きたい?
0130デフォルトの名無しさん
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から
マウスメッセージが通知されることです。
続く、
0131130
2005/11/27(日) 00:33:582.で想定外の動作とは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で対応しているため特に影響はありません。
0132デフォルトの名無しさん
2005/11/27(日) 00:35:410133130
2005/11/27(日) 00:43:08そういうことではないです。
キャプチャーをダイアログが失っている時に、dllがシステムフックして
ダイアログに通知する仕組みに関する質問です。
0134デフォルトの名無しさん
2005/11/27(日) 03:13:35そうです。複数のViewをフレーム付きで子ウィンドウとして扱い、同時に表示したいのですが、
MDIにはしたくないのです。
この考え自体が間違えなのでしょうか?
0135デフォルトの名無しさん
2005/11/27(日) 03:21:28学生なら Visual Studio .NET the Spoke Premium 2003 買いなさい。
○ シングル ドキュメント (SDI のこと)
○ マルチ ドキュメント (MDI のこと)
○ ダイアログ ベース
□ HTML ダイアログを使用する
● 複数のトップレベル ドキュメント
0136デフォルトの名無しさん
2005/11/27(日) 15:34:24「子ウィンドウ」と「ポップアップウィンドウ」の違いは理解しているのか?
「子ウィンドウ」は「親ウィンドウ」の外には出られない。
0137デフォルトの名無しさん
2005/11/27(日) 23:28:46買うと何かいいことが?
0138デフォルトの名無しさん
2005/11/28(月) 02:02:15Visual Studio 2005 Professionalが無料で手に入る。
0139デフォルトの名無しさん
2005/11/28(月) 11:48:19ドキュメント・ビューアキテクチャを使わないのが前提だが、
CViewを格納するArrayクラスを作って、それを持つCWnd派生クラスを作る
0140デフォルトの名無しさん
2005/11/28(月) 14:24:000141デフォルトの名無しさん
2005/11/28(月) 14:28:270142139
2005/11/28(月) 15:07:290143デフォルトの名無しさん
2005/11/29(火) 12:31:13現行の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
0144デフォルトの名無しさん
2005/11/29(火) 18:51:13CFormViewにMSChart貼り付けている
グラフを印刷するには、どうすればいいんですか?
0145デフォルトの名無しさん
2005/11/29(火) 18:59:320146デフォルトの名無しさん
2005/11/29(火) 19:19:26ライブラリでmfc70d.libが必要と怒られているのですが、mfc71d.libを使用するように
プロジェクトの設定をかえる事って出来ないでしょうか?
0147デフォルトの名無しさん
2005/11/29(火) 20:10:40プロジェクトメニュー → プロパティ → MFCの使用「スタティック ライブラリでMFCを使用する」
Standard版にもスタティックライブラリが使えたかどうかは不明・・・
0148デフォルトの名無しさん
2005/11/29(火) 21:14:35デバッグビルド配布したんだろ
0149デフォルトの名無しさん
2005/11/29(火) 21:17:150150デフォルトの名無しさん
2005/11/29(火) 21:22:37デバッグビルドを配布しちゃいけません。
0151デフォルトの名無しさん
2005/11/29(火) 21:30:130152146
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を入手するしかないのでしょうか…
0153デフォルトの名無しさん
2005/11/29(火) 21:53:13アホかと。
0154デフォルトの名無しさん
2005/11/30(水) 00:15:39そのエラーはmfc71d.libをすでに君のアプリにリンクしていて、且つ、そのなかに入っている関数とか変数が別のlibにもあって、
どっちを使ったらいいか分りません。っていうエラー。
ランタイムがインストールされていないPCでVC7で作ったexeを実行するとmfc7x.dllがないとか、いっぱい怒られるよ
0155146
2005/12/01(木) 20:22:15対象のライブラリを使用せず書けるめどが立ちそうなので
ひとまず自己解決ということでよろしくお願いいたします。
0156デフォルトの名無しさん
2005/12/01(木) 23:50:160157デフォルトの名無しさん
2005/12/02(金) 00:39:07ソース見るとNULLが返るようになってるが、MSDNには
>Pointer to the newly created thread object.
としか書かれてないな。
まあNULLでいいんでないかい。
0158デフォルトの名無しさん
2005/12/02(金) 00:55:05どうもありがとうございました。
0159デフォルトの名無しさん
2005/12/02(金) 01:39:320160デフォルトの名無しさん
2005/12/03(土) 04:38:49M$だから仕方ないとあきらめてるが
多分バイトにでも書かせてるんだろう
0161デフォルトの名無しさん
2005/12/03(土) 11:32:460162デフォルトの名無しさん
2005/12/04(日) 22:34:02今アプリケーションを作成していまして、検索ダイアログを
作ったのですが、いったん検索ダイアログを閉じてしまうと、
CFindReplaceDialogオブジェクトがNullになってしまうので
すが、どうにかして状態を残しておくことはできないでしょうか?
CFindReplaceDialogオブジェクトを残しておきたい理由としまして、
ダイアログを閉じても、F3ボタンで検索の続きができるように
したいのです。どなたか教えていただけないでしょうか?
0163デフォルトの名無しさん
2005/12/04(日) 22:46:220164デフォルトの名無しさん
2005/12/04(日) 22:49:01ご返答のほうありがとうございます。
CFindReplaceDialogのデストラクタを
探しているのですが、CFindReplaceDialogクラスの
定義を見ると、コンストラクタのみで、デストラクタは
存在しません。どこか他の場所に宣言されているの
でしょうか?
0165>>162
2005/12/05(月) 00:24:47スマートじゃないかな?
0166デフォルトの名無しさん
2005/12/05(月) 11:31:02つ[m_fr メンバ変数]
0167デフォルトの名無しさん
2005/12/05(月) 23:24:21メンバ関数を作成しました。
この関数をデストラクタから呼ぶと、当然怒られてしまいます。
こういう場合はどのメッセージハンドラを使うのが適切ですか?
DestroyWindow,WM_CLOSE,WM_DESTROY等色々ありますが、
どれでも問題ないでしょうか?
0168デフォルトの名無しさん
2005/12/06(火) 07:14:13終了処理の内容と、処理の仕方による。デストラクタで問題ないことも
ある。
デストラクタでエラーが出るのは、終了処理の中でGetDlgItem()など、
ダイアログのウィンドウハンドルを必要とするメンバ関数からだろ。
0169デフォルトの名無しさん
2005/12/07(水) 16:19:51WM_CLOSE が来たからといって必ずウィンドウが破棄されるとは限らない。
WM_DESTROY は大丈夫。
0170デフォルトの名無しさん
2005/12/09(金) 00:42:26>>169
どうもです。当面WM_DESTROYを使いながらボチボチ勉強していこうと思います。
0171デフォルトの名無しさん
2005/12/09(金) 14:50:37そのデータを基にOnDraw関数でグラフィックスを描きたいのですが
どのようにプログラムを記述すればいいのでしょうか?
誰か教えてください
0172デフォルトの名無しさん
2005/12/09(金) 14:59:230173デフォルトの名無しさん
2005/12/09(金) 15:08:470174デフォルトの名無しさん
2005/12/09(金) 15:21:220175デフォルトの名無しさん
2005/12/09(金) 15:23:37CxxxDocクラスにメンバー変数追加
>ファイルからデータを読み出して
すでにファイルフォーマットが存在するなら
メニューに読み込みのメニューでも追加して、CxxxDocクラスに
そのメニューのハンドラ追加して、そこで読み込み。読み込んだらUpdateAllViews() ;
ファイル選択したければCFileDialogクラス使う。
まだフォーマットが存在しないのなら
MFCのシリアライズを使ってもいいが、フォーマットは自由にはできない
>そのデータを基にOnDraw関数で
数値を表示するならpDC->TextOut()とか、
線ならMoveTo(), LineTo()とかCDCのメンバー関数使う。
※データはCxxxDocクラスに置く、描画はCxxxViewクラスで行う、
データが変更されたらCxxxDocオブジェクトのUpdateAllViews()呼ぶ
0176デフォルトの名無しさん
2005/12/09(金) 15:24:530177デフォルトの名無しさん
2005/12/09(金) 15:31:02ありがとうございます
レベル低くてすいませんでした
0178デフォルトの名無しさん
2005/12/11(日) 21:24:51MFCを使ったアプリをパッケージ製品なんかにしたら
作った会社のレベルは低いと業界ではみなされるんですか???
0179デフォルトの名無しさん
2005/12/11(日) 21:47:000180デフォルトの名無しさん
2005/12/12(月) 00:59:07放置しましょう。
0181デフォルトの名無しさん
2005/12/12(月) 03:50:25でもウインドウ出さずにタスクトレイに入るユーティリティのような、
純粋なデスクトップアプリでないケースではWTLの方がいいね。
0182デフォルトの名無しさん
2005/12/12(月) 13:23:450183デフォルトの名無しさん
2005/12/12(月) 18:24:14templateクラスを自作してドキュメント派生クラスにメンバを加えた所、
Class Viewに表示されず、入力アシストにも出ないばかりか、
CListのメンバも同じ事になってしまいました。
何かよい解決策はありますでしょうか?
0184デフォルトの名無しさん
2005/12/12(月) 18:52:54糞アプリだったらな。
0185デフォルトの名無しさん
2005/12/12(月) 19:49:28わざわざVBと全く同じに作るならネットワーク関連だけVCで作ればいいのに。
0186デフォルトの名無しさん
2005/12/12(月) 21:46:35実際マイクロソフト以外でそんなパッケージあったら”えっ!!”と思うかな俺は。
(実際あった。)
出来が良けりゃいいってのも正論だけど、なんかねぇ。
0187デフォルトの名無しさん
2005/12/12(月) 22:02:49詳しく
0188デフォルトの名無しさん
2005/12/14(水) 19:25:02「えっ!!」と思ったといってもアプリの出来が悪かったわけではありません。
またパッケージソフトとも言わんかな?
自分の作ったMFCダイアログアプリケーションをデバッグしながら、暇つぶしに
ネット○ーブルの野○村を裏で走らせてた。クラス名が"#32770"だったから、
てっきり自分のデバッグしているダイアログかと思ってメッセージモニタしてると
何かおかしい。しばらくして"えっ!!野○村ってMFCなの?"って驚いたしだい
です。
0189デフォルトの名無しさん
2005/12/14(水) 20:51:400190デフォルトの名無しさん
2005/12/14(水) 22:14:14templateクラスで参照のつもりでコピーの戻り値を受け取り、内容を変更し損なうのを
防ぐ為、コピー演算子及びコピーコンストラクタをprotectedにし、
template classをfriend classに設定したのですが、何故かそのtemplate classをメンバとして
定義しているファイル内に宣言するとこのような現象が起きました。
templateにするクラスを別のファイルに記述すると、メンバ宣言するファイルにincludeしても
入力アシストが有効になります。
0191デフォルトの名無しさん
2005/12/14(水) 23:34:23野菜○はMFCアプリだけどね。
0192デフォルトの名無しさん
2005/12/15(木) 10:13:43なんか、何?
MFC は確かに稀代の出来悪フレームワークだが
その事と、それを使ったアプリケーションとの出来に
何の関係が?
0193デフォルトの名無しさん
2005/12/15(木) 21:20:400194デフォルトの名無しさん
2005/12/15(木) 22:56:520195デフォルトの名無しさん
2005/12/17(土) 23:29:53見てみたいものだな。
0196デフォルトの名無しさん
2005/12/18(日) 01:10:42いやぁ、クソ呼ばわりするタイプの多くは
MFCよりとっつきやすくて自分には便利なライブラリを見つけたってのが
MFCをクソよばわりする根拠なんではないかな?
じっさいデバッグとかでぐちゃつくとMFCのソースも見てるわけでしょ?
ドロドロとまどろっこしい印象も受けるわけで。
クソと言う人も生まれるのも致し方ないのではないかなあと思う。
0197デフォルトの名無しさん
2005/12/18(日) 01:14:530198デフォルトの名無しさん
2005/12/18(日) 08:26:54いや、クソかどうかはどうでもいいんだよw(頭悪いの?)
クソ呼ばわりするヤツがどの程度かってことを195、196はやってるわけだ?
たとえば、お前とはクソといっては見るものの195には答えられないわけでw
196の言ってるレベルなんでしょ?
ま、それ以前にスレの流れも読めんアホだとするとこの板ならクダすれがお似合いだね
0199デフォルトの名無しさん
2005/12/18(日) 14:17:35それがMFC
0200デフォルトの名無しさん
2005/12/18(日) 18:35:520201デフォルトの名無しさん
2005/12/18(日) 18:54:07MFC使うくらいなら
何も使わないほうがいい
0202デフォルトの名無しさん
2005/12/18(日) 18:56:33http://msdn.microsoft.com/visualc/whidbey/mfc2005/default.aspx
0203デフォルトの名無しさん
2005/12/18(日) 19:21:370204デフォルトの名無しさん
2005/12/18(日) 19:24:48親和性が低いBorland OWLなんか話にならない。
0205デフォルトの名無しさん
2005/12/18(日) 20:01:18失敗したシリアライズ。失敗した例外。
その実験コードは再利用されている。
VBには何一つない。論外。
0206デフォルトの名無しさん
2005/12/19(月) 00:27:38クソしか言えない低脳を煽りたいからかな
0207デフォルトの名無しさん
2005/12/20(火) 22:33:24親ダイアログに子ダイアログを表示させる
というものを作っています。
子ダイアログの表示を切り替えることまではできたのですが、
子ダイアログ上の、タブオーダが
最後のコントロールでTabキーを押すと必ずフリーズします。
親ダイアログ:
タブコントロール
子ダイアログ:
ボタン1、ボタン2
スタイル:チャイルド
境界線 :しない
コントロール:チェック有
開発環境:VisualC++6.0
わかる方、教えてください。
0208デフォルトの名無しさん
2005/12/20(火) 23:12:33ってなに?
0209デフォルトの名無しさん
2005/12/20(火) 23:18:43エンターキーでリストコントロールが消えるとか。
それならInvalidate()で回避出来るけど。
0210デフォルトの名無しさん
2005/12/20(火) 23:37:18わかりにくくてすいません。
こんな感じです
http://uploader.fc2.com/file/4237.png
0211デフォルトの名無しさん
2005/12/21(水) 00:14:320212デフォルトの名無しさん
2005/12/21(水) 00:16:43MFC雑技団に載ってるTABのと同じ方法だな。
ほんとにフリーズしてるのか気になるところだ。
TAB押した後Shift+TAB押して戻ってくるか確かめた?
0213デフォルトの名無しさん
2005/12/21(水) 00:33:27shift + Tabを押しても戻ってきませんでした。
フリーズした後、何を押しても反応しないので、
その度、タスクマネージャで終了しています。
0214デフォルトの名無しさん
2005/12/21(水) 00:40:130215デフォルトの名無しさん
2005/12/21(水) 00:52:590216デフォルトの名無しさん
2005/12/21(水) 01:24:34>>209
>>211
>>212
>>214
>>215
PreTranslateMessage でTabキーが押されたときに、
SetFocusを用いて強制的にフォーカスをタブオーダの先頭に
変更する方法でフリーズしなくなりました。
本当にありがとうございました。
0217デフォルトの名無しさん
2005/12/23(金) 16:52:05WindowsAPI?
0218デフォルトの名無しさん
2005/12/23(金) 17:08:510219デフォルトの名無しさん
2005/12/23(金) 17:51:57もういいよ、そのネタは先週でオワタ
MFCがクソかどうかの話になる前に終わったので、このスレでMFCをクソというやつは
利用機会すらなかったヤツか機会はあったが歯が立たなかったヤツらだったらしい。
それに代わるもの提示すらしないまま>>197、>>201、>>203を最後に消えた。
煽りは、>>206で終了
以後は普通の流れなんだよ
0220デフォルトの名無しさん
2005/12/23(金) 22:50:46どこを参考にすればいいのでしょうか?
作り方としてMicrosoft公式のものがあるのでしょうか?
それとも、CodeGuruやCodeProjectを参考にしないといけないのでしょうか?
0221デフォルトの名無しさん
2005/12/23(金) 22:56:100222220
2005/12/23(金) 22:58:04CodeProjectのソースコードはGETしました。
では、そのソースのとおりに組めば問題ないんですね。
できれば、MSDNかなんかに解説があるのをご存知でしたら助かったんですが。
0223デフォルトの名無しさん
2005/12/23(金) 23:09:290224220
2005/12/23(金) 23:10:20いえ、VisualStudioで使われているドッキングツールバーです。
MSDNで探してるんですが、
公式のドキュメントが見当たりません。
ご存知なかたはいますか?
0225デフォルトの名無しさん
2005/12/23(金) 23:21:39ドッキング ツールバーとフローティング ツールバー
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
まあ違うんだろうけど。
0226デフォルトの名無しさん
2005/12/23(金) 23:21:54// してください。
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
0227220
2005/12/23(金) 23:58:43ありがとうございます。
それを参考にしたいと思います。
あと、
http://www.codeproject.com/docking/prod_profuis.asp
のソースコードを解析したいと思います。
0228デフォルトの名無しさん
2005/12/24(土) 10:16:47どうしてでしょう?
0229デフォルトの名無しさん
2005/12/24(土) 10:48:34ぐぐればリンク先開かなくてもわかるよ。
ttp://www.google.co.jp/search?hl=ja&q=CMiniDockFrameWnd&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0230デフォルトの名無しさん
2005/12/25(日) 10:59:15VCのIDEにあるビルド出力のような、コンソールアプリケーション(ダイアログのボタンから呼び出す)
の出力を、テキストボックスにリダイレクト(?)する手段を探しています。
どなたか経験のある方、手段について教えていただけますでしょうか?
0231デフォルトの名無しさん
2005/12/25(日) 11:10:54#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);
}
0232デフォルトの名無しさん
2005/12/25(日) 11:18:44http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_a_child_process_with_redirected_input_and_output.asp
0233デフォルトの名無しさん
2005/12/25(日) 18:31:26ぜんぜん無効にならないんですが、なぜですか?
pWndはスパイで見る限り正しいウインドハンドルをもってるし、EnableWindowの結果もTRUEです。
コントロールにはリソースIDがありますが、これに対応するハンドラが無い場合、無効になったりしますから
なにか条件がいろいろあるんですよね。
0234233
2005/12/25(日) 18:34:440235デフォルトの名無しさん
2005/12/25(日) 20:51:40「ダイアログバー EnableWindow」あたりでgoogle検索すれば、すぐ分かるよ。
0236デフォルトの名無しさん
2005/12/25(日) 20:57:21pButton->EnableWindow(FALSE);
確かこんな感じで解決したと思う。
0237236
2005/12/25(日) 20:58:05CButton* pButton = (CButton*)m_dlg_bar.GetDlgBar(IDC_BUTTON1);
ね。
0238デフォルトの名無しさん
2005/12/25(日) 21:01:18ツールバーのボタンと同じように OnUpdateCmdUI じゃないかな?
0240デフォルトの名無しさん
2005/12/25(日) 21:27:47CmdUIはツールバー、メニューの項目などのコマンドターゲット。
クリックやアクセラレータなどで始動する。
0241デフォルトの名無しさん
2005/12/25(日) 23:36:28やっぱOnUpdatCmdUIですか。。
これだとメインスレッドがアイドルの時しか更新されないんですよね。
その場合、本当はボタンを禁止したいタイミングでユーザがボタンを押せちゃうなんていう
心配は無用ですか?
0242238
2005/12/25(日) 23:39:340243デフォルトの名無しさん
2005/12/25(日) 23:42:370245デフォルトの名無しさん
2005/12/25(日) 23:55:28とりあえず気にしないことにしてOnUpdateCmdUIで実装して、
万が一、連打操作によってクラッシュ等出てしまったら
そのときFormViewとかにします。
0246デフォルトの名無しさん
2005/12/27(火) 18:34:03MFCで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を使う方法をどなたかご存知でしたらお教え下さい。
よろしくお願いします。
0247デフォルトの名無しさん
2005/12/28(水) 00:30:13簡単なOCXを2個作って試してみたけど、うまくいかんね。
ただオブジェクトの作成(CreateDispatch)と解放(ReleaseDispatch)はできる。
自分で追加したOCXオブジェクトの公開メソッド呼び出すと例外が発生する。。
なんでだろ??
0249デフォルトの名無しさん
2005/12/28(水) 14:37:470250246
2005/12/28(水) 16:10:34私の使おうとしているOCXは製品なので改造とかは出来ません。
ブリッジ関数というのがよく分からないのですが、どのようにすればよいのでしょうか?
0251デフォルトの名無しさん
2005/12/28(水) 16:52:55AからBを呼びたいとき、次のようにブリッジ(橋渡し)を呼び出し元にやってもらう。
・Aの関数ではBを呼ぶための情報と共に呼び出し元にメッセージを投げるなどして待機。
・呼び出し元はメッセージを受け取るなどしたらBを呼び出して、結果をAに通知。
・問題点
*Aと呼び出し元の通信がメッセージなどで巧くできるか。
*AからBを呼ぶために必要な情報を巧く呼び出し元に引き渡せるか。
0252デフォルトの名無しさん
2005/12/28(水) 20:57:11今ちょっと試してみたけどOCXの中からOCXを使えたよ。
外側はMFC利用のOCXで中に入れたのはMSFlexGrid。
AfxEnableControlContainer()呼んでる?
試したのはWin2000&VC6SP5
0253252
2005/12/28(水) 21:00:440254デフォルトの名無しさん
2005/12/29(木) 06:16:30いまやって見ると変換できないらしく、まったく無かったかのように結果の文字列から削除されています。
正しくはどうやるのでしょうか?
0255デフォルトの名無しさん
2005/12/29(木) 06:20:12単純にdが抜けてた。。
正しくは%I64dです。皆さんわかりましたね?
orz
0256246
2005/12/29(木) 13:17:53ありがとうございます。
InitInstance内で、AfxEnableControlContainer()を呼び出したところ、うまくいくようになりました!
0257デフォルトの名無しさん
2005/12/29(木) 13:24:330258246
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' に変換することはできません。
などのエラーが沢山出てしまいます。
どなたかご教授お願い致します。
0259252
2005/12/29(木) 22:58:32おそらくON_EVENTを書く場所を間違えてる。
BEGIN_EVENT_MAP()〜END_EVENT_MAP()の中にでも書いたのでは?
(試しにそこに書いたら同じエラーがズラズラ出た)
イベントの受け取り側だから、取り敢えず↓↓を調べて
・DECLARE_EVENTSINK_MAP()
・BEGIN_EVENTSINK_MAP()〜END_EVENTSINK_MAP()
#外のOCXと中のOCXが頭の中でごっちゃになってるのではないか?
#念のため書いとくと252のAfxEnableControlContainer()は
#中のOCXを使うために外のOCXが準備するためのものであって
#外のOCXを使う準備をするためのものじゃないよ。
#余計混乱させてしまったらゴメン
0260246
2005/12/30(金) 04:19:58早速のレスありがとうございます。
確かにBEGIN_EVENT_MAP()〜END_EVENT_MAP()の中に書いていた気がします。
家にはソースが無いので休みが明けたら早速会社で見直してみます。
0261デフォルトの名無しさん
2005/12/31(土) 16:15:11複数の入力ファイル種類ごとに初期表示させるディレクトリを変えたいので、
CFileDialogで「開く」を押下したときに自動で覚えてくれる動作を変えたいのです。
ちなみに以下のようにしたら、DoModalを呼ぶなり、何も表示されずに戻ってきてしまいました。
static char szfilter[] = "xyzファイル(*.xyz)|*.xyz||";
CFileDialog dlg(TRUE
, "xyz"
, "c:\\temp\\"
, 0
, szfilter);
if(dlg.DoModal() == IDOK)
{
・・・
よろしくお願いします。
0262デフォルトの名無しさん
2005/12/31(土) 22:50:55m_ofn は OPENFILENAME 型の構造体です。
…カスタマイズするには、オブジェクトを構築後、DoModal メンバ関数を使って表示させる前に、この構造体を変更します。
たとえば、ダイアログ ボックスにキャプションを付けるには、m_ofn の lpstrTitle メンバを設定します。
例)初期表示させるディレクトリが e:\testaa だとしたら
CFileDialog cfdg(TRUE,"bmp","*.bmp");
cfdg.m_ofn.lpstrInitialDir ="e:\\testaa";
if(cfdg.DoModal() != IDOK){
以下略
0263デフォルトの名無しさん
2005/12/31(土) 23:27:53ありがとうございます!助かりました
来年も今年同様よろしくお願いしますw
0264デフォルトの名無しさん
2006/01/01(日) 12:21:180265デフォルトの名無しさん
2006/01/01(日) 16:01:440266デフォルトの名無しさん
2006/01/02(月) 01:39:360267246
2006/01/05(木) 09:59:50ソースを確認したところ、やはり
1)DECLARE_EVENTSINK_MAP() の漏れ
2)BEGIN_EVENTSINK_MAP()〜 がBEGIN_EVENT_MAP()〜 になっている
の2点でした。
どうもありがとうございました。
0268デフォルトの名無しさん
2006/01/05(木) 16:13:43100個単位で InsertItem() をして,
それをまた数十回繰り返すという処理を書きました.
ところがその処理の最中に,
そのリストヴユーのスクロールバーを動かしたり
カラムをクリックしたりすると例外が発生するようになり,
ヴユーに対する操作が不安定になりました.
100個単位で InsertItem() している最中はヴユーに対する操作の
イベントハンドラをいっさい無視するというようにしたいのですが
どう書けばいいのでしょうか?
0269デフォルトの名無しさん
2006/01/05(木) 16:39:15BOOL bInserting = FALSE;
...
// 挿入する前
bInserting = TRUE;
...
// 挿入した後
bInserting = FALSE;
...
// イベントハンドラの先頭
if (bInserting) {
return;
}
// 以降、イベントの処理
...
0270デフォルトの名無しさん
2006/01/05(木) 16:46:03というかそれぞれのイベントハンドラに
処理を書くのはきりがないので
ヴユーに対するすべてのイベントを一時的に
停止する方法はないものかと
0271デフォルトの名無しさん
2006/01/05(木) 16:50:45EnableWindow
0272デフォルトの名無しさん
2006/01/05(木) 16:53:570273デフォルトの名無しさん
2006/01/05(木) 17:06:44根本解決:仮想リストビュー
0274デフォルトの名無しさん
2006/01/05(木) 17:10:31それはなんですか?
最中はリストヴユーは見せておかなければならないのですが
0275デフォルトの名無しさん
2006/01/05(木) 17:11:020276デフォルトの名無しさん
2006/01/05(木) 17:29:14妄想リストビュー
0277デフォルトの名無しさん
2006/01/05(木) 17:48:03夢のリストビュー
0278デフォルトの名無しさん
2006/01/05(木) 18:02:29あっちゃんかっこいー
0279デフォルトの名無しさん
2006/01/06(金) 12:51:13GetModuleFileName(AfxGetApp()->m_hInstance, path, _MAX_PATH);
これだと、ロードしたEXEのパスになっちゃいます。
これではなくて、実際にロードされたときに、DLLがあるパスを(DLL内部)で取得したい
のですが、どうすればよいですか?
ググッたら、.NETのは有りましたが、MFCなど従来の方法がわかりませんでした。
(.NETでは、Assembly.GetExecutingAssembly().Locationらしい)
0280デフォルトの名無しさん
2006/01/06(金) 13:03:30勘だが多分AFX_MANAGE_STATEが関係してる
0281デフォルトの名無しさん
2006/01/06(金) 13:09:58す!すばらしい。
AFX_MANAGE_STATE(AfxGetStaticModuleState());
GetModuleFileName(AfxGetInstanceHandle(), path, _MAX_PATH);
これで、いけました。サンクス。多謝
0282デフォルトの名無しさん
2006/01/10(火) 09:54:07全体の半分ほど以降に場所に持っていくと
OnNotify のところで例外が発生します
スクロールバーを全体の半分ほど以降に場所に
持っていったときに起こるイベントがなんなのかが
わからず,調べる手だてがなくて
こまっています
0283デフォルトの名無しさん
2006/01/10(火) 10:02:30そんなの無いと思うけど。
0284デフォルトの名無しさん
2006/01/10(火) 10:14:07そう、そんなのない。
http://www.google.co.jp/search?q=%A5%EA%A5%B9%A5%C8%A5%F4%A5%E6%A1%BC&ie=EUC-JP
0285デフォルトの名無しさん
2006/01/10(火) 11:29:18PreTranslateMessage関数では、ちゃんとメッセージが飛んできて、処理可能ですが、
メッセージマップで追加設定した関数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;
}
0286デフォルトの名無しさん
2006/01/10(火) 11:50:54読み取り、1+2+3...+su1の値をテキストボックス2に表示するというプログラムは
どうやって書けばいいんでしょうか?
0287デフォルトの名無しさん
2006/01/10(火) 11:56:24うちでは正しく動く。
君のOnUnkoの定義は問題ない。
UM_UNKOの値は何にしてる? 例えば0なら無理。
ちなみにPreTranslateMessageでなくWindowProcになら両方飛んでくる。
LRESULT CTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
0288287
2006/01/10(火) 12:00:58なあお前、この中でどれか1つでもできるやつあるか?
MFCじゃないし、あんまりじゃないか?
・テキストボックス1から値を取得する
・1+2+3...+su1を足し合わせる
・テキストボックス2に値を設定する
0289デフォルトの名無しさん
2006/01/10(火) 12:12:44PreTranslateMessage で TRUE 返してた、というオチはないよね?
0290286
2006/01/10(火) 12:15:12su1=val(textbox1.text)
goukei=0
for k = 1 to su1
goukei=su1+k
next k
textbox2.text=goukei
ではどこが違うんでしょう?
0291デフォルトの名無しさん
2006/01/10(火) 12:17:25出て行け
0292287
2006/01/10(火) 12:17:30== SendMessage
WindowProc
OnWndMsg
OnUnko
== PostMessage
PreTranslateMessage
WindowProc
OnWndMsg
OnUnko
0293デフォルトの名無しさん
2006/01/10(火) 12:22:57スレ違い。
>>288
スレ違いを構うな。
0294285
2006/01/10(火) 12:35:01UM_UNKOは(WM_APP + 1)です(WM_USER + 1)でも駄目でした・・・
PostMessageを発行しているのが、ダイアログ上に配置されたボタン(サブクラス化した自作クラス)の
クラス内で行っており、親のダイアログのメッセージマップまで届いていないのでしょうか?
(ダイアログ上に普通のボタン貼って、そこのイベントで発行した場合は上手くいきました。)
0295285
2006/01/10(火) 12:41:04で解決致しました。m(_ _)m
PreTranslateMessageでは引っかかったので、
GetParent()が必要だとは思いませんでした・・・
0297デフォルトの名無しさん
2006/01/10(火) 12:59:06まぁまぁ、気持ちは判るが、その「大事なこと」に気付くくらいなら質問していないだろうから。
0298デフォルトの名無しさん
2006/01/10(火) 13:02:010300デフォルトの名無しさん
2006/01/10(火) 14:38:45例外が出ていて,
それがなんのクラスのイベントハンドラなのかを
調べる方法はありますか?
0301デフォルトの名無しさん
2006/01/10(火) 14:40:37実行するときに
メニューの実行(Ctrl+F5)ではなく
F5(デバッグ実行)で実行する。
これ知らない子が多いね。
0302デフォルトの名無しさん
2006/01/10(火) 20:13:04関数をファイルから検索して、「ファイルから検索1」に出てきた奴をダブルクリックすれば
該当のファイルの位置に飛ぶんだが、ソレがどのクラスのどこら辺に居るのか
ClassViewのツリーの中を目で追いかけるのが面倒っす。
書いていた関数を削除したいとき、ツリーの該当箇所右クリックしてDELしたいんですけど
左に目をやると、てんで違うクラスの位置に居ることが多く、ClassViewの森の中を
縦横無尽に右往左往してますんで、どなたか助けてください。
0303デフォルトの名無しさん
2006/01/10(火) 20:19:39ソースエディタの上にクラス名とメンバ関数が出てるじゃない。
0304デフォルトの名無しさん
2006/01/11(水) 00:18:20WM_USER+0x1000(0x300だったか?)ぐらいまでMFCが使っている
と記憶しています。
WM_APPの場合は、それ以降のメッセージIDをMFCで使用しないこ
とが保障されていますか(今後においても)?
0305デフォルトの名無しさん
2006/01/11(水) 00:21:030306デフォルトの名無しさん
2006/01/11(水) 00:30:59ヘッダにコメントとして書いてあるはずだ。
Visual C++とPlatform SDKの両方のヘッダを調べるべき。
0307デフォルトの名無しさん
2006/01/11(水) 00:56:020308デフォルトの名無しさん
2006/01/11(水) 01:08:520309デフォルトの名無しさん
2006/01/11(水) 02:35:36うん。それでも迷っちゃうんだ。
CFORMで良かったのか単にFORMだったのか勝手に脳内変換してごちゃごちゃしてくる。
0310デフォルトの名無しさん
2006/01/14(土) 20:15:53フォーカスがあたっているときに、EnterやESCキーでのデフォルトボタン
が有効にならないのですが。(無反応となる)
複数行でないEDITBOXであれば、問題ありません。
複数行のEDITBOXの場合、何かコードを追加しないとだめでしょうか?
0311デフォルトの名無しさん
2006/01/14(土) 22:57:090312デフォルトの名無しさん
2006/01/14(土) 23:25:32複数行のEditなんだから文字列が「改行」されるのは当たり前。
0313310
2006/01/15(日) 03:09:01プロパティシートでなくて、単純なダイアログ上での、
複数行EDITBOXであれば、EnterやESCは有効でした。
>>312
ES_WANTRETURNは未指定なので、EDITBOX上の文字列は
改行されないです。
0314デフォルトの名無しさん
2006/01/15(日) 13:17:54アプリを作りたいのですが、フラッシュファイル(.swf)を書き出すAPI・仕様とか、
サンプルプログラムがあったらURLを教えてください。
(QuickTime APIで可能でしたでしょうか?)
ご教授よろしくおねがいします
0315デフォルトの名無しさん
2006/01/15(日) 13:48:560316デフォルトの名無しさん
2006/01/15(日) 23:16:48.NET2003を使用しています。
プロジェクトでchmファイルを作成していたのですが、
別のソフトでchmを生成したら作成したソフトから起動ができなくなってしまいました。
その別ソフトでhhkなどが変更された形跡はあるのですが
そもそも同ファイル名なのに別ソフトで生成したchmファイルが開けないというのが謎です。
また、プロジェクトをリビルドしても、今まで見えていたDos窓のヘルプファイルのコンパイル画面が
立ち上がらなくなり、コンパイルすらできない状態になってしまいました。
別ソフトで生成したchmファイルを使う方法、もしくは.NETで再度コンパイルできるようにする方法を
どなたかご存じであれば、回答宜しくお願いいたします。
0317デフォルトの名無しさん
2006/01/16(月) 01:25:43どういうソース書いていいのかわからない。
0318デフォルトの名無しさん
2006/01/16(月) 02:17:150319デフォルトの名無しさん
2006/01/16(月) 02:34:43「六萬五千五百参拾五」
0320デフォルトの名無しさん
2006/01/16(月) 11:25:07そういうことでスレ違い。
0321デフォルトの名無しさん
2006/01/16(月) 13:12:220322デフォルトの名無しさん
2006/01/16(月) 13:19:170323デフォルトの名無しさん
2006/01/16(月) 14:31:47おっ、もってけ
つgdiplus
0324デフォルトの名無しさん
2006/01/16(月) 22:48:01カッコイー
0325デフォルトの名無しさん
2006/01/17(火) 19:43:23ポンコツ マシンのセレロン2。0+MB815から
最新のマシーンに環境移行を考えていますが、
移行して問題ないですか。
大好評、eMachines6448のAMD64が更にパワーアップ。
グラフィックス、サウンド、HDDなど、
マルチメディアを快適にするスペック満載です。
0326デフォルトの名無しさん
2006/01/17(火) 19:48:34絶対ダメだ。移行すべきでない。
0327デフォルトの名無しさん
2006/01/17(火) 19:59:30理由をきかせて下さい。
アーキテクチャーに共通性がないと思うのですが
(8086系というのですか。)
しかし、結構売れているのは、何かエミューな仕掛けが
有って、問題ないと勝手に想像してます。
vc6で作られたソフトがごまんとあるので、私のプログラマー
人生も32ビットと一緒に死滅する決意です。
余談ですが、3年ぶりに公開されたEM EDは性器なし、具烈婦なし
逝ってよし、MFC4.2で上等て感じですね。
0328デフォルトの名無しさん
2006/01/17(火) 20:40:39はじめて読むPentium マシン語入門編
蒲地 輝尚
アセングラ系の本はヘたれが書いた本が多いが
この本は優秀な本で、★をつける奴がへたれである。
ーていうと
東大卒業してから発言してね。ーて
0329デフォルトの名無しさん
2006/01/17(火) 20:50:000330デフォルトの名無しさん
2006/01/17(火) 20:55:570331デフォルトの名無しさん
2006/01/17(火) 21:21:27>絶対ダメだ。移行すべきでない。
VC6SP6はM$最高のコンパイラーですかね。
mfcは使いやすいと思いますよ。
フリーソフトのJWCADなんかMFCで作っている割には、
昨今のcpuではさくさく動作しますね。特にファイル開く
時に3×4列のサムネイルが毎回ご丁寧に再描写してくれる
もんで、これでも動くんだと関心してます。
0332デフォルトの名無しさん
2006/01/17(火) 21:40:390333デフォルトの名無しさん
2006/01/17(火) 22:49:50開発環境とコンパイラとEXEがごっちゃになってないか?
0334デフォルトの名無しさん
2006/01/18(水) 01:39:340335デフォルトの名無しさん
2006/01/18(水) 11:00:55開発環境とコンパイラとEXEがごっちゃになってないか?
小室哲也は演奏するときに
左にキーボード
正面にシンセサイザー2段置
右にシーケンサー用キーボード
体が1つなのに一杯並べて1つで言いと思うが
さてここで、プロのプログラマーは、左に開発環境マシーン
正面にコンパイラー 右にEXE用のパソコンと揃えるのか聞きたい。
貧乏な俺は、
1台のマシーンでごっちゃになってる。
これって、普通だと思う。
天田64bitで動く、OS、コンパイラーは特別なのか。
0336デフォルトの名無しさん
2006/01/18(水) 11:24:48>>327
>EDは性器なし
使えないものは無いも同然、か。深いな。
0337デフォルトの名無しさん
2006/01/18(水) 11:51:32メモリーを2G以上、アロケートできるんだぞ。
つまり、VC6でも今までの制約の上限がなくなるわけで
64専用コンパイラーに移植しなくてもメモリー管理を
見直すだけでMFCモッサリ、遅い、糞ということが無くなる。
今流行の外部アレイメモリーは、邪道で、CPUの近くに
好きなだけメモリーを搭載できる。
ーだから天田64bitはどうなの?
お舞等の頭では、理解できないだろ。
俺の脳内は知性のかたまりだ。intel入ってる!
(インテル® EM64T) に対応したシステムでは、
物理メモリ、仮想メモリともに 4 GB 以上のアドレス空間が
利用可能になり、パフォーマンスが向上します。また、
インテル EM64T は
64 ビット・コンピューティングもサポートしているため、
将来のアプリケーション環境にも余裕で対応できます。
0338デフォルトの名無しさん
2006/01/18(水) 11:59:27お舞等の頭では、理解できないだろ
32bitで64bitが動くんたぞ
だからこのマシーンでMFC6を動かした奴はいるのか?
AMD64は、32ビット・コンピューティングと
64ビット・コンピューティングを、同時に、
しかも性能を低下することなく実行できるよう設計されています。
ダイレクトコネクト・アーキテクチャを採用した
AMD64プロセッサでは、すべてをCPUに直接接続することで、
システム・アーキテクチャが直面する課題に対処し、
ボトルネックを軽減します。
0339デフォルトの名無しさん
2006/01/18(水) 15:29:10窓に鉄格子の嵌った病院に早く帰ってくれ。
0340デフォルトの名無しさん
2006/01/18(水) 16:25:36Spy++で動作を追ってみました。
WM_GETDLGCODEの後、ページにDM_GETDEFIDが送られ、ページはid=1を返す。
しかし、ページ上にid=1のボタンが無いので、反応しないようです。
0341デフォルトの名無しさん
2006/01/18(水) 18:07:24分割ウインドウにすると、分割したペインに割り付けたCWndが表示されません。
これはどうしたら治るでしょうか?
0342デフォルトの名無しさん
2006/01/18(水) 21:08:35>絶対ダメだ。移行すべきでない。
あんたが止めても俺は移行することにした。
パラダイス パラダイス
http://wiki.mm2d.net/win64/
動作したやつ †
↑
開発環境 †
↑
統合環境 †
Visual C++ .NET Standard 2003
Visual C++ 6.0
0343デフォルトの名無しさん
2006/01/18(水) 21:15:18はいはい、もう分かったから消えてくれ。
0344デフォルトの名無しさん
2006/01/19(木) 04:16:47この蟲は人間に憑く。普段はおとなしくしているが、
16bit -> 32bit、PC98 -> PC/AT、COM -> .NET のように
移行期になると活動が活発になる。
活発になると憑かれた人間は、盲目的に移行したくなり、
周りの人間も移行させようとし、妙な行動を起こしたりする。
Win95を買うために夜中並んでたのも、おそらく蟲の仕業だろう。
>>325 の行動も蟲に憑かれた人間の典型的な行動だな。
0345デフォルトの名無しさん
2006/01/19(木) 11:46:390346デフォルトの名無しさん
2006/01/19(木) 17:23:27MDI形式のアプリにツールバーをドッキングさせてるのですが、
ツールバー以外の領域の色を変更したいのです。
(ドッキングさせたときに、”ニョキ”って出現する領域のことです)
…わかりにくくて済みません(^^;
この場合、MainFrameで何らかのイベントを取って、変更処理を入れるのか?
それともToolBarの方で何らかのイベントを取って、変更処理を入れるのか?
何らかのイベントも含めて教えて下さい。
よろしくお願いします。
0347デフォルトの名無しさん
2006/01/19(木) 18:38:48>周りの人間も移行させようとし、妙な行動を起こしたりする。
別に某宗教と違って勧誘してませんよ。
君等は一生カローラを乗り続けるつもりか。
今でも箱スカを乗っている人はカッコイイと思うが
VC6にSDKをインストールすれば、環境出来上がりらしい。
報告を求む
0348デフォルトの名無しさん
2006/01/19(木) 18:53:00まず自分で試せよ。クズが。
0349デフォルトの名無しさん
2006/01/19(木) 20:07:060350デフォルトの名無しさん
2006/01/19(木) 20:22:270351デフォルトの名無しさん
2006/01/19(木) 20:44:57ゲイツさまのMSDOSが似合ぞ!
0352デフォルトの名無しさん
2006/01/20(金) 11:35:290353デフォルトの名無しさん
2006/01/20(金) 11:37:19ネタにマジレスする、その行動原理が解らない。
0354デフォルトの名無しさん
2006/01/21(土) 01:49:550355デフォルトの名無しさん
2006/01/21(土) 12:02:24同じような質問なのですが、
MDIでチャイルドウィンドウの背景色を変更する方法ってありませんか?
OnDraw()など再描画が必要なタイミングでクライアントのRectを取って範囲内塗りつぶしとかやったのですが、
メッセージに対応し切れていないらしく、
OpenFileDialogを開いたとき、ウィンドウを移動したときなどなど、表示が崩れます。
OnSize()やOnMove()で同じ処理を入れても、まだ崩れます。
CWndか、その派生のCViewの持っているブラシを変更することができればいい…のですかね?
方法が見当たりませんが。
ダイアログの背景色を変更する方法は見つかったのですが、
そのままCView派生クラスに流用できる方法ではなさそうなので、
ご存知の方がいらっしゃいましたらお願いします。
環境はXP、Pen4、VC++6.0です。
0356デフォルトの名無しさん
2006/01/21(土) 12:21:31あとsdiだろうがmdiだろうがviewは同じ
0357デフォルトの名無しさん
2006/01/21(土) 12:27:08BOOL 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);
}
0358デフォルトの名無しさん
2006/01/21(土) 12:35:33これの方がシンプル。
int elem = COLOR_WINDOW;
COLORREF cr = RGB(0xCC, 0xFF, 0xFF);
SetSysColors(1, &elem, &cr);
0360デフォルトの名無しさん
2006/01/22(日) 02:55:10ダイアログベースのプログラムについてなのですが、
コンストラクタとOnInitDialogの違いって何でしょうか?
0361デフォルトの名無しさん
2006/01/22(日) 03:03:000362デフォルトの名無しさん
2006/01/22(日) 15:37:38これは酷い。
0363デフォルトの名無しさん
2006/01/22(日) 16:08:150364デフォルトの名無しさん
2006/01/22(日) 23:17:41現状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);
0365346
2006/01/23(月) 22:17:11いや、なんか違います。
ビュー云々の話ではなく、
CDockBarの背景色の変え方がわかりません。
がんばって調べているのですが、うーむ…。
ついでになんですが、
CPropertyPageで背景色を変えたときに
タブ部分(つまみ?)だけ色が変わりません。
OnNCPaintで色を変えてみてもダメでした。
がんばって調べますが、知っている方いたら
教えて下さい。
#MFC難しいッス…orz
0366365
2006/01/24(火) 13:48:01CDockBarがどうにも…orz
0367デフォルトの名無しさん
2006/01/24(火) 17:04:47CListView の方で OnUpdate() しなくても
追加した項目は表示されるんですか?
0368デフォルトの名無しさん
2006/01/25(水) 00:19:54コンストラクタはダイアログクラスの初期化ですよね。
OnInitDialogはダイアログの初期化ですよね。
どちらも初期化ですし、何か似てるのでどっちで初期化を少しだけ迷うのですよ。
メンバ変数はコンストラクタとか、SetTimer()みたいに
ウィンドウズっぽいものはOnInitDialogへとか、
なんとなくはわかるんですが、クリアにわかってないんです。
0369デフォルトの名無しさん
2006/01/25(水) 00:21:590370デフォルトの名無しさん
2006/01/25(水) 00:27:450371デフォルトの名無しさん
2006/01/25(水) 00:29:45大体そんな感じでOK.
0372デフォルトの名無しさん
2006/01/25(水) 00:33:22コンストラクタの時点とOnInitDialogの時点での
ダイアログの状態の違いは何だ?
0373デフォルトの名無しさん
2006/01/25(水) 06:09:340374デフォルトの名無しさん
2006/01/25(水) 08:14:39たとえば new と delete とか
MFCの場合は基底クラスを継承して使うから
用がなければコンストラクタは使わなくてもいい。
0375デフォルトの名無しさん
2006/01/25(水) 12:18:51MSDN の「ダイアログ ボックスの作成と表示」にも
>ダイアログ オブジェクトの作成は 2 段階で行います。
>第 1 段階でダイアログ オブジェクトを構築し、
>第 2 段階でダイアログ ウィンドウを作成します。
と書かれている通り
第 1 段階 → コンストラクタによるインスタンス初期化
第 2 段階 → Create() メンバ関数によるウィンドウ作成・初期化
(実際にウィンドウが作られた後、OnInitDialog() が
呼び出される)
なので、その「なんとなく」は概ね正解。
0376デフォルトの名無しさん
2006/01/25(水) 15:18:49OnInitialize セックル
delete 別れ
ASSERT 妊娠
0377デフォルトの名無しさん
2006/01/25(水) 22:38:140378368
2006/01/25(水) 23:50:37ありがとうございました。
0379デフォルトの名無しさん
2006/01/25(水) 23:59:07>>373が正解で、
ウィンドウが存在するかしないか、
ウィンドウハンドルが有効か無効か、の違い。
「ウィンドウズっぽいもの」とか言ってたら恥ずかしいぞ。
0380デフォルトの名無しさん
2006/01/26(木) 00:10:380381デフォルトの名無しさん
2006/01/26(木) 01:19:26なんの価値もないレスだな。
わざわざそんないやみ言う必要があるんかい
0382デフォルトの名無しさん
2006/01/26(木) 13:50:26普通にON_WM_LBUTTONDOWN( ) afx_msg void OnLButtonDown( UINT, CPoint ); で、
いいけどCMiniDockFrameWndに入ってたりするときもあるのでそこでも
ON_WM_LBUTTONDOWN( )とかいる。
0383デフォルトの名無しさん
2006/01/26(木) 16:44:57複数行のタブ時に、
デフォルトでは、一番下の行以外の行のタブをクリックすると、
クリックしたタブの行が一番下にシフトされてしまいます。
この機能をなくしたいんですけど、なんとかならないでしょうか?
よろしくお願いします。
0384デフォルトの名無しさん
2006/01/26(木) 17:07:190386380
2006/01/26(木) 22:53:39そのあたりをうまいこと隠してしまっていたので困っていたのですが、
その感じだとどうもメッセージはきちんと送られていて、受け取れるみたいですね。
ということはWizardに頼らずに手書きでやればどうにか実装できるという事ですかね。
ちょっといろいろ試してみます。
ありがとうございました。
0387デフォルトの名無しさん
2006/01/27(金) 13:59:36ウィザードで派生クラス作ればいいよ。
ツールバーのクラスはCMainFrameにあるのを自分の作ったのに置き換えて
CMiniDockFrameWndは
m_pFloatingFrameClass = RUNTIME_CLASS(MyMiniDockFrameWnd) ;
をCMainFrame::OnCreate()で
0388デフォルトの名無しさん
2006/01/27(金) 20:12:08間違えて追加してしまったリソース、必要なくなったソースファイル、
入力をミスったシンボル、その他諸々どうしています?
プロジェクトから作り直すのも手間ですし、
何か削除する方法はないのですかね?
シンボルは未使用のものに限り、シンボルブラウザで消せるみたいですが。
0389デフォルトの名無しさん
2006/01/27(金) 21:29:10おかしくなったらマイクロソフトの責任。と自分に言い聞かせながら
0390デフォルトの名無しさん
2006/01/27(金) 21:39:500391デフォルトの名無しさん
2006/01/27(金) 21:45:130392390
2006/01/27(金) 21:52:190393デフォルトの名無しさん
2006/01/27(金) 22:01:41おかしなことになるので注意が必要だ。
0394デフォルトの名無しさん
2006/01/27(金) 22:19:190395394
2006/01/27(金) 22:20:240396デフォルトの名無しさん
2006/01/27(金) 22:22:160397デフォルトの名無しさん
2006/01/27(金) 22:50:500398デフォルトの名無しさん
2006/01/29(日) 03:59:18エレガントな方法って、何かありますか
調べてはみたんですが。ピンと来るものが無くて・・
0399デフォルトの名無しさん
2006/01/29(日) 10:24:04つ[FlexGrid]
0400デフォルトの名無しさん
2006/01/29(日) 12:30:55つExcelCOM
0401デフォルトの名無しさん
2006/01/29(日) 12:32:31エレガントにサラサラっと自作。チョロいもんだ。
0402デフォルトの名無しさん
2006/01/29(日) 17:26:58>>399
中々良さ気ですね
環境的には、アプリ起動の時、MFC42DLLさえあればOKですか?
>>400
COMと言う事は、エクセルがインストールされていないと
APLを作成できない・動かない・・ですか?
0403デフォルトの名無しさん
2006/01/29(日) 17:39:52FlexGridは、VC6ならMicrosoft版(MicrosoftFlexGrid)がバンドルされているからocxがあればいいはず。
VC7以降はバンドルされていないから、製品版(FlexGridPro)を買わないとダメ。
Excelがインストールされているなら、名前は忘れたけどFlexGridに似たようなOCXが使えたはず。
0404デフォルトの名無しさん
2006/01/29(日) 17:44:22「工夫」すれば何とかなりそうなんですが・・・
0405デフォルトの名無しさん
2006/01/29(日) 17:58:50そうだったっけ。それだったら、セルをクリックされたらそのセルに重ねてEditはっつけるとか。
#って、そこまでするならListCtrlでも入力可能なようにみせることが可能だけど。
##そのような例は、確かCodeGuruで幾つか見つけた希ガス。
0406デフォルトの名無しさん
2006/01/29(日) 18:07:26エクスプローラでのファイル名の変更のときも
一時的にEditが貼り付けられてる
0407デフォルトの名無しさん
2006/01/29(日) 19:01:280408デフォルトの名無しさん
2006/01/29(日) 19:10:47実際には動かしていませんが、そんなこと書いてあるサイトがありました
>CodeGuru
初耳なので、ちょいと調べてみます
>>407
なるほど・・
ひょっとしてエクセルも、そうやってるんですかね??
0409デフォルトの名無しさん
2006/01/29(日) 19:15:03タイマーとか使ってさ。
0410デフォルトの名無しさん
2006/01/29(日) 22:12:41http://www.codeproject.com/miscctrl/gridctrl.asp
0411デフォルトの名無しさん
2006/01/30(月) 11:03:51タイムスタンプ更新されるから関連ソースは自動的にリコンパイルされんか?
0412デフォルトの名無しさん
2006/01/30(月) 11:30:19resource.hだけ特殊で
//{{NO_DEPENDENCIES}}
が書かれてるので依存関係が無視される。
なのでリビルド必須。
コントロール貼るたびに、
依存関係によって、すべてのソースが再コンパイルされたら大変だからな。
0413デフォルトの名無しさん
2006/01/30(月) 23:11:27ドラッグしたときなどに、マウスカーソルが変わったり、
枠が表示されたり、画像が表示されたりするアプリケーションが沢山あるわけですが、
あれはどうやって実装するのでしょうか?
アバウトな質問で申し訳ありませんが、
何か調べるor考えるための取っ掛かりが欲しいのです。
0414仕様書無しさん
2006/01/30(月) 23:28:10そのサイトのMFC Grid controlが、CodeGuru の発展形みたいです。
これを使うか、>>405 の様にMSFlexGridに、Editを貼りつけるか・・
(唯。これは貼り付ける時に座標指定が微妙みたいですが・・)
簡単なコントロールがあると思ったのですが、意外と面倒そうです。
あんまり、こう言う入力の仕方は需要が無いんですかね??
0415デフォルトの名無しさん
2006/01/30(月) 23:43:22クライアント領域に二種類のViewを貼り付けるにはどうすればいいでしょうか?
できればSplitterのように動かせたりしないものがいいです。
0416デフォルトの名無しさん
2006/01/30(月) 23:58:35ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/cursors/aboutcursors.asp
0417デフォルトの名無しさん
2006/01/31(火) 09:15:25いったい何がやりたいんだ?
0418デフォルトの名無しさん
2006/01/31(火) 09:26:48Viewに子ウィンドウを2枚貼り付ければいいじゃない。
0419デフォルトの名無しさん
2006/01/31(火) 14:12:40それに対するイベントハンドラが呼ばれるとき,
これはあらたなスレッドが起こされて処理されるんでしょうか?
0420デフォルトの名無しさん
2006/01/31(火) 15:23:56こんにちは。
イベントハンドラの中でSleep()してみると分かりますよ。
VOID Sleep(
DWORD dwMilliseconds // 中断の時間
);
0421デフォルトの名無しさん
2006/01/31(火) 16:16:50ありがとうございます
やってみたところ処理が止まるので
あらたなスレッドが起きるわけではないのですね
0422デフォルトの名無しさん
2006/01/31(火) 18:10:37ベースラインより下の部分の空白を取り除くために、
CHARFORMAT構造体のyOffsetメンバを用いたのですが、
「-」の値を入れても認識してくれず、下にずれてくれません。
フォントの関係等でできないのでしょうか?
yOffset以外で現在CHARFORMAT構造体に設定しているのは
cf.bPitchAndFamily = FIXED_PITCH | FF_SWISS;
strcpy(cf.szFaceName, "FixedSys");
です。
よろしくお願いします。
0423デフォルトの名無しさん
2006/02/02(木) 19:13:030424デフォルトの名無しさん
2006/02/02(木) 22:45:09何をつかってフォントを作りますか?
CreateFontはパラメータがいっぱいあってしかもちょっと間違えると
ぜんぜん違うフォントが勝手に選ばれるし。
あれってもうどのシステムでも絶対あるフォントを決まった幅とか高さとかその他のパラメータ
の組み合わせのみを与えるしか使いようがなくないですか?
0425デフォルトの名無しさん
2006/02/02(木) 22:58:02LOGFONT 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);
とか。
0426デフォルトの名無しさん
2006/02/02(木) 23:14:57ありがとう。そんな難しいやり方ぜんぜん思いつきませんでした。
高さを14Ptにしたかったらどうすればよいのですか・・?
なんども聞いてすいません。
0427デフォルトの名無しさん
2006/02/02(木) 23:19:17それ9ptじゃね?
0428デフォルトの名無しさん
2006/02/02(木) 23:31:57コピペした時、直し忘れた。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
0429デフォルトの名無しさん
2006/02/02(木) 23:43:44ありがとうございます。さっそくありがたく使わせていただきます。
0430デフォルトの名無しさん
2006/02/02(木) 23:48:180431デフォルトの名無しさん
2006/02/02(木) 23:54:39MulDivの存在意義
0432デフォルトの名無しさん
2006/02/03(金) 01:15:48protected:
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はスコープ外になってしまう言うことになると考えて良いでしょうか。
少し混乱しています。この疑問について教えてください。
よろしくお願いします。
0433デフォルトの名無しさん
2006/02/03(金) 02:05:14登場人物がひとりだからデッドロックにはならないだろう。
CSingleLock SLA(&m_cs, TRUE);
CSingleLock SLB(&m_cs, TRUE);
2回目は無視される?
0434デフォルトの名無しさん
2006/02/03(金) 10:11:12ttp://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.
0435デフォルトの名無しさん
2006/02/03(金) 10:28:02各スレッドはクリティカルセクションの所有権を取得した後は、自らの実行を
ブロックすることなく、EnterCriticalSection または TryEnterCriticalSection 関数を
追加で呼び出すことができます。
この結果、スレッドが既に自ら所有しているクリティカルセクションを
待機しようとしてデッドロックに陥ることを防止できます。
以下略
0436デフォルトの名無しさん
2006/02/03(金) 12:45:05コマンドハンドラ内でそのコマンド(メッセージ)が、どのウィンドウに向けて送られたか分かるのでしょうか?
CWnd::GetCurrentMessage()で取れるかと思ったらprotectedでした。orz
ご存じの方いましたら教えてください。
0437デフォルトの名無しさん
2006/02/03(金) 13:13:05そこから先はメッセージマップによる
0438デフォルトの名無しさん
2006/02/03(金) 13:19:460439デフォルトの名無しさん
2006/02/03(金) 13:23:53コマンドを発動させる方法はメニューだけでなく
アクセラレータとかツールバーとかいろいろあるから、
どのウィンドウに送られたかなんて一概には言えないし、言う意味がない。
0440デフォルトの名無しさん
2006/02/03(金) 13:27:49それはMFCが内部でやってくれてるだけだ
0441デフォルトの名無しさん
2006/02/03(金) 13:49:100442436
2006/02/03(金) 13:52:44>>437,438
知りたいのは、「(最初に)送られた先のウィンドウハンドルを取得したい」ということです。
その後のメッセージマップは今は問題にしていません。
TrackPopupMenuを使えば、送り先のウィンドウは自由に指定できるので、フレームウィンドウとは限りません。
>>439
コマンドを送る場合には、必ず送り先のウィンドウを指定しなければならないと思います。
(アクセラレータやツールバーであっても内部的にはそうなっているのでは?)
コマンドがウィンドウ自体に関することであれば、どのウィンドウに送られたか言う意味が出てきます。
0443デフォルトの名無しさん
2006/02/03(金) 13:54:47それをPreTranslateMessage内でキャッチしたいのですが、
SendMessage(WM_APP, 0, 0);
で発行しても、キャッチできません・・・
PostMessage(WM_APP, 0, 0);
だと、ちゃんとメッセージが飛んでくるのですが・・・
SendMessageでViewクラスからViewクラスにメッセージを送るには、どうしたら良いのですか?
また、なんで、PostMessageだと大丈夫なのですか?
0444デフォルトの名無しさん
2006/02/03(金) 14:12:04PostMessageはメッセージをキューに入れるだけなので流れが少し違う、
このへんの違いはぐぐればすぐ見つかるんじゃないか?
0445デフォルトの名無しさん
2006/02/03(金) 14:20:29なにが聞きたいのかよくわからんね。
MFCのメッセージルーティングとかの類の理解が足りないんじゃないか?
>知りたいのは、「(最初に)送られた先のウィンドウハンドルを取得したい」ということです。
答えはこのあたりと予想。
>現在アクティブな子コマンド ターゲット オブジェクト
>コマンド ターゲット自身
>その他のコマンド ターゲット
0446443
2006/02/03(金) 14:28:10ウィンドウプロシージャで処理出来ました
PreTranslateMessageでなんでも捕まえられると思ってました・・・
0447デフォルトの名無しさん
2006/02/03(金) 14:51:33アプリ側でそういう仕組みを作らなきゃ駄目だと思う。(フックするとか)
>コマンドがウィンドウ自体に関することであれば、どのウィンドウに送られたか言う意味が出てきます。
そのウィンドウに関係するコマンドなら、そのウィンドウで処理した方がいいんじゃないの?
0448チラシの裏
2006/02/03(金) 14:55:380449チラシの裏の裏
2006/02/03(金) 15:00:540450デフォルトの名無しさん
2006/02/03(金) 15:02:200451デフォルトの名無しさん
2006/02/03(金) 15:02:53呼ばれないときが時々あるきがするんですが
0452デフォルトの名無しさん
2006/02/03(金) 15:06:43それは非公開関数では?
0453436
2006/02/03(金) 15:40:03ありがとうございます。まさにこれが求めていた答えです。
>>447
>>そのウィンドウに関係するコマンドなら、そのウィンドウで処理した方がいいんじゃないの?
それはそうなんですが、複数のウィンドウクラスに同じコマンドを送っているので、処理を1カ所に記述したかったのです。
それらの共通の親クラスを定義して...とも思いましたが、CWinAppで処理できるならそちらの方が簡単なので。
0455デフォルトの名無しさん
2006/02/03(金) 16:09:430456デフォルトの名無しさん
2006/02/03(金) 16:50:330457デフォルトの名無しさん
2006/02/03(金) 16:52:39>>292
0458デフォルトの名無しさん
2006/02/03(金) 17:28:37ビューが複数あるってことか?
ビューもウインドウだろうけどビューのことウインドウとは呼ばんな
0459デフォルトの名無しさん
2006/02/03(金) 17:45:23・現在のアクティブなビュー
・マウスポインタの位置にあるビュー
のどっちかしかないし
0460デフォルトの名無しさん
2006/02/03(金) 19:03:19ウィンドウと全然関係なくなくなってるのが痛い
0462デフォルトの名無しさん
2006/02/04(土) 02:24:52メモリDCとMM_ANISOTROPICで拡縮させたいのですが
拡縮が上手くいきません。
メモリDC作成は上手くいっているのは確認できましたが、
拡縮が上手くいきません。
0463462
2006/02/04(土) 02:25:42void 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);
}
0464デフォルトの名無しさん
2006/02/04(土) 08:05:08create
connect
send
OnRecieve
で、サーバにGETした要求がレスポンスされデータがうまく受信できました。
その後なんですが、
OnCloseが呼び出され、回線が切断されます。
再度sendを呼び出そうと思い、
connect
を呼び出すと、エラー(WSAENOTSOCK)になってしまいます。
で、再度
create
をして、
connectすると、回線が接続されます。
これはsendでデータ送信すると必ずOnCloseされ、
再度データ送受信をしたい場合は、再度createをしないといけないという仕様なのでしょうか?
OnCloseされても、再度connectすれば回線接続されるとばかり思ってました。
私の勘違いなのでしょうか?
0465デフォルトの名無しさん
2006/02/04(土) 09:06:28「上手くいかない」じゃわかんねえよ。
現象を具体的に説明しろよ。
0466デフォルトの名無しさん
2006/02/04(土) 09:11:39何やってるのか分かりやすく説明しろよ。
行数の割に中身は空っぽじゃないか。
そんなんで分かるわけないだろ。エスパーじゃあるまいし。
0467デフォルトの名無しさん
2006/02/04(土) 09:34:47StretchBlt()とかStretchDIBitsは?
0468デフォルトの名無しさん
2006/02/04(土) 16:16:38拡大縮小されません。
>>464
http://forums.belution.com/ja/vc/000/347/91.shtml
>>467
MM_ANISOTROPIC限定でお願いします。
0469デフォルトの名無しさん
2006/02/04(土) 16:47:03MFC使うくらいなら Windows Forms の方が1000倍マシだわ。
0470デフォルトの名無しさん
2006/02/04(土) 17:41:07FormsとMFCを比較するツワモノ
0471デフォルトの名無しさん
2006/02/04(土) 17:43:06>MM_ANISOTROPIC限定でお願いします
何を?
0472デフォルトの名無しさん
2006/02/04(土) 18:04:47それを利用した拡縮の事
0473デフォルトの名無しさん
2006/02/04(土) 18:52:21ラスタ画像でもできたっけ?
0474デフォルトの名無しさん
2006/02/04(土) 19:22:03関数わけちゃってるのが問題のような気もするけど
調べんのめんどくさいや
0475デフォルトの名無しさん
2006/02/05(日) 02:30:170476デフォルトの名無しさん
2006/02/05(日) 13:08:311:1で描かれるということですか。
とりあえず、ClipBoxの替りに(0, 0, BMP_WIDTH, BMP_HEIGHT)で試すとどうなりますか。
というか、ClipBoxはこのような目的では使いません。
0477デフォルトの名無しさん
2006/02/05(日) 19:51:12拡縮されるようになりました!
しかし、拡大は大丈夫ですが、縮小時に画像にノイズが出ます。
所々に赤や紫の線が・・。
0478デフォルトの名無しさん
2006/02/05(日) 20:00:55縮小するときのどのピクセルを間引くかというのは難しい話。
少しは勉強しなさい。
ちなみに、Windows標準のペイントで縮小してみたら、
Windowsの縮小アルゴリズムの頭の悪さは分かるだろう。
0479デフォルトの名無しさん
2006/02/05(日) 20:29:14間引きや補間が原因ではないと思う。
0480デフォルトの名無しさん
2006/02/05(日) 21:14:28void CMyDlg::OnBnClickedButton1()
{
// TODO : ここにコントロール通知ハンドラ コードを追加します。
ShellExecute(NULL, "open","explorer.exe",NULL,NULL,SW_SHOWNORMAL);
}
でいいと思うんだが、VC2005のMFCではLPCWSTRに変換できないとか出る。
2003からアップグレードしたプロジェクトのShellExecuteは正常に実行できるのに…。
↑のコード間違ってます?
0481デフォルトの名無しさん
2006/02/05(日) 21:26:07だめならBitBlt()はあきらめてください。
ところで、最初のコードだとどのようになったのですか。
1:1で出力される/描画せず/でたらめな絵が出る/終了する
0482デフォルトの名無しさん
2006/02/05(日) 22:02:55何言っての良くわかんないけど
UNICODEビルドになってんじゃないの?
そのまま通したければ
ShellExecute(NULL, _T("open"),_T("explorer.exe"),NULL,NULL,SW_SHOWNORMAL);
これでどう?
0484デフォルトの名無しさん
2006/02/05(日) 23:29:050485デフォルトの名無しさん
2006/02/06(月) 00:56:42DirectShowのレンダラはサイズを変えても綺麗に表示されるけど。
あと、それらはグラフィックボードの機能に依存しますか?
つまりStretchBltでもあるマシンでは綺麗で別のマシンではつぶれるなど。
0486デフォルトの名無しさん
2006/02/07(火) 00:50:460487デフォルトの名無しさん
2006/02/07(火) 00:51:54DirectXは使って無いです
0488デフォルトの名無しさん
2006/02/07(火) 02:02:030489デフォルトの名無しさん
2006/02/07(火) 02:37:18そして、StretchBlt()の縮小のデフォルト動作は、重なる色のANDを採ると思います。
つまり、予期せぬ色が出る可能性があります。
試しに、BitBlt()の前にSetStretchBltMode(COLORONCOLOR);。
これで駄目だったら、BitBlt()はあきらめ、SetStretchBltMode()とStretchBlt()。
0490デフォルトの名無しさん
2006/02/07(火) 09:13:100491デフォルトの名無しさん
2006/02/07(火) 17:26:21ってことをやりたい。
具体的に講じた手順は以下。
MFCを使ってDLL1を作成。
DLL1のtheAppは「DoModalされているダイアログのポインタ」を格納する
CObArray m_DialogPointerArrayをメンバーとして持つ。
CFileDialog(CDialogではない)を継承したダイアログを
newしてDoModalさせ、m_DialogPointerArrayにポインタを登録。
DoModal中に他DLLからDLL1に「今の処理を全部終了」命令を飛ばす。
命令を受け取ったDLL1はCObArrayにポインタを格納されたダイアログを
片っ端から削除(EndDialog)していく。
が、普通にCDialogから生成したダイアログは上記でうまく
消えてくれるのだが、CFileDialogを継承したものは消えてくれない。
(続く)
0492デフォルトの名無しさん
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の中を追っていくと完全に独自実装されている模様。
解決法はそもそもあるのかないのか?
あるなら教えてください。
0493デフォルトの名無しさん
2006/02/07(火) 17:30:19プログラムから直接コントロールしてダイアログを終了させたいと?
0494デフォルトの名無しさん
2006/02/07(火) 17:35:24そう。
例えば通信中にいきなり切断されるとかそういうの。
0495デフォルトの名無しさん
2006/02/07(火) 17:35:590496デフォルトの名無しさん
2006/02/07(火) 17:36:020497デフォルトの名無しさん
2006/02/07(火) 17:38:390498デフォルトの名無しさん
2006/02/07(火) 17:40:23ラッピングして呼んだが無理。
deleteもダメ。
0499デフォルトの名無しさん
2006/02/07(火) 18:28:42知っているかね。
0500デフォルトの名無しさん
2006/02/07(火) 18:37:270501デフォルトの名無しさん
2006/02/07(火) 18:47:020502デフォルトの名無しさん
2006/02/07(火) 18:54:55それが解決方法につながれば。
0503デフォルトの名無しさん
2006/02/07(火) 19:55:02pDialog->PostMessage(WM_COMMAND, MAKELONG(IDCANCEL, BN_CLICKED), (LPARAM)pDialog->GetSafeHwnd());
0504デフォルトの名無しさん
2006/02/07(火) 20:02:520505デフォルトの名無しさん
2006/02/07(火) 23:23:22今環境がないので明日試します。
報告はその時。
サンキュウ。
0506デフォルトの名無しさん
2006/02/08(水) 02:06:230507 ◆G...gjbMvE
2006/02/08(水) 07:47:340508デフォルトの名無しさん
2006/02/08(水) 09:57:32504でできました。
>504
サンキュー。
あんたすげえよ。
>503
やってないけど、ありがとうな。
0509デフォルトの名無しさん
2006/02/08(水) 16:39:33コントロールがクリックされたっていうメッセージを
そのコントロール自身がうけとって処理するのってどうするんですか?
クリックイベントはViewでは受け取れるんですがコントロールの中では
受け取れないんで、困っています。
0510デフォルトの名無しさん
2006/02/08(水) 16:43:09FormView以外のViewに貼るのは特殊。そりゃ困るだろ。
0511デフォルトの名無しさん
2006/02/08(水) 16:45:06>そのコントロール自身がうけとって処理するのってどうするんですか?
コントロールの派生クラスは?
0512デフォルトの名無しさん
2006/02/08(水) 16:52:40レスしやすいと思うよ。
0513デフォルトの名無しさん
2006/02/08(水) 17:30:200514デフォルトの名無しさん
2006/02/08(水) 17:50:34一応CStaticです。
CStaticのサブクラスを作ってそこにCButtonとか
いろいろつけようと思ってるんですけど、
CButtonをクリックしたっていうメッセージは
そのコントロールで処理できるんですけど
そのコントロール自体がクリックされたっていうメッセージを
そのサブクラス内で受け取れないんです。
説明不足ですみませんが、お願いします。
0515デフォルトの名無しさん
2006/02/08(水) 18:06:41クリックされたっていうメッセージを投げる
0516デフォルトの名無しさん
2006/02/08(水) 18:15:38CButtonのサブクラスからCStaticのサブクラスに
メッセージを投げるのは、具体的にどうするか
教えてもらいたいんですが。
0517デフォルトの名無しさん
2006/02/08(水) 18:19:34<516
すみません。
CButtonは関係なくてCStaticがクリックされたていう
メッセージをCStatic自身で受け取る方法を知りたいんですけど。
わかりづらくてすみません。
0518デフォルトの名無しさん
2006/02/08(水) 18:23:22コントロールを貼ったりそういうことをするのに向いてない。
0519デフォルトの名無しさん
2006/02/08(水) 18:34:05>>512 の質問を答えなければ答えにくい。
0520デフォルトの名無しさん
2006/02/08(水) 18:37:09CStaticのサブクラス内でWM_LBUTTONDOWNなりWM_LBUTTONDBLCLK
のハンドラを追加。
さらに、コントロールのstyleにSS_NOTIFYを追加。
Dialogベースの例だけど↓
ttp://www.athomejp.com/goldfish/mfc/static/onclick.asp
0521520
2006/02/08(水) 18:45:05CStaticのサブクラス内でWM_LBUTTONDOWNなりWM_LBUTTONDBLCLKなり
BN_CLICKEDのハンドラを追加。
0522デフォルトの名無しさん
2006/02/09(木) 09:29:22class 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上で作成してみたんですけど。
0523デフォルトの名無しさん
2006/02/09(木) 09:57:07ハンドリングするのはWM_LBUTTON*だろ。
0524520-521
2006/02/09(木) 10:58:46なんか全く無視されてしまったようだけど・・・
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
多少参考になると思うが
0525デフォルトの名無しさん
2006/02/09(木) 11:19:18すみません。無視する形になって、
自分なりに520-521のおっしゃられたとおりやってみた
つもりだったんですけどだめだったみたいですね。
524の1)に変更してみましたらゲットできました!
ありがとうございます。
0526デフォルトの名無しさん
2006/02/09(木) 11:28:170527デフォルトの名無しさん
2006/02/09(木) 18:29:12「MessageBoxを表示中に他DLLから終了メッセージが来たらMessageBoxも終了させる」
ということをやりたい。
MessageBoxがコードの中に結構な勢いで埋まっているので
なんとか少ない手数で修正したい。
現状使用しているのは全てCWndのMessageBoxメソッド。
Class::Method()
{
CString strCaption = GetCaption();
CString strText = GetText();
MessageBox(strText, strCaption, MB_ICONWARNING | MB_OK);
/*以下処理*/
}
みたいな感じ。
結構/*以下処理*/の部分でアプリごと落ちる。
(続く)
0528デフォルトの名無しさん
2006/02/09(木) 18:30:301.現状の方法の延長でなんとかMessageBoxクラスで生成するダイアログを捕まえて殺しに行く。
2.現状の方法をあきらめてMessageBoxと同じ機能を持った別クラスを用意して実装する。
3.現状の方法をあきらめて気合で全MessageBoxを個別にCDialogに乗せかえる。
の3パターンが考えられると思うが、どれが良いのだろう。
2はかなり大変そう(あくまで予想)。
3はおそらく解決するだろうがマンパワーが必要だし、スキルのアップにならない。
ちゅうことで、できれば1で。
無理だったら諦めて2か3の方法で。
知恵を貸してください。
0529デフォルトの名無しさん
2006/02/09(木) 18:39:43メッセージボックスをやめてログウィンドウとか作れ。
0530デフォルトの名無しさん
2006/02/09(木) 18:55:46書き方が悪かった。
落ちるのは原因が分かっている。
だからログとか取る必要はない。
別スレッドから親クラスが死ぬと自動的にメッセージボックスが死ぬ。
がPCが残っているので死んだはずのクラス(上記のClass)のメソッド
(上記で言えば/*以下処理*/の部分)をプログラムが進行する。
それはチェックすれば良いだけなので死ぬこと自身は問題ない。
最初にも書いているがやりたいことは
Modalで走っているMessageBoxのダイアログを別スレッドから殺したいということだ。
0531デフォルトの名無しさん
2006/02/09(木) 19:29:01いちいちメッセージボックスを出さなくても、
その内容をログ用のリストボックスとかに追加したりしていけばいいだろ?
頻繁にメッセージボックスが出てくるアプリなんかうざいだろう。
あとCWnd::MessageBox()のソースくらい見れ。
中で::MessageBox()呼んでる。
0532デフォルトの名無しさん
2006/02/09(木) 20:26:57探すしかねーだろ。
0533デフォルトの名無しさん
2006/02/09(木) 21:59:00MFCでプログラムを実行してウィンドウに表示される画像をaiかepsにしてWordなどの文書に貼り付けるにはどうしたらよいのでしょうか?
何かソフトを使って切り取ると聞いたのですが詳細がわかりません。
よろしくお願いいたします!
0534デフォルトの名無しさん
2006/02/09(木) 22:41:24Wordなどに貼り付ける
0535デフォルトの名無しさん
2006/02/09(木) 22:52:35アクティブなウィンドウのみだったら
Altを押しながらPrintScreen。
卒論か何かだろ?ガンガレよ。
0536デフォルトの名無しさん
2006/02/09(木) 22:53:27別スレッドでいいんだよね? 別タスクじゃないよね?
だったら、HWNDを確保して PostMessage( WM_CLOSE で解決しないかな?
0537デフォルトの名無しさん
2006/02/09(木) 23:04:19違います別タスクです。その場合はどうすればいいのでしょう?
0538デフォルトの名無しさん
2006/02/09(木) 23:38:27見るくらいなら書く前に見た。
::MessageBox()のなかで結局入力待ちになる。
そこの部分のコードは変更が効かない。
というか、何回も書くが解決したいのは
「MessageBoxが生成するダイアログを別スレッドからの命令で殺す」
ということだ。
悪いけど「アプリが悪い」とか話を変えないでくれ。
>>532
おぉ、サンキュウ。
今環境が手元にないから確認できないんだけど
staticに生成されるMessageBoxクラスの子ダイアログとして生成されるんじゃないのか?
違うか?
そこからでもなんとでもなるのか?
とにかく明日一度スパイで見てみる。
>>536
その確保するためのHWNDをMessageBoxから取得する方法があるんだろうか?
俺は無知なために知らない。
0539デフォルトの名無しさん
2006/02/09(木) 23:40:44適当書かないでくれ。
0540533
2006/02/10(金) 13:21:56>>535
スミマセンダメでしたorz
exeだからダメなのでしょうか?
もともと専門ではなくCの知識しかないのでよくわかりません(><)
卒論頑張ってるんですケド。。。
0541デフォルトの名無しさん
2006/02/10(金) 13:58:52ai, eps はドロー(ベクター)系のデータみたいだな。
PrtScはビットマップだからデータ形式がまったく異なる。
ai, eps の詳細は知らないから俺は何もいえないけど。
0542デフォルトの名無しさん
2006/02/10(金) 14:18:15532の言うとおり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
サンキュウ
0543デフォルトの名無しさん
2006/02/10(金) 20:50:50MFCで自作のライブラリを使ってみようと思い、使ってみたんですが
↓のようなリンクエラーがずらっと出てきました。
また、ライブラリ使わずに使う関数が書かれた.cppと.hをプロジェクトに入れて
ビルドしたら普通に成功しました。
なぜなんでしょうか?
AI_chapter2 error LNK2005: _free は既に msvcrtd.lib(MSVCR71D.dll)
で定義されています。
0544デフォルトの名無しさん
2006/02/10(金) 21:02:02いやマジで
0545デフォルトの名無しさん
2006/02/10(金) 21:08:34MFCと無関係
0546デフォルトの名無しさん
2006/02/10(金) 21:09:070547デフォルトの名無しさん
2006/02/10(金) 21:20:15あったのでリンクエラーとなった。
0548デフォルトの名無しさん
2006/02/10(金) 22:15:280549543
2006/02/10(金) 22:44:18まあ、とりあえず報告っと
#pragma comment(lib,"自作のライブラリ")
でライブラリをリンクするとエラーが出る。
プロパティ→リンカ→入力→依存の追加ファイル
で自作のライブラリをリンクするとエラーが出ない。
正常にビルドできた。
これ↓を見る限り、リンクの順番が関係してるのかもしれない・・
http://support.microsoft.com/default.aspx?scid=kb;ja;148652
しかし、↑この解決策では駄目だった。
0550デフォルトの名無しさん
2006/02/10(金) 22:50:05よって、その解決方が正解
0551デフォルトの名無しさん
2006/02/10(金) 22:51:15リンクしたのか、シングルsureddo用を
リンクしたのか確認し、使うときにも乱タイムがどっちになっているのか
かくにんしないとけない。
0552デフォルトの名無しさん
2006/02/11(土) 03:18:06ふと気になったことを質問させて下さい。用語の誤用などあればすみません。
ダイアログベースだと、CDlgから派生させたメインのダイアログオブジェクトを、
CAppのInitInstance内で作成してます。つまり、オブジェクトはスタックに
確保されているんですよね。なぜ、newでメモリを確保しないのでしょう?
もちろん、サイズ的に余裕である事が明らかなら別に構わないのでしょうが、
あえてnewしない(自動変数というのでしょうか)メリットが思いつきません。
「deleteとか面倒だし」以外に大人の事情があったりするのでしょうか?
// デフォルトのスタックサイズは1MBで、sizeofは100だったので、
// 確かに余裕っちゃ余裕っぽいんすけど
0553デフォルトの名無しさん
2006/02/11(土) 03:52:340554デフォルトの名無しさん
2006/02/11(土) 06:16:33いちいちnewしてたらめんどくさくて使ってられないだろ
めんどくさいことやんなくていいために存在するクラスなんだし
0555デフォルトの名無しさん
2006/02/11(土) 08:53:49動的に任意の数のダイアログを作りたい場合はnewするしかないのでは?
そういえばモードレスダイアログの場合はnewしてdelete thisで自殺させるよね
0556デフォルトの名無しさん
2006/02/11(土) 11:48:35deleteとか面倒だし、というのは立派な理由に思える。
スタック上に作成できる場合はそうできるのが
C++のメリットのひとつじゃまいか?
0557デフォルトの名無しさん
2006/02/11(土) 11:52:39君の感性に合わないならば書き直してnewすれば?
554の言うとおり、CStringやCPoint,CSizeなんかもちゃんとnewしろよと・・・
0558デフォルトの名無しさん
2006/02/11(土) 11:57:290559デフォルトの名無しさん
2006/02/11(土) 11:58:430560デフォルトの名無しさん
2006/02/11(土) 13:20:11あれ全部mallocでしょ?
0561デフォルトの名無しさん
2006/02/11(土) 23:49:050562デフォルトの名無しさん
2006/02/11(土) 23:55:030563561
2006/02/12(日) 00:24:34あっ、その人組み込み系の人だから。多分そうだと思う
0564552
2006/02/12(日) 02:51:27たくさんのお返事ありがとうございます。
色々聞いてすっきりしましたです。
経験の浅い趣味グラマなんすけど、最近メモリ関連の知識を仕入れて、
そういや何でnew/mallocって必要なんだろうと見つめ直してたお年頃なのです。
勉強になりました。ありがとうございました
0565デフォルトの名無しさん
2006/02/12(日) 20:07:21Win32アプリから呼び出したいんですが、どうすれば可能でしょうか?
0566デフォルトの名無しさん
2006/02/12(日) 21:45:22カスタムドローのCDDS_PREPAINTでNULL_BRUSHを使って
クライアント領域を塗りつぶしてみたのですがダメでした。
0569デフォルトの名無しさん
2006/02/12(日) 22:25:37そういうことを調べもせずに>>565みたいな質問ができる根性に驚愕
0570デフォルトの名無しさん
2006/02/12(日) 22:45:24単に↓みたいな感じのをエクスポートして、
アプリ側でGetProcAddress()して...っていう話じゃないの?
STDAPI ShowMyDlg()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg dlg;
return dlg.DoModal();
}
0571566
2006/02/12(日) 22:57:48ありがとうございます
残念ながらアイコンビューなのでオーナードローはできないのです
継続調査してみます
0572デフォルトの名無しさん
2006/02/13(月) 22:16:28作ったアプリが何のエラーも出さずにいきなり終了するのって、
どういう原因が考えられるんだろう?
メモリとかリソースとかリークしてる感じもないし、
エラーのログがないから皆目検討つかない。
偉い人教えてください。
0573デフォルトの名無しさん
2006/02/13(月) 23:09:24エラーが出ないなら自分でエラーを出せばいいじゃない
0574デフォルトの名無しさん
2006/02/13(月) 23:30:280575デフォルトの名無しさん
2006/02/13(月) 23:36:42他にもdprintf()とかなんかいろいろあるっしょ。
0576572
2006/02/14(火) 00:06:32やはりしらみつぶしにするしかないですかね。
再現性が低いもんでステップで追っかけてても全然起きないのに、
走らせとくとふっといなくなってて鬱なのです。
検索かけてみるとスタックオーバーフローで発生するみたいなのが
引っかかるんだけど、どうなんでしょう?
今まで異常終了するときにはなんかメッセージ出るような
落ち方しかみたことなかったんだけど、こういう、何も言わずに
異常終了ってのはよくあることなんでしょうか?
0577デフォルトの名無しさん
2006/02/14(火) 00:31:560578デフォルトの名無しさん
2006/02/14(火) 00:32:30俺はOSやフレームワークがエラーを見せてくれるのは
ラッキーとまでは言わないがむしろ良いケースだと思ってる。
例外そのものがズバリ表示されればそれこそ幸運。
それでわからないところからお仕事が始まるわけで。
0579デフォルトの名無しさん
2006/02/14(火) 00:34:26スタックオーバーフローはまずいだろ。
後、何も言わずに終了って言っても、ウインドウを終了させる
関数に飛んでるだけかも知れんし、別に不思議だとは思わん。
良くあるとも思わんがな。
0580デフォルトの名無しさん
2006/02/14(火) 10:20:06実はものすごくでかい領域をメンバで持つオブジェクトを
オートで作ったんじゃないのか
0581デフォルトの名無しさん
2006/02/14(火) 23:10:34ツリーアイテムのラベルの編集して、Enter押すとダイアログが閉じてしまうんですが、
良い解決法はありますか?
ダイアログのOnOKで、閉じるのを禁止すると、ラベルの編集まで終了しなくなって
しまう(インプレイスのエディットボックスが消えない)...
0582581
2006/02/15(水) 00:19:28再送しつつ return FALSE ...などと怪しことをやってましたが(これはこれで、一応うまくいった)、
↓でシンプルに解決しました
ttp://search.acty-net.ne.jp/mfc_search/archive/2005-2/msg00144.html
0583デフォルトの名無しさん
2006/02/15(水) 12:06:48サイズ変更枠のあるウィンドウにするとフレームがはみ出てしまいます。
ウィンドウスタイルを変更するとサイズ変更を枠を消してリサイズできるようになるのですが
この場合キャプションやシステムメニューも消えてしまいます
OnNcHitTestをオーバーライドしてOnMouseMoveでウィンドウリージョンを再設定すれば
いいような気もしますが・・・
0584デフォルトの名無しさん
2006/02/15(水) 15:20:50書式ごとコピーするには、どうすれば良いでしょうか?
0585584
2006/02/15(水) 15:22:280586デフォルトの名無しさん
2006/02/15(水) 16:56:240587デフォルトの名無しさん
2006/02/15(水) 16:57:50WM_APP+n で定義した自前のメッセージを
PostMessage() したのですが,
それに対するメッセージハンドラが呼ばれません.
CListView ではなく CWnd の派生クラスの場合は
ちゃんとメッセージを受けて,
メッセージハンドラが呼ばれます.
なぜこのような違いが起きるのでしょうか?
0588デフォルトの名無しさん
2006/02/15(水) 17:52:27を使ってリストビューのリストコントロール部分に対して
行ってみる
0589587
2006/02/15(水) 18:00:05CListCtrl は CWnd から派生されてないですから
メッセージは受けられないですよね?
0590デフォルトの名無しさん
2006/02/15(水) 18:41:490591デフォルトの名無しさん
2006/02/15(水) 19:18:48C++が苦手なのかね?
0592デフォルトの名無しさん
2006/02/15(水) 19:30:32から呼ぶわけですが、何か?
0593デフォルトの名無しさん
2006/02/15(水) 19:41:350594デフォルトの名無しさん
2006/02/15(水) 19:45:43一応MFCのソースとMSDNのサンプルで確認したけど、ほとんど使ってない。
0595デフォルトの名無しさん
2006/02/15(水) 19:47:040596デフォルトの名無しさん
2006/02/15(水) 20:14:510597デフォルトの名無しさん
2006/02/15(水) 21:08:320598デフォルトの名無しさん
2006/02/15(水) 21:32:12(☉◇☉)Σ
0599デフォルトの名無しさん
2006/02/15(水) 21:34:20スレ違いです。こちらへどうぞ。
http://pc8.2ch.net/test/read.cgi/tech/1136651593/l50
0600デフォルトの名無しさん
2006/02/15(水) 21:38:21メッセージは受けられないですよね?
0601デフォルトの名無しさん
2006/02/15(水) 21:48:54File afxcmn.h:
class CListCtrl;
// CListCtrl
class CListCtrl : public CWnd
0602デフォルトの名無しさん
2006/02/15(水) 22:11:38ビューに載ってるリストコントロールの方にpostしちゃってるとか。
0603デフォルトの名無しさん
2006/02/15(水) 22:39:14自前のメッセージ受信用にViewをもうひとつ作って
メッセージが来たらCListView から派生したクラスのメッセージハンドラを呼ぶ
0604デフォルトの名無しさん
2006/02/15(水) 22:42:08勘違いが多くなるんだろう。
0605デフォルトの名無しさん
2006/02/15(水) 22:53:27Viewにこだわる必要ないような
0606デフォルトの名無しさん
2006/02/15(水) 23:10:37>>なぜこのような違いが起きるのでしょうか?
違いが起こるも何も
そもそも前者の現象がおかしい。
今確かめたが、ちゃんと呼ばれる。
どっか間違ったコード書いてるんだろ。
0607デフォルトの名無しさん
2006/02/15(水) 23:42:430608デフォルトの名無しさん
2006/02/15(水) 23:47:47オーナードローの場合も含めて。
リストコントロールを実装しているDLLのフックしかないですか?
0609デフォルトの名無しさん
2006/02/16(木) 00:47:47ただ吸い出したいだけなら「ListView to CSV」ってソフトがあるので
それを使えばいい。
自作したいのなら、別プロセスから文字列を吸い出すのはちょっと面倒。
そのソフトのヘルプに簡単な原理とソースが載ってるので
それを参考にすればいい。
0610デフォルトの名無しさん
2006/02/16(木) 01:13:33さんくる!!!!
0611587
2006/02/16(木) 09:51:33メッセージはたしかに受けていることを確認しました.
ところがそれに対するハンドラが起こされていませんでした.
なぜなんでしょうか…
WM_FUGA という自前のメッセージに対して
OnFuga というハンドラを用意しています.
メッセージマップに以下にように書いています:
BEGIN_MESSAGE_MAP(CHogeView, CListView)
ON_MESSAGE(WM_FUGA, OnFuga)
END_MESSAGE_MAP()
CWnd から派生した場合に,
まったく同じように書いて,
ハンドラは呼ばれます.
0612606
2006/02/16(木) 12:42:11もしかして、テストしているのはダイアログベース?
もしダイアログに貼り付けているリストビューなら、
CListCtrlの派生クラスでやればうまくいくよ。(これも当方で確認済み)
名前が紛らわしいけど、一般にListView,TreeViewと呼ばれているコントロールは
MFCではCListCtrl,CTreeCtrlでカプセル化されている。
MFCのCListView,CTreeViewはDocument/Viewアーキテクチャ用に
カプセル化されているもの。
0613デフォルトの名無しさん
2006/02/16(木) 18:37:070614デフォルトの名無しさん
2006/02/16(木) 19:23:12宿題は終わったんだ、よかったね
0615デフォルトの名無しさん
2006/02/16(木) 23:58:57ボーランド http://www.borland.co.jp/の
C++Builder http://www.borland.co.jp/cppbuilder/index.htmlが良いと思います。
VB と似た RAD 環境と C++ というなんとも不思議な取り合わせの環境です。(というか VC++ もこのくらい簡単に Windows プログラムが作れるべきであると思いますけど。^^;)
0616デフォルトの名無しさん
2006/02/17(金) 00:31:15そんなものWindowsとの親和性の低いただのおもちゃだ。
0617デフォルトの名無しさん
2006/02/17(金) 01:12:400618デフォルトの名無しさん
2006/02/17(金) 03:49:41どっかで見たことある文章
どこだっけ
0619デフォルトの名無しさん
2006/02/17(金) 08:43:200620デフォルトの名無しさん
2006/02/17(金) 10:52:24どうしたらいいですか?
OnKeyDownでハンドルしてみたんですが
ほかの[a]とか[1]とかは受け付けるんですが、
enterキーではイベントが発生しないんです。
0621デフォルトの名無しさん
2006/02/17(金) 10:59:46ES_WANTRETURN
だっけか、、、綴り自信が無い
0622621
2006/02/17(金) 11:03:33マルチラインかな
0623デフォルトの名無しさん
2006/02/17(金) 14:48:30>>622
おっしゃられたとおりエディットボックスのCreate時にES_WANTRETURNを
加えましたが、やはりEnterキーではイベントが発生しませんでした。
他の数字やアルファベットではできましたが。
Edit.Create(WS_BORDER|WS_CHILD|WS_CLIPSIBLINGS|ES_WANTRETURN,CRect(0,0,60,30),this,ID)
ちなみにシングルラインです。
0624デフォルトの名無しさん
2006/02/17(金) 15:05:25もう一度クリックすると元に戻るボタンはどうすれば作れますか?
0625デフォルトの名無しさん
2006/02/17(金) 15:14:56チェックボックスを作り、Push Like をtrueにする
0626デフォルトの名無しさん
2006/02/17(金) 15:19:37ヘルプすら見ないのは、バカだから?
0627デフォルトの名無しさん
2006/02/17(金) 15:32:37ありがとうございました。
チェックボックスがプッシュボタンになってビックリ。
0628デフォルトの名無しさん
2006/02/17(金) 16:02:06ここ
ttp://www.01-tec.com/document/advise_to_programmer.html
0629623
2006/02/17(金) 16:45:01PreTranslateMessage()
でなんとかやってみます。
0630デフォルトの名無しさん
2006/02/18(土) 00:45:34・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に読み込ませる方法はありますか?
0631デフォルトの名無しさん
2006/02/18(土) 00:55:10コンパイルエラーは99%「なぜか」ではなく理由があって出ているので、
そのエラーメッセージもちゃんと書くこと。
0632デフォルトの名無しさん
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が返るのはいったい何故?
0633デフォルトの名無しさん
2006/02/18(土) 01:58:17MBCSビルドしたMFC DLL(共有DLL使用)を呼ぶと
内部でメモリリークするみたいなんだけど、しょうがないんだっけ?
0634デフォルトの名無しさん
2006/02/18(土) 02:08:37ttp://support.microsoft.com/default.aspx?scid=kb%3Bja%3B167929
0635630
2006/02/18(土) 02:13:00ありがとうございます。ご指摘通り〜Doc.hを読み込んだら
public:
CPassManagerDoc* GetDocument() const;
でのエラーはなくなりました。
なぜエラーとなっているか考えることをしませんでした。
今回はありがとうございました。
0636デフォルトの名無しさん
2006/02/18(土) 14:22:28「ダブルクリックされた項目」==「ホットアイテム」だっけ?
ダブルクリックイベントのハンドラでフォーカスのある項目を取得するのはできたと思ったけど。
0637デフォルトの名無しさん
2006/02/18(土) 17:48:09たまに勝手に折りたたまれちゃったり、ひとつ隣のクラスが選択されちゃったり
しているんですけど、
0638デフォルトの名無しさん
2006/02/18(土) 17:55:14Readで読み込むところまではうまくいきました。
その際、もしデータがこなかったら制御を返すような方法はないでしょうか。
Readでそのままやると来るまで待ち続けてしまうので、タイムアウトなり設定する方法はないでしょうか。
0639デフォルトの名無しさん
2006/02/18(土) 18:34:340640デフォルトの名無しさん
2006/02/18(土) 18:39:58ある。
0641デフォルトの名無しさん
2006/02/18(土) 19:27:560642デフォルトの名無しさん
2006/02/18(土) 21:04:29system("com1: baud=9600 parity=n data=8 stop=1 to=on xon=on odsr=off octs=off dtr=on rts=on idsr=off");
0643デフォルトの名無しさん
2006/02/18(土) 21:06:31C〜Doc.hで
public:
CString mydata;
と宣言されている変数に
C〜Doc.cppで
mydata = 〜
と代入をした場合
0x7c17787a (mfc71d.dll) で初回の例外が発生しました : 0xC0000005: 場所 0x00000054 を読み込み中にアクセス違反が発生しました。
0x7c17787a (mfc71d.dll) でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00000054 を読み込み中にアクセス違反が発生しました。
というエラーが出てしまいます。
直前までのデータは異常がありません。
代入するデータをC〜Doc.cpp内で宣言した変数に入れる場合は問題ありません。
確認すべきことは何でしょうか?
0644デフォルトの名無しさん
2006/02/18(土) 21:09:310645デフォルトの名無しさん
2006/02/19(日) 02:00:200646デフォルトの名無しさん
2006/02/19(日) 11:53:210647デフォルトの名無しさん
2006/02/19(日) 11:59:140648デフォルトの名無しさん
2006/02/19(日) 12:24:201. 読まない ・・・説明書などを読まない。読む気などさらさらない。
2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。
4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。
5. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。
6.感謝しない・・・教えてもらって当たり前。事がすんだらさようなら。
7.逆切れする・・・自分の思うようにならないと逆切れする。
0649デフォルトの名無しさん
2006/02/19(日) 20:54:47なんで俺の事知ってるの?ストーカー?
0650デフォルトの名無しさん
2006/02/20(月) 00:34:12WinAPIでがりがり書くより楽だわ。
0651デフォルトの名無しさん
2006/02/20(月) 04:09:36俺は長く使いそうなのはWinAPI,みたいな使い分けをしているよ。
0652デフォルトの名無しさん
2006/02/20(月) 23:04:15CImageを使っているのですが、うまく出来ません。
今のところ、テスト段階として、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
0653デフォルトの名無しさん
2006/02/20(月) 23:20:260654デフォルトの名無しさん
2006/02/20(月) 23:42:270655デフォルトの名無しさん
2006/02/20(月) 23:57:40ありがとうございます。
今から確認します。
>>654
ありがとうございます。
Releaseの位置についても確認してみます。
0656デフォルトの名無しさん
2006/02/21(火) 14:02:52えーと、、、
8ビットのイメージを作ってるのにパレットが無いから。
とりあえず、24ビットでやってみ。
あと、いきなりLineToだと起点がないけど、平気?
まあ0,0だろうけどな。
0657656
2006/02/21(火) 14:05:21(もはやパレットは通じないか)
0658デフォルトの名無しさん
2006/02/21(火) 14:24:190659デフォルトの名無しさん
2006/02/21(火) 14:26:210660623
2006/02/21(火) 17:01:41CStaticのMouseMoveハンドラ内で
SetCursor(LoadCursor(NULL,IDC_IBEAM));
としたのですが、変更されませんでした。
直後にGetCursor()で値を調べたところNULLになってました。
ちなみにCViewで同じようにしたところうまくいきました。
どう違うのでしょうか?
0661デフォルトの名無しさん
2006/02/21(火) 17:04:49WM_SETCURSORなんだけど、それでもだめかね?
0662660
2006/02/21(火) 17:10:55SetCursor(
を
::SetCursor(
としたところうまくいきました。
0663デフォルトの名無しさん
2006/02/22(水) 00:15:44「共有DLLでMFCを使う」でコンパイルしたexeを
VS2005のインストしていないマシンで起動させる動作条件を教えてもらえないでしょうか
客先(WinXP Home SP2)で起動してもらったら、
mfc80.dllがないから起動しないと言われたので、
x86のmfc80.dllとmsvcr80.dllを送って起動してもらったら、
「このアプリケーションの構成が正しくないため、
アプリケーションを開始できませんでした。
アプリケーションを再度インストールすることにより
問題が解決する場合があります。」
と出て起動しませんでした。
「スタティックライブラリでMFCを使用する」でコンパイルしたexeなら起動しました。
mfc80.dllとmsvcr80.dll以外に必要なDLLや条件がありましたら教えてもらえないでしょうか
よろしくお願いいたします。
0664デフォルトの名無しさん
2006/02/22(水) 00:30:29一応MFCとは間接的にしか関係ないが答えとく。
(VSインストールフォルダ)\Common7\Tools\Bin\Depends.Exe
で実行ファイルがどのdllを要求するかがわかる。
(VSインストールフォルダ)\1041\redist.txtに再頒布可能なファイルの一覧があるから
(VSインストールフォルダ)\VC\redist以下にあるファイルを自分で配布しなさい。
手段は実行ファイルと同じフォルダにzipで固めるなりVSでインストーラを作成するなりご自由に。
0665デフォルトの名無しさん
2006/02/22(水) 04:12:57最近はスタティックリンクにしてる俺。
0666デフォルトの名無しさん
2006/02/22(水) 05:34:25でももっと小さく出来る仕掛けってないの??
0667デフォルトの名無しさん
2006/02/22(水) 10:46:21つhttp://www.codeproject.com/cpp/vcredists_x86.asp
0668デフォルトの名無しさん
2006/02/23(木) 11:41:37ReleaseCapture()以外でキャプチャが外れることってあるんですか?
LButtonDownでキャプチャリングしてドラッグしてるときはちゃんと
キャプチャしてるんですが、ボタンを離すとキャプチャが外れるんですけど
どうしてなんでしょう?
0669デフォルトの名無しさん
2006/02/23(木) 13:27:460670668
2006/02/23(木) 13:50:39カーソルの位置に関係なく、以降のすべてのマウス入力が現在の
CWnd オブジェクトに送信されます。
てかかれてたんですけど、一切ReleaseCapture()を記述してないのに
キャプチャが外れたんで
どこか中の方の処理でReleaseCaptureみたいなことをやってるのかなぁと
おもったんですけど。
なにかこの単語で検索してみたらみたいなことありますか?
お願いします。
0671デフォルトの名無しさん
2006/02/23(木) 13:53:18WM_MOUSEMOVEが来てないだけじゃない?
0672デフォルトの名無しさん
2006/02/23(木) 14:04:08WM_MOUSEMOVEは来てると思うんですが
あと、不思議なのが、OnLButtonDownでSetCapture()を設けてるとこに
ブレイクポイントを作ってデバッグしたら、F5で復帰時にはちゃんとキャプチャ
できてました。
ブレイクしないとキャプチャできません。
理由がわからないんで困ってます。
0673デフォルトの名無しさん
2006/02/23(木) 17:54:390674デフォルトの名無しさん
2006/02/23(木) 17:56:480675デフォルトの名無しさん
2006/02/23(木) 17:59:13>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.
というわけなので、ずっと押してないとだめ(という文章だとおもう)
0676デフォルトの名無しさん
2006/02/24(金) 07:06:01常時、とあるデバイスを監視し続け、何らかのアクションがあると
それに対応した処理をしたいのです。
デバイスを監視するタイミングは、どのように起こせば良いのでしょうか?
WM_ENTERIDLEが良いのでしょうか?
とりあえず、1秒以内に反応出来るなら、問題ないのです・・・。
0677676
2006/02/24(金) 07:18:57追記です。
実験のため、
WM_ENTERIDLEイベントでメッセージボックスを発生させるようにしたら・・・。
普段アイドル状態だと思われる状況でも発生しなくて、、何故かウインドウ上部のタイトルの部分を右クリックしたら
発生するようになりました・・・。
こういうものなのでしょうか?
0678デフォルトの名無しさん
2006/02/24(金) 07:50:470679デフォルトの名無しさん
2006/02/24(金) 08:39:04それ、メインのウインドウ操作してると、永遠にハードウェア監視出来ないぞ。
監視だって、直ぐに完了するのか?その時アイドル状態でも、それが重いと全体のパフォーマンスが落ちる。
恐らく、ハードウェアの監視に関しては、別スレッド作って、メインのウインドウにメッセージ送る形にした方が良いと思われ。
0680デフォルトの名無しさん
2006/02/24(金) 10:21:59近くにリストが出てきてそこから選択できるようにするのって
どういうやり方が好ましいんですか?
リストボックスとかポップアップメニュー使うんですか?
0681デフォルトの名無しさん
2006/02/24(金) 10:35:56コンボボックスの何が不満なんだ?
0682デフォルトの名無しさん
2006/02/24(金) 13:04:090683680
2006/02/24(金) 14:48:08デフォルトではエディットボックスと同じで
ボタンを押されると(又はフォーカスを得ると)↓ボタンが表示されて
選択可能というようにしたいんです。
Create時には可能なんですけど、
動的に↓ボタンの有無を切り替えるメンバとかってありますか?
0684デフォルトの名無しさん
2006/02/24(金) 15:01:590685デフォルトの名無しさん
2006/02/24(金) 15:08:13方法はCreate時に可能の内容による
0686デフォルトの名無しさん
2006/02/24(金) 15:42:04指定しなかったから出なかったんで、
そのスタイル変更する関数とかあるのかなと思いまして。
あれば教えていただきたいんですが・・
ShowDropDownとかじゃないですよね。
0687デフォルトの名無しさん
2006/02/24(金) 16:29:500688デフォルトの名無しさん
2006/02/24(金) 16:48:400689デフォルトの名無しさん
2006/02/24(金) 17:06:070690デフォルトの名無しさん
2006/02/24(金) 17:12:590691デフォルトの名無しさん
2006/02/24(金) 17:19:52スタイルの変更がむずかしいのかも
http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_10156859.html
0692デフォルトの名無しさん
2006/02/24(金) 17:48:19コンボボックスのスタイルの変更は難しいんですね。
2つ作って切り替えるっていうのもあれなんで、
ポップアップメニュー使って
同じようになるようにやってみたいと思います。
0693デフォルトの名無しさん
2006/02/24(金) 18:30:45表示非表示をかえるだけ。
0694デフォルトの名無しさん
2006/02/24(金) 21:59:150695デフォルトの名無しさん
2006/02/25(土) 01:08:27何でもこれでさくっと解決
0696デフォルトの名無しさん
2006/02/25(土) 01:51:08OnDropFilesなどで自分で処理したいのですが分かりません。
どうしたら出来ますでしょうか?
PreTranslateMessageではWM_DROPFILESが来てなくて出来ませんでした。
0697デフォルトの名無しさん
2006/02/25(土) 09:15:52ダイアログの生成時のイベントハンドラを追加しようと思ったんですが、
CDialog::OnInitDialog() はもう使われないんでしょうか?
リソースエディタで WM_INITDIALOG が見つからないんですが。
0698デフォルトの名無しさん
2006/02/25(土) 09:42:11すっかり忘れてました。
0699デフォルトの名無しさん
2006/02/26(日) 22:54:47MFCをCFormViewを使ったアプリを作っています。
リソースエディタで、タブコントロールを置いたのですが、
これのプロパティのOwner Draw Fixedという項目が、
グレーアウトしていて選択できない状態なのですが、なぜでしょうか?
通常、オーナードローはプロパティで設定できないものですか?
0700デフォルトの名無しさん
2006/02/27(月) 15:50:01コンボボックスをCreate時にサイズを反映できないんですが
コンボボックスってサイズ固定なんですか?
なんか方法あります?
0701デフォルトの名無しさん
2006/02/27(月) 15:58:25> コンボボックスをCreate時にサイズを
日本語でおk
0702デフォルトの名無しさん
2006/02/27(月) 16:07:58Createのrectはエディットコントロールのサイズじゃなくてリストボックスのサイズ。
>>701
チョン乙
0703デフォルトの名無しさん
2006/02/27(月) 16:11:17つ SetItemHeight
0704デフォルトの名無しさん
2006/02/27(月) 16:13:30おおっ
なるほど。
ということはエディット部分のサイズ変更はできないってことですか?
0705デフォルトの名無しさん
2006/02/27(月) 16:19:42サンクスです。
0706デフォルトの名無しさん
2006/02/27(月) 16:34:45this->GetParent()->GetParent()->‥
みたいにやっていったらできそうなんですけど、
なにか一気に取得する方法ってありますか?
AfxGetApp()みたいな。
0707デフォルトの名無しさん
2006/02/27(月) 17:01:22ハンドラでなくハンドル。
この3つの関数を使う
CWnd* ::AfxGetMainWnd()
CView* CFrameWnd::GetActiveView()
HWND CWnd::GetSafeHwnd();
注意点
・型の違い
・返ってきた値が正しいかチェック
・MDIにはビューが複数あること
0708デフォルトの名無しさん
2006/02/27(月) 17:18:31ヘルプで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();
0709デフォルトの名無しさん
2006/02/27(月) 17:25:29MDIだと子フレームがあるから、もう一段階GetActiveFrameが入るね。
こちらこそどうも。
0710デフォルトの名無しさん
2006/02/28(火) 01:16:22左にツリービュー、右にリストビューというIEみたいなサンプルコードは
どこかに落ちてないですか?
ところで、最近MFCの本はさっぱり見ませんね。翔泳社のMFCバイブル全部
持っててよかった。
0711デフォルトの名無しさん
2006/02/28(火) 03:43:302つ目以降の起動で渡されたデータを、一つ目に起動させたアプリケーションに渡したいのですがどうしたらいいのでしょうか?
具体的には、WMPに関連付けられている動画をクリックしてWMPを起動し、
起動したまま、別の動画をクリックすると最初に起動したWMPで再生するような感じにしたいんです。
0712デフォルトの名無しさん
2006/02/28(火) 09:24:58多重起動防止→mutex
プロセス間のデータ受け渡し→共有メモリ、WM_COPYDATA、socketなど
0714デフォルトの名無しさん
2006/02/28(火) 19:19:46> 左にツリービュー、右にリストビューというIEみたいなサンプルコードは
ウィザードでスケルトンは作れるじゃない。
0715デフォルトの名無しさん
2006/03/01(水) 04:05:01局面図を出力する VC++ ツールを作成しています。
9x9 の盤面を表現するウィンドウは、FindWindow(),EnumChildWindows()で取得できました。
そのウィンドウに描画されているイメージはどのように取得すれば良いでしょうか?
0716デフォルトの名無しさん
2006/03/01(水) 10:08:27GetDC, BitBlt
0717デフォルトの名無しさん
2006/03/01(水) 10:56:27画面をコピーするだけでなく、
何の駒が置かれてるか判断するには、
ビットマップを比較する方法と、
ある座標の点が塗られている色で見分ける方法がある。
前者はすべての駒のビットマップを保持する必要がある。
後者はある座標が黒だったらとか駒の色だったらとか、
場合分けで何の駒が置かれてるか判断する必要がある。
0718717
2006/03/01(水) 11:04:09フリーセルの盤面を取得して自動で解くソフト
http://hp.vector.co.jp/authors/VA007799/vfc.htm
0719デフォルトの名無しさん
2006/03/01(水) 11:50:37ttp://www.geocities.jp/outlandsll/download.html#BanGet24
0720デフォルトの名無しさん
2006/03/01(水) 16:09:28あるクラスに、
自分自身のオブジェクト情報をファイルに保存する
という機能を持った操作を実装したいんですけど、
CArchiveクラスを使って、
CFile outFile( "myfile.txt", CFile::modeWrite | CFile::modeCreate );
CArchive serializer( &outFile, CArchive::store );
serializer << ○○;
serializer.Close();
てやるのかなとイメージしてみました。
そこで○○のところに入るクラスの実体を
どのようにして得るのかがわからないんです。
thisはポインタなのでだめですよね。
ポインタから実体を作る方法ってありますか?
また、なにか他のいいほうがあれば教えていただけないでしょうか?
0721デフォルトの名無しさん
2006/03/01(水) 16:27:392. WriteObject
0722720
2006/03/01(水) 17:46:18WriteObject(this)
で書き込んでみたんですけど
書き込み先のファイルを見たらたかだか32バイトで
(どう見ても足らない)
arLoad.ReadObjectで読み込んでみても
正しい値を返さないんですが。
はてさて?
0723デフォルトの名無しさん
2006/03/01(水) 17:48:11>>721
> 1. *this
0724デフォルトの名無しさん
2006/03/01(水) 17:52:48DECLARE_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
0725デフォルトの名無しさん
2006/03/01(水) 22:00:24行が入れ変わらないようにするにはBUTTONスタイルを指定すればいいのだけど、
これだとタブ札の間にスキマができてしまう。
あと、タブ札の中身はOnDrawItemでかいてて、タブ札の枠線はOnPaintで書いてるみたいで、
(BUTTONスタイルならボタンの陰影をOnPaintで描画)、
きちんとタブ札の外見にするにはOnPaintをオーバーライドしなきゃいけないのでしょうか。
もしこの場合、各タブ札の描画領域を知るうまい方法ってないでしょうか?
0726デフォルトの名無しさん
2006/03/01(水) 22:20:520727デフォルトの名無しさん
2006/03/01(水) 23:08:35勉強して大丈夫?
釣りじゃないぞ。
0728デフォルトの名無しさん
2006/03/01(水) 23:16:06ソースが公開されてるから好きなように使える。
0729デフォルトの名無しさん
2006/03/02(木) 00:16:03そうだけど、行が入れ替わるってのはUIの使い勝手として悪いと思わない?
0730デフォルトの名無しさん
2006/03/02(木) 00:22:55入れ替わらなかったら、隠れるタブが出てくるわけなんだが、それはどうするつもりだ?
0731デフォルトの名無しさん
2006/03/02(木) 00:33:45うん。
隠れるってどんな状態だろう?
0732715
2006/03/02(木) 00:48:28的確なアドバイス、ありがとうございます。
確保したメモリDCにイメージを転送してゴニョゴニュできるようになりました。
>>717
ご指摘の通り、解析を行わなければなりません。
今回は駒のビットマップを全て保持して比較する予定です。
>>718
こんなのもあるんですね。知りませんでした。
ソースが付いてるともっとよかったり(何
>>719
まさにコレを作ろうとしていました。やっぱり需要はあったのですね・・・
ただ、作者さんも書いておられますが、MS JavaVM でしか確認していないのか
こちらの Sun JavaVM の環境では動作しませんでした。
いろいろ勉強がてら、ツールの製作は続行しようと思います。
皆様、御指導ありがとうございました。
0733デフォルトの名無しさん
2006/03/02(木) 01:12:15今時のタブブラウザにあるような奴かな
>>729
禿胴
コモンコントロールでTCS_MULTILINEスタイルの奴ね
0734デフォルトの名無しさん
2006/03/02(木) 03:44:01オレの感じ(あくまでも感じね)では、
もうネイティブGUIアプリは現状のMFCで打ち止めFIX
と考えてるんじゃないだろうか、Microsoftは。
今後出てくるテクノロジは .NET Framework の
インターフェイスで使ってね、ってことで。
Avalon ってネイティブのインターフェイスと
.NET のインターフェイスとどっちもあったっけ?
0735デフォルトの名無しさん
2006/03/02(木) 08:51:08タブのスタイルをボタンにしてるんだろ
タブじゃ実現不可能だからみんなボタンにしてるわけだし
それが理解できないやつは池沼
0736デフォルトの名無しさん
2006/03/02(木) 22:07:29タブブラウザだと位置固定の多段タブって使われてるけど、
あれってCWndから派生してちまちま書いてたりするんだろうか。
もしくはTCS_MULTILINEを指定して、更にサイズ調整を行って、
ボタンのスキマをぴっちりつめて、オーナードローする方法なんだろうか?
TCS_MULTILINEとボタンスタイルを指定した場合に、タブ札のサイズ(横幅)をいじくる
方法って誰か知らんとですか?
0737デフォルトの名無しさん
2006/03/03(金) 04:28:43お前はSpy++も使えないのか?
0738デフォルトの名無しさん
2006/03/03(金) 09:15:30ちゅーわけで使える人が調べてくれるならとてもうれすぃ
0739デフォルトの名無しさん
2006/03/03(金) 09:27:240740デフォルトの名無しさん
2006/03/03(金) 10:57:52任意セル固定プログレスは試してみたんですが、ソートに対応させたいので、
どこかに参考になるソースとか助言なんかいただけませんか?
現状、セル固定だとアイテムデータとCListCtrl&プログレスデータに分けられて
再利用性が高まるのですが、ソートを可能にするとアイテムデータ、CListCtrlと
プログレスデータが絡み合って再利用性が減少する(ような気がする)し、
(スマートさからほど遠い)余分な処理が増えるので、コンテナ等データの
持たせかたで悩んでいます。
0741デフォルトの名無しさん
2006/03/03(金) 11:17:15>CDialog::OnOK();
をコールしてます。
ところが、同じ処理をダイアログを非表示にしてメソッドコールすると、
モーダル開いているウィンドウのディセイブルがイネイブルになっちゃうようです。
何でこんなことになるんでしょうか?
0742デフォルトの名無しさん
2006/03/03(金) 12:20:39自分には判っていることでも相手に伝わらないこともある。
「ダイアログ」、「ウィンドウ」がそれぞれ何を指しているのか整理してくれたまえ。
0743デフォルトの名無しさん
2006/03/03(金) 12:25:44「メインDlg モーダルで開く → メニューDlg モーダルで開く→ 処理Dlg」
と3つのDlgがあります。
で、問題無いのですが、
処理Dlgを非表示にして動作させると、
メインDlgのディセイブルが解除されます。
ちょっと変な作りで、処理DlgをnewしてるのはメインDlgです。
0744デフォルトの名無しさん
2006/03/03(金) 12:28:51「プログレス」って何だ? プログレスバー?
プログレスバーだったら、ソートは全体の回数が判らないので無理。
ソート自体はMSDNでSortItemsの説明を読めば判る。
ソートに対応すると場合によってはソート用の配列を設ける必要があって余分な手間が
掛かったりはするが、再利用性が高いとか低いとか言う問題は有るはずがない。
そもそも、似て非なるものを創るときくらいしか再利用なんてできない。
0745デフォルトの名無しさん
2006/03/03(金) 12:44:450746デフォルトの名無しさん
2006/03/03(金) 13:07:39だったらソート後のデータで普通に更新するだけじゃないか?
カスタムドローなんだから自分で描画してるんだろ?
0747デフォルトの名無しさん
2006/03/03(金) 13:08:36ShowWindowはあるけど、GetShowWindowが無いお。
0748デフォルトの名無しさん
2006/03/03(金) 13:19:17>処理Dlgを非表示にして動作させると、
>メインDlgのディセイブルが解除されます。
これが理解できん
もう少し翻訳してくれ
0749デフォルトの名無しさん
2006/03/03(金) 13:27:22>メインDlgのディセイブルが解除されます。
処理DlgをdoModalして、処理Dlgのボタンを押してCDialog::OnOK();
を行っても問題は発生しません。
ところが、処理Dlgを表示させずにメソッドを読んで、
どうもその中でCDialog::OnOK(); が呼ばれてるのですが、
そこでメインDlgがディセイブルだったのがイネイブルに変わってしまいます。
CWnd::IsWindowVisible() で判定して、CDialog::OnOK(); を呼ばないようにすると直りましたので、
一応解決ですが、MFCの中の人が何やったのか、何が不味かったのか、ヨクワカンネ。
0750740
2006/03/03(金) 13:33:54あ、プログレス(進捗状況)ってのはMFCのプログレスバーもどきです。
OnCustomDraw内でFillSolidRect使って任意セルに直接書き込んでます。
(MFCのプログレスバーも使用してみたのですが、ちらつきが激しいのでやめました)
あと、現状ではオーナーデータを考えています。(可能なら拡張も)
ソートはOnColumnclickで勝手に処理してます。
ダウンローダ系やP2P系にありがちな気がしますが、日本語英語その他言語を問わず、
その手のソフトでソースが公開されているものってありませんかね?
(これはスレ違いかな…?)
0751デフォルトの名無しさん
2006/03/03(金) 13:52:46オチとしてはリストコントロールのセルに被せているってところか。
まあ、どのみちエスパーさんの登場を待つしかないだろうな。
0752デフォルトの名無しさん
2006/03/03(金) 14:04:30プログレスバーじゃなくて数字の更新もできないだろ
0754デフォルトの名無しさん
2006/03/03(金) 15:27:25どうやったらちらつくのか、それを教えてくれよ。
バックグラウンドをいちいち書いてるのか?
チャイルドをクリップして無いのか?
0755740
2006/03/03(金) 17:40:55ダイアログにCListCtrlの派生クラスをメンバにもたせ、さらに
その派生クラスにCProgressCtrlを持たせました。
リストヘッダのドラッグは派生クラスのOnNotifyで検知し、そこで
プログレスバーのサイズを変更しています。
派生クラスのOnEraseBkgndでTRUEを返しても、ダイアログで子ウィンドウ
のクリップをしてもちらつきに関して差は感じられません。
0756デフォルトの名無しさん
2006/03/03(金) 18:00:410757デフォルトの名無しさん
2006/03/03(金) 19:11:200758デフォルトの名無しさん
2006/03/03(金) 20:08:380759デフォルトの名無しさん
2006/03/03(金) 20:09:040760デフォルトの名無しさん
2006/03/03(金) 20:22:040761デフォルトの名無しさん
2006/03/03(金) 20:41:50ソートに対応しているかどうかわからんがCodeProjectにある
0762デフォルトの名無しさん
2006/03/03(金) 21:55:30使ってみたぜ('∀`)
で、メッセージ多すぎてどのイベント拾えばいいのかわかんね。
んで、>737と>739の人はspy++を使えば、どう問題に対処対処できるのか
って部分を教えて。
0763デフォルトの名無しさん
2006/03/03(金) 21:57:230764デフォルトの名無しさん
2006/03/03(金) 22:07:08↓今ここまで
�@
>もしくはTCS_MULTILINEを指定して、更にサイズ調整を行って、
>ボタンのスキマをぴっちりつめて、オーナードローする方法なんだろうか?
>TCS_MULTILINEとボタンスタイルを指定した場合に、タブ札のサイズ(横幅)をいじくる
>方法って誰か知らんとですか?
�A
>お前はSpy++も使えないのか?
spy++を使えば問題が解決する見込みがあるらすぃ。
でも、どういう理由で解決する見込みがあるのか、書かれていないので、
わかってないところ。
0765デフォルトの名無しさん
2006/03/03(金) 22:15:08なるほど。そういうところか。
0766デフォルトの名無しさん
2006/03/03(金) 23:11:41おまいはいるよ
0767デフォルトの名無しさん
2006/03/03(金) 23:38:07そんなこじゃれた反応もステキだけど、問題解決に寄与してくれるともっとステキだよヾ('∀`)ゞエッサッサ
0768デフォルトの名無しさん
2006/03/04(土) 03:03:06この上をマウスが通過したときに座標をポップアップしたり、クリックしたときに棒グラフを選択したりしたいと思っています。
スパイでまずはCStaticにくるメッセージをみてみたのですが、
マウスが動くとWM_NCHITTESTはくるのですが、
WM_NCLBUTTONDOWNなどは来ませんでした。
WM_NCLBUTTONDOWNはどうしたら取得できるのですか?
あとこういうメッセージはダイアログの子にどういうルールで送られるのですか?
たとえばWM_MOUSEMOVEは親のダイアログにはくるけど子供にはきませんね。
ご教授いただけるとありがたいです。
0769デフォルトの名無しさん
2006/03/04(土) 06:14:010770740
2006/03/04(土) 10:03:11レスどうもです。
以前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/
一応、ソート後に整合性をとることでソートに対応させました。
レスくださった方はありがとうございました。
0771デフォルトの名無しさん
2006/03/04(土) 14:35:52シンプルなお答えありがとうございます。
つまりリソースIDの範囲でフィルタがかかってるとかですかね?
勝手にresource.hを編集してIDをつけるとメッセージが届けられないとかありますか?
0772デフォルトの名無しさん
2006/03/04(土) 15:54:54>WM_NCLBUTTONDOWNなどは来ませんでした。
>WM_NCLBUTTONDOWNはどうしたら取得できるのですか?
字面だけで来るって思い込んでるでしょ。
名前から予測するのは構わないけど実際使えるかどうかはちゃんとMSDN読まないと。
>あとこういうメッセージはダイアログの子にどういうルールで送られるのですか?
>たとえばWM_MOUSEMOVEは親のダイアログにはくるけど子供にはきませんね。
そんなわけない。来なかったら困る。
他のコントロールでも調べてごらん。
スタティックコントロールの場合はダイアログエディタで「通知」にチェックつけるか
コード上でSS_NOTIFYを追加すれば来るよ。
(WM_NCHITTESTを捕まえてHTCLIENTを返すという方法もある)
あと、座標をポップアップさせるのはCToolTipCtrlを使うのも手の一つ。
0773デフォルトの名無しさん
2006/03/04(土) 16:58:08http://homepage2.nifty.com/DSS/VCPP/MFC/Other/CStaticHandler.htm
0774デフォルトの名無しさん
2006/03/04(土) 18:08:14ありがとうございます。
ちゃんとMSDNも読ませていただきます。
0775772
2006/03/04(土) 18:10:47773が教えてくれてるのは、送られてきた通知メッセージを親ダイアログで捕まえるためのコード。
772で書いたのは、メッセージがどうやったら飛んでくるかって話で、
773のリンク先の2.に書いてあることと同じ。
もし、派生クラス側で捕まえたければ、2.までは同様にして
派生クラス内のハンドラでWM_LBUTTONDOWNを捕まえればいい。
(もちろんWM_LBUTTONUPでもいいが、STN_CLICKEDはWM_LBUTTONUPではなく
WM_LBUTTONDOWNで出されるので、一応それを考慮)
あと、リンク先のコードで動くだろうし間違いではないが
ON_BTN_CLICKEDじゃなくON_STN_CLICKED使うべき。
全く同じものとはいえ、より忠実に。
0776772
2006/03/04(土) 18:15:26ちょっと遅かった。
>>774
MSDNなら"Static Control Default Message Processing"(英語)の辺り
とくに最初と最後の文章と表中のWM_NCHITTESTの項とWM_LBUTTON*の項。
0777デフォルトの名無しさん
2006/03/04(土) 23:22:21この機会にじっくりよんで理解したいと思います。
(いままで苦手で来ていたので)
0778デフォルトの名無しさん
2006/03/04(土) 23:28:52魅力的な俺にはばんばんメッセージが来ます。
0779デフォルトの名無しさん
2006/03/05(日) 01:19:15WindowsAPIマスター達が代表して設計した汎用クラス群?
0780デフォルトの名無しさん
2006/03/05(日) 01:21:450781デフォルトの名無しさん
2006/03/05(日) 01:57:02それは業者からのダイレクトメッセージだろプギャー(AAry
0782デフォルトの名無しさん
2006/03/05(日) 21:34:050783デフォルトの名無しさん
2006/03/05(日) 22:06:100784デフォルトの名無しさん
2006/03/06(月) 19:24:50指定したIPのPCのレジストリの中身を
参照するようなことはできるのでしょうか?
0785デフォルトの名無しさん
2006/03/06(月) 19:26:260786デフォルトの名無しさん
2006/03/06(月) 19:40:400787デフォルトの名無しさん
2006/03/06(月) 19:44:240788デフォルトの名無しさん
2006/03/06(月) 20:22:52兄メーション
0789デフォルトの名無しさん
2006/03/06(月) 20:40:350790デフォルトの名無しさん
2006/03/07(火) 00:15:320791デフォルトの名無しさん
2006/03/07(火) 09:56:170792デフォルトの名無しさん
2006/03/07(火) 11:24:440793デフォルトの名無しさん
2006/03/07(火) 16:43:54ファイル
開く
閉じる
この場合、「開く」「閉じる」はUPDATE_COMMAND_UIで処理すれば良い事が分かりました。
では、ルートにある「ファイル」を実行中に変更するには、どのようにするのでしょうか?
0794デフォルトの名無しさん
2006/03/07(火) 17:05:06アプリケーションは CWnd::DrawMenuBar 関数を呼び出す必要があります。
0795793
2006/03/07(火) 17:23:06できました!
0796デフォルトの名無しさん
2006/03/07(火) 22:38:17スクロールバーをドラッグして動かすとものすごい勢いでちらつきます。
OnVScroll関数およびOnHScroll関数内で表示の更新をしているのが原因かと思い、
試しに更新をやめてみたところ、
残像のように伸びて絵が残るのかと思いきや、同じようにちらつくため、そうでもない様子。
原因は何なのでしょう?
ダブルバッファリング的なことはやっています。
アバウトな質問で申し訳ありませんが、よろしくお願いします。
0797デフォルトの名無しさん
2006/03/08(水) 00:02:24以上
0798デフォルトの名無しさん
2006/03/08(水) 00:14:160799デフォルトの名無しさん
2006/03/15(水) 21:08:28保持していないとまずいですか?(そのオブジェクトでCreateFontIndirect
に用いたLOGFONTは保持してます)
一応、スコープを外れても動いてますが…
0800デフォルトの名無しさん
2006/03/15(水) 22:52:26「使用中」が何を意味するかが謎
0801デフォルトの名無しさん
2006/03/15(水) 23:19:060802デフォルトの名無しさん
2006/03/16(木) 00:42:010803デフォルトの名無しさん
2006/03/16(木) 11:44:390804デフォルトの名無しさん
2006/03/16(木) 12:22:01http://www.kumei.ne.jp/c_lang/sdk/sdk_27.htm
フォントを破棄するとうまく行かない場合
http://www.kwi.co.jp/tips3.htm
0805デフォルトの名無しさん
2006/03/16(木) 12:40:080806デフォルトの名無しさん
2006/03/16(木) 14:10:550807デフォルトの名無しさん
2006/03/16(木) 14:22:220808799
2006/03/16(木) 19:18:30レスどうもでした。
0809デフォルトの名無しさん
2006/03/16(木) 19:26:230810デフォルトの名無しさん
2006/03/16(木) 22:30:40質問ですが、
キーが押された時にキーイベントをどのプロセスよりも早くキャッチして
選択中のプロセスに、本来とは違った動作させるプログラムを作りたいと思ってます。
たとえば、メモ帳を開き 'A'キーを押すと、'AAA'と入力される。
といった具合です。
キーをフックさせるなどの情報にはたどりついたのですが、
他のプロセスに働きかける方法がわかりません。
開発環境はVC++6.0、XPProです。
どうぞよろしくお願いします。
0811デフォルトの名無しさん
2006/03/16(木) 23:00:140812デフォルトの名無しさん
2006/03/16(木) 23:00:470813デフォルトの名無しさん
2006/03/16(木) 23:23:55お願いしますね。
0814デフォルトの名無しさん
2006/03/16(木) 23:30:05「グローバルフック」でググれ
0815デフォルトの名無しさん
2006/03/16(木) 23:30:43でも、スレ違いなので二度と来ないでください。
お願いしますね。
0816デフォルトの名無しさん
2006/03/16(木) 23:38:17ありがとうございました。
なんか僕のせいで荒れてしまってるようで申し訳ないです。
あと、813は僕じゃないです。
>>811-812
確かにろくでもないですねw
ただまだ知識も少なく、自分の作りたいものしか意欲がわかないので・・。
>>815
ありがとう。やっぱりAPIですか。ごめんなさい。
0817デフォルトの名無しさん
2006/03/17(金) 00:04:370818デフォルトの名無しさん
2006/03/17(金) 00:09:38今作りたいと思っているものは810に書いたような物です。
0819デフォルトの名無しさん
2006/03/17(金) 00:18:35817みたいな奴はいくら構っても知識ペイすることはないからほっとけよw
0820デフォルトの名無しさん
2006/03/17(金) 00:39:090821デフォルトの名無しさん
2006/03/17(金) 00:54:020822デフォルトの名無しさん
2006/03/17(金) 01:08:21そこまで言う事でも・・w
>>ALL
おかげさまでできそうです。
詳しく解説しているサイトがいくつもあり自分の検索する力が足りなさ過ぎる事を実感しました。
今度からはもう少し気合いれて調べてみます。
ご迷惑をおかけしました。
0823デフォルトの名無しさん
2006/03/17(金) 11:23:39たとえば、Web ブラウザを開きパスワードを入力すると、僕のところに送信される。
といった具合です。」
こう書くとあら不思議、碌でもないプログラムになる。
0824デフォルトの名無しさん
2006/03/17(金) 11:25:410825デフォルトの名無しさん
2006/03/17(金) 11:45:130826デフォルトの名無しさん
2006/03/17(金) 14:22:420827デフォルトの名無しさん
2006/03/17(金) 15:02:580828デフォルトの名無しさん
2006/03/17(金) 19:36:340829デフォルトの名無しさん
2006/03/17(金) 19:50:58823の自演
0830823
2006/03/17(金) 19:57:020831デフォルトの名無しさん
2006/03/17(金) 20:02:380832デフォルトの名無しさん
2006/03/17(金) 20:28:34俺が許さんぞ
0833デフォルトの名無しさん
2006/03/17(金) 20:36:57まさか4連休なんて事はないだろうね?
0834デフォルトの名無しさん
2006/03/17(金) 22:38:250835デフォルトの名無しさん
2006/03/17(金) 23:57:410836デフォルトの名無しさん
2006/03/18(土) 10:54:50今はActiveXを使ってフラッシュを表示し、デバイスコンテキストをコピーして
BMPを作成する方法でつくっています。
静止画のswf限定で構わないので、画面に表示する事無くBMPファイルに
変換する方法がわかる方居ましたら教えてください。
よろしくお願いします。
0837デフォルトの名無しさん
2006/03/18(土) 11:08:250838http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 18:41:25もしくは64bitにネイティブ対応した置換ソフトないですか?
0839デフォルトの名無しさん
2006/03/18(土) 19:23:10スレ違い。マルチ乙。
あと氏ね。
0840デフォルトの名無しさん
2006/03/21(火) 23:55:57ダイアログにCRichEditCtrlを張り付けて
タブオーダーを1にセットしたところ、DoModalで最初に表示されたときに
コントロール内のテキストが全て選択状態になってしまいます。
(OnInitDialogの最後でテキストをセット)
コントロールのSetWindowTextを使っても、SetSel(-1, -1)のあとに
ReplaceSelでテキストセットしても同じ現象を起こします。
テキストをセットした後にSetSel(0,0)などをしても直りませんでした。
とりあえずOnInitDialogで1秒後にコールされるようにタイマーをセットしておき
OnTimerでタイマー解除とSetSel(0,0)をしたところなんとか対策は出来ましたが、
他にOnInitDialogの後で選択状態を解除するスマートな方法はどんな方法がありますか?
0841デフォルトの名無しさん
2006/03/22(水) 01:29:48OnInitDialog()の段階では未だ表示されてないからねぇ。
タイマー使わなくても初回のOnIdle()で選択解除してもよさそうだけど。
0842デフォルトの名無しさん
2006/03/22(水) 03:44:33なるほどOnIdleという手もありますが、今回は
子ダイアログ(書き忘れましたが)なのと、モードレスダイアログ時でも
使えるようにメッセージでも試してみました。
1・子ダイアログのOnInitDialogの最後で親ダイアログにPostMessage
2・親ダイアログのWindowProcでメッセージを受信すると、子ダイアログにSendMessage
3・子ダイアログのWindowProcで応答メッセージを受信して、CRichEditCtrlのSetSel(0,0)実行
という具合です。結果は一応これでも出来ました。でもヘッダにメッセージを#defineするのと
両クラスのWindowProcで応答を書く手間を考えたらOnTimerの方がまだマシかも・・・
0843デフォルトの名無しさん
2006/03/24(金) 03:40:18動的な分割ウィンドウっぽく表示したいのですがどうすればいいのでしょうか?
CSplitterWndだとOnCreateClient()内でしか呼べないようで生成できるタイミングが限られてしまうのですが。
0844デフォルトの名無しさん
2006/03/24(金) 09:05:37Splitter Windows
http://www.codeproject.com/splitter/
Toolbars / Docking Windows
http://www.codeproject.com/docking/
0845デフォルトの名無しさん
2006/03/24(金) 11:00:11MFC 動的 分割でぐぐればヒットするがな。
0846デフォルトの名無しさん
2006/03/24(金) 11:06:560847デフォルトの名無しさん
2006/03/24(金) 11:34:17なにか、おまじないがあるのでしょうか?
OSはXP Pro SP2です。
0848デフォルトの名無しさん
2006/03/24(金) 12:33:36別になんともない
0849デフォルトの名無しさん
2006/03/24(金) 15:17:24オブジェクトBがオブジェクトAのDataのポインタを保持
こうしてオブジェクトAのDataの内容が変わるとオブジェクトBでもそれが
反映されるというようにしました。
この二つのオブジェクトをSerialize()関数をアップデートして、
シリアル化しファイルに保存しました。
これを読みこんで再び関連付けられた二つのオブジェクトを
再生成するにはどうしたらいいのでしょうか?
おそらく再生成されたオブジェクトAのDataのアドレスは
オブジェクトBの保持しているアドレスと変わってしまっているとおもうので。
あとポインタの指す先のオブジェクトのSeriarize関数を呼び出すには
どうしたらいいのでしょうか?
(CArchive)Arc<<(CObject*)pObj;
としたら
error C2678: 二項演算子 '<<' : 型 'CArchive' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
のように表示されるのですが。
0850デフォルトの名無しさん
2006/03/24(金) 15:24:410851849
2006/03/24(金) 16:19:51オブジェクト保存時に、
どれどれのオブジェクトのどのデータを参照する
という意味のポインタ(というかポインタ全般)は意味をなさないんですね。
上記以外で解決方法はありませんか?
ポインタ以外で参照先のデータを示す方法とか。
0852デフォルトの名無しさん
2006/03/24(金) 16:33:350853851
2006/03/24(金) 16:36:50アプリケーションで全オブジェクトの全データにIDかなんかをつけて
それを保持させるようなやり方ですか?
0854デフォルトの名無しさん
2006/03/24(金) 16:48:070855デフォルトの名無しさん
2006/03/24(金) 17:35:22ポインタのようなものを保存したいんです。
オブジェクト間の関連を残したまま、
別々に保存するっていうのを。
無理みたいですけど。
0856デフォルトの名無しさん
2006/03/24(金) 18:49:05だと思うYO
0857デフォルトの名無しさん
2006/03/24(金) 19:33:400858デフォルトの名無しさん
2006/03/25(土) 01:31:210859デフォルトの名無しさん
2006/03/25(土) 12:27:44タブオーダが1番だからRichEditにフォーカスがきて選択状態になってるとか?
0860843
2006/03/25(土) 13:11:37>>845
遅ればせながらありがトン。
ググってもCSplitterWndばっかりで困ってたんです。
どうにも「ドッキング」てやつがやりたいことに近そうです。
キーワードに"ドッキング"をつけたらいい感じにでてきました。
0861デフォルトの名無しさん
2006/03/25(土) 14:33:40オブジェクトBにどういう働きをさせようとしてるのかいまいちわからないが・・・
そもそものこの表現が不明
>> オブジェクトAがCString Data[256]を保持
>> オブジェクトBがオブジェクトAのDataのポインタを保持
>>
>> こうしてオブジェクトAのDataの内容が変わるとオブジェクトBでもそれが
>> 反映されるというようにしました。
反映されるというか、単純にポインタ持ってるだけでしょ?
0862デフォルトの名無しさん
2006/03/25(土) 14:34:35保存時
オブジェクトAの値を保存
読み込み時
オブジェクトAを構築し、オブジェクトBにDataのポインタを渡す
オブジェクトBは保存する必要はない
0863デフォルトの名無しさん
2006/03/25(土) 14:53:16>> オブジェクト間の関連を残したまま、別々に保存するっていうのを。
君が挙げた例だとそもそも関連を保存する必要もなく、後付で関連づけられるのだが。
例は別としてこういうことがやりたいってこと?
0864デフォルトの名無しさん
2006/03/25(土) 16:11:06考えるだけ無駄
0865デフォルトの名無しさん
2006/03/25(土) 16:35:09教えようとすると先は長いぞ
本人がガンガレ
0866デフォルトの名無しさん
2006/03/25(土) 16:36:400867デフォルトの名無しさん
2006/03/25(土) 17:16:250868デフォルトの名無しさん
2006/03/25(土) 19:27:490869デフォルトの名無しさん
2006/03/26(日) 10:18:570870デフォルトの名無しさん
2006/03/26(日) 11:20:350871デフォルトの名無しさん
2006/03/27(月) 12:38:37WindowsプログラミングはWin32でちょこっと。
COMやMFCやSTLは言葉は聞いた事あるけどいまいち理解しておらず。
こんな自分ですがMFCを覚えるのに良い本はありますか?
0872デフォルトの名無しさん
2006/03/27(月) 12:45:08MFCの範囲で作るんなら
STLやテンプレート要らんよ。
0873デフォルトの名無しさん
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;
としています。
スタティックテキストの背景を透明にする事は出来たのですが、ラジオボタンの背景が透明にならず、黒くなってしまいます。
色々調べると「スタイル適用時はラジオボタンの背景を透明には出来ないかも」とあったので、スタイル非適用に変えて確かめるとラジオボタンの背景は透明になっていました。
やっぱりラジオボタンの背景はスタイル適用時は透明にできないのでしょうか?
0874873
2006/03/27(月) 18:03:06ラジオボタンのみビジュアルスタイルを適用しない、という逃げで
対応する事にしました。
お騒がせいたしました。
0875840
2006/03/30(木) 08:22:24そういうことなんでしょうが、その選択状態になった直後に解除することが出来なかったのでした。
・・・が、無事解決できますた。RichEditCtrlのOnSelChangeをオーバーライド(もちろん初期化時に
ENM_SELCHANGEフラグを登録)して、そのなかで最初の一度だけ実行するように
静的変数のフラグを用意して、そのフラグが立っているときだけSetSel(0,0)を実行すれば
よかったみたいです。
0876デフォルトの名無しさん
2006/03/30(木) 15:12:57スクロールバーのついた子ダイアログを描画用に作成したんですけど、
派生クラスを作って機能を追加したいんですが、どのように作成するのが一般的なんでしょうか。
0877840
2006/03/30(木) 20:30:56RichEditCtrlを初期化するときに SetOptions(ECOOP_OR, ECO_SAVESEL)
を使うのが正解だた。
0878デフォルトの名無しさん
2006/03/31(金) 09:29:46これからもメンテナンスされ続けるんだろうか。
0879デフォルトの名無しさん
2006/03/31(金) 10:23:00api使えないと使えない
0880デフォルトの名無しさん
2006/04/03(月) 07:06:09LoadFrame(IDR_xxx, WS_OVERLAPPEDWINDOW, NULL, NULL)
として、タスクバーに表示されるモードレスダイアログを実装してみた。
そのダイアログから、
AfxMessageBox(Message, MB_OKCANCEL|MB_DEFBUTTON2|MB_ICONQUESTION, 0);
を呼ぶと、メインウィンドウの中央にメッセージボックスが表示されてしまうんだが、
これをダイアログの中央にできないかな?
0881デフォルトの名無しさん
2006/04/03(月) 10:00:420882876
2006/04/03(月) 13:42:38派生クラスで関数のオーバーライドができるようになったけど、これって一般的なやり方なんでしょうか?
初心者なんで自分のやり方が合ってるか間違ってるのかわかりません。
0883デフォルトの名無しさん
2006/04/03(月) 17:02:000884876
2006/04/04(火) 14:43:45派生先のクラスの作成するときに「クラスの新規作成」ダイアログで
クラスの種類に「Genericクラス」を選んでクラスを作成してました。
派生先のクラスの作成の仕方をこう変えてみました。
1.クラスウィザードで基本クラスがCDialogクラスのクラスを作成する。
2.クラスの宣言でClass xxxx : public CDialog ←ここを派生元のクラスに替える
これでクラスの継承っぽいことはできるようになりました。
派生クラスを作るときの一般的なやり方というものを知らないため、変な作り方になったのかも知れません。
0885デフォルトの名無しさん
2006/04/05(水) 10:28:29get_safearray(&p)
みたいにLPSAFEARRAYを返すAPIがあるんだけど、そのポインタって
そのままCOleSafeArrayに変換できるんでしょうか?
0886デフォルトの名無しさん
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 );
とか。
0887885
2006/04/05(水) 14:45:23サンクス、Attachでできた。
ASSERT(vt & VT_ARRAY)の意味を逆に取ってた。
VT_SAFEARRAYじゃなくてVT_ARRAYなんだね。
SAFEARRAYの配列の時にVT_ARRAY | VT_SAFEARRAYって感じで使うものなのかな。
0888デフォルトの名無しさん
2006/04/07(金) 00:03:13以前、タイトルバーに進捗率を表示する(SetWindowTextを連続的に呼ぶ)場合に
XP/2003で同じ現象を確認しました。
いろいろ試したところ、どうもSetWindowTextの呼び出し間隔が短い場合
(〜数10ms)に現象が発生するようです。詳しい原因や回避策(おまじない)に
ついては良く分かりません。
0889デフォルトの名無しさん
2006/04/07(金) 06:24:240890デフォルトの名無しさん
2006/04/10(月) 20:29:250891デフォルトの名無しさん
2006/04/13(木) 01:24:41あるアプリケーションのウィンドウクラスがマシンが違うと
Afx:400000:8:10013
Afx:400000:8:10011
というように、(コロンで区切って)4番目の値が変わります。
Afxで始まるのでMFCを使っていると仮定すると、4番目はLoadCursorの
戻り値だと思うのですが、なぜLoadCursorの戻り値がマシンによって変わるのでしょうか。
0892デフォルトの名無しさん
2006/04/13(木) 01:42:28ついでに言うと、カーソルハンドルはプロセス内で固有値になっていればいいので
同一マシンでもプロセスが違えば違うハンドル値になってもおかしくない。
0893デフォルトの名無しさん
2006/04/13(木) 09:53:17そのダイアログからボタンクリックでモードレスダイアログを発生させ、交互に操作が可能です。
モードレスダイアログの方は、ダイアログを選択する度にダイアログは前に表示されますが、元々のダイアログの方は選択しても画面が前に来ません。
調べてみると、選択したときダイアログを前に表示するにはリソースエディタ上ではなく、リソースコードをいじる必要があるみたいですがそこから行き詰まってしまいました。
0894デフォルトの名無しさん
2006/04/13(木) 11:02:330895デフォルトの名無しさん
2006/04/13(木) 12:41:290896デフォルトの名無しさん
2006/04/13(木) 15:09:000897デフォルトの名無しさん
2006/04/13(木) 15:28:190898デフォルトの名無しさん
2006/04/13(木) 19:34:350899デフォルトの名無しさん
2006/04/13(木) 23:53:38CreateWindowの第2引数に、this を指定してて、親(Modal)より
前にいけんだけでは?
GetDesktopWindow()を第2引数に指定したらうまく動くと思われ。
0900デフォルトの名無しさん
2006/04/14(金) 00:02:450901デフォルトの名無しさん
2006/04/14(金) 15:17:25下っかわをCEditViewでつくってるんだけど
CEditViewに文字を表示する事ができないんですが、
CEditViewでthis->SetWindows("あああ");
とやっても表示されないんですが、どうやったらいいでしょうか。。。
どうやって表示すれば。。。
0902デフォルトの名無しさん
2006/04/14(金) 15:24:520903901
2006/04/14(金) 15:28:01this->SetWindowText("あああ");
でできなかったです><
0904デフォルトの名無しさん
2006/04/14(金) 15:30:240905デフォルトの名無しさん
2006/04/14(金) 16:35:15非表示になってたり、領域外に隠れちゃってるとかはない?
0906デフォルトの名無しさん
2006/04/14(金) 16:48:590907デフォルトの名無しさん
2006/04/14(金) 17:29:00メンバ変数を参照、代入するときに自動的にget,set関数を
呼び出してアクセスしたいんですけど、
どうやるんでしょうか?
0908デフォルトの名無しさん
2006/04/14(金) 17:30:34日を改めてお越しください。
0909デフォルトの名無しさん
2006/04/14(金) 17:32:56C++, MFC にはそのような機能はない。
BCBにはあったような気がする。
0911デフォルトの名無しさん
2006/04/14(金) 17:48:53次へ進むボタン押すと表示されるページを分岐できますか?
0912デフォルトの名無しさん
2006/04/14(金) 18:09:35__declspec( property(...) )
非標準だけど。
0913デフォルトの名無しさん
2006/04/14(金) 18:13:230914デフォルトの名無しさん
2006/04/14(金) 18:48:090915デフォルトの名無しさん
2006/04/14(金) 18:52:24すげーラジオ作ってんの?
0916デフォルトの名無しさん
2006/04/14(金) 18:57:56もちろんラ製とトラ技は読んでるだろうし
0917デフォルトの名無しさん
2006/04/14(金) 19:32:160918デフォルトの名無しさん
2006/04/14(金) 19:41:460919デフォルトの名無しさん
2006/04/14(金) 20:35:57画面いっぱいを使って、自作の2つのアプリを上下で表示させています。
(下に「ソフトキーボード」プログラムを表示させ、その上に「業務アプリ」を表示)
業務アプリ(やその他のアプリ)の最大化実行時に、
ソフトキーボードを除いた領域で最大化させたいのですが
どうすればよいでしょうか?
「ソフトキーボード」がグーグルのサイドバー的な立場になればよい
ようなきがしますが…
0920デフォルトの名無しさん
2006/04/14(金) 21:17:310921デフォルトの名無しさん
2006/04/15(土) 14:08:00教えてください。
0922デフォルトの名無しさん
2006/04/15(土) 15:22:01ラジオのボタンってのもある。
0923デフォルトの名無しさん
2006/04/15(土) 15:39:25好みの色のサングラスを買って来い
0924デフォルトの名無しさん
2006/04/15(土) 16:32:200925デフォルトの名無しさん
2006/04/15(土) 16:34:51OnCtlColor使う方法がありましたがうまく変更されないです。
0926デフォルトの名無しさん
2006/04/15(土) 16:37:32WM_CTLCOLORSTATIC
0927デフォルトの名無しさん
2006/04/15(土) 17:32:25全部やると結構めんどくさいな
0928デフォルトの名無しさん
2006/04/15(土) 18:08:28その場合はどのタイミングがいいですか?
0929デフォルトの名無しさん
2006/04/15(土) 18:39:470930デフォルトの名無しさん
2006/04/15(土) 19:04:090931デフォルトの名無しさん
2006/04/16(日) 16:14:48リンクする外部ライブラリで、
結果を stdout、stderr に出力するものがあるのですが、
これをアプリで受け取るにはどうすればいいでしょうか?
MFCアプリだと、stdout、stderr が閉じられているのか、
NULL参照になります。
0932デフォルトの名無しさん
2006/04/16(日) 16:32:310934デフォルトの名無しさん
2006/04/16(日) 16:54:56stdin stdout stderrで受け渡しするわけだけど
それと同じだろ
0935デフォルトの名無しさん
2006/04/16(日) 17:09:120936デフォルトの名無しさん
2006/04/16(日) 17:49:01パイプ作って、stderrを置き換える。
0937デフォルトの名無しさん
2006/04/16(日) 22:25:48方法としてはすでにレスがついている通りパイプを作ってその
ライブラリの出力(stdout,stderr)を受けてやる。
パイプからのデータ読み出しにはReadFileを使う。
ここの説明がわかりやすいんじゃないかな。
ttp://nhiro4.ld.infoseek.co.jp/program/windows/pipe.html
0938931
2006/04/17(月) 22:55:41stderr を置き換えるところがよくわからんかった。
パイプを作って、SetStdHandle で stderr に設定してみたんだが、
stderr に fprintf してみても、パイプから読み出せなかった。
>>937
別プロセスなら楽なんだが、Windowsアプリが自分の stderr を作って、
それを読み出す方法がわからないんだ。
0939デフォルトの名無しさん
2006/04/17(月) 23:07:070940デフォルトの名無しさん
2006/04/18(火) 12:00:11だったら別スレッドでその外部ライブラリとやらを呼び出せばいいだろうに。
0941931
2006/04/19(水) 12:58:59Windowsサブシステムのexeファイルなので、
そもそも stdout、stderr がないわけだ。
その、stderr を自分でつくるところではまってるんだが。
別スレッドとかいう問題ではない。
0942デフォルトの名無しさん
2006/04/19(水) 13:12:000943デフォルトの名無しさん
2006/04/20(木) 00:28:33よく調べれば、MSDNに乗っていたはず。
つーか、俺、昔やったことあるし。
0944デフォルトの名無しさん
2006/04/20(木) 12:36:49(pTarget->*mmf.pfn_COMMAND)();
を呼ぶとON_COMMANDに登録したメンバ関数に飛ぶのはpTargetがメンバ関数のthisになってるから
だろうけどこれはC++的に正しいの?それともMFCだけの拡張(実装依存?)なの?
0945944
2006/04/20(木) 13:10:34AfxFindMessageEntryで関数ポインタテーブル(?)から検索するときにインラインアセンブラで書いてあるところまで追っかけれた
すまそ
0946デフォルトの名無しさん
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()して固定色で書く事は成功しているので、抜き出し範囲外の問題
では無いと思います。
上のようなことをやろうとする場合、どのような書き方が正しいのでしょうか?
0947デフォルトの名無しさん
2006/04/20(木) 23:08:26なぜか読もうとさえしないんだよな
0948デフォルトの名無しさん
2006/04/20(木) 23:30:43ヘタレなのと英語読めないのとで、適切な手段思い浮かぶより前に
時間切れになってしまいまして orz
0949デフォルトの名無しさん
2006/04/21(金) 14:33:57皆さんどんな本で・もしくはサイトで?勉強しました?
よろしければ分かりやすい本など教えてください。
ド素人なのでスレ違いでしたらすみません。
0950デフォルトの名無しさん
2006/04/21(金) 14:35:370951デフォルトの名無しさん
2006/04/21(金) 14:37:26すみませんでした。
0952946=951
2006/04/21(金) 14:38:57出直してきます。
0953デフォルトの名無しさん
2006/04/21(金) 14:39:19http://pc8.2ch.net/test/read.cgi/tech/1141805746/l50
0955デフォルトの名無しさん
2006/04/21(金) 17:48:06どこに書けばいいんでしょう?
OnDrawだと再描画時にエラーになってしまうんですが。
0956デフォルトの名無しさん
2006/04/21(金) 17:58:550957デフォルトの名無しさん
2006/04/21(金) 18:00:34SDIだから?
どうしよ。
0958デフォルトの名無しさん
2006/04/21(金) 18:02:360959デフォルトの名無しさん
2006/04/21(金) 18:56:36基礎ぐらいちゃんとやっとけ
0960デフォルトの名無しさん
2006/04/22(土) 17:29:46マネージコードで使えるようなコントロールはどうすればできますか?
基本クラスから独自に派生していちいち作らないとだめなのでしょうか?
0961デフォルトの名無しさん
2006/04/22(土) 17:47:41MFC のプロジェクトを /clr:pure でビルドするつもり?
0962デフォルトの名無しさん
2006/04/22(土) 18:38:090963デフォルトの名無しさん
2006/04/23(日) 15:29:440964デフォルトの名無しさん
2006/04/23(日) 16:12:42したんですが、実行ファイルは何処にできてるんでつか
あと、フォームのコマンドボタンを押したときの
コードはふぉーむのとこにしかかけないんでつか
おしえてください。
0965デフォルトの名無しさん
2006/04/23(日) 16:19:44へぇー
0966デフォルトの名無しさん
2006/04/23(日) 16:36:580967デフォルトの名無しさん
2006/04/23(日) 16:54:150968デフォルトの名無しさん
2006/04/23(日) 21:12:10MFCぐらい買ってやれよ
0969デフォルトの名無しさん
2006/04/23(日) 21:17:09お前「ら」?
買ってやれ?
どういう流れそういうレスをつけたのかわからん
MSDNよりわからん
0970デフォルトの名無しさん
2006/04/25(火) 12:01:32エクスプローラみたいなものを作っています。
縮小版表示アイコンを表示させたいです。
画像のサムネイル表示は出来ましたが、画像以外ファイルのアイコンを
エクスプローラで表示されているような、
黒枠の中に小さいアイコンがぽつんとあるアイコンが取れません。
32×32のアイコンを引き伸ばして表示することは現在可能です。
IExtractImage, IExtractIcon, SHGetFileInfoなどつかいましたが同じ状況です。
開発環境はWin2000, VC++6.0です。
0971デフォルトの名無しさん
2006/04/25(火) 12:17:03アイコン持ってないファイルのアイコン表示?
MFCとかんけあるかな?
0972デフォルトの名無しさん
2006/04/25(火) 12:56:110973デフォルトの名無しさん
2006/04/25(火) 12:59:420974デフォルトの名無しさん
2006/04/25(火) 14:07:49http://pc8.2ch.net/test/read.cgi/tech/1144962549/
0975デフォルトの名無しさん
2006/04/25(火) 14:09:30ありがとうございました。
0976デフォルトの名無しさん
2006/04/25(火) 14:16:26ありがとうございました。
0977デフォルトの名無しさん
2006/04/25(火) 14:32:120978デフォルトの名無しさん
2006/04/25(火) 23:52:23実行ファイルを作成するプロジェクトのほうで上記のメソッドを実行してもダイアログボックスが表示されないんですけど(DoModal()の戻り値が-1になる)、どうすればよろしいのでしょうか。
0979デフォルトの名無しさん
2006/04/26(水) 01:15:590980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
2006/04/27(木) 02:57:34デザインでコントロールを移動すると、たて横に線が表示され、
均等な配置ができますが、MFCプロジェクトのダイアログエディタでは
何もでないので調整が難しいです。
これはどうにかならないのでしょうか?
0982デフォルトの名無しさん
2006/04/27(木) 08:10:390983デフォルトの名無しさん
2006/04/27(木) 08:32:500984デフォルトの名無しさん
2006/04/27(木) 12:49:26Win32アプリでリソースファイルをテキスト編集使ったことない?
猫も使ったことない?
なんたら.rcをコピーして.txtに変換して、テキストでメタ数値で編集
そして、.rcに戻して、プロジェクトに吸い込むんだよ
MFCというかVCの基本
0985デフォルトの名無しさん
2006/04/27(木) 12:55:37素朴な疑問なんだが、何で又一々変換なんかするんだ?
普通に*.rcを編集すればいいと思うのだが。
0986デフォルトの名無しさん
2006/04/27(木) 12:56:13初耳だ。
0987デフォルトの名無しさん
2006/04/27(木) 12:56:55ターゲット(たて横に線)の重なりで調整じゃ
コントロールの正確な位置決めできてないな
0989デフォルトの名無しさん
2006/04/27(木) 13:04:51それともマジでそうやってる?
0990985
2006/04/27(木) 13:09:17少なくとも漏れはグリッドを設定してそれを使って位置調整しているが。
でもコピペした部品の調整やら大量の部品の順序変更は*.rc直接編集だな。
0991アマグラマ
2006/04/27(木) 13:14:58タブオーダという言葉くらい使って欲しい
0992デフォルトの名無しさん
2006/04/27(木) 13:16:56ん?6.0 にも 2003 にもあったグリッドが 2005 ではなくなったの?
>>984
ん?6.0 でも 2003 でもテキストファイルだった .rc が 2005 ではバイナリなの?
0993デフォルトの名無しさん
2006/04/27(木) 13:22:25やってみたけど、理解不能です
ソリューションエクスプローラーの.rcを右クリックでコードの表示とどう違うの?
0995デフォルトの名無しさん
2006/04/27(木) 13:30:112005にはその機能が追加されてるんですか。6.0には無かった。
0996デフォルトの名無しさん
2006/04/27(木) 13:37:26変更して保存するやり方だと、
何故か、プロジェクト上の.rcアイコンが.txtのアイコンになってしまう。
だから、コピーして.txtで変更しておいて、.rcに戻して吸い込んだほうがよい
0997デフォルトの名無しさん
2006/04/27(木) 13:47:252003にも無かった
0998デフォルトの名無しさん
2006/04/27(木) 13:57:41それで数値で編集して、foo.rcに戻してやるのがよいと思う。
0999デフォルトの名無しさん
2006/04/27(木) 14:05:55ファイル-開く
からなら、テキストファイルとして開けるわけだが。
1000デフォルトの名無しさん
2006/04/27(木) 14:16:4710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。