>>1 訂正
>■ VisualC++(MFC限定)相談室 MFC10.dll■
■ VisualC++(MFC限定)相談室 MFC11.dll■
>>2 さらに訂正
>■ VisualC++(MFC限定)相談室 MFC11.dll■
■ MFC相談室 MFC11.dll■
MFCってもうすぐなくなるそうですが、本当ですか?
MFC42.DLL
シニ
で命運尽きたと見るべきだろう
>>8 いつの時代の話だ。
いまはMFC70.dllだぞ。
>>5, 7-8
これテンプレの一部かと思って貼ったんだけど違ったのかな?
突然質問で失礼します。
CDialogの継承クラスにおいて
ワーカスレッドからメインスレッドに15msecおきに
SendNotifyでユーザ定義メッセージを送って
関数を実行させようとしています
しかし、どうしてもランダムに
200msec前後の遅延が発生します
どうにか15msecぐらい間隔で目的の関数を
呼び出すことはできないでしょうか?
どうか、アドバイスをよろしくお願いします
>>11 厳密なタイマーを使うには、マルチメディアタイマー関数を使うしかない。
しかし、200mSecも遅延しているから、そういう問題じゃないと思う。
多分、メッセージループのコールバックで時間がかかっている。
過剰な描画要求・過剰な計算をコールバックプロシージャで行っていないか確認するのが先決。
マルチスレッドにできるかどうか検討するのはその後。
>>12 アドバイスありがとうございます
2chは初めてで、嫌悪感をもってましたが
思い切って質問してよかったです。
ATL スレとこちらと、どちらの質問が妥当か迷ったのですが
こちらに書き込みさせていただきます。
Visual C++ で MFC を使ったアプリケーションを作成しています。
IE コンポーネント(IWebBrowser2)を貼り付けて、
そこから(ExecWB で)印刷を行わせているのですが
印刷完了イベントのようなものはないのでしょうか?
DWebBrowserEvents2 には該当するような
イベントを見つけることが出来ませんでした。
なにか OLE 汎用のイベントのようなものがあるのでしょうか。
よろしくお願いします。
VC++6、Unicodeで開発しています。
今やってるのは日本語を入力したらそのキーワードで検索をするという
もので、インクリメンタル検索になってます。入力欄はコンボボックスです。
CBN_EDITUPDATEでやっていたのですが、これだとIMEで入力を確定すると
文字数分だけ呼ばれてしまいます。(「こんにちは」を確定すると5回)
もちろんIMEの入力確定でインクリメンタルに検索してもなんのメリットも
ないので、一回で済ませたいのですが、今はCBN_EDITUPDATEを
処理する代わりにユーザー定義メッセージで処理することにし、
コンボボックスサブクラス化(CComboBoxを継承)・コンボボックス中の
エディットボックスサブクラス化(CEditを継承)して、エディットに
WM_IME_CHARが来た回数分だけWM_CHARを無視し、残った分の
WM_CHARとWM_IME_COMPOSITOINにLPARAMでGCS_RESULTSTRが
来た時にユーザー定義メッセージを親のコンボボックスに送り、
それをさらに親に転送するという形でなんとか実現はできました。
ただこれではMBCS環境では使えないし、何よりたかが日本語の
インクリメンタル検索でこんなに手間がかかるのは直感的におかしいと
思うので、誰かいい方法をご存知の方がいらっしゃったら教えてください。
WM_IME_COMPOSITOIN→WM_IME_COMPOSITIONでした。
>>14 マルチメディアタイマを使ってみたのですが
コールバック関数内で呼び出している関数が
イベント発生時に呼び出されていないように
見える現象が10000回に一度程度発生します
一度発生すると5回前後スルーされているようです
イベントインターバルを100msec、
コールバック関数内の処理を軽くしても改善されません
どうしてでしょうか?
心当たりがありましたらアドバイスよろしくお願いします。
起動したプログラムの絶対パスがわかる方法ありますかね?
自分で調べればいいのですがどうも見つからなくて、わかりません
全てのディレクトリを検索する場合だとうまくないのでいい方法ご教授おねがいします
23 :
デフォルトの名無しさん:04/10/07 15:50:38
VC++6.0を使っています。
子ウィンドウにタブとかスライダーなどいろいろ配置したいのですが
何かいい方法ってあるでしょうか?
プロパティシートを使えばとも思いましたが、[OK]ボタン等が必要ないので
他の方法を考えております。
いい方法をご存知の方、アドバイスよろしくお願いします。
本読め
いい方法はないです。
サイズの変更がめんどくさいなら、タブに WS_MAXIMIZE
CFormViewじゃいかんの?
DLLを作り終わってから、ATLクラスはC++呼び出しで直接インスタンス化できないことを
知りましたorz
COMのDLLにするときには、ATLオブジェクトは利用したいクラスをラップする形で実装するのが
デザインとして正しいんでしょうか?
たとえば、通常のクラスHogeがあったとして、ATLオブジェクトCHogeを派生させるのが正しい
使い方でしょうか。
>>27 ウィザードが作った雛形どおりにすればよいと思う。
>>28 ATLオブジェクトに内部的なメソッドも実装してしまって、VC++からでもCOM呼び出しで使うようにすべきだ、
という理解でいいんでしょうか。
DLLにATLでないクラスも定義している場合なんかは、デフォルトで作られるヘッダファイルでは
それらが利用できませんよね?
あ、ひょっとしてそのヘッダに書き加えればいいのか?
内部的なクラスはCOMオブジェクトにする必要はない。
外部から使用される対象のクラスをCOMオブジェクトにすればよい。
31 :
デフォルトの名無しさん:04/10/09 20:46:26
CtreeCtrlを使ってあるデータを階層上に表現したいのですが
あるサンプルを見ながら書いてみたのですが"+","-"が表示されません。
そのソースを見る限りでは
InsertItem("asfd", 0, 0, hParent );
InsertItem("", 0, 0, hParent );
これだけで+マークが表示されてるようですが。
同じようにやっているつもりでも表示されません
なんでですか?
31
TreeControlのプロパティを 「ボタンあり」
または
windowスタイル += TVS_HASBUTTONS
のどちらか。
CEditクラスの変数を、リソースエディタでダイアログに張り付けるようにしないで、
ダイアログクラスのメンバとして確保しました。その後、ダイアログクラスの
OnInitDialog()でCEdit型変数のCreate()を呼び出してものっぺりとしてしまって
リソースエディタで張り付けたときのような窪みを作れません。どうやったら
窪みを付けられますか?実際のCreateは以下のようにしてます。
m_cEdit.Create(WS_VISIBLE|ES_WANTRETURN|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE,
cRect, this, IDC_ED_TEST);
>>33 WS_EX_CLIENTEDGEあたりじゃないのかなぁ
>>34 とりあえず
m_cEdit.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
m_cEdit.ShowWindow(SW_SHOW);
を直後に入れてみましたが相も変わらずです。@WinXPSP1 VC6SP6
WS_BORDER
拡張スタイルは CreateWindowEx で指定できて
CreateWindowで指定できないよな
とりあえず自前の派生クラスを作成し、PreCreateWindow(CREATESTRUCT& cs)で
cx.dwStyleEx|=WS_EX_CLIENTEDGE;
としたところ無事に窪みが発生しました。
CreateWindowEx()の方は引数をどうしたらいいのかさっぱりです
MFCならCWnd::CreateEx
41 :
デフォルトの名無しさん:04/10/10 21:56:20
CException の ReportError() がうまく動作しなくて困っています。
Win32 プロジェクトを作成し、
「コンソールアプリケーション」「MFC」を選ぶ。
コードは
try {
CStdioFile fin("in.txt", CFile::modeRead);
} catch(CException* e) {
e->ReportError();
e->Delete();
}
これを "in.txt" がない状態で実行すると、
「in.txt が見つかりませんでした。」とうまく表示されます。
しかし、MFC の使用を
「共有 DLL で MFC を使う」から「スタティック ライブラリで MFC を使用する」にすると、
ReportError() はなにもメッセージを表示しません。(空文字で、[OK] ボタンのみ)
debug / Release どちらもだめでした。
スタティック ライブラリで ReportError はだめなのでしょうか?
すいません、
環境:Visual Studio .NET 2002 です
MFCの例外スローを使わないようにするのが一番手軽なのだが。
ところで、try〜catchとTRY〜CATCHって、いまはtryのほうがいいんですよね?
マクロと機能がかぶってるのって、どっちつかうか迷う。
>>41 文字列リソースのAFX_IDP_FILE_NOT_FOUNDが見つからないから。
debugモードだとアサート出なかったか?
スタティックリンクにするなら、アプリのリソースから、ライブラリのリソースをインクルードしなきゃ。
>>43-46 afxres.rc をコピーしてきてプロジェクトに加えたら、
うまくいきました!
どうもです。
>>47 コピーじゃくてインクルードするのがいいですね。
すいません。
誰かわかる方いらっしゃらないですか〜?
なんだかとてもよくありそうな処理の気がするんですが。
ちなみに今はWM_IME_COMPOSITIONでGCS_RESULTSTRが
立ってるとき(変換確定)に確定文字列の長さを数えて、
その分だけWM_CHARを無視する方法に変えました(CEで
WM_IME_CHARが送られないため)。
でも相変わらずUnicode依存だし(今回はそれでいいんですが)、
直感的に「この処理は汚い」と思うので、アドバイスいただけたら
うれしいです。または、「前そんな処理やったけどそれしか方法が
なかった」というのでもいいです。
50 :
デフォルトの名無しさん:04/10/11 22:00:31
分割ウィンドウを作るときに、createviewで各ビューのサイズを設定して
いるんですが、1行2列で一列目がさらに2行に分割されているような
ウィンドウを作る場合、1列めの二つのビューの列幅がどうしても極狭に
なります。これを任意の幅にしたい場合、ウィンドウを作ったあとにリサイズ
するしか方法はないでしょうか?
CreateViewの前後に SetColumnInfo とか SetRowInfo 使うらしいです
>>51 やっぱそれしかないですか・・・
せっかくサイズ設定できるのに、あとでSetColumnInfo とかつかうと
なんか二度手間でかっこわるいんですよねぇ・・・
53 :
デフォルトの名無しさん:04/10/13 20:30:57
CDocumentなんてデフォルトコンストラクタがprotectedなのにオブジェクトの生成が
できるの?
ったく、わけわかんね
CRuntimeClass::CreateObject
55 :
デフォルトの名無しさん:04/10/13 22:07:27
CSplitterWndでフレームを分割しているのですが、サイズを可変できる必要はないので
サイズを固定し、分割ウィンドウの境界線を補足したいのですがどうすればいいのですか?
>>55 サイズ変更しないんなら単にペインを子ウィンドウとして配置するだけだと思うが。
57 :
デフォルトの名無しさん:04/10/13 22:48:10
>>56 なにをキーワードにMSDNを引けばいいの?
タブコントロール内のタブページの領域の大きさを取得する
方法ってありますか?
>>55 CSplitterWndを入力禁止にするのはどう?
61 :
デフォルトの名無しさん:04/10/13 23:07:44
>>60 アドバイス頂けるのはありがたいでのすが、造語?を使われると意味がわかりません。
入力禁止ってなんですか?
ぇー、EnableWindow(FALSE) のこと。
63 :
デフォルトの名無しさん:04/10/13 23:24:45
::EnableWindow(m_wndSplitter.m_hWnd,FALSE);
すると、スクロールも出来なくなりました
少し自分でも試行錯誤してみたら?
65 :
デフォルトの名無しさん:04/10/14 00:01:20
なんじゃそりゃ
わかないならはなっから口出しすなよ、ぼけ
66 :
おれおれ:04/10/14 00:47:20
CSplitterWndの派生クラスを作る。例えばCHogeWndとする。
OnLButtonDown()とOnMouseMove()をオーバーライドする。
void CHogeWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
CWnd::OnLButtonDown(nFlags, point);
}
void CHogeWnd::OnMouseMove(UINT nFlags, CPoint point)
{
CWnd::OnMouseMove(nFlags, point);
}
>>66 これだけだとマウスカーソルの変化が食い止められないです
失礼しました、直りました。
69 :
デフォルトの名無しさん:04/10/14 23:03:29
CFileDialogクラスを使用して
フォルダのみ選択できるダイアログを作りたいのですが
OnFolderChange関数をオーバーライドして、
選択中のフォルダ名は取得できるようになったのですが、
ファイルを選択しているわけではないので、開くボタンを押してもダイアログを閉じられません
どういう方法でダイアログを閉じる事ができるんでしょうか
70 :
デフォルトの名無しさん:04/10/14 23:21:15
>>69 開くボタンに対するイベントハンドラ作れば
71 :
デフォルトの名無しさん:04/10/14 23:23:02
>>70 そういわれればそうですね
やり方がよくわからないんですが
サブクラス化とか使わないとだめっぽいですかね
やった事ないですが調べつつやってみます
>>69 フォルダ選択だけが目的なら
SHBrowseForFolder使うのは?
>>73 私もググってみたところそのやり方を見つけたのですが、
なるべくCFileDialogと見た目を近づけたいので質問しました
CFileDialogでやってみてダメならその方向でいこうと思います
色々やってみましたがダメでした・・・OTL
素直にSHBrowseForFolderで行きます
・・なんでFolderDialogみたいなクラスないんだろ・・
そこでWTLって言いたいけどスレ違いだから言わない
77 :
デフォルトの名無しさん:04/10/16 01:12:41
WTLなんて糞みたいなライブリつかえるかよ
ATL、MFC、VCLすべて糞だよ
自作のフレームワークでOK
79 :
デフォルトの名無しさん:04/10/16 01:21:11
なにを根拠に?
用途と機能を限定してコンパクトにまとめた
ライブラリを作るのもアリだと思うけど
よっぽど出来がよくない限り仕事には使えんわな
>>79 既存の他人が作ったライブラリは使いこなせず
自作の物しか理解できない典型的な無能タイプでしょ。
82 :
デフォルトの名無しさん:04/10/16 02:23:52
Classwizardでエディットボックスの最小値、最大値を
設定したのですが、
ボタンが押されたときに、エディットボックスに範囲外の値が入力されているか
知りたいのですが、どのようにしたらよいのでしょうか。
>>82 入門書持ってる?
本見ながらやればできる。
>82
検索のヒント。
・UpdateData()
・DDX
>>84 ヒントになってないと思う。
DDXなんてわざわざ学習する必要ないし。
初心者相手にムダで遠回りな回答するのは止めろ。
悪質だぞ。
そういうブラックボックスがあることくらい知っておいてもばちは当たらんと思うが。
あーそうか、自分が知らなかったもんだから必死なのか。
>>82 ボタンが押されたときに、エディットボックスに範囲外の値が入力されているか調べるようにする。
88 :
デフォルトの名無しさん:04/10/19 16:18:08
CString tmp="a\nb\nc\n";
とかやった後
tmp中の改行コードを"\n"という文字列に変換してくれるクラス関数はありますか?
>>88 MSDNでCStringのメンバ眺めろよ
CString::Replace
と言いたい所だけど2バイト文字を考慮しないバグがあった気がする。
条件あげない方も悪いんだろうけどバージョン依存のある関数名を
当たり前のように出してしまうのもどうかと思う
Excelでコピーや切り取りをした時のようなアニメーションする点線はどのように表示すればよいのでしょうか?
CPenの種類を見てみましたがありませんでした。
std:mbcstring とかが有ればなぁ。。。
VC++6.0 使ってます。
モードレスダイアログ上に「裏画面」を使ったビットマップを表示したいんですが
旨くいきません。
OnPaint() {
// トーフ表示テスト
CPaintDC dc(this);
CDC mydc;
mydc = this->CreateCompatibleDC(NULL);
mydc.FillSolidRect(0,0, 10,10, RGB(0,0,0));// 沢山書いておいて・・・
dc.BitBlt(0,0,10,10, &mydc, 0,0, SRCCOPY);// 一気に転送!
mydc.DeleteDC();
}
# 肝心の質問忘れた orz
【質問】
BitBlt() は 1 を返しますがウィンドウは灰色のままです。
どこがマズいのでしょうか?
>>93 > mydc = this->CreateCompatibleDC(NULL);
これコンパイル通らんだろ。
あと裏画面用のビットマップはどこ?
>>95 はぅ!すいません。
mydc.CreateCompatibleDC(NULL);
でした。
あと、ビットマップはビットマップファイル(.bmp)では無く
DC上に描画したグラフ画像のことです。分かり難くてすいません。
実際には
mydc.MoveTo();
mydc.LineTo();
で色々描いてますが今回はテストのためFillSolidRect()を使いました。
(これでも豆腐が描画できるはずですよね?)
>>96 いやそういうことじゃなくて、裏DCが描画する領域のこと。
作成したDCに最初に選択されているのは1x1のモノクロビットマップ。
だから必要な大きさのビットマップを作ってSelectObjectしないと。
>>97 え゛っ・・・?
FillSolidRect()やLineTo()はベースとなる(?)ビットマップが必要なんですか?
ということで、
mydc.CreateCompatibleDC(NULL);
CBitmap bitmap;//追加
bitmap.CreateCompatibleBitmap(&mydc, 10,10);//追加
CBitmap* pbitmapOld = mydc.SelectObject(&bitmap);//追加
mydc.FillSolidRect(0,0, 10,10, RGB(0,0,0));
dc.BitBlt(0,0,10,10, &mydc, 0,0, SRCCOPY);
mydc.SelectObject(pbitmapOld); //追加
でできました。
きっとはじめから見越されてたんでしょうね・・・本当にありがとうございました。
割り込むようですいません。
いろいろ調べたけど、どうしても分からないので質問させてもらいます。
CTreeViewを基本クラスとしたプロジェクトで、
CImageList image_list;
image_list.Create( 16 , 16 , ILC_COLOR4 , 1 , 0 );
image_list.Add( AfxGetApp()->LoadIcon( (LPCTSTR)IDI_ICON1 );
GetTreeCtrl().SetImageList( &image_list , TVSIL_NORMAL );
GetTreeCtrl().InsertItem( "test" );
というようにしても、16×16ほど項目の左に空白ができるだけで、アイコン自体が表示されません。
お願いします。教えてください。
環境は、
WindowsXP
VisualC++.NET 2003
です
(LPCTSTR)IDI_ICON1
>>100 (LPCTRSTR)
をなくしてもだめでした。
>>99 AfxGetApp()->LoadIconで有効なアイコンハンドルが得られているか確認。
image_list.Addの戻り値を確認。
これ基本。
AfxGetApp()->LoadIcon( IDI_ICON1 );
だと読み込み失敗で、
AfxGetApp()->LoadIcon( (LPCTSTR)IDI_ICON1 );
だと読み込みが成功していました。
でも、後者でも表示されませんでした
CWinApp::LoadIconはUINTもオーバーロードしてるからIDだけでも失敗しないと思うんだけど、
根本的な問題はCImageList image_list;がローカルにあるのでスコープを抜けると破棄されること。
>>104 ありがとうございました!!
image_listをメンバ変数に加えたら成功しました。!!
よくあるよな。ハンドルとかアドレスで登録する関数のスコープに関する問題。
関数説明ドキュメントのどこにも「ローカル変数を指定しないで下さい。」とは書かれてないので、
入門者が必ず一度は通る落とし穴だ。
ややこしいんだよなぁ。
CDC::SelectClipRgn はコピーを使うから元のオブジェクトは削除しなきゃいけないし。
CWnd::SetWindowRgn はオブジェクトをそのまま使うから削除しちゃいけないし。
109 :
デフォルトの名無しさん:04/10/21 14:58:21
WindowsXP
VisualC++.NET 2003
CTeeCtrlでチェックボックス付きのツリーを作ってます。
任意の階層のチェックをした時に、そのアイテム以下の階層を
全部グレー表示というか操作できないようにさせたいのですが
良い方法は無いでしょうか?
そのアイテム以下をクリックしたら何もしないようにする
CTeeCtrlになってるよorz
>>110 見た目も変えたいです。
説明悪くて申し訳ないです。
ツリーアイテムにアイテムが有効/無効を示すフラグを持たせ、
フラグがfalseの場合はカスタムドローかなにかでアイテムをグレーに描画し、
アイテムをクリックしても何もしないようにする。
フラグがtrueの場合は通常処理。
と思いつきで答えてみる。
ダイアログベースのアプリ作ってんですけど、ランダムなタイミングでダイアログ全体が
再描画されます。原因わかる人いませんか?
まだコントロールを並べて動きを考えているだけで中身は全然ないんですが...
怪しいのはコントロールやメインダイアログの中に貼った子ダイアログとかを
MoveWindowやShowWindow、UpdateWindowで動かしたり表示切り替えしてることぐらいです。
でも全体を再描画するようなコードは書いてないし、発生タイミングも全然違うみたい。
OSが勝手に再描画をするタイミングって、制御できないんですかね?
ActiveXコントロール関連の相談もここでいいのかな?
もしご存じの人がいたら教えてください。
ActiveXコントロールはバージョンアップに対応するため(?)に
インターフェースを複数持てる、みたいなことを聞きかじったのですが、
MFCで作るActiveXコントロールで複数インターフェースを持たせるには
どうすればいいんでしょうか?
&
MFCで作ったActiveXコントロールをVBで使ったときに、プロパティの値を
コンボボックスで指定できるようにしたり、内容の説明の追加や項目の順序
指定をしたいのですが、どうやればできるのでしょうか?
普通に作るとすべてカスタムプロパティになってしまいます。
COMインターフェイスをV2用に拡張するだけじゃないの?
interface IMyControl{};
interface IMyControl2 : IMyControl{};
WindowsXP
VC++.NET 2003
MFCDLLについての質問です。
class CDllTest{
CString strDll;
public:
CDllTest(){}
~CDllTest(){}
void SetString( LPCTSTR );
void GetString( CString & );
}
この様に、MFCオブジェクトを引数にとる、または戻り値に持つ関数をエクスポートして、
.lib .dll を作って他のプロジェクトでインポートして使用すると、
MFCオブジェクトを引数にもつ CDllTest::GetString( CString& ) だけが「LNK2019: 未解決の外部シンボル」
のリンクエラーが発生します。
どうすればいいのでしょうか。教えてください。
>>116 DLLを利用する側のプロジェクトは何で作った?
今日からVC++6.0でMFC(というかC++)をはじめました。とりあえず、画像ファイルを表示するSDIをつくってます。
んで、ファイルダイアログでファイルを選択して表示するところまで作ったのですが、
ファイルを選択してダイアログが消えた直後に画像が表示されなくて、ウインドウサイズ
の変更などをすると画像が表示されます。
ちなみに、ダイアログはメインのAppクラスから呼んでて、CViewの派生クラスのOnDraw()が実行されない
のが原因じゃないかなと、訳がわからないながらもいろいろ考えております。
ダイアログが消えた直後に画像を表示させるにはどうすればいいんでしょうか?
すんごく初心者の質問で申し訳ありません。
>>119 CWnd::Invalidate
フレームワークに従って処理すれば勝手に呼ばれたと思ったけど違ったかな…
121 :
デフォルトの名無しさん:04/10/25 12:04:51
CListViewの各項目を編集可能にするにはどうするの?
>>121 ラベルしか編集できないので、各セルを編集したいならCodeGuru辺りで手頃なのを探すこと。
#最近作ったばかりだw
124 :
デフォルトの名無しさん:04/10/25 14:31:53
GetDocument()
ってDebugモードとReleaseモードでinlineか否かをわけてるの?
どっちもinlineでいいじゃん
>>124 通常、Debugビルドは最適化しないから、inline指定の有無に関わらずインライン展開されない。
126 :
デフォルトの名無しさん:04/10/25 15:54:59
View内の一部だけを再描画したい場合InvalidateRectで指定領域を無効化できるのですが
CxxxView::OnDrawで無効化された部分だけ再描画したいのですがどうすればいいの?
>>126 InvalidateRectで指定したRECTを覚えておく。
128 :
デフォルトの名無しさん:04/10/25 17:00:40
>>127 マジですか?
それしかないのですか?
>>128 CDCにクリッピング矩形を取得するメソッドがある。
130 :
デフォルトの名無しさん:04/10/25 20:05:59
>>126 GetUpdateRect
GetUpdateRgn
132 :
デフォルトの名無しさん:04/10/25 21:50:32
どっち
133 :
デフォルトの名無しさん:04/10/25 22:21:52
StatusBarに文字列を表示するにはCMainFrameで
m_wndStatusBar.SetPaneText(0,"hoge");
で駄目なのですか?
134 :
デフォルトの名無しさん:04/10/25 22:31:43
ダイアログ上に直線(メニューでいうとセパレータのような)
を引くコントロールってありますか?
>>134 ないと思う
DCに直接、MoveTO() してLineTo() かなぁ。
なんか適当なコントロール置いてサイズを調整すると線らしきものができるけど
>>135 >>136 アドバイスありがdです
LineTOでやってみます
これだけの為にカスタムコントロールつくるのもどうかと
思っていたので聞いてみました
それだけのためにDC確保するのも馬鹿馬鹿しいと思うけど。
140 :
デフォルトの名無しさん:04/10/26 00:12:01
カスタムコントロール作ってもDCは確保されるじゃんよ
ばかかおめー
むしろそれだけのためにコード書くのが馬鹿馬鹿しいだろ
なら、コード書いてること自体馬鹿馬鹿しいだろ?
外注になげろよ
>>142 外注に金払うこと自体馬鹿馬鹿しいだろ。
仕事とって来んなよ。
>>134 ピクチャコントロール
Type=水平(垂直)縁取り
>>143 おまえばかだろ?
普通プロパーと外注だと半分くらいの費用だぞ
プログラマなんて肉体労働者は時間4000円程度で雇えるんだよ
CDialogBar を実行時に表示/非表示を切り替えれませんか?
>>140 カスタムコントロール以外の手段が書いてあるのは読めないのかな?
>>145 時間4000円払うこと自体馬鹿馬鹿しいだろ。
仕事とって来んなよ。
>>146 ::SetWindowLong(
GetDlgItem(IDD_DIALOGBAR)->m_hWnd,GWL_STYLE,
::GetWindowLong(GetDlgItem(IDD_DIALOGBAR)->m_hWnd,GWL_STYLE) ^ WS_VISIBLE
);
じゃ駄目かしらん?
>>148 おまい生きてること自体馬鹿馬鹿しいだろ。
死ねよ
>>149 それだけじゃ、非表示にはできないんだな〜
ここの連中も大したことないねw
>>150 わざわざ自殺すること自体馬鹿馬鹿しいだろ。
ボーッとしとけよ。
あの〜僕の質問はどうなったの?
>>154 ShowWindow(SW_HIDE);
>>155 思いつきいうのやめてくれませんか?試しました?
それだとウィンドウを最小化して最大化しないと消せません。
Invalidate()
なども試したけどNGでした。
Recalcなんちゃらとか言うの呼ぶんじゃねぇの?
>>156 なんでいちいちお前のために試さなきゃいけないんだ。
また思いつきでレスしてやるけど、
CFrameWnd::RecalcLayout()を試せ。
>>158 へぇ、ばかかとおもってたらやるじゃんw
162 :
デフォルトの名無しさん:04/10/26 02:57:45
あちきのことかしらん?
ツールバー、ステータスバーと同じやりかたで
表示/非表示きりかえできるぞ
eVcなのですが、専門のスレッドが無かったようなので
こちらに投稿させて頂きました。スレ違いだったらすいません。
開発環境:Windows2000 SP4 + eVc 3.0 + HPC-2000 SDK
端末:X86CPU互換 WindowsCE 3.0
ある文字列(SendStr)を、今現在開いているブラウザ(Internet Explorer固定)で
フォーカスの当たっているインプットボックスへ挿入する機能を実現しようとしています。
以下のようなコードを書きました(一部)。
BOOL CDlg::SendBrowser(CString SendStr)
{
CWnd* BrowseWnd;
int i;
if(SendStr.IsEmpty())
return FALSE;
BrowseWnd = FindWindow(NULL, TEXT("Yahoo! JAPAN - Microsoft Internet Explorer"));
if(BrowseWnd == NULL)
{
return FALSE;
}
BrowseWnd->SetForegroundWindow();
for(i = 0; i < SendStr.GetLength(); i++)
{
SendKey(BrowseWnd, SendStr.GetAt(i));
}
return TRUE;
}
int CDlg::SendKey(CWnd* ActWnd, TCHAR CharCode)
{
int vk;
vk = GetVirtualKeyCode(CharCode);
ActWnd->SendMessage(WM_KEYDOWN, vk, (long)m_Scan[0]);
ActWnd->SendMessage(WM_CHAR, CharCode, (long)m_Scan[0]);
ActWnd->SendMessage(WM_KEYUP, vk, (long)m_Scan[1]);
return 0;
}
int CDlg::GetVirtualKeyCode(TCHAR x)
{
if(x >= 'a' && x <= 'z')
x -= ('a' - 'A');
return((int)x);
}
正しく実行されれば、SendStrの内容の文字列が、
Yahoo!JAPANトップページの検索テキストボックスに挿入される筈です。
実行すると、CDlg::SendBrowserからCDlg::SendKey、CDlg::GetVirtualKeyCodeを
それぞれトレースするのですが、肝心のフォーカスが当たっているインプットボックスに
文字列がインサートされません。
WM_KEYDOWNとWM_CHAR、WM_KEYUPにより擬似的にそのキーを入力するように
しているのですが…。
現在フォーカスの当たっている部分の指定方法が違うのでしょうか?
SendInput使ってみたら?
167 :
デフォルトの名無しさん:04/10/27 21:47:39
AfxBeginThreadで開始したスレッドの終了はどのようにして
知ることができますか?
>>166さん、ありがとうございます。
BOOL CDlg::SendBrowser(CString SendStr)
{
CWnd* BrowseWnd;
int i;
if(SendStr.IsEmpty())
return FALSE;
BrowseWnd = FindWindow(NULL, TEXT("Yahoo! JAPAN - Microsoft Internet Explorer"));
if(BrowseWnd == NULL){
return FALSE;
}
BrowseWnd->SetForegroundWindow();
INPUT srINP[3];
srINP[0].type = INPUT_KEYBOARD;
srINP[0].ki.wVk = '0';
srINP[0].ki.dwFlags = 0;
srINP[1].type = INPUT_KEYBOARD;
srINP[1].ki.wVk = '1';
srINP[1].ki.dwFlags = 0;
srINP[2].type = INPUT_KEYBOARD;
srINP[2].ki.wVk = '2';
srINP[2].ki.dwFlags = 0;
for(i = 0; i < 3; i++){
SendInput(3, &srINP[i], sizeof(srINP));
}
return TRUE;
}
上のように書いてみましたが、SendInputでも送信されないようです。
クリップボードか何かを使い、インプットボックスに文字列の値が
一括して挿入できれば最良なのですが…。
>>167 CREATE_SUSPENDEDでAfxBeginThread
CWinThread::m_bAutoDeleteをFALSEに
CWinThread::m_hThreadがシグナル状態になるまでWaitForSingleObjectで待つ
スレッドオブジェクトをdeleteする
170 :
デフォルトの名無しさん:04/10/28 01:12:29
171 :
165:04/10/28 13:16:39
>>166さん
SendInputを利用して書き換えました。
INPUT srINP[16];
for(i = 0; i < 16; i++){
srINP[i].type = INPUT_KEYBOARD;
srINP[i].ki.wVk = WORD(SendStr.GetAt(i));
srINP[i].ki.dwFlags = 0;
srINP[i].ki.time = 0;
SendInput(1, &srINP[i], sizeof(srINP));
}
このようにして、CString型のSendStrに格納された文字列を
一文字ずつSendInputにて出力するように記述したところ、成功しました。
…成功したのですが、1回目と2回目ではなぜか値が異なります。
SendStrの値
1254002369000541
一回目
1254002369000541 (問題なし)
二回目
1254023690541 (0が2個以上続くと、2個目以降が表示されない)
WORD()の型変換をchar()にしたり、外してみたりしましたが、改善されませんでした。
1回目に正常な出力が行われているので、何が原因になっているのか見当がつきません。
どなたか気付いた点がございましたら、ご教授下さい。
172 :
165:04/10/28 15:29:53
すみません、自己解決しました。
INPUT srINP[16];
for(i = 0; i < 16; i++){
//キーを押す
srINP[i].type = INPUT_KEYBOARD;
srINP[i].ki.wVk = WORD(SendStr.GetAt(i));
srINP[i].ki.dwFlags = 0;
srINP[i].ki.time = 0;
SendInput(1, &srINP[i], sizeof(srINP));
//キーを離す
srINP[i].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &srINP[i], sizeof(srINP));
}
単純に離すのを忘れていただけのようでした。
SendInputの情報がWebに殆ど載ってない…。
173 :
デフォルトの名無しさん:04/10/28 23:21:13
初心者なんですけど教えてくださいネ
水平スライダーコントロールの値がうまく取得できないんです。
VC++6.0でMFCでやってんすけどググって調べたとおり
OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
から
int iPos = pScrollBar->GetScrollPos();
で値取得して
switch(nSBCode) {
で条件分岐してるんだけど
case SB_PAGELEFT:
case SB_PAGERIGHT:
のとき、つまりスライダーのつまみをドラッグせずにつまみの近辺をクリック
したときにiPosに入ってくる値が無茶苦茶なんですよ。他の条件の時は
いいみたいなんですけど。
ちなみに同じことをスクロールバーコントロールでやると思ったとおりの
動きになります。
誰か教えて下さい。おながいします。
>>173 CScrollBar*はCSliderCtrl*にキャストしないとダメでは?
CSliderCtrl* pSliderCtrl = (CSliderCtrl*)pScrollBar;
int iPos = pSliderCtrl->GetPos();
あと、SB_**ってのはTB_** (同じ値がdefineされてるけど)
nPos使えば?
173はマルチポスト
以下スルーでよろぴく
177 :
デフォルトの名無しさん:04/10/31 00:13:27
マルチのなにがいけないの?
たくさんのところに助けを求めたほうが
解決が早いことに疑問を挟む余地はないじゃん
おまいらばか?
そういう自分のことしか考えないところが嫌われる原因じゃないかな。
179 :
デフォルトの名無しさん:04/10/31 00:22:14
つーか、マルチかどうかわざわざ調べて回って報告に来る香具師のほうがキモイ
調べるべき範囲は非現実的だし、途中でやめて帰ってきた報告が誰の役に立つのかも疑問だ
結局、自分の個人的な好みでじたばた喚いてるがきんちょそのまんまやん
腐ってもム板の住人が恥を知れやまったく
わざわざ調べてってか、例えばいつもC++系スレチェックしてたらどこ行っても同じ質問が書いてあったらうざいよな。
>>180 スルーしとけばいいだろ。
いちいち報告してる奴の方がウザイ。
182 :
デフォルトの名無しさん:04/10/31 00:29:39
>>180 だから、それはオマエ個人のブックマークだろうがよwww
なぜ報告するかというと、↑のようにマルチ厨のほとんどは逆ギレして暴れるから。
だから「こいつはマルチ(つまり関わるとDQNレスが返ってくる)なのでスルーしろ」と各スレの住人に報告されます。
185 :
デフォルトの名無しさん:04/10/31 00:50:27
マルチの指摘まではいいけど、逆切れされたらスルーしろよ・・・
もう5時間近くスルーされてるがな
188 :
デフォルトの名無しさん:04/11/01 20:58:03
>>186 逆切れと言うからには、自分が正だという前提があるらしいな。
誰がどこで何を聞こうが、それは個人の主権だぞ。
仮にあんたが科学的な統計調査を行っていてそこから得た相関係数に基づいて発言していても、
173という個人がこのあと無礼を働くと決めてかかるのはステレオタイプであり、
人格に対するそれを行う者こそ無礼者のレッテルを免れない。
と、ずいぶん買いかぶってやったが
おおかた某コミュニティの流行に乗って喜んでるだけの軽薄野郎だろw
190 :
デフォルトの名無しさん:04/11/01 21:27:34
>>189 2行目は読んだか?
あと俺は173じゃないぜ
必死だなw
192 :
デフォルトの名無しさん:04/11/01 21:41:48
定型句のみに縮退いっちょあがり
・・・もともと定型句のみが骨子でハリボテが吹っ飛んだだけだが・・・
お前ら頭悪そうだね。
194 :
デフォルトの名無しさん:04/11/03 03:32:08
VS2002とVS2003でMFCのヴァージョンって違うの?
Oh, Yes !!
ビジュアルスタイルのラジオボタン(とチェックボックス)の文字の色を変えたいんだけど、
どうすればいいの?
クラシックだとOnCtlColor()でCTLCOLOR_STATICの時、色を変えたら変わったんだけど..
ラジオボタンの絵の部分はスタイルに連動させたいんで、オーナードローは使えないし。
>>197 ラジオボタンの文字を使わず、そこにStaticTextを貼り付ける。
イベント処理をどこまで真面目にやるかはお好みで。
199 :
デフォルトの名無しさん:04/11/04 16:04:03
オーナー描写ボタンをMDIの子ウインドウにつけたいのですが。
プロジェクトのアプリケーションウィザードで
MDI、基本クラスをCFormViewクラスにしてFormViewダイアログに
ボタンを配置して、OwnerDrawをtrueにして
CAboutDialogにプライベートメンバを追加して、
オーバーライドしたOnInitDialogで
VERIFY(m_editRec.AutoLoad(IDC_REC, this));
としたのですが、FormViewである子ウインドウに
ボタンが描写されません。
どうしたらようでしょうか?
>>199 オーナードローなんだから、自分で描画処理を記述する必要があるんでしょ。
描画処理をしても、描写はされないと思うがな。
202 :
デフォルトの名無しさん:04/11/04 17:22:30
すみませんでした。
オーナードローではなくて、CBitmapButtonでした。
203 :
デフォルトの名無しさん:04/11/04 20:02:08
解決しました。
204 :
デフォルトの名無しさん:04/11/04 20:11:57
205 :
204:04/11/04 20:15:14
multi kayo!!
208 :
デフォルトの名無しさん:04/11/05 00:10:31
MDIの子ウインドウを消すときに呼び出されるAPIをオーバーライドしたいのですが。
どうしたらよいでしょうか?
>>208 OnDestroy()をオーバーライド
210 :
デフォルトの名無しさん:04/11/05 01:01:46
OnDestroyがMFCのクラスの中にみあたらないのですが。
212 :
デフォルトの名無しさん:04/11/05 01:11:34
もしかして、子ウインドウを消すときにバッファを解放するには、
CChildFrmのデクストラクタで解放したのでいいのでしょうか?
213 :
デフォルトの名無しさん:04/11/05 01:40:52
>>211 CWndの関数のようですが、
MDIの子ウインドウなのでCMDIChildWndかCFrameWndに関係した関数だと思うのですが。
どうでしょうか?
>>213 MFCの継承図をよく見ましょう。
つーか、これだけヒントがあればMSDNでも解説サイトでも見つかるだろうに。
215 :
デフォルトの名無しさん:04/11/05 02:50:14
・・・・・・・・・
プロパティウインドウからでないとオーバーライドできないと思い込んでました。
アドバイスありがとうございます。
CMDIChildWndもCFrameWndもCWndから派生しているということですね。
216 :
デフォルトの名無しさん:04/11/05 04:18:11
ところで、MFCでメインループのようなものを実現するには
どうすれば良いのでしょうか?
メインループ?
メッセージループじゃなくて?
218 :
デフォルトの名無しさん:04/11/05 23:01:12
219 :
デフォルトの名無しさん:04/11/06 00:40:42
IEのダウンロード画面等の
1 プログレスバーあり
2 途中キャンセル可能
3 その間アニメーションが動く
を実現しようとしてます
12まではどうにかできたんですが、3のやり方がいまいちわかりません
参考になるサイト等を教えてもらえませんか
ちなみに1,2は進捗表示用のダイアログを作って、
時間のかかる処理を別スレッドで起動、
スレッドから進捗ダイアログに進捗状況を送るようにしています
こういうやり方でいいんですかね
アニメーションコントロールを貼り付けてaviファイルを
再生しているだけじゃないのか?そういうことではなくて?
221 :
デフォルトの名無しさん:04/11/06 02:59:49
ActiveXコントロールをダイアログベースではないプロジェクトで利用できないの?
CScrollViewから派生させたCGLChartViewをメインに使ってるのですが
やっぱり、CFormViewから派生させなきゃいけないの?
MFCの入門書に
0: void CChildView::OnPaint()
1: {
2: CPaintDC dc(this); // 描画のデバイス コンテキスト
3:
4: // TODO : ここにメッセージ ハンドラ コードを追加します。
5:
6: // 夜空を表示する
7: CBrush NightBrush;
8: CBrush *pOldBrush;
9: NightBrush.CreateSolidBrush(RGB(0, 0, 128));
10: pOldBrush = dc.SelectObject(&NightBrush);
11: dc.Rectangle(0, 0, 400, 400);
12: dc.SelectObject(pOldBrush);
13: NightBrush.DeleteObject();
14: }
というコードが載っていて、解説によるとNightBrushオブジェクトを作成し、紺色のブラシとして初期化し
10行目でNightBrushをデバイス・コンテキストの「現在のブラシ」として選択してpOldBrushに以前のブラシの
ポインタを保存して、11行目で紺色を塗り、12行目で以前のブラシに戻す。とあるのですが10行目のようにすると
紺色になってしまった状態をpOldBrushに代入してしまうのではないのでしょうか?
うるせぇっての、カス。自分で考えろ。
>>222 そういう仕様になってるから大丈夫。
喩えて言えばこんなコード。
int setValue(int newValue)
{
int oldValue = getSystemValue();
setSystemValue(newValue);
return oldValue;
}
225 :
デフォルトの名無しさん:04/11/06 07:48:15
>>222 本来はこんな流れ
紺.CreateSolidBrush();
白 = dc.SelectObject(紺);
紺 = dc.SelectObject(白);
紺.DeleteObject();
紺 = を省略しているから
この流れが見えにくくなっている
入門書にあるまじき怠慢なコード
226 :
デフォルトの名無しさん:04/11/06 10:00:30
692 名前:M.B. :04/11/06 09:49:54
カード [] deck = new カード("全部"); // 配列の中にカードを全部生成
for (int n = 0;n < (deck.length - 1);m += 1) {
m = n 以上 deck.length 未満の乱数;
deck[m] と deck[n] を swap; // m == n の場合も気にせず実行。
}
※ deck を class として定義して、
swap を private なメソッド化としておいて、
shaffle を呼ぶようにすると綺麗になるかも。
693 名前:M.B. :04/11/06 09:53:09
【雑談】JavaっぽいけどJVMで走らず【ぬるぽ】
……狙いすぎたか。orz
>>225 そんなすっとこどっこいなコードの方が問題だろ。
相談室にあるまじきすっとこどっこいないいがかりだな。。
ここのスレは役にたたんカスばっかだな。死ね。
マルチレス逆切れの後は荒しかよ
>224 225
ふむふむ、別にきにしなくていいんですね。ありがとうございました
232 :
デフォルトの名無しさん:04/11/07 09:30:52
>>230 よっぽど悔しかったんだね (プププ
まあせいぜいマルチ叩きにがんばれや
1人も逃すなよ、どうやって検出するのかは謎だがw
233 :
デフォルトの名無しさん:04/11/07 12:33:28
波形表示の上に小節数を表示するメジャーのようなコントロールをつけたいのですが、
そのようなコントロールをしりませんか?
>>233 無理矢理やるとすればCListCtrlでグリッドラインを表示するとか
波形表示とか言ってる時点で自分で描くしかないビューのような気がする
235 :
デフォルトの名無しさん:04/11/07 15:43:23
>無理矢理やるとすればCListCtrlでグリッドラインを表示するとか
少しきついかもしれません。
よく画像編集ソフトや波形編集そふとで画面上方にルーラーがついているのを
見るのですが、あれはActiveXコントロールなのですか?
違う
237 :
デフォルトの名無しさん:04/11/09 01:04:48
現在、MFCのCPenを使って絵を描いています
問題は描いた画面を保存(jpg,tif,bmpなど)したいのですが、、
方法をご存知の方、お教えくださいm(__)m
また複数描いて動画(aviなど)にもしたいのです。
環境はVC.net2003です
これってMFCの質問?
つーか、MFCの質問かどうか以前に、根本的に基礎が抜けている悪寒。
CPenを使ってるからかも知れナイチンゲール。
This is a pen. アライチュー。
242 :
デフォルトの名無しさん:04/11/10 22:21:14
MFCでダイアログ内にあるListView内のコラムのクリック検出をするのって
何か設定が必要なのでしょうか?
そのままではクリックしてもOnNotifyがコールされないのですが、
どなたか教えてください
>>242 ListCtrlをクラスにして、LVN_CLUMNCLICKメッセージからイベント関数を作る。
244 :
本田:04/11/11 04:09:18
MFCでCImage使えなかったっけ。
246 :
本田:04/11/11 04:43:50
CImageってGDI+必要じゃなかったっけ?
248 :
本田:04/11/12 08:51:53
すんまそん教えて下さい。(x_x)
OnPaint()でBitBltするためにCPaintDCを使ってるんですが、
こやつはコンストラクタでBeginPaintを呼び出し無効領域を
クリップしてしまいます。
無効領域の有無によらず常に全領域をクリップするにはどう
すればいいでしょうか?
ちなみに、CDC::IntersectClipRectではダメでした。
>>250 d
でも、OnPaint内だとCClientDC, CWindowDCはダメなんですよ。
(WM_PAINTが再発行されてループする感じ)
どうも、this->GetDC()したらダメみたい。
ちなみに環境は
W2K+VC6で、モードレスダイアログです。
>>251 CPaintDCはそのままで、追加でCClientDCした?
CPaintDC(BeginPaint, EndPaint)が無効領域をクリアしてるから
消したら駄目よ。
>>252 できました!
CPaintDC dc_dummy(this); //未使用
CClientDC dc(this);
のようにしたんですが、順番も関係なくインスタンスがあれば良いようです。
後学のために教えて頂きたいんですが、「〜が無効領域をクリアしてるから」は
「セットしてるから」では無くていいんですよね?今までずっとBeginPaintが
無効領域をセットしてる、と考えていたもので。
254 :
デフォルトの名無しさん:04/11/12 13:15:30
すみません。
CStringの使い方についてお聞きしたいのですが
CString strText;
::GetWindowText(hwnd, strText.GetBuffer(_MAX_PATH), _MAX_PATH);
strText.ReleaseBuffer();
このような使い方は妥当でしょうか?
ごく普通。
>>254 >>254 良いんじゃないの
でもCWndのGetWindowText使えばGetBufferしなくて良いよ
>>253 無効領域=再描画する必要がある領域。
他のウィンドウで隠された部分が現れたり、InvalidateRectが呼ばれると追加される。
無効領域があるとシステムはWM_PAINTを発行する。
>>0x0FF-0x100
問題ないみたいで安心しました。
ありがとうございました。
>>254 ::GetWindowText(hwnd, strText.GetBuffer(_MAX_PATH), _MAX_PATH + 1);
>>無効領域=再描画する必要がある領域
...
質問です。
rebarのバンドにIEやエクスプローラのような、コンボボックスと移動ボタンがあるアドレスバーを作ろうとしています。
ダイアログバーにコンボボックスを乗せたのですが、このままではコンボボックスがバンドの横幅に合わせてリサイズされません。
コンボボックスの幅を自動的にバンドの長さに合わせるようにするには、どのようにすればいいでしょうか?
バンドにそのままコンボボックスを乗せればうまく行くのですが・・それでは移動ボタンが同じバンドに置けなくなってしまいます。
>>261 RBN_AUTOSIZEとかRBN_LAYOUTCHANGEDとかをキャッチして
自分でコンボボックスのサイズ変更をすればいいんじゃなかろうか。
263 :
デフォルトの名無しさん:04/11/13 13:09:36
>>262 レスありがとうございます。
やっぱり自分で処理するしか方法はないみたいですね・・・
264 :
デフォルトの名無しさん:04/11/13 21:26:42
ダイアログベースのピクチャボックスに対してドラックアンドドロップを使えるようにしたいのですが、
どのようにすればいいかわかりません
ダイアログ自体に対してのドロップはWM_DROPFILESで大丈夫でしたが、
ピクチャボックスなどのコントロールに対してドロップした場合には、このメッセージは送られてきませんでした。
どうしたらいいか教えていただけないでしょうか?
教えない。
>>264 PreTranslateMessage ドロップ あたりでぐぐれば?
親ウィンドにD&Dが許可されていたら
子にWM_DROPFILESが飛んでこない。
D&Dー>D&G
教えない。
あれ飛んできた。
出来ました。ありがとうございました。
272 :
デフォルトの名無しさん:04/11/14 12:27:02
CStringについてアドバイスをください
ifstreamなどのopenではファイル名をchar*型で指定します
ところがCString→char*変換が見当たりません。
現在はCString→std::string→char* (c_str())としています
何かよりよい方法はないでしょうか?
また、CString オブジェクトは次の特性を持っています。
CString オブジェクトは、連結操作で拡張できます。
CString オブジェクトは、"値を重視" します。つまり、CString を文字列へのポインタとして考えるのではなく、実際の文字列として考えます。
関数の引数 const char* や LPCTSTR の代わりに自由に CString を使うことができます。
変換演算子を使って、読み込み専用の文字配列 (C スタイルの文字列) として、文字列内の文字に直接アクセスできます。
274 :
デフォルトの名無しさん:04/11/14 12:36:29
OH!!
ありがとうございます
ifstreamにchar*を渡すopenなんてあったか?
教える気ないならレスすんな
278 :
デフォルトの名無しさん:04/11/14 22:31:46
282 :
デフォルトの名無しさん:04/11/14 22:41:15
他人に不快感を与えることのみを目的とした書き込みを 荒らし行為 と定義する
教えてくんウゼー
質問つうかつっこみなんじゃ?
285 :
272:04/11/15 00:41:53
basic_filebuf *open(
const char *_Filename,
ios_base::openmode _Mode
);
286 :
デフォルトの名無しさん:04/11/15 00:48:03
VC.net2003で以下の書き方がコンパイルできたりエラーになったりします
////////////////////////
class test
{
int someValue
test();
};
test::test()
{
someValue=0;
}
////////////////////
つまりクラスの定義と実装をひとつのファイル(test.h)に書くとコンパイルエラーで、
二つのファイル(test.h,test.cpp)に分けるとコンパイルできます。
どうもMFCを使うとtest.hだけではコンパイルできなくて、コンソールアプリではコンパイル可能です
なぜかご存知のかた、ご教授ください。
287 :
286:04/11/15 00:48:58
someValue;
↑
訂正します
CStringをchar*にするには
GetBufferとReleaseBufferでいいんじゃないの
class test
{
int someValue
test() { someValue = 0; }
};
>286
そもそもなんで *.h に定義も突っ込もうとしてるんでしょうか?
291 :
286:04/11/15 02:51:42
292 :
286:04/11/15 02:53:27
293 :
286:04/11/15 02:54:21
↑すみません、書き込めていないと思って2重投稿してしまいました
申し訳ありません。
TNTはテンプレートだろ。
>>293 TNTが良いと思ったんならなんでTNTと同じようにクラス内で定義しないんだ。
TNTと違う書き方してエラーが出ますとか言われても
そら違う書き方してるんだから当たり前だろとしか答えられん。
>286
宣言は何回あっても構わないですが、定義は一度だけです。
*.h には宣言を、*.cpp には定義を記述します。
テンプレート周りはいろんな理由で *.h にまとめて書く場合があります。
MFCスレで聞くよりは C++ スレかくだ質で聞く方が良いのでは。
>>286 inline test::test()
{
...
}
まぁ上のコーディングだと意味合いが変わってくるけど、
その辺は自分で調べませう
>>297 コラ、もったいぶらずに教えろや。カスが。
299 :
286:04/11/15 13:24:41
なるほど,,,
やっぱり*hと*cppに分けて書くことにします
ありがとうございました
↑は私ではありません
300 :
デフォルトの名無しさん:04/11/15 13:52:01
ダイアログベースのアプリに常に最前面に表示するメニューをつけようとしてます。
UPDATE_COMMAND_UIでpCmdUI->SetCheck(TRUE);
としてるのですがメニューにチェックがつきません。
メニューはC〜Dlgの既存クラスを選択しました。
どのようにすればチェックが付けられますか?
がんばる
質問です。ダイアログバーの横幅などを変えるにはどのようにしたらいいでしょうか?
306 :
デフォルトの名無しさん:04/11/16 07:59:44
ダイアログにメニューを関連付けて表示させたのですが、そのメニューを押してもOn〜のような関数の反応がありません。
どうしたら動いてくれるのでしょうか?
間違ってたところがわかりました。ごめんなさい。
VC++6.0でWinsockを使ったソケット通信プログラム(クライアント/サーバ両方)を作成しようとしています。
TCPサーバの作成パターンをいくつか考えたのでどれが安定して動作しそうかなど意見を下さい。
▼条件と環境
・作成したTCPサーバ、TCPクライアントは24時間あげっぱなし
・TCPクライアントとコネクション確立しっぱなし
・接続、切断はボタンをダイアログに実装して行うかコマンドプロンプトから入力してできるようにする。
・非同期通信に対応する(selectかWSAAsyncSelectを使用する)
・実装形式は自由(COM、EXE、DLLなんでもOK)
・MFCを使用しなくてはならない
・Winsock2.0
・OSはWindows XP
▼選んでください
(1) TCPサーバをMFC AppWizardで作成する(起動はEXEダブクリ、インターフェースはダイアログ)
(2) TCPサーバをConsole Applicationで作成する(起動はEXEダブクリ、インターフェースもコマンドライン)
(3) TCPサーバをATLプロジェクトで作成する(サービスとして動作、OS起動時に自動実行)
(4) それ以外(作り方を教えてください)
>>309 ID無いのをいいことに勝手に人の名前語って
マルチ捏造しないように。
厨が粘着してるよな。このスレ。
>・MFCを使用しなくてはならない
なら(1)でいいじゃない。
>>311 てめぇ、人の名前騙ってんじゃねぇよ。
ところで俺の質問早く答えろ、馬鹿が。
>>313 向こうで拾ってるからこっちはスルーで。
>>314のように暴言を吐くのは私ではないので無視を。
私はもうこちらにも書き込みません。
>>316 本人なら向こうのフォローをお忘れなく。
つーか、こっちのフォローより先にするべきっしょや。
変な例だな。
メンバ変数の型をCMyEditにするだけで済むが。
>>320 それはウィザード使ってDDX利用した場合だろ。
その例はDDX使ってねーから。
323 :
デフォルトの名無しさん:04/11/16 20:37:47
釣りは楽しいかい
一応書いておく。
>318はVirusなど。触った人はよく手を洗うように。
.netのMFCでMDI&タブのエディタを作っています。
とりあえずタブを作成してみたのですがMDIの子ウィンドウの下に表示されてしまうのです。
もし解決方法ご存じの方が居たら是非教えて下さい。
327 :
デフォルトの名無しさん:04/11/18 23:54:39
新しいクラスを追加する際に基本クラスを無しで作りたいのですが、
プロジェクトの追加でヘッダーとcppを自分で作る以外に方法はないでしょうか?
ありますよ
>>326 タブをコントロールバーにして表示する。
330 :
デフォルトの名無しさん:04/11/19 02:02:58
その基本クラス無しでクラスを作成する方法をご教授ください。><
珍しいところでつまづくやつだな・・・。
でもVCのバージョンも言わないやつには教えてあーげない。
332 :
デフォルトの名無しさん:04/11/19 02:18:55
(´Д`;)
6デス6デス6デスVC++6デス
オスエテオスエテ
ミステナイデ
333 :
デフォルトの名無しさん:04/11/19 03:27:36
age
sageアンド飛鳥
>>329 出来ました。
どうも有り難う御座いました。
>>332 クラスビューで右クリックしてクラスの追加
クラスの種類をGenericクラス
に設定
ダイアログベースで簡単な計算アプリを作っています。
その際、doModal()で子ウィンドウを生成し、そこのエディットボックスで
数値入力をしています。 このエディットボックスにスピンコントロールを
つけたのですが、挙動がおかしくなってしまいます。
通常、setRange()やsetPos()による初期設定を行なうと思いますが、
メインウィンドウのOnInitDialog()で行なう初期化は、子ウィンドウの場合は
どこで行なえばよいのでしょうか? 子ウィンドウのコンストラクタやdoModal
呼び出し元での設定を試みましたが、どれもだめでした。
よろしくお願いします。
ダイアログからダイアログなんだろ
EditBoxとSpinPuttonのタブオーダとか
SpinButtonのスタイルとか
341 :
デフォルトの名無しさん:04/11/19 22:39:12
WM_SETPONT
ばいらすばすたー
test
343 :
デフォルトの名無しさん:04/11/19 22:47:30
MFCを使ってソフトを作っているのですが,
hdc = BeginPaint(hWnd, &ps);
という行は
1.GDI HDC BeginPaint(HWND, LPPAINTSTRUCT);
2.MFC CDC* BeginPaint(LPPAINTSTRUCT);
のうち,2と判断され,コンパイルできません
どうしたら1と判断されるでしょうか?
::
MFCを使ってソフトを作っているのですが,
hdc = BeginPaint(hWnd, &ps);
という行は
1.GDI HDC BeginPaint(HWND, LPPAINTSTRUCT);
2.MFC CDC* BeginPaint(LPPAINTSTRUCT);
のうち,2と判断され,コンパイルできません
どうしたら1と判断されるでしょうか?
頭につける
::BeginPaint()
ヅラ
349 :
デフォルトの名無しさん:04/11/19 22:52:35
>>345 C++ の多重定義解決は1つのスコープしか見ないんだよ
350 :
デフォルトの名無しさん:04/11/19 22:57:43
345です
できました!!!!!!
ありがとうございます
ヘッダーをインクルードする順番などをいじってもできなかったので,,
>>340 タブオーダーも正しく設定しました。
メインのウィンドウで正常に動作しているスピンコントロールがあるので、
それと同様のプロパティにしています。
おかしな挙動というのは、例えば m_spin.SetPos(10) としても
1回目だけ値が0になり、次からは11として動くというものです。
ちなみに、100ずつ増やす動作をさせているので、WM_VSCROLLを
処理しています。
>>339 はい、そのとおりです。 その場合どうなるのでしょうか?
ClassWizzardでダイアログに
OnDeltaposSpinHOGEHOGE()を生成して
(SpinButtonのUDN_DELTAPOS NOTIFYハンドラ)
//TODO: ・・・
pNMUpDown->iDelta *= 100;
とすると自動的に100ステップになる。
WM_VSCROLLの処理のしかたわからん。
>>352 この方法は知りませんでした。ありがとうございます。
しかし、子ウィンドウではだめでした。
子ウィンドウでの SetRange()やSetPos() を行なうタイミングが分かりません。
子ウィンドウのコンストラクタではやはりだめなんですよね?
>>353 親でやってるように子でもOnInitに書けば良いだろ
うっせーチンカス
できました! ありがとうございました。
ダイアログのダブルクリックで生成されたクラスのコードに
OnInitがなかったので、それを自分で書くという発想がでませんでした。
357 :
デフォルトの名無しさん:04/11/20 12:08:29
ScreenToClientみたいにウィンドウの座標を他のウィンドウの相対座標に直してくれる関数があったと思うんですがなんでしたっけ?
360 :
デフォルトの名無しさん:04/11/20 13:13:40
ラジオボタンのメンバ変数がクラスウィザードで出てこないんですがそーゆーもんなんですか?
ラジオボタン1個だけ?
→それはチェックボックス使うべき。
>>360 そーゆーもん。ラジオボタンのグループに一つの変数を割り当てると考えればいい。
ボタン0を選択すると変数=0
ボタン1を選択すると変数=1
ボタン2を選択すると変数=2
という感じ。
VC.netのMFCです。
CReBar使ってるんですけどReBarに設定した各コントロールの位置をどうやって保存・読み込みするのか分かりません。
GetReBarCtrl().GetRect()かとも思いましたが設定する関数が見あたらないし……。
検索しても見つかりませんでした。
教えて下さい、お願いします。
364 :
デフォルトの名無しさん:04/11/22 10:20:16
ぼくダイアログだもんね
366 :
デフォルトの名無しさん:04/11/22 12:00:32
CToolBar のボタンにドロップダウンボタンを追加すると、
後端が切れてしまう現象で悩んでいます。
ドロップダウン属性をつけた以外のボタンのサイズも勝手に一回り大きく
なっているのが原因のようです・・・。CToolBar::SetSizeでそのサイズに変更すると、
切れなくなるのですが、ボタンが重なったり等表示がおかしくなってしまいます。
識者の方お助けください。
環境はVC7.1+XPです。
367 :
デフォルトの名無しさん:04/11/22 13:54:23
VC6のMFCでCStaticをサブクラス化して、
フォント、文字色、背景色を変更できるようにしています。
現在、CStaticからの派生クラスCStaticExのコンストラクタで、
HFONT hFont = (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
::GetObject(hFont, sizeof(LOGFONT), &m_LogFont);
のようにしてLOGFONT構造体を初期化しているのですが、
これを親ダイアログのフォントを引き継いでLOGFONT構造体を
初期化するにはどうしたらいいのでしょうか?
初歩的は質問だと思いますが、宜しくお願いします。
368 :
367:04/11/22 14:05:02
下記のようにやってみたのですが、アサート発生が発生してしまいました…
GetParent()->GetFont()->GetLogFont(&m_LogFont);
何がいけないのでしょうか?
↓ここでいつもの厨が登場
・一般的に親ダイアログにフォントは設定されていない
ダイアログテンプレートにあるフォントは、各コントロールにはセットされているが
ダイアログ自身にはセットされない。
なので、
1. ダイアログテンプレートを読む
2. てきとーな兄弟からフォントをゲットしてくる
くらいしか無いのではなかろうか
>>368 各APIの戻値を確認すれば、ここに書き込んでいる時間内に
原因がわかるだろうに。
372 :
367:04/11/22 15:04:12
>370
なるほど、そういうことなのですか。
ありがとうございました。 m(_ _)m
>1. ダイアログテンプレートを読む
ちなみにこれはどのようにすればよいのでしょうか?
373 :
367:04/11/22 16:41:48
下記のような方法でダイアログテンプレートを読み込んでみたのですが、
肝心のフォント情報へアクセスできませんでした…(;_;)
HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(IDD_TEST_DLG), RT_DIALOG);
HRSRC hResource = ::FindResource(hInst, MAKEINTRESOURCE(IDD_TEST_DLG), RT_DIALOG);
HGLOBAL hDialogTemplate = LoadResource(hInst, hResource);
if (hDialogTemplate != NULL) {
LPCDLGTEMPLATE lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);
// DLGTEMPLATE構造体にはフォント名やサイズ情報が無いみたい…
}
ダイアログテンプレートからフォント情報を取得する方法をご存知の方、
宜しくお願いします。
MFCのCDialogTemplate(非公開クラス)のソース(DlgTempl.cpp)でも見てみれ。
375 :
367:04/11/22 17:29:16
レス、ありがとうございます。
ネットで調べたところ、LPCDLGTEMPLATE以降の構造解説があったので
参考にしたところ、無事フォント情報を取得することができました。
>374
後ほど教えていただいたソースファイルも覗いてみたいと思います。
レス下さった方々、本当にありがとうございました。
376 :
367:04/11/22 17:43:17
>374
CDialogTemplateクラスを試してみました。
す・すばらしいです。
苦労して同等のソースを書いたことに思わず笑ってしまいました。
CDialogTemplateクラスを使った方法で行きたいと思います。
ありがとうございました。
あー、CDialogTemplateその物を使えってんじゃなくて、処理を参考にしろと
いう意味だったんだが。
非公開クラスはMFCの都合で使われている物なので、MFCのバージョンが変わると
無くなる可能性もあることに注意しなよ。
って、MFC自体が(ry
378 :
デフォルトの名無しさん:04/11/22 21:51:19
WindowsXPでクラシックスタイルかどうかを調べる方法は
あるんでしょうか?
存知の方、宜しくお願いします。
あります
380 :
378:04/11/22 21:54:36
379様レスありがとうございます。
その方法をご教授願えないでしょうか。
お願いいたします。
MDIの子ウィンドウ(MDIのChildFrame)のタイトルバーのタイトルを生成時に取得したいのですが、
WM_CREATEでGetWindowTextを呼んでも上手くいきません。
WM_CREATEはどうやらタイミング的にタイトルが設定される前のようなのですが、どのタイミングでやれば上手くいくのでしょうか?
バージョンは.netです。
>>381 なんでタイトルのテキストを取得したいの?
ちがったらごめん。
CWnd::PreCreateWindow の CREATESTRUCT.lpszName で取得できるんでは?
>>382 タブのエディタ作ってるので。
対応するタブに表示する文字をウィンドウと同じにしたいんです。
タイトルには開いたファイル名が表示されるので……。
>>383 試してみましたが駄目でした。
PreCreateWindow時点でのlpszNameの中身は空です。
これはMDIで子ウィンドウに表示されるファイル名は生成時に引数として渡されているのではなく、
後付でSetWindowText等が使われているという事何でしょうかね……?
タイトルの取得するのではなくOnOpenDocument等から持ってきた方が楽でしょうか。
もし何かアイデアややり方ご存じの方居たら、是非お願いします。
>>385 CDocument::GetTitle()は?
WM_CREATEで一旦DefWindowProcを行ってからGetWindowTextするとどうなる?
>>387 この場合のDefWindowProcとは基底クラスであるCMDIChildWndのOnCreate呼び出し、という事でしょうか?
念のため自分でOnCreate内でDefWindowProcをやってみましたが、その後に処理しても結果は同じでした。タイトルは空です。
>>386で言われているようにドキュメントの方では捕まえられるのでとりあえずはこれで行こうと思います。
ビューの方の初期化を別でやっているのであまり美しいとは言えないのですが……。
PreSubClassWindowとか
> 370 :デフォルトの名無しさん :04/11/22 14:19:06
> ・一般的に親ダイアログにフォントは設定されていない
> ダイアログテンプレートにあるフォントは、各コントロールにはセットされているが
> ダイアログ自身にはセットされない。
ダイアログはフォントのオーナー、WM_NCDESTROYでフォントを削除する。
フォントはWM_GETFONTで取得可。
Win32サービスでMFC(主にCString系とCWinThread派生クラス)を使いたいんだけど、
::AfxWinInit()をコールすれば動くんかなあ?
>>391 サービスの場合、初期化関数の呼び出し自体もさることながらそれを呼び出す場所も重要。
main()、WinMain()の最初で呼んでも無効なものもあるので注意汁。
>>391 試してみたら?
CStringなら私も使ってるからそのまま使えるはず。
#適当なインクルードとリンクをした上で。
CWinThread系は使ってないので悪しからず。
394 :
デフォルトの名無しさん:04/11/24 21:11:16
CViewクラスのメッセージハンドラに
たとえばOnMouseMove(UINT nFlag, CPoint point)
とかありますが,
この場合,このハンドラが呼び出される原因となった
WM_MOUSEMOVEメッセージ自体を見たい場合は
どのようにすればよいのでしょうか?
WindowProcでもオーバーライドすればええんじゃないかい?
396 :
デフォルトの名無しさん:04/11/24 21:34:32
>>395 WindowProcも引数がUINTで
ただのメッセージの識別子をとるだけですが
MSG構造体の形でメッセージを見たい場合はどうすればいいのでしょうか?
やりたいことを言ってしまうと
MSG構造体のtimeパラメータで
メッセージのポストされた時間を見たいのです
>>396 関数の頭でGetMessageTimeを呼ぶか、それが使えなければGetTickCountを呼ぶのはどう?
引数
pMsg
処理するメッセージを含む MSG 構造体へのポインタ。
解説
Windows 関数TranslateMessage やDispatchMessage にディスパッチされる前に、ウィンドウ メッセージをフィルタ処理するために、この関数をオーバーライドします。
399 :
デフォルトの名無しさん:04/11/25 00:41:29
C++相談室から回されて参りました:
おこんばんは、お願いいたします。
ステップ実行時、「ほにゃららDllが見つかりません」と言われます。
とあるexeから、自分の作っているdllを呼ぶ処理です。
プロジェクトの「設定」で、とあるexeを指定して、
そのexeでファイル選択をすると、
自分のdllのソースのブレークポイントで止まってくれる予定なのですが。。。
プロジェクトの「設定」のどこかに、
関連するdllを列挙する必要って、ありましたっけ?
何が設定不足なのでしょうか?
よろしくお願いいたします。
>>399 そのexeがどこにDLLがあるかわからないってことです。
exeの実行フォルダにDLLをコピーすればとりあえず動くかと。
あああ
403 :
デフォルトの名無しさん:04/11/26 03:50:57
VC++.NET2003です。
MFC拡張DLLにてCObjectから派生させたクラスをエクスポートしてます。
DEFファイルは使わずに、AFX_EXT_CLASSでクラス全部をエクスポート
してます。
WinXPProだと、AfxLoadLibrary()でHINSTANCEもらえるんですけど、
Win2KProだと、Entrypoint not foundとかって怒られて蹴られてしまう
んです。
もちろん、実装したクラス定義とクラスメソッドも対比させて見回した
んですけど足りないモノがないようで、困ってます。
こういう現象の問題として何が考えられるでしょうか?
DependencyWalker で調べてみたら?
2k上で。
405 :
デフォルトの名無しさん:04/11/26 15:50:33
>>403 解決しますた
PlatformSDKの関数で2k非対応なものがコッソリ...
VC6を2Kに入れて発覚.ちょっとブルー入りましたが
MSに一問一答\29400円也を払わずに済みました
406 :
デフォルトの名無しさん:04/11/27 05:33:30
GetDC(NULL)で
スクリーンのデバイスコンテキストを取得し,
デスクトップ上に落書きをしたのですが,
この落書きをクリアするなにか良い方法はあるでしょうか?
スクリーン全体を再描画したいのです
普通にInvalidateRect(NULL, NULL, FALSE);すれば元に戻らない?
408 :
デフォルトの名無しさん:04/11/29 11:28:09
ダイアログのクライアント領域を印刷しようとしています。
とりあえず画面イメージを4倍角でテスト印刷しようと思い
下記のようにしてみたのですが、にじんだイメージの印刷しかできません。
(貼り付けるソースが長いとエラーになったので、主要部分のみ)
CClientDC dc(this);
CDC memDC;
CBitmap memBmp;
CRect rect;
GetClientRect(rect);
memDC.CreateCompatibleDC(&dc);
memBmp.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
memDC.SelectObject(&memBmp);
memDC.BitBlt(0, 0, rect.Width(), rect.Height(), &dc, 0, 0, SRCCOPY);
〜中略〜
CDC *pdcDlg = GetDC();
dcPrint.StartDoc(&di);
dcPrint.StartPage();
if (!dcPrint.StretchBlt(0, 0, rect.Width() * 2, rect.Height() * 2, &memDC, 0, 0, rect.Width(), rect.Height(), SRCCOPY)) {
dcPrint.TextOut(0, 0, "StretchBlt() error");
}
dcPrint.EndPage();
dcPrint.EndDoc();
dcPrint.Detach();
画面イメージの印刷をするには、どのようにすればいいのでしょうか?
宜しくお願いします。
409 :
408:04/11/29 11:50:43
すみません、失礼しました。
用紙を節約して、AcrobatでPDFで出力した結果、にじんだ印刷になっていたのですが、
なんと印字品質の設定が問題だったようです…
大変お騒がせしました。 m(_ _)m
410 :
デフォルトの名無しさん:04/11/29 16:45:47
ピクチャボックスコントロールに対してSetScrollInfoを使ってスクロールバーを表示したのですが、スクロールしようとしても反応してくれません。
内部的な変数が変わらないとかバーの位置が変わらないとかではなくて、クリックしても反応しないと言った感じです。
どなたか治す方法が分かる方いらっしゃいましたら、教えていただけないでしょうか?
413 :
デフォルトの名無しさん:04/11/30 15:04:18
新しく作成したスレッドクラスからViewクラスポインタを取得したいのですが、
エラーが発生してうまくいきません。
インクルード文をどこに追加すればいいのでしょうか?
教えてください。お願いします。
必要なところにです。
いつもの厨が出た
>413
昔同じことで困ったことがあるから助けてみる。
スレッドクラスのヘッダにもビューのヘッダにも互いを include する。
その上でビューのヘッダに
class スレッドクラス;
class ビュークラス{
class スレッドクラス; // ←前方参照
class ビュークラス{
ビューのメンバの定義
};
と言った形で書く。
詳しくは「クラス」「前方参照」とかでググるヨロシ。
>>416さん 有難うございました。解決しました。
419 :
デフォルトの名無しさん:04/12/07 09:51:44
_beginthread()で起動したワーカースレッドの処理内で
App.CreateDispatch()を行うと失敗してしまいます。
OLEオートメーションのサーバオブジェクト作成って
ワーカースレッドからできないのでしょうか?
何かヒントでもいいのでご存知の方教えてください。お願いします。
・ビルド出力にはエラー警告は出ていません。
・VC++.NET2003、WinXP、MFCアプリ(ダイアログ)
>>419 ワーカスレッドでAfxWinApp()は使えないけど、ちゃんとCWinAppのポインタは取れてる?
スレ違いごめん
MFCN40D.dllってどこで手に入る?
>>420 CWinApp* pApp= AfxGetApp();
でワーカスレッド内でポインタはとれましたが
何かすべきことがあるのでしょうか?
・AfxOleInit()はInitInstance(メインスレッド)でやっています。
とりあえず?
_beginthread() → AfxBeginThread()
ワーカースレッド内でも最初にAfxOleInit()をせんといかんよ。
エェー。
426 :
410:04/12/10 06:01:25
度々すみません。
410のスクロールバーなのですが、まだ解決できません。
どなたかわかる方いらっしゃいませんか?
>>410 多分、Focusが合ってないから。Dialog中のControlの場合は、GotoDlgCtrl。
それ以外の場合はSetFocusで合わせれば良いかと。
MFCって化粧品?
Micro soft Foundation Cream...
細かく柔らかな下地クリームか。
Microsoft Funky Cinema
Majide Fuyouna Classtachi
Mike Founds Cookie
Microsoft Forever Congratuations
Microsoft Fan Club
Microsoft For CORBA
やめろ
438 :
デフォルトの名無しさん:04/12/10 18:34:19
VC++.NET2003を利用しています。学校で「Win32プロジェクトで
作成したSDKのプログラムをMFCに変更しなさい」という課題が
出されましたが、今までMFCを習った事がなく(前回の授業一回
のみ)検索していたのですが、わかりやすいサイトを見つける事
が出来ませんでした。「猫でもわかる〜」も参照してみたのです
が、途中で終わってしまっているようです。「SDKではこう記述
するところはMFCではこのように書く」といったような説明がさ
れているサイトがありましたら、どうかご教授ください。
それか直接教えていただけるようでしたら、課題のSDKのプログラム
(簡単な描画プログラム)をUpします。
VS .Netはあんまり使ってないからそのまんまにはわからんけど、
・MFCアプリケーション(SDI)をウィザードに従って作成。
・ViewクラスのOnDraw(あるいはOnPaint)にその描画プログラムでの描画部を実装。
だけで済むかと。
なんだかしばらく前に全く同じ内容の書き込みを見たんだが・・・
442 :
デフォルトの名無しさん:04/12/10 19:15:39
>>440 >>441 ありがとうございます。ということは、ここで質問するのは板違い
ですね。他の場所探してみます!
.NETには6.0にあったプロファイラはなくなっちゃったんですか?
VC6 WinXP の環境でプログラムしています。
LoadImage() から ビットマップハンドルを得て、
それから GetObject() でビットマップのヘッダー情報を
得ようとしています。(下のようなカンジです。)
HBITMAP hBitmap;
hBitmap = (HBITMAP)LoadImage( 0, lpFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
BITMAP bitmap;
GetObject( hBitmap, sizeof( BITMAP ), &bitmap );
ここで、256色ビットマップを食わせても、
bitmap.bmBitsPixel の値が 32 となってしまいます。
この理由がわかる方、ご教授お願いします。
LR_LOADFROMFILE | LR_CREATEDIBSECTION
で?
LR_CREATDIBRECTIONを追加したらどうだろ?
>>445 さん
ありがとうございます!
LR_CREATEDIBSECTION を追記したら、ちゃんと
取得できました。
プンスカプン!!!!
>>446 間違ったレス付けるヤシにお礼は言えません
>>449 誰ですか?
>>446 さん
レスありがとう。
更新せずにレス書いたために、見落としました。
すいません(^^;
DirectXで動くゲームよりも最前面にウィンドウを出したいのですが、
SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
とやっても、ちらちらと映るだけでうまくいきません。
どのようにすればよいのでしょうか?
452 :
デフォルトの名無しさん:04/12/17 01:24:16
Windows2000,VC++6.0です。
CScroolViewから派生させたクラスでWM_MOUSEWHEELを拾おうと思ってます。が、
スクロールバーが出てくるまではオーバーライドしたOnMouseWheelできちんと
拾えるのに、スクロールバーが出てくるとPreTranslateMessageですら拾えなく
なってしまいます。CMainFrameでも拾えません。ホイールを回すと勝手に
スクロールが実現されている状態です。WM_VSCROLLなどが来ているのは
確認できています。
環境によってはCScroolViewのスクロールが上手くいかないと聞くので自前で
スクロールさせようと試みているのですが、結局のところどこにWM_MOUSEWHEELが
拾われているのかさっぱり分からない状態です。CSplitterWndでウィンドウ分割
しているのが少々怪しいと踏んでいるのですが、勘止まりです。
Spy++で「すべてのウィンドウ」を対象にしてみると、CViewから派生させたウィンドウのみ
WM_MOUSEWHEELが発生しているようでした。他にCListView、CTreeViewから派生させた
ウィンドウなどではCScroolViewから派生させたクラスと同様WM_MOUSEWHEELが発生
している様子はありません。なお、VisualC++のエディタやアウトプットでやってみても
同じようです(Spy++のメッセージ監視ウィンドウにWM_MOUSEWHEELが出ない)。
どこにWM_MOUSEWHEELが拾われているのか調べる上手い方法はないでしょうか?
>>452 考えられることとして
・_WIN32_WINNTや_WIN32_WINDOWSの定義
(現象から言ってこれは無いと思うが念のため)
・対象ウィンドウにフォーカスが当たっていない。
・マウスドライバ(ユーティリティソフト等も含む)が勝手にフックしている。
(WM_MOUSEWHEELを自動的にWM_VSCROLLやWM_HSCROLLに変換してしまっている)
>>454 それか、アプリごとに設定を切替可能なドライバであれば、
ユーザーにそのように設定してもらうとか
それと、ELECOMホイールユーティリティだとポインタの下にあるウィンドウに
ホイールメッセージが届きますが、MSDNに書いてある通り
本来はフォーカスが当たっていないウィンドウには届きません。
今は、この機能を実装している他社ユーティリティもありますが、
その辺も注意が必要。
ついでに
そのようなユーティリティは他社マウスでも使える場合があります。
うちのはMITSUMIマウスでELECOMのユーティリティ
ダイアログボックスのピクチャーコントロールに
実行中のデータを逐次表示させようとスレッドのなかで
GetDlgItem()関数でピクチャーコントロールのポインタを取得しようとしているのですが
上手くいきません。
CWnd* h = (CWnd*)GetDlgItem(IDD_WAITQSIM_DIALOG,IDC_GRAPH);
こう書くと「1 番目の引数を 'const int' から 'struct HWND__ *' に変換できません。」
と言われます
CWnd* h = (CWnd*)GetDlgItem((HWND)IDD_WAITQSIM_DIALOG,IDC_GRAPH);
と書いたり
CWnd* h = (CWnd*)GetDlgItem((HWND__ *)IDD_WAITQSIM_DIALOG,IDC_GRAPH);
と書いたりするとコンパイルはビルドは上手くいくのですが、
実行中にポインタが全然違うところを指しているというような類のエラーが出ます。
GetDlgItem()の第一引数の渡し方が悪いようですが、どうすれば正しいのか分りません。
ダイアログボックスのハンドルはどうやって渡せばいいのでしょうか。
環境は[VC++ 6.0(MFCダイアログベースアプリケーション) OS:Win2000]です。
>>456 ダイアログクラスのメンバ関数版のGetDlgItem()を使えば引き数はIDC_GRAPHのみ。
そのメンバ関数はどうやって扱ったらよいのですか?
ダイアログクラスのポインタ→GetDlgItem()
>>458 宿題スレで、C++の基本を勉強しろと言われてなかったか?
UINT GraphView(LPVOID MsObjPtr){
CWnd* ptr = (CWnd *) MsObjPtr;
CEdit* h = (CEdit*)ptr->GetDlgItem(IDC_GRAPH);
CDC* pDC=h->GetDC();
で上手くいきました
>>460 お前が言ったんだろ
わざわざ粘着して来るなよ
キモイ
簡単なブラウザを作ってます
CHtmlViewつかってとりあえずほかのところは作ったんですが
Proxyをこのブラウザを使ったときだけはさみたいのですが
(インターネットオプションで設定〜、ではなく。)
ぐぐってもいまいちどうしたらいいかちゃんとのってるところが見つかりません
どうしたらいいか、あるいは解説サイトなどを、教えていただきたい。
よろしくおねがいします。
>>465 あんがとです
完成したです♪
さんきゅぅです
あります。
これってCListCtrlのオーナー泥でやってるのかな?
俺の場合タブが階層っぽくなってる方に興味があるけど
それっぽい解説が載ってるページがあったら教えてくだちい。
そもそもこれってWindowsじゃないような?
467はWindows上でこれを実現したいといっているのかも知れないけど。
>>467 ラベルの編集が可能なので、そのときのオーナードローで編集位置をあたかもセルであるかの如く見せかければよい。
CodeGuruに色々応用例がある。
#が、多機能すぎて使いづらいか表示がおかしくなるかのどちらかのものが多い。
>>469 直接知っているわけではないが、画像に書かれているキーワードで検索してみたら?
472 :
デフォルトの名無しさん:04/12/22 06:38:05
VC++のデバッガ上で値を代入するには?
>>472 正規品ならヘルプのユーザーズガイドに書いてあるはずだけど
>>471 入力はそれでOKだけれど、その、多段階になってるヘッダが難しいと思われ。
つか、出来るのか?これ。
出来るでしょ。
ラベル描画を乗っ取って全部自前で書けばできると思うけど…
メンドクセ
DialogBarを「クラスの追加」を使い、CMyRebarDialogというクラスを作ったんですが、
(そのダイアログには、ボタンが一つあります)
class CMyDialog : public CDialog
{
DECLARE_DYNAMIC(CMyDialog)
public:
CMyDialog(CWnd* pParent = NULL); // 標準コンストラクタ
virtual ~CMyDialog();
// ダイアログ データ
enum { IDD = IDR_MAINFRAME };
ボタンを押した際のイベント処理を追加したくて、
プロパティからOnBnClickedButtonを追加しましたが、
ボタンを押しても、まったく無反応です。
そういう仕様なのでしょうか?
478 :
478:04/12/22 14:43:35
宜しくお願いします。
>>477 サブクラス化するか
クラスを作らないでCMainFrameでやる
>>479 解決しました。
ありがとうございました。
すみません さっき別スレに書いてしまいました
お世話になっております
VC++でMFCのプロジェクトを作っているんですが、
CSVファイルを読み込んで、1カラムずつ
取得してファイルの最後まで読み込むというロジックをつくりたいんです
@ Readfile で、 file のEOF 検出ってできますでしょうか?
A 1カラムずつの取得ってどうやるんでしょうか?
readfile だと、バイト取得しかできないのでしょうか?
2点お願いします
482 :
481:04/12/24 15:32:53
あげます
ReadFileってことはMFCの話題では無いな
484 :
481:04/12/24 15:49:22
>>483 あれ?
CSVファイルをCreateFile でオープンして、readfileで要素を
取得するということではダメでしょうか?
やり方がどうこうではなく、ここで聞くのが間違っている。
487 :
デフォルトの名無しさん:04/12/24 16:58:02
CSpritterWndで分割した個々のViewに、
それぞれRebarを装着させることはできるのでしょうか?
たとえば、OpenJaneSytleというソフトのように、
ウィンドウ内がエリアごとに分割されてます。
そして一つのエリアが、書き込み用のエリアとなっていて、
そのエリアの上側にツールバーが装着されてますよね。
http://janestyle.s11.xrea.com/images/index.html このようにツールバー(Rebar)を装着させたいのです。
できるのなら、簡潔で構いませんので
方法を教えていただきたいのですが。
初歩的な質問で申し訳ございませんが、
宜しくお願いします。
>>487 要するにCViewにCRebarを付けるということか。
俺にもわからん。
CViewはCWndの派生クラスなのに、ツールバーを付けれないっつーのがMFC特有の癖だよな。
ほかにもコーユー癖がある
ムズカシイやね
>>490 MainFrame(CFrameWnd)だからToolbarを付けれたんだよ
ら抜き言葉が許されるのは小学生まで
493 :
デフォルトの名無しさん:04/12/25 11:03:53
どっかで変なこと吹き込まれた DQN が virtual インテリをやろうと必死のようでw
いい加減誰かまともな返答できる奴はいないのか?
ビュー用にCViewの派生クラス作って、
その派生クラスのOnCreateでCRebarをCreateする。
でもOpenJaneみたくしたいならFormViewでやってもいいかも。
皆様ご返答ありがとうございました。
>>495さんのリンク先の内容で試してみましたらうまくいきました。
あと、
>その派生クラスのOnCreateでCRebarをCreateする。
ではうまくいきませんでした。
本当にありがとうございました。
どういたしまして。
ここは礼儀正しいインターネッツですね
日経BPのMFC本、分厚ぅwww
アレ片手に電車の中で勉強してたら注目された。
俺がイケメンだからってのもあるが。
MFC本?読むものじゃないだろ、あれはリファレンス程度。
言語解説の本ならいざしらず、ライブラリ解説書など「読む」とは言わないのでは?
周りの乗客からは、電話帳を読むのと同じくらいアフォな光景として写ったに違いない。
単にウザかっただけだろ。
505 :
デフォルトの名無しさん:04/12/27 16:56:45
どうしても分からないので質問させて頂きます。
TRACE("%u\n", m_Btn.GetState() & 0x0003);
この様にボタンの状態(ON/OFF)を調べているのですが
ボタンをON/OFFしても常に0しか返ってきません…
ヘルプには、OFF=0 ON=1 不確定=2 と記載されているのですが…
SetStateしてみれば?
ボタンのスタイルは?
ただのPUSHBUTTONだったら、ON/OFF状態は無いぞ。
508 :
505:04/12/27 17:24:43
>>506 今回は外部から押された状態を取得したいものでして…
>>507 えっ、そうなんですか!?
一応、MSDNに「オプション ボタンはチェック マーク () になっているときがオン状態です」
と記載されているのですが…「チェック マーク ()」とは何なのでしょうか?
今回は単純に、ボタンのON/OFF(クリックではない)を取得していんですが
通常はどの様にして状態を取得するものなんでしょうか?
ON/OFF状態があるのは、チェックボックスやオプションボタン(ラジオボタン)。
510 :
505:04/12/27 18:17:39
>>509 そうなんですか??
でもオーナードローにすると通常のボタンでもON/OFFを取得出来るのですが…
CWnd::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
switch(nIDCtl){
case IDC_BUTTON1:
if(lpDrawItemStruct->itemState & ODS_SELECTED)
…
else
…
}
}
プッシュボタンは違うって言ってるのに、オーナードローボタンの例を出されても…
512 :
505:04/12/27 18:44:48
>>511 オーナードローになるとまた別なんですか…
すみません、なんか変な事言っちゃったようで…
わかりました。プッシュボタンでは無理だという事ですね。
親切に答えて頂き、ありがとうございました。
んでまあ、君のやりたいことはチェックボックスやラジオボタンでBS_PUSHLIKE
たてとけばいいんじゃ無かろうかと思われるが。
514 :
デフォルトの名無しさん:04/12/31 14:35:17
しつもんですが、
lpHttpFile->SendRequest(〜をして、パケットキャプチャーでヘッダを覗き見たところ、
「Cookie: PON=nttkyo******.tkyo.nt.adsl.ppp.infoweb.ne.jp;」が勝手に挿入されてました。
CHttpFileが勝手にCookieを挿入しないようにするためにはどうすればいいのでしょうか?
(こちら側がSendRequestに指定しているのは、下記のものだけです)
Content-Length:
Host:
Referer:
User-Agent:
初歩的な質問で申し訳ございませんがよろしくお願いいたします。
>>514 INTERNET_FLAG_NO_COOKIES
516 :
デフォルトの名無しさん:04/12/31 22:17:26
皆さん今年もお世話になりました。
来年もMFC関連でよろしく!
誰もテメーの世話なんかしたくないぞ。
自分の尻くらい自分で拭けよ
二度と来るな
いるよね。こういうの。
xxさん、ありがとうございます。
これからもよろしくお願いしますって書く香具師。
完全に教えて君だもんな。
ベリューションとか、高橋とかに沢山いるのも
ウゼー
おまいら、禿誉め
仕方ねーべ。本人は謙虚にしているつもりなんだろう。
しかし、それ以上に鬱陶しいのは、
以前〜〜でお世話になった●●です。
とか言い出す奴だな。
お前なんか誰も覚えてねーよ、って。w
たし蟹
521 :
デフォルトの名無しさん:05/01/02 16:51:57
タブコントロールをメインフレームに追加して表示したいのですが、
上手く配置して表示できません。
どうすればできるのでしょうか?
あ〜あ、噂をすれば何とやら。
上手く配置してなんてどういうのが
上手いのか分かるわけねーじゃん。
どうすればって、どういう配置なのか
全然書いてねーじゃん。これで答えて欲しいのかよ。
質問する態度じゃねーぞ。
523 :
デフォルトの名無しさん:05/01/02 17:09:41
>522
どうもすいませんでした。
上手く配置するとは、この場合は、ツールバーの下にタブコントロールを配置表示することなのですが。
ただ単にフレームにタブコントロールを追加するとそうはならないので、
どうすればいいのでしょうか?
524 :
デフォルトの名無しさん:05/01/02 17:10:44
>523
>522はただの荒らしだから気にしないように。
だが核心を突いている。
>>523 ツールバーの下にタブコントロールを表示すれば?
嫌です。
別の方法はありませんか?
528 :
デフォルトの名無しさん:05/01/02 19:34:25
>>526 どうやってツールバーの下で表示すればよいのでしょうか?(^^;
RecalcLayoutをオーバーライドして何かするのでしょうか?
ツールバーと同様
530 :
デフォルトの名無しさん:05/01/02 20:23:14
>529
そうですか。
でも同様にするという分からないんです。
重ね重ねすいません。m(_ _)m
531 :
デフォルトの名無しさん:05/01/03 00:08:08
>530
ぷっ。この板にその質問答えられる程のスキル持った奴なんていないよ。m9(^Д^)プギャー
532 :
デフォルトの名無しさん:05/01/03 20:14:19
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CWorkPlusMFCView),CSize(100,100),pContext);
分割ウィンドウを作成するとき、Viewを指定できますが、
例えば、あるFrameWnd内に3つの分割されたエリアがあるとして、それぞれ上記のCreateViewでViewを固定させました。
その固定させたViewを変更したいのですが、どのようにすればいいのでしょうか?
ひとつの分割されたエリアに、メニュー操作によっていろんなViewを表示させるようにしたいのです。
ご返答をいただけると助かります。
533 :
532:05/01/03 20:29:25
View内のOnDrawをメニューを選ぶことで強制再描画させる関数って何なんでしょうか?
かなり基本的な質問ですが・・・。
Invalidate()
UpdateWindow()
ClistCtrl クラスの表示方法で困ってます。
タイトル行はCenter位置に、
値が入る行はLeft位置に、それぞれ表記したいのですが方法はあるのでしょうか?
例) ずれなきゃいいけど・・・
タイトル行→| 名前 | 中央表示
値行 →|a.txt | 左詰
右寄せ左寄せは可能(自分が過去に作ったプログラムがそうなってる)
真ん中は不明
538 :
デフォルトの名無しさん:05/01/04 07:38:09
>>535 CViewへの再描画は、その関数ではできない。
MFCの仕様。
539 :
デフォルトの名無しさん:05/01/04 07:56:10
>534
ぷっ。まちがえてやんの。m9(^Д^)プギャー
>>537 レスさんく。
うまく理解できていないような気がするので一応書いときます。
タイトル行と値行の両方を 中央配置(左詰、右詰)にすることはできてます。
問題は、タイトル行と値行の表示位置を違うものにできるか?ということです。
タイトル行作成時には、中央、左、右と配置する箇所を指定する変数が存在するのですが
値行に追加するときには、配置箇所を指定する変数が見当たりません。
MFCのソース見るとInvalidate()でいけそうな気がする。
それかOnPaint()
でも
>>538が何を言いたいのか気になるな
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
void CView::OnInitialUpdate()
{
OnUpdate(NULL, 0, NULL); // initial update
}
void CView::OnUpdate(CView* pSender, LPARAM /*lHint*/, CObject* /*pHint*/)
{
ASSERT(pSender != this);
UNUSED(pSender); // unused in release builds
// invalidate the entire pane, erase background too
Invalidate(TRUE);
}
>>538 ビューが乗ってるフレームにInvalidateしてできないと言ってる予感
>>540 カスタムドローするとか空白を自分で入れるとかして調整しないといけないんでなかろか。
545 :
デフォルトの名無しさん:05/01/05 00:51:35
>>538 ぷっ。まちがえてやんの。m9(^Д^)プギャー
546 :
デフォルトの名無しさん:05/01/05 01:33:59
SplitterWndを2分割したいのですが、
Rebar上のコントロールボタンを押したときだけ、分割される(分割無し→2分割)ようにするにはどうすればいいのでしょうか?
Windowsフォルダウィンドウの検索ボタンを押したら、左側に検索分割ウィンドウが表示されるようなことをしたいのです。
動的に分割を操作したい。
>>546 ・Windowサイズ変更
・Window表示・非表示
548 :
デフォルトの名無しさん:05/01/05 04:12:54
>>547 ぷっ。まちがえてやんの。m9(^Д^)プギャー
549 :
デフォルトの名無しさん:05/01/05 04:20:12
>>548 ぷっ。回答出来ないでやんの。m9(^Д^)プギャー
頭のおかしな人の判定基準
・「みんなの意見」「他の人もそう思ってる」など、自分の意見なのに他人もそう思ってると力説する人
他人が自分とは違うという事実が受け入れられない人です。自分の意見が通らないとコピペや荒らしなど
無茶をし始めるので見かけたら放置してください。
・根拠もなく、他人を卑下したり、差別したりする人、自分で自分を褒める人
他人を卑下することで自分を慰めようとする人です。実生活で他人に褒めてもらう機会がないが
プライドだけは高いとか、匿名の掲示板しか話し相手のいない人です。可哀想なので放置してください。
・自分の感情だけ書く人
「〜〜がムカツク」とか自分の感情を掲示板に書くことに意味があると思っている人です。
何がどのようにムカツクのか論理的に書いてあれば、他人が読んでも意味のある文章になりますが、
そういった論理的思考の出来ない人です。もうちょっと賢くなるまでは放置してあげてください。
>>551 それってシェルエクステンションの作り方だろ
553 :
デフォルトの名無しさん:05/01/05 14:01:39
MFCで画面遷移したいです
とあるコマンドボタンを押したら、
別の画面が表示されるという風にしたいのですが、以下のようにコーディングしたら、
押した瞬間に消えてしまうようになってしまいます。
どうか、ご教授ください
void CXXXX::OnSubmit() { // コマンドボタン押下
遷移したいダイアログ tmpdlg;
tmpdlg.Show(ID);
}
void CXXXX::Show(unsigned int uID)
{
Create(uID);
ShowWindow(SW_SHOW);
CenterWindow();
}
それじゃtmpdlgがすぐ消えちゃうから
モーダルにするか変数のスコープを広くする
555 :
553:05/01/05 15:01:13
>>554 ありがとうございます。
ちょっと モーダル使うほうで組みなおしてみます
アクティブウィンドウになってないと、すぐ消えるんですね
ShowWindowって
>>555 おいおい、変数のスコープの問題だってばさ。
557 :
デフォルトの名無しさん:05/01/05 16:57:01
>>548 ぷっ。ちゃんと教えてもらってるのに解釈間違えてやんの。m9(^Д^)プギャー
558 :
デフォルトの名無しさん:05/01/05 16:58:14
559 :
デフォルトの名無しさん:05/01/05 16:59:33
ここは簡単な質問しか答えられないDQNが集まるインターネッツですね
560 :
デフォルトの名無しさん:05/01/05 17:19:44
561 :
デフォルトの名無しさん:05/01/05 17:33:05
560 名前: デフォルトの名無しさん 投稿日: 05/01/05 17:19:44
>>557-558 バカか?
自分が乗ってる木の枝切り落とすようなものか
563 :
デフォルトの名無しさん:05/01/05 17:37:38
>559
ぷっ。みんなが分かってて誰も口にしないこといってやんの。m9(^д^)プギャ
564 :
デフォルトの名無しさん:05/01/05 21:00:00
>563
同じようなことを何度も書くな。ヴォケが。駄スレ化するだろうがっ!!!
565 :
デフォルトの名無しさん:05/01/06 09:34:58
dll の関数から,
その dll で定義されているダイアログを呼び出そうとしたところ,
エラーが出ました.
調べてみると,DoModal() が OnInitDialog() を呼ばず,
明示的に OnInitDialog() を呼んでやると,
CDialog::OnInitDialog() を実行しようとしてエラーが出ます.
なぜでしょうか?
567 :
デフォルトの名無しさん:05/01/06 10:23:33
>>566 以下のようなメッセージです
Debug Assertion Failed!
Program: ...****.exe
File: f:\vs70builds\3077\vc\MFCATL\ship\atlmfc\include\afxwin1.inl
Line: 26
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
>>567 そのメッセージが指してる場所見てみ。
ASSERT(なんたら) とか VERIFY(なんたら) とか書いてあるから。
その「なんたら」の部分が0(false)になるとそのエラーメッセージ出して止まるようになってるの。
逆に言うと「なんたら」の部分が0(false)になってはいけないということで
そうなった原因は君のプログラムにあるわけだ。
569 :
デフォルトの名無しさん:05/01/06 11:01:35
>>568 CDialog を使った dll を呼びだして
ダイアログを表示するには,
呼びだし側は MFC アプリでなければ
ならないのでしょうか?
571 :
デフォルトの名無しさん:05/01/06 23:09:07
こんばんは、質問します。
santa.exeが、A.dllとB.dllを呼んでいます。
それぞれ別々にプロジェクトを作りました。
まず、A.dllをテストしました。
santa.exeに呼び出させて、ステップ実行しました。問題なさそうです。
でも、そのあとで、どうも他のメモリを書き潰しているようです。
そこでB.dllやsanta.exeをステップ実行でながめたいです。
でも、他のプロジェクトのソースをステップ実行する方法が分かりません。
どうすればよろしいでしょうか?
初心者ですいません、バカですいません。
でも冷やかしはゴメンなさい。よろしくお願いします。
>>571 一番良い&正しい方法かわからないので、突っ込み待ちつつ、
とりあえず、以下の方法で可能。
1.DLLをデバッグバージョンでコンパイル。できあがったDLLファイルを呼び出す正位置に移動
2.santaのプロジェクトを、デバッグモードで開始
3.A.dllやB.dllの関数を呼び出すところでブレイクする。(DLLをLoadするところじゃないよ)
4.F11キーで関数の中に入るとA.dll、B.dllのソースが開くので、そこからステップ実行できる。
注:
ようするに、デバッグでコンパイルすると、できあがったファイルにソースの位置もわかるようになっているのでこれができるようです。
逆に、デバッグでコンパイルしたあと、ソースを移動させるとF11で関数の中にはいれずふつーに実行される
また、そのままDLL側のソースをいじることも可能だが、DLLを再コンパイルには、DLLのプロジェクトをVCで開いてそっちでやること
VCを複数立ち上げておくのが楽。
>572 おぉ!さっそく神の声が!!ありがとうございます。お手数かけます。(*^-^)ノ
つまり、
私はA.dllのプロジェクトを開いて、
A.dllのソースを眺めながら悩んでいたわけだけれども、
正解は、
大もとのsanta.exeのプロジェクトを開けば、
それをステップ実行していけば、
呼んでいる関数にドンドン入っていける、
という事なのですか?
呼び出し先のソースのありかを
santa.exeのプロジェクトが分からない場合は、
ダイアログが出て、指定するように催促される、
のですかね?
だとすると、{ディレクトリ/ソース/プロジェクトファイル}、
どれを聞かれるのでしょうかね?
>正解は、
いや、何をもって正解というのかわからんです。
ほかにもっといい方法があるかもしれないし、
用途によってやり方を選べばいいだけ。
>呼び出し先のソースのありかを
>santa.exeのプロジェクトが分からない場合は、
>ダイアログが出て、指定するように催促される、
>のですかね?
んと…
>逆に、デバッグでコンパイルしたあと、ソースを移動させるとF11で関数の中に
>はいれずふつーに実行される
って書いたけど、「ふつーに実行される」が伝わらなかったのかな
場所がわからない場合は、F11を押しても、F10のように、
処理を実行後、次の行に行くだけで、場所指定するようなことはありません。
ありがd♪
576 :
デフォルトの名無しさん:05/01/09 13:21:19
365 名前:デフォルトの名無しさん[] 投稿日:05/01/08 14:55:00
結論:MFC使え。
366 名前:デフォルトの名無しさん[sage] 投稿日:05/01/08 19:20:45
MFCって、広く使われてるクラスライブラリの中では最悪の部類に属するよね。
そりゃ一番最初にできた商用ライブラリだもんな。
いいんだよ、なんでも。どーせwindowsは誰が作ってもよく落ちるんだw
MFCって、広く使われてるクラスライブラリの中では最良の部類に属するよね。
365 名前:デフォルトの名無しさん[] 投稿日:05/01/08 14:55:00
結論:MFC使え。
578 :デフォルトの名無しさん :05/01/09 18:07:36
MFCって、広く使われてるクラスライブラリの中では最良の部類に属するよね。
580 :
デフォルトの名無しさん:05/01/09 19:55:19
質問ですが、
オリジナルのテキストエディタを作ろうと思ってます。
で、ひらがなを漢字変換にするさい、通常のテキストエディタだと、スペースキーを押すことで、「漢字変換のサブメニュー」
が表示されて、その中から漢字を選び出しますが、
そういう仕様をMFCで作るには、どうすればいいのでしょうか?
要するに、「ひらがな」を「漢字」に変換したいから、IMEの漢字選択サブメニュー?(正式な名称がわかりませんすいません)を開くための
クラスを知りたいのです。
そういうIME関連のクラスってあります?
582 :
580:05/01/09 20:06:14
>>581 返答のほど、ありがとうです。
Windowsで用意されているテキストエディタ機能ではなくて、
自分でテキストエディタのシステムを作りたいのです。
ただ、そうすると、漢字変換とかの問題が出てきますよね。
その漢字変換システムを自分で作るのはさすがに無理なので、
それだけはWindowsのシステムを利用したいのです。
で、漢字変換をライブラリーで扱えるMFCクラスはないのでしょうか?
それをぜひお聞きしたいのです。
>>582 よく知らんがImmで始まるAPI使うんじゃないかな?
584 :
デフォルトの名無しさん:05/01/09 20:28:08
>582
MSDNにサンプルあるぜ
>>582 もし本当に、まともなオリジナルのテキストエディタを開発しようとしていると言うのなら、
漢字の入力なんて瑣末な問題に拘泥せずに取り敢えず英文をまともに入力できるものを目指したら?
#つーか、そのレベルでまともなものが作れるとは思わんのだが。
>>585 >英文をまともに入力できるものを目指したら
漢字変換って書いてあるだろ。
近眼か?
>>586 敢えてそう書いているんだろ。
池沼か?
>>587-588 ありがとうございます
Win32でも構いません
本当にありがとうです
参照してみます。
MFC初めてなんだけど、質問。
class宣言にあるAFX_***等ののコメントは消しちゃだめなの?
ClassWizardが参照してるのか?
消してからClassWizardがエラーメッセージっぽい
ダイアログを出すようになったんだが・・・
ほかにも消したらだめなコメントってあるの?
592 :
デフォルトの名無しさん:05/01/10 03:11:58
CRichEditCtrlで、単にエディット内の全ての文字列を取り出すというメンバ関数はないん?
自己解決
EDITSTREAMを使ってできました。
すいませんです。
594 :
デフォルトの名無しさん:05/01/10 08:23:56
CTreeCtrlのそれぞれのツリー要素にツールチップをつける方法を教えてください。
595 :
AYANA:05/01/10 15:48:11
596 :
AYANA:05/01/10 16:14:08
1)のひとつのバーにいろんなコントロールをつける は、DialogBarを搭載すれば解決しますが、
そうすると、DialogBarだと、2)が出来ないと思うんですけども。
DialogBarで特定のコントロールを右寄せにしたりできます?
たしか位置は固定なはずでしたが・・・(勘違いならすいません
MFCでチェックボックスを作る場合ってどうするんでしょうか?
>>598 リソースエディタで貼り付けたり、CButtonで直接作ったり。
>>599 チェックボックスってCButtonで作るんですか。
へぇ。試してみます。
ありがとう。
601 :
デフォルトの名無しさん:05/01/10 17:33:43
>>600 CreateWindow 関数をぐぐるなり MSDN なり、何でもいいから調べてみろ
ウインドウクラスに "BUTTON" を指定する場合の説明をよく読め
MFC使ってる人なんてまだいるんですか?
便利ですか?
>>602 Javaに比べたら、すげー使いにくい。
最悪。
Win32なんてもって最悪だけど。
最近、初めてWindowsプログラミング始めたが、なんじゃこりゃってな具合の使いにくさ。
なんで、ツールバーにボタンを追加するだけで、こんな遠回りなことしなきゃならんのか疑問。
今、ツールバーにテキストだけのボタンをつけようとしてるが、そういうメンバ関数が見当たらない。
AddButtonというのがあるが、なんかTBBUTTONという構造体を使って詳細に指定してから作れと・・・・・。
しかも、TBBUTTONに文字列を指定するとこないしw
あるのは「INT_PTR iString; // テキストのインデックス」
>0 から始まるボタンテキストのインデックスが格納されます。または、ボタンテキストが格納されたバッファのアドレスが格納されます
0から始まるテキストのインデックスはいいけど・・・、どこのテキストの事を指してるのかまったくわからん。
どこにあるテキスト情報のインデックスなのか?
Javaのほうがほんと、つくりがしっかりしてるよ。
604 :
デフォルトの名無しさん:05/01/10 18:39:09
>Win32なんてもって最悪だけど。
プ
>>603 Windowsでは文字列だけのボタンは基本的に作れないんです。
仕様です。
作りたいならDialogリソース経由で作れといいたいらしぃ。>Microsoft
606 :
デフォルトの名無しさん:05/01/10 18:56:50
>>605 何を寝言言ってる
CButton::Create
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
引数
lpszCaption
ボタン コントロールのテキストを指定します。
指定するインデックスのイメージと文字列は、AddBitmap、AddString、
および AddStrings を使用してあらかじめツール バー コントロールのリストに追加しておく必要があります
ツールバーの文字は絵の下に出るやつだろ(IEみたいなやつ)
609 :
デフォルトの名無しさん:05/01/10 19:23:12
CToolBar::SetButtonText
こいうのもあるけどな
ボタンだけ表示のものって簡単には作れないっぽいな。
Win32から操作するしかないんとちゃう?
>>603 わかりましたよ^^
CButtonをCToolBarにのっける形にするです
CButtonをCreateしますよね。
そのとき指定する親ウィンドウを、「CToolBar」にすれば、そのままToolbar上にのっかります。
そのCreateする前に重要なPointがありまして、
指定した位置にそのボタンを挿入したいですよね?
そうすると、SetButtonInfo(nIndex, nID, TBBS_SEPARATOR, nWidth);をCreateの前に呼び出して、
区切りを入れるんです。
そうすることで、そのあとCreateすると、その区切りを入れた箇所にそのボタンが入ります。
nIndexは挿入したいインデックス値、iIDはコマンドIDです。nWidthはいうまでもない^^
確かにとっつきにくいですね。
MFCっていつごろ生まれたものなんですか?
当然、CButtonに限らず、コンボボックスやチェックボックス、そのた各種コントロールクラスも同じようにCreateして挿入できるはずです。
これが、ツールバーに様々なコントロールを搭載する答えなんでしょうかね。
(でも、間違った解説だったらスマソ^^ いちおーWindowsプログラマーではないので^^)
文字だけのボタンの場合はTBSTYLE_LISTかな
ただ全部のボタンがそうなるから
部分的に変えたい場合は>611-612のやりかたで
あとMFCも中でWin32呼んでるから
Win32もMFCもやってることは同じだよ
614 :
603:05/01/11 02:26:15
>>611 そのやり方で作れましたが、
私が今回実現したい方法は、
まず、初めの状態では空のツールバー(コントロールが無いただのバー)を作っておき、
あとで任意にボタンを追加していくものを作りたいのです。
それを試しているんですが、なかなかうまくいきません。
空のツールバーを作成したとしても、そのあとCButtonをCToolBarを親としてCreateしても、Toolbarに挿入されません。
if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT,
WS_CHILD | WS_VISIBLE | CBRS_BOTTOM |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))
上記の方法でLoadToolBarでリソースを呼びこんでボタンを挿入していく方法を試しにしてみました。
(IDR_TOOLBAR1にはボタンが5個しかないとします)
そして、その後、DeleteButtonでリソースにあるボタンを5個削除して、空のツールバーにした後に、
CButtonのCreateでボタンを作っていきましたが、なぜかボタンが5個までしか作成できず、6個以上は作れません。
この辺、難しいですね。。。
かなり困ってます。
CToolBar関連は、どーしようもない糞仕様w
あきらめろ
Win32APIでもややこしーんだから(ぷ
616 :
デフォルトの名無しさん:05/01/11 12:22:45
相談したいのですが、
リストビューのアイテムを取得して、
ソートをしたいのですがリストビューのアイテムを取得してくれません
リストビューは、サブウィンドウにあるので、
?? CWriteList* pDlg = (CWriteList*)AfxGetMainWnd();
CString str1 = pDlg->リストビューのメンバ変数.GetItemText(param1, 1);
??のところが間違っていると思うのですが、
よければ御教授ください
リストビューにはデータは入っています
ブレイクしたら、str1は"" とNULL でした
>>617様
どうもありがとうございます
どうも、そのリンク先の通りにやってみますと、
不正アドレスを指すエラーが発生する模様です
もうちょっと調べてみます
どのクラスからViewを参照するのかで話が違ってくる。
620 :
デフォルトの名無しさん:05/01/11 16:53:15
リストコントロールで1つ項目しか
選択できなようにできますか?
621 :
デフォルトの名無しさん:05/01/11 16:57:20
>620
スタイル設定
622 :
こんばんは:05/01/11 23:59:32
ある構造体を一個分、allocしました。
そこに、ファイルから構造体3個分、コピーしました。
(void)&Data, size というような指定でデータを読み込みました。
これって、人のメモリ領域を書き潰していますよね?
でも、落ちないです。
ま、当然自分の処理には被害がないから、すぐには落ちませんね。
そこで、BoundsCheckerにチェックさせたんです。
「人のメモリを書き潰しているよ。」
ってレポートしてくれると思ったら、「エラーなし」なんです。
(つーか、微妙に大きく領域切ってあって、
無理くりキャストしてallocしてるンですよね。)
BoundsCheckerでチェックしても、
(Void)使ってファイルから書き込んだら、
ちゃんとチェックしきれないモンなのでしょうか?
623 :
デフォルトの名無しさん:05/01/12 00:06:38
この世界では、キャストは責任範囲の移管
>>622 BoundsCheckerはコードレベルでチェックするツールだからある意味当然。
でも、実際に壊すケースはきちんと検出できるからソースの品質に問題がある場合は役に立つ。
VC6な環境ですが、Viewクラスから呼ばれるダイアログクラス(CDialogから派生)の中のことです。
キーボード入力を判別したいのでPreTranslateMessage()で
BOOL COrenoDialog::PreTranslateMessage(MSG* pMsg){
if(pMsg->message==WM_KEYDOWN){
int iVKeyCode=(int)pMsg->wParam;
switch(iVKeyCode){
case VK_0: ....
....
と書いてるのですが、windows.hやwinuser.hをインクルードしても
case VK_0 のところ "error C2065: 'VK_0' : 定義されていない識別子です。"
とコンパイルが通りません。このエラーを無くすにはどうしたらいいですか。
>>625 #define VK_0 0x30
と自分で定義しておけば、エラーは消える
とりあえず、winuser.hの中身を読んでおくと、面白いことが書いてある
(「VK_0」で検索かけると該当箇所はすぐ見つかる)
627 :
622:05/01/12 06:59:59
>>623 >>624 しかし
「BoundsCheckerがモンク言わないように」
って考えで、
10バイトだけ大きくしたって、
500バイトを10個も放り込まれたら、
BoundsCheckerで訳の分からないリークがもーゴロゴロ・・・
BoundsChecker動かしてる暇にソースを見直せってこった。
629 :
デフォルトの名無しさん:05/01/12 14:50:21
ダイアログを開くような dll を作っています.
dll の中の CDialog の派生クラスから AfxGetApp() を呼んで,
呼び出し側の CWinApp* を得ようとしたところ,
NULL しか返ってきません.
なぜでしょうか?
呼び出し側のCWinApp*がエクスポートされてない
632 :
デフォルトの名無しさん:05/01/12 18:18:59
メモリデバイスコンテキストの作成について質問があるんですが、
CMyView::OnDraw(CDC* pDC)
{
CBitmap bitmap;
CDC dcDisplayMemory; ←関数内にローカルに宣言した場合、正常に処理される。
bitmap.LoadBitmap(IDB_REDBLOCKS);
dcDisplayMemory.CreateCompatibleDC(pDC);
dcDisplayMemory.SelectObject(&bitmap);
pDC->BitBlt(100, 100, 54, 96, &dcDisplayMemory, 0, 0, SRCCOPY);
}
この「CDC dcDisplayMemory;」を、関数内のローカル変数として使うと、問題なく処理できますが、
これを、下記のクラス内のメンバ変数として宣言したものを使って、上記と同じような処理をするとエラーが出ます。
どうしてでしょうか?
class CMyView{
public:
CDC dcDisplayMemory; ←ヘッダファイルのクラス内のpublicで宣言した場合、なぜかエラーが出る。
}
デバッガくらい使え
634 :
デフォルトの名無しさん:05/01/12 18:40:26
MFCに限らずWIN32のデバイスコンテキストには寿命があるが、それが原因と思う。
<OnDrawなら1回のWM_PAINTメッセージ処理がその範囲>
いや、どーせ二回目のCreateCompatibleDCでASSERTってオチだろ。
636 :
632:05/01/12 18:47:28
同じようにグローバル変数として宣言したものでも正常に処理されます
オフスクリーンバッファとして使いたいので
一度宣言したらアプリが終了するまで使えるようにしたいのですが
他によい方法はございますか?
「まともに書く」
638 :
632:05/01/12 18:51:28
アプリケーションの特性上、クラス内のメンバとしたいのです
なのでローカル変数やグローバル変数では困るのです
そうですね
さあ、次の患者さんドゾー
エラーが出る、とだけ言われてもねぇ。
deleteしないのに毎回Createしてんの?
642 :
632:05/01/12 19:00:32
643 :
632:05/01/12 19:01:52
>>641 いえ、deleteはしません。
create(new)1回のみです。
それをクラス内のメンバ変数として宣言してます。
要するに、オフスクリーンバッファを作りたいだけなんですが、
メモリデバイスコンテキスト以外でMFCで作れる方法ってありますか?
>>643 まずデバッガ使って落ちたところを特定してからいらっしゃい。
ローカルで宣言すればdeleteはデストラクタがやってくれるけど
外に出したら自分で後始末しないとだめだろ
646 :
632:05/01/12 19:06:29
もちろん、アドレス値が0になっているから、それを参照したらエラーになるのはわかってますが。。。
やはり、デバイスコンテキストは保持の時間制限があるので、無理なんでしょうか。
CDC::~CDC()
{
if (m_hDC != NULL)
::DeleteDC(Detach());
}
648 :
632:05/01/12 19:14:33
>>647 deleteはしないので、デストラクタが呼び出されることはないです。
クラス内に宣言しているだけです。
class CXSFrm : public CXSObject
{
public:
CXSFrm();
~CXSFrm();
(省略)
CDC dcDisplayMemory; ←これ
};
ちなみに、CXSFrmクラス自体もアプリケーションが終了するまで削除されることはありません。
649 :
632:05/01/12 19:16:45
クラス内にあるdcDisplayMemoryをcreateしてるんです。
池沼の相手はほどほどに。
他のお客さんの迷惑です。
651 :
632:05/01/12 19:21:59
CDC dcDisplayMemory; ←グローバルに宣言した場合、正常に処理される。
CMyView::OnDraw(CDC* pDC)
{
CBitmap bitmap;
bitmap.LoadBitmap(IDB_REDBLOCKS);
dcDisplayMemory.CreateCompatibleDC(pDC);
dcDisplayMemory.SelectObject(&bitmap);
pDC->BitBlt(100, 100, 54, 96, &dcDisplayMemory, 0, 0, SRCCOPY);
}
652 :
632:05/01/12 19:22:39
CMyView::OnDraw(CDC* pDC)
{
CBitmap bitmap;
CDC dcDisplayMemory; ←ローカルに宣言した場合、正常に処理される。
bitmap.LoadBitmap(IDB_REDBLOCKS);
dcDisplayMemory.CreateCompatibleDC(pDC);
dcDisplayMemory.SelectObject(&bitmap);
pDC->BitBlt(100, 100, 54, 96, &dcDisplayMemory, 0, 0, SRCCOPY);
}
653 :
632:05/01/12 19:25:47
class CMyView{
CMyView();
~CMyView();
(省略)
public:
CDC dcDisplayMemory; ←メンバ変数として宣言したものを、OnDraw内で使うとエラーに!
}
CMyView::OnDraw(CDC* pDC)
{
CBitmap bitmap;
bitmap.LoadBitmap(IDB_REDBLOCKS);
dcDisplayMemory.CreateCompatibleDC(pDC);
dcDisplayMemory.SelectObject(&bitmap);
pDC->BitBlt(100, 100, 54, 96, &dcDisplayMemory, 0, 0, SRCCOPY);
}
グローバル変数だと問題ないのに、メンバ変数だと問題ある(エラー)なのが納得いかない。
俺はグローバル変数でうまくいっている、という方が納得いかない
655 :
632:05/01/12 19:31:38
>>654 ですよね。
私もそう。
なぜかグローバルだとエラーが出ないです。ずっと。
652のローカルの方は
毎回デストラクタが呼ばれてdeleteしてる(馬鹿にはそう見えないだろうけど)
632は定時になったので帰宅しますた。
また明日来ます
658 :
632:05/01/12 20:04:23
いえ、今も会社です。
オフスクリーン(裏バッファ)は、皆さんどのようにしてますか?
DirectXを使わないと行けないのかな・・w
660 :
632:05/01/12 20:11:07
落ちるところは、裏バッファから、View(表)へ転送するときです。
pDC->BitBlt(0, 0, 500, 500, &dcDisplayMemory, 0, 0, SRCCOPY);
どうやら、dcDisplay〜のアドレスが不正値になってます。
661 :
632:05/01/12 20:16:27
デバガではこうなります。
BitBltする直前ですが
-dcDisplayMemory{hDC=??? attrib=???}CDC
+m_hDCCXX0030: エラーです : 式を評価できませんHDC__ *
俺の持ってる本のサンプルだとローカルじゃなくてメンバ変数でやってる。
class CMainWin : public CFrameWnd
{
public:
int m_X, m_Y; // 現在の表示位置
char m_str[255]; // 表示文字列
CDC m_memDC; // 仮想ウィンドウのデバイスコンテキスト
CBitmap m_bmp; // 仮想ウィンドウのビットマップ
CBrush m_bkbrush; // 仮想ウィンドウのブラシ
-----(略)
CClientDC DC(this);
// 仮想ウィンドウのビットマップを作成する
m_memDC.CreateCompatibleDC(&DC);
m_bmp.CreateCompatibleBitmap(&DC, maxX, maxY);
m_memDC.SelectObject(&m_bmp);
>>653 毎回CreateCompatibleDCしてるしSelectObjectしたものを戻してないし
もうグダグダ
バッファとして使いたいなら、ビットマップの方を保存しとけ。
DCなんか後生大事にとっといても無意味。
仮想ウィンドウ 再描画 の検索結果 約 58 件中 1 - 10 件目 (0.20 秒)
WindowsAPI Programming
... 再描画には大きく分けて2つの手法があり、WM_PAINT命令が発行されるたびに再度
描き直す方法と、仮想ウィンドウを作成して(CreateCompatibleBitmap関数を使用)
描画処理は仮想ウィンドウに行い、再描画のときにビットマップ ...
666 :
デフォルトの名無しさん:05/01/12 23:30:32
確かに他のメモリ領域を書き潰しているケースは、至上最悪の症例。
自分は落ちないからな。ウソコ撒き散らしているようなものだからね。
書き潰されたほうは、正しいデータだと思ってウソコ食べちゃう・・・。
するとどっかで段々と変な動きに。でも次起動した時って再現しない。
なぜなら、その時々でとなりに誰のデータが割り当てられるは、
CPU任せだからだ。でも、放っておくと客は逃げるし、ライバルはほくそえむ。
チェッカーでメモリをチェックしても、文法チェックだから、
ファイルからの読込みのようにvoidやchar*を使われると、
チェッカーは読込み毎に異なるファイルのサイズまでは計算しないわけよ。
でも、担当者は「手順に基づき」「チェッカー異常なし」と済ます。
すると、もう絶対に出てこないね。消えることのない数百byteのリーク・・・
そんな時、アナタはどうする? プロの意見を聞こう↓
家に着きました。
解決するまで寝ないで続行したいと思います。
初心者でスマソ!
>>663 いえ、それは大まかなソースで。
実際には、
CreateCompatibleDCは一回だけ呼び出して、メモリDCを作成。
最後にSelectしたものを戻してますよ。
それでも駄目なんです。
基本的に繰り返すのは、(メモリDC)→(CView)へのビットマップ転送(BitBlt)
void CXSFrmMain::Draw(CDC* pDC){
pDC->BitBlt(0, 0, 500, 500, &m_memDC, 0, 0, SRCCOPY);
}
ま、自己解決できるよう頑張ります。
ご迷惑おかけしました。
どうも。
そんなコードは書かない。
669 :
デフォルトの名無しさん:05/01/13 00:22:35
>>667 デバイスコンテキストは、OSが完全にメモリ管理しているから、
「OSを使わせていただく」って感じになる。
だから、自分のクラスに取り込む、なんてことは出来ない。
これから生成するクラスが既にあるシステムを生み出す、って変でしょ?
だから今後も「使わせていただく」リソースは、
できるだけすぐにお返ししましょう。
うっかりすると、マシンが固まります。意外とリソースは少ないものです。
>>669 そうすると、アプリケーションを起動してから、終了するまで、ずっと保持していたいオフスクリーンバッファはどのように作ればいいのでしょうか?
MFCにおいては、(Win32もそうですが)メモリDCを使う以外に無いはずです。。。
ビットマップとして持っておくとなると、Update描画のたびに、ビットマップからメモリDCへSelect、そしてBitBlt。
終わったら、メモリDCからビットマップへ転送。
見たいなことをしないといけないみたいなので、無駄な処理が増えますよね。
671 :
デフォルトの名無しさん:05/01/13 00:37:45
DC 自体がピクセルを持つように聞こえるんだが、
どっちかつーと DC はポインタのようなものだぞ
hdc = &hbitmap; 的なイメージで
SelectObject(hdc, hbitmap);
代入と違って元の値を返すがな
>>670 本気で迷ってるなら、本当に迷っているソースをそのまま貼り付けろ。
いや、貼るな。普通に書ける物を普通に書かないで文句言ったり、
普通に書きたくないと駄々を捏ねたりするような香具師のソースなぞ見たくもないわ。
674 :
デフォルトの名無しさん:05/01/13 06:59:35
>すると、もう絶対に出てこないね。消えることのない数百byteのリーク・・・
>そんな時、アナタはどうする? プロの意見を聞こう↓
わたしも是非聞きたいです。
つーか、>666はBoundsCheckerがドンなものかわかっていない悪寒。
>>632 おまえの言ってること矛盾だらけなんで
再現実験してみた
ローカルに宣言→OK
メンバ変数として宣言→死亡
グローバルに宣言→死亡
あとメンバ変数、グローバルの時はASSERTで警告でたぞ。
Debug Assertion Failed!
File:wingdi.cpp
Line:109
BOOL CDC::Attach(HDC hDC)
{
ASSERT(m_hDC == NULL); // only attach once, detach on destroy //←Line:109
ASSERT(m_hAttribDC == NULL); // only attach to an empty DC
警告を無視して実行すると、一瞬うまく行く場合もあるが、何回か再描画すると死亡
誤解があるとあれなので補足
メンバ変数、グローバルで宣言するのが悪いんじゃなくて、
その場合はローカルで宣言する場合とやり方を変えないとダメ
画面のプロパティで、ウィンドウとかの色を変えられるけども、
その現在のシステムカラーの色とかはどうやってGETするんですか?
あと、プロパティーでシステムカラーを変更したことがわかる方法ってあるんですか?
>>679 GetSysColorってまんまな名前のAPIがあるんだけど。
変更通知は知らん。Spy++でそれらしいメッセージが来ないか調べてみれば?
WM_SYSCOLORCHANGE
682 :
デフォルトの名無しさん:05/01/13 18:52:32
dll で ::AfxGetAppName() を使って,
呼び出し側 exe のアプリケーション名を
取得しようとしましたが,
例外にひっかかってしまいました.
なぜでしょう?
>>682 AfxGetAppNameの中のどこで例外が出たか
デバッガで追いかければわかる。
684 :
674:05/01/14 00:30:05
>>675教えて君でスマソ。でも>666に対する解決手法を知りたい。ズバリ聞かせてよ
使いたい。だけどきっと675は知らない予感。そんなヤツばっかだものな。
スレ違い。
市販ソフトの使い方はサポートで聞きましょう。
欽ちゃんの仮装ウィンドウ大賞
スレ違いだったらごめんなさい。
.dllの拡張子のファイルの中身を見てみたいのですが
メモ帳とかだと、変な文字列が出て(暗号化?)さっぱりなのですが
ちゃんと中身を見る方法や、見れるソフトとかないのでしょうか?
もしあれば紹介していただきたいです。
簡潔でも構いませんのでよろしくお願いします。
>>687 バイナリエディタで見ればいいんじゃないの。
>>688 レスありがとうございます。
バイナリエディタで見てみましたが、やはり同じような感じでした。
何がやりたいかということをかくと、PC初心者の考えそうなことで
理解しがたいことだと思いますので、仕様だと思ってあきらめます。
お騒がせしました。
マシン語で会話できる人じゃないと、exeとかdllの中身読めないだろうな。
691 :
デフォルトの名無しさん:05/01/14 10:20:20
>>689 「仕様」という言葉の使い方をまちがいてる
「ちゃんと中身を見る」の意味が判らん。
シンボルは Dependency Walker で見られるし
コードやリソースは Visual Studio で見られるだろうが
一体何を見たいのか…
693 :
デフォルトの名無しさん:05/01/14 11:03:58
VC−MFCでダイアログベースで
画面作ったんですが、とあるところからもらったDLLの
ライブラリAPIを使いたいのに、LNK2001エラーがコンパイル時に
出てしまいます
lib ファイルを、プロジェクトに追加して、APIのプロトタイプ
宣言のあるヘッダファイルをパスでinclude するだけで
なく、何か抜けている手順があるでしょうか?
エラーメッセージ
error LNK2001: 外部シンボル ""int __stdcall XXX は未解決です ってでます
すみません 解決しました 失礼いたしました
695 :
デフォルトの名無しさん:05/01/14 18:39:53
CSliderCtrlのSetSelection()で選択範囲を指定すると、その部分の色が変わるのですが、XPでマニフェスを有効にするとこの部分の描画がされません。(白いまま)
回避策があれば、教えてください。
696 :
デフォルトの名無しさん:05/01/15 00:40:40
まにまにまにまに、マニフェスト!
697 :
デフォルトの名無しさん:05/01/16 12:32:18
基本的な質問になりますが、
MFCでint値をCString(もしくは、unsigned char*)に変換する方法はどのようにするんですか?
698 :
697:05/01/16 12:36:10
_itoa( X, S, 10 ) を使うしかないみたいですね。
.NETにはConvetクラスという便利なものがありますが、
MFCにはそれが見当たらないですね。
すいません、自己解決ということで。
>>697 CString str;
int value = 100;
str.Format("%d",str,value);
>>697 const char * Convert(int val)
{
static char buf[20];
sprintf(buf, "%d", val);
return buf;
}
701 :
デフォルトの名無しさん:05/01/16 18:27:50
ツリービューでマウスクリックイベントを捕まえて
GetSelectedItem() すると、「一つ前」に選択された
ツリーアイテムが取れてしまいますよね。
マウスでクリックしたアイテムのツリーアイテムを
取得するにはどうしたらよいのでしょうか?
TCHARで宣言されていたものが文字セットをUnicodeにするとWCHARで処理されるわけですが、
こうなると CFontDialog に CHARFORMAT 構造体の szFaceName が上手く渡せません。(フォントダイアログのフォント名の初期値として処理されない)
これは WideCharToMultiByte なんかを使用して ASCII に直し、szFaceName に入れなおさないとダメってことですか?
>>702 WCHARなのにWideCharToMultiByte?
>>702 そうみたい。CFontDialog::CFontDialog(const CHARFORMAT &,〜)が内部で
szFaceNameをMBCS→UNICODE変換している。
ので、入力値はMBCSじゃなきゃならない。
以上はVC6の話ね。
>>703 ええと・・・WCHARで Unicode のまま WCHAR* szFaceName 状態の変数に "MS UI Gothic" なんて文字列を入れても、
CFontDialog 自体が読み取れる変数は Unicode じゃなくて MultiByte文字らしくて、WCHAR*な "MS UI Gothic" が認識されないというか・・・
CHARFORMAT cf;
cf.cbSize = 10;
cf.dwMask = CFM_FACE;
lstrcpy( cf.szFaceName, CString("MS UI Gothic") ); // 実際にはシステムから受けた WCHAR[] な変数のフォント名がszFaceNameにコピーされる
#if (defined (UNICODE) || defined (_UNICODE))
char strFontName[LF_FACESIZE]="";
WideCharToMultiByte(CP_ACP, 0, cf.szFaceName, -1, strFontName, LF_FACESIZE, NULL, NULL);
strcpy( (char*)cf.szFaceName, strFontName );
#endif
CFontDialog dlg(cf);
今はこんな感じになっています。
Unicodeでコンパイルするとき #if の中で書かれているヤツが抜けていると今回のように。
Dlg.DoModal() の後 dlg.GetCharFormat(cfsave) で cfsave を保持しといたとして、
もう一度 cfsave で CFontDialog を作ると、フォント名の欄が空になってる(Unicodeに変換されたフォント名に該当するフォントが無い)・・・と。
>>704 サンクス
とりあえずはこのまま条件で分けときます。
VC2003だと、cbSize見てCHARFORMAT2だったらそのまま、それ未満だと
MBCS->UNICODE変換かけるように変わってるな。
CHARFORMATじゃどうやってもUNICODEで設定できない。
何を考えてこんな実装になっているのやら。
>>705 VC7以上なら、CT2A()を使うとスマートに変換処理が書ける。
>>706 バグなんだけど互換性に問題出るから今更直せなくて仕様って事になったんだろ。
709 :
デフォルトの名無しさん:05/01/18 18:46:42
CDialog ではコンストラクタの引数として,
CWnd* をとって,それをダイアログの親ウィンドウとしますが,
あたえられたウィンドウのハンドルを HWND を親ウィンドウとして
設定するにはどうしたらいいのでしょうか?
711 :
デフォルトの名無しさん:05/01/18 20:13:42
MFC におけるグリッドについて質問します。
VC6では MSFlexGrid という ActiveX を使ってグリッド表示のアプリを書いていましたが、
VS.NET 2002/2003になるとデザインタイムライセンスがない、ということで使えなくなったようです。
VS.NETでMFCアプリを記述するのにお勧めのコントロールは何になるのでしょうか?
それとも、デザイン時に MSFlexGrid コントロールがポトペタできないだけで
自前でインスタンス生成コードとかを記述してプログラミングできるのでしょうか?
厨な質問ですいませんが、教えてください。
712 :
デフォルトの名無しさん:05/01/18 20:14:03
リストビューなんですが、
CListCtrl コントロールで、リストのすでにあるレコードの
あるカラムの値を上書き編集したいのですが、
メンバはありますでしょうか?
SetItemTextや、SetItemなどでは新規レコード挿入してしまいます
よろしくご教授ください
713 :
デフォルトの名無しさん:05/01/18 22:00:14
VC7でダイアログアプリのウィンドウクラス名を変えるにはどうすればいいですか?
VC6ならなんとか出来るのですが…。
>>711 OfficeインストールしているならExcel使うとか。それならOCXでできるし。
MSFlexGridはdll自体ないと思った。GrapeCityから正規版を買うのも手かも。
>>712 普通にSetItemでできると思うが。いっそコードさらしてみ。
715 :
712:05/01/19 09:01:22
>>714 遅くなりましてすみません
上書きできました インデックス間違ってただけでした すみません
716 :
デフォルトの名無しさん:05/01/19 13:14:32
VC6で作成してたMFCアプリをVS2003に移行したらDDVの
エラーメッセージが英語で表示されるようになっちゃった。
どうすれば日本語になるの?
リソースを日本語に
718 :
デフォルトの名無しさん:05/01/19 19:58:54
CScrollViewのSDIアプリを作っています。
わけあって、水平、垂直スクロールバーが表示されているかどうか知りたいのですが、
どのようにすればわかるでしょうか?
ググったら ::GetWindowLong 使ってウインドウ状態を調べろ、というのがあったのですが、
わたしの技術力、想像力が乏しくて、具体的にどうすればいいかわかりませんでした。
>>714 711です。レスありがとうございます。
そんなに高価でもないようなのでVSFlexGridを買ってみます。
ただ、VS2002/2003などでMFCアプリを開発する人は、
どのようにしてグリッドを扱うのでしょうか?
全部自前で描画するのでしょうか?
それとも何らかのコントロールを継承してグリッドっぽいものを作るのでしょうか?
>>718 GetStyle() & (WS_HSCROLL|WS_VSCROLL)
普通のウィンドウならそれでもいいけど、CScrollViewの場合にはそれだけじゃ駄目だ。
一般的にはね。
>>719 今やってるプロジェクトではListViewを拡張してお茶を濁した。
その前のプロジェクトではVC6だったのでFlexGridを使った。
今度のプロジェクトではFlexGridを買うことになりそうだ。
>>719 codeprojectやcodeguruにGrid系のコードあるよ
>>723 私もCodeGuruのを参考にしたけど、帯襷で…
725 :
デフォルトの名無しさん:05/01/20 21:18:49
アプリケーションのヘルプ...バージョン情報など、
メインウインドウから別ダイアログを表示するときに、
ダイアログを DoModal するほうで、ダイアログのタイトルをセットすることは可能でしょうか?
今は、ダイアログのクラスに public: な CString 型メンバを作成して、
ダイアログの OnInitDialog() のコードの中で SetWindowText(); して実現しています。
できれば、独自定義のメンバ変数をなるべく減らしたいと考えております。
//=========================================================
void CtheappApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.m_myWindowText = "だいあろぐ";
//-------------------------------------------------------
// ほんとは、ここでダイアログに対して SetWindowText 的なことをしたい。
//-------------------------------------------------------
aboutDlg.DoModal();
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
this->SetWindowText( this->m_myWindowText );
return TRUE;
}
718 です。
GetStyle() & (WS_HSCROLL|WS_VSCROLL) でビットを調べて、
スクロールバーの表示状態を調べました。
CScrollView だとそれだけじゃだめだ、というカキコもしていただいたのですが、
いまのところ私の実現したいことには支障がないようですので、
問題が出たら再び考えることにします。ありがとうございました。
727 :
デフォルトの名無しさん:05/01/20 21:38:33
フォントの設定に関して質問させてください。
たとえば.....
ビュークラスのOnDraw内でフォントを設定するには CreateFontIndirect(LOGFONT*) を使いますが、
SelectObject する前のデフォルトのフォントの LOGFONT 構造体データを取得する方法はありませんか?
寸前の HFONT だったら SelectObject の戻り値に入るので、
HFONT から LOGFONT を導く方法でもあるのでしょうか?
GetObject?
711=719です。.NET Frameworkを使ってもいいのだったら
DataGridというコントロールが標準で用意されているので問題ないですが、
あと2、3年ぐらいは純MFCでの開発も続くでしょうからグリッドについては悩むトコですね。
>>728 727です。すばやいご回答感謝いたします。
int GetObject(
HGDIOBJ hgdiobj, // グラフィックオブジェクトのハンドル
int cbBuffer, // オブジェクト情報を格納するバッファのサイズ
LPVOID lpvObject // オブジェクト情報を格納するバッファ
);
MFCスレなんだから、CGdiObject::GetObjectだろ、ふつー
MFCで作った実行ファイルを別マシンで起動すると
MFC42D.DLL
を必要とするのですが、これらのファイルを添付する以外で起動する方法ってあるのでしょうか?
出来ればEXEに埋め込むみたいな方法がよいのですが。。。
デバッグ用DLLじゃない?
うむ。リリースビルドしれ。
リリースでやれば良かったのですね・・・
PC全部VC入ってたので全部普通にビルドしてましたorz
>>734 ありがとうございました。
これってリリースでビルドするとサイズ凄く小さくなりますけど、何か変わるんですかね?
>>736 デバッグに必要な情報が要らなくなったり最適化したりするから。
デバッグでは出なかったバグがリリースにしたら出たりするから、
テストも十分にしておくように。
リリースしてからとんでもないことではまることがあるから。
細かいこといえば、リリースでビルドして、VCから起動させずに、
単体で起動してみてきちんとうごくかどうか試さないと危険。
>>738,739
それだけでは足りない場合もある。
MFCのリンク方法が違うと挙動が変わる。
納品物の仕様にあわせたビルド版のテストを早い段階で行う必要がある。
デバッグ版の存在価値は、
対話デバッグテストによる例外処理強制終了の位置確認ぐらいしかあるまい。
とはいえ、例外処理強制終了の位置確認できるのはそれなりに美味しいけどな。
ビルド版って言い方は初めてみた
メモリリークの調査にもいいぞ。
デバッグ版というより、デバッグモードだが。
リリースビルドでもMFC42.dllが無いと動かないよ。
よほど古くなけりゃ入ってると思うけど。
MFCを実行ファイルに埋め込む(スタティックリンク)スイッチは
プロジェクト -> 設定 -> [一般]タブ
にあるよ。
これStandard版は無いんだっけ?
743 :
デフォルトの名無しさん:05/01/22 19:09:33
>それだけでは足りない場合もある。
つーか、テスト計画ない時点で終わってるw
>>741 ビルド版じゃなくて、「納品物の仕様にあわせたビルド」版という意味で書いた。
送信してから「わかりにくいな。しまった・・。」と思ったが
誰もそんなところまで突っ込むほど暇人じゃないだろうと勝手に思い込んだ俺が甘かった。
そんな本格的なソフトならこんな所でそんな質問するわけない。
それは思い込みだよ
コンボボックスリストを別の値に選択した時に、IDC_EDIT1に格納されてる値を
コンボボックスで選択した値+100してIDC_EDIT1に表示するみたいな事をしたいのですが、
これをボタンが押された時、とかではなくリアルタイムでコンボボックスの中の値が別の値に選択された直後に
IDC_EDIT1に計算結果を表示するにはどうしたらよろしいのでしょうか?
>>747 対象となるコンボボックスで、以下のメッセージを受ければよい
================================================
ON_CBN_SELCHANGE
ユーザーがリスト ボックス内でクリックするか、方向キーを使って選択を変更した結果、コンボ ボックスのリスト
ボックスで選択されている内容が変わることを通知します。このメッセージを処理するとき、コンボ ボックスのエディット
コントロール内のテキストを取得するには、GetLBText 関数または別の同種の関数を使います。
GetWindowText 関数は使用できません。
================================================
>>748 教えて頂いた方法で解決しました。
ありがとうございましたm(_ _)m
うぉ、ON_CBN_SELCHANGE の時はGetWindowText使ってはいけないのか。
思いっきり使ってた。どうりで上手く行くときと行かないときがあるんだ・・・
ダイアログベースで作ったものに、メニュークリックしたらIDD_DIALOG2みたいな別のダイアログを出すには、どーすればいいんでしょう(;´Д`)
新規クラス DoModal でぐぐれ
モードレスならcreateとshowwindowでぐぐれ
754 :
デフォルトの名無しさん:05/01/23 18:09:45
すみません 教えてください
処理ゲージを表示する画面をつくったのですが、
これをshow で表示すると、タイトルバーにタイトルが表示されないんです
これ表示するようにするには、どうしたらいいのでしょうか?
setWindowText だと、その画面が終わったあとに出てきますので
show で画面が消える間(画面が表示されたときから)
タイトルがでていればいいのですが。
処理ゲージを表示しているときにメッセージ処理をしてやる。
756 :
754:05/01/23 18:21:22
>>755 えーと レスありがとうございます
処理ゲージ画面をshow関数をコールした後、
呼ばれたほうのshow 関数で何か処理を
行うということでしょうか?
具体的に、どんなメッセージ処理をすればいいのでしょうか
処理ゲージ の検索結果 約 12 件中 1 - 10 件目 (0.40 秒)
知らない言葉がでてきて自分が不勉強なのかとあせった
プログレスバーの処理を別のスレッドで処理すれば良いんじゃないかい?
759 :
754:05/01/23 21:54:48
>>758 一応、別の関数に分けて処理していますので、
それは大丈夫と思います
やはり、show だと DoModalと違って出力直後に
処理はできないものでしょうか?
>>759 show関数ってなんだっけ?
まぁいいや、DoModalを使ってないなら、開くダイアログをどっかでCreateしてるはず。
そのCreateを見せて、
ついでに、設定したウィンドウスタイルとかもあわせて
ActiveXコントロールのウィンドウをCreateWindowで作ろうとしていますがうまくいきません。
ttp://www.nitoyon.com/vc/tips/ie_component.htm こちらを参考にして、AtlAxWinInit()を読んだあとに
クラス名に 『AtlAxWin』のウィンドウをCreateWindowで作成したのですが、
戻り値がNULLで返ってきます。
WinMain関数で何か初期化処理をしている事を紹介しているサイトが有ったのですが、
プロジェクト内にWinMain関数が無いため試すことが出来ませんでした。
どうすればうまくいくでしょうか。
762 :
759:05/01/24 08:48:40
Createは、ゲージを表示するwindow のIDを渡しています
Create(uID);
ShowWindow(SW_SHOW);
CenterWindow();
これだけです
ちなみに、Createの前で SetWindowTextを実行すると、
メモリリークを起こして死にます
Createの後にSetWindowTextを入れると、ゲージ処理が終了してから
タイトルが表示されます
Window スタイルは、デフォルトでした(チェックとかは特についてないです)
CDialog のCreate?
だったらCDialogの初期化でやればいい
>>763 ちょっと試してみます。
ありがとうございました。
自作のアプリでダイアログによって設定を行う際、
ViewやFrame等各クラスのメンバに設定を反映させるコードが非常に見苦しくなってしまいます。
設定ダイアログはまあ、大抵のアプリには付いている物なので、美しいやり方などがあるのかも、と思っているのですが……。
皆さんどの様にコーディングしているのでしょうか。
アイデアのある方、アドバイスなどお願いします。
どう見苦しくなったのか晒してみ。
MFCで配列をソートしてくれるクラスってどれになります?
そういうのは普通関数にすると思う
MFCでゲームを作ろうとしています。
ゲーム画面をフルスクリーンにしたいのですがどうすればいいのでしょうか?
> プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
> Javascript は Web 制作板、CGI は Web プログラミング板へ。
> 業界談義、愚痴はプログラマ板へどうぞ。
> ゲーム関係の話題はゲーム製作板へどうぞ。← ← ← ← ← ← ←
> ネタ、板とは関係の無い話題はご遠慮ください。
773 :
デフォルトの名無しさん:05/01/30 00:29:49
質問なのですがCFromViewを使ってHTMLを表示するのはどうすれば良いのでしょうか?
CHtmlViewを使えば表示する事はできるのは解かるのですが他にもコントロールを使いたいのです…。
ご教授お願い致します。
フォームビューのフォームにブラウザコントロールを貼り付ける
>>774 レスありがとうございます。
仰る通りの方法で解決できました。ありがとうございました
776 :
デフォルトの名無しさん:05/01/30 02:00:45
>>761 CoInitializeしてないとかいうオチじゃないだろうね?
777 :
デフォルトの名無しさん:05/01/30 08:37:51
特定の範囲だけを描画対象とする、Clipみたいなものってありますか?
リージョンの話かな?
デスクトップのビットマップを取り出すには、「MFC」でどうすればいいんでしょーか?
SystemParametersInfo
786 :
よし子:05/01/31 16:46:58
スクリーンセーバーを作るには、「MFC」でどうすればいいんでしょーか?
>>787 好きに作れ。SDKで作れるならMFCでも作れるだろ?
特定のUSBメモリのドライブレターを取得する方法がわからない。
USBメモリのデバイス名を取得することはできてるんだけども、そこからどやってドライブレターを取得していいのやら。
ぐぐって同じような質問を見つけても、コレだという回答はされていないようだし。
教えてエロい人。
MFCには、そんな機能は無い
タブ型のファイラーをMFCとAPIで作ろうと思ってます
大まかでかまいません
どんな手順で作るんですか
いや…それは…
>>794 おそらく作り方がわかんないから聞きにきてるんだろ
>>793 0.ぐぐる
1.VC++を立ち上げる
2.作る
>>796 一度、ディレクトリをツリー表示にするのと
ファイルをリスト表示するのは作ったんです
次はそれを発展させたいなと思って。
3.発展させる
2.5 .バグ取り
800 :
デフォルトの名無しさん:05/02/03 00:59:09
ウィンドウを表示させようとしているのですが、
なかなかうまくいきません。
初歩的な質問になりますが、どこが間違っているのでしょうか?
//
WNDCLASS stWndClass;
stWndClass.style = CS_BYTEALIGNWINDOW;
stWndClass.lpfnWndProc = &AfxWndProc;
stWndClass.cbClsExtra = 0;
stWndClass.cbWndExtra = 0;
stWndClass.hInstance = AfxGetInstanceHandle();
stWndClass.hIcon = NULL;
stWndClass.hCursor = NULL;
stWndClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
stWndClass.lpszMenuName = NULL;
stWndClass.lpszClassName = "TestWClass";
AfxRegisterClass( &stWndClass );
//
CRect stRect( 0, 0, 300, 200 );
xsWnd.CreateEx( WS_EX_TOOLWINDOW,
"TestWClass"
, _T( "てすとですぅ" )
, WS_POPUP
, stRect
, NULL
, 1000 );
xsWnd.ShowWindow(SW_SHOW);
「うまくいかない」で問題が伝わると思ってるのか?
ですぅ
すみません、自己解決しました
CListViewをエクスプローラの縮小版みたいな表示にすることはできませんか?
ローカル座標とグローバル座標を変換するためには?
どうしたらよいのでしょうか?
>>807 MapWindowPoints
ClientToScreen
ScreenToClient
>>765 設定をすべて保持するクラスなりモジュールなりを定義して,あらゆるところからそこを読み書きするようにしてる。
きれいはきれいだがコードは増える。
下記のウィンドウを作成すると、アプリケーション終了時にデバッグエラーが出ます。
どうしてなのでしょうか?
私のほうで調べてみましたが、まったくわかりません。
よろしくお願いいたします。
BOOL CMyFrameMenu::Create(CWnd* pWnd,CRect GlobalRect)
{
LPCTSTR lpszClassName;
HCURSOR hCursor = ::LoadCursor( NULL, IDC_ARROW);
DWORD dwStyle;
DWORD dwExStyle;
lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor);
dwExStyle = WS_EX_TOPMOST;
dwStyle = WS_CHILD;
return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, GlobalRect, pWnd, NULL, NULL);
}
エラー内容調べないの?
エラー内容は問題解決のための重要な情報を含んでます。
814 :
810:05/02/05 10:43:35
CMDIFrameWndを派生させて試してみましたが、無理でした。
ウィンドウスタイルは、WS_CHILDとしたいのです。
ちなみに、
WS_POPUPで親ウィンドウをNULLとした場合、アプリケーションを終了させたらエラーは出ませんでした。
dwExStyle = WS_EX_TOPMOST;
dwStyle = WS_POPUP;
return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, GlobalRect, NULL, NULL, NULL);
HCURSOR hCursor = ::LoadCursor( NULL, MAKEINTRESOURCE(IDC_ARROW));
816 :
810:05/02/05 10:58:00
>>815 それを試してみましたが、駄目でした。
他の部分に問題があるわけではなく、そのBOOL CMyFrameMenu::Create(CWnd* pWnd,CRect GlobalRect) を呼び出したら、
エラーが出ます。
そのBOOL CMyFrameMenu::Create(CWnd* pWnd,CRect GlobalRect) を呼び出さないと、エラーも出ません。
私の乏しい知識では難しいですね。・・・・・・・
GlobalRectの中身は?
818 :
810:05/02/05 11:17:11
>>817
CRect rect( 0, 0, 300, 200);
既にできてるウィンドウのCreateEx呼び出したらいかんだろ。
820 :
810:05/02/05 11:41:41
>>819 CreateExは上記の一回のみの呼び出しです。
WS_POPUPで親をNULLをしてCreateExすると→アプリケーション終了時エラーが出ない
WS_CHILDで親をCMainFrameをしてCreateExすると→アプリケーション終了時エラーが出る
何に問題が起きてるのかがわかりません。
自分自身を親ウィンドウ指定するな。
>>822 いえ、別のCFrameWndですが。
親、CMainFrame
子、CMyFrameMenu
両方とも、CFrameWndから派生されたもの。
子にCFrameWndを指定してはいけないのでしょうか?
>>823 情報小出しでわかりにくい。
まず、クラス図かけ。
継承図
CFrameWnd
→CMainFrame
→CMyFrameMenu
相関関係
CMainFrame
→CMyFrameMenu
dc.FillRgn(&rgn,&bbb);で描こうとしたら
まったく描いてくれん orz
dc.FillRect(&rect,&bbb);だと描かれるのに
ワケワカメ
>>826 描画のたびにCRgnを生成させないといけない。
CPaintDC dc(this); // device context for painting
// TODO : ここにメッセージ ハンドラ コードを追加します。
// 描画メッセージで CXSFrameWnd::OnPaint() を呼び出さないでください。
rgn = new CRgn();
rgn->CreateRoundRectRgn(0,0,300,200,15,15);
CBrush bbb;
bbb.CreateSolidBrush(RGB(255,0,0));
dc.FillRgn(rgn,&bbb);
delete rgn;
>>825 ちゃんとヒープにメモリ確保してからCreateしてる?
LButtonClickだけを無視させる(回避)方法ってあるか?
はぁ?
831 :
デフォルトの名無しさん:05/02/06 09:26:46
EnableWindowにFALSEを指定するとWM_LBUTTONDOWNは来なくなるよな
EnableWindowだと全てのマウスイベントが来なくなるが、それでいいのか?
>>829
>>829 オーバーライドして中で無かった事にすればおk
834 :
デフォルトの名無しさん:05/02/06 09:44:44
何となくだけど、クリックしてもアクティベートされなくしたいんじゃないか?
OnLButtonDownはVirtualでなかったような…調べてみまつ
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
↑
只のコメントキーワード
>>833 C++ でオーバーライドを実現するには、オーバーライドする基本クラスのメソッドに virtual 修飾子をつけて仮想関数として定義しなければいけません。
オーバーライドとオーバーロードを混同しているアフォのいるスレはここですか?
839 :
デフォルトの名無しさん:05/02/06 10:35:33
>>832 SetWindowsHookExはお嫌いですか?
説明不足スマソ
FloatingWindow(WS_EX_TOOLWINDOW)を作ったんだが、
そのFloatingWindowをクリックすると、CFrameWndが非アクティブになってしまう。
FloatingWindowをクリックしても、CFrameWndはアクティブのまま(一切非アクティブへ切り替わらない)にしたいんだ。
842 :
デフォルトの名無しさん:05/02/06 14:32:30
WM_SETFOCUSでできれば楽だが、アクティブ化殺すなんてできたかな
アクティブ化をポイするってどっかで見たな。
んー、コンボボックスとかってそうじゃん。それ系のカスタムコントロールを参考にしてみたら?
スクリーンキーボードのように、アクティブ化させないウィンドウスタイルはある。
が、なんだったかわすれた(つ∀`テヘ
SPY++でスクリーンキーボードみればたしかでてくるのだが、今の環境にVCないのでわからん。
そのスレイプニアでは両方ともアクティブ化されてるだろ。
SPYでスタイル調べて、試したんだが、どうもうまくいかん orz
普通のドッキングツールバーがそうだろ
クリックしても、ほかのウィンドウが非アクティブにならない代表的なIMEツールバーをSPYしたんだけど、
WS_DISABLEDとなってる。
でもマウス入力は受け付けるよね。
この辺のカラクリが知りたい。
非アクチブになりそうになったら、そいつにWM_NCACTIVATEを投げてやる。
と適当に答えてみる。
ソースみたら簡単に見つかるな
// clicking on floating frame when it does not have
// focus itself -- activate the toplevel frame instead.
誘導されてきました。以下他スレの書き込みと同様です。
VC.NETでダイアログベースのアプリを作っています。
ダイアログを任意の数だけ表示させたかったのでポインタでCDialogを宣言して
new→create→ShowWindow(SW_SHOW)の手順で表示させているのですが
消すとき、OnOKまたはOnCancelでDestroyWindowしてPostNcDestroyで
delte thisしているのですがメモリが完全に元に戻りません。(少し残ります)
これはこういうもんなんでしょうか
だからMFCのソース見ろよ
MFCの中でAPI呼んでるからAPIのみでも同じ
ツールバーを切り離す
クリックでブレーク
そこのソース見る
wincore.cpp
>ツールバーを切り離す
>クリックでブレーク
がどこにあるかわからんね。
莫大すぎて。
砂漠でアリ探すようだ。
int CControlBar::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT nMsg)
void CMiniDockFrameWnd::OnNcLButtonDown(UINT nHitTest, CPoint point)
void CMiniDockFrameWnd::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
void CWnd::ActivateTopParent()
>>858 ごめんなさい。
難しすぎて。
それをどうしろと?
860 :
デフォルトの名無しさん:05/02/08 00:13:19
とりあえず調べてみたか?
>>851 デストラクタはvirtualになってるか?
862 :
デフォルトの名無しさん:05/02/08 00:40:11
>>851 なんで OnOK で DestroyWindow するんだよ?
モードレスかと思いきやダイアログベースらしいし・・・ >EndDialog
最初のMFCアプリケーションウィザードで設定した
[[最近使ったファイル] のファイル数] や
[ファイル拡張子][フィルタ名]などを
後から変更するにはどうしたらいいんでしょうか。
レジストリ書き換える
866 :
デフォルトの名無しさん:05/02/08 12:50:03
質問です。
VC++で、画面起動後にCEditコントロールの背景色を変更する
にはどうしたらよいのでしょうか?
画面起動時ならOnCtlColorの中で設定できるのですが・・・。
よろしくお願いします。
そのやり方を変えたくなければOnCtlColorで指定する色を変更できるようにしておいて
変えたいタイミングで色を変えてInvalidateなりなんなりしてやれば良いんじゃ寝?
>>865 おかげさまでうまくいきました。
ありがとうございます。
869 :
デフォルトの名無しさん:05/02/09 08:34:34
当方Win2000+VC6環境で、SDI+複数ビューのアプリケーションを作ろうとしています。
リソースエディタでメニューを作り、ClassWizardを実行すると
関連付けする既存または新規のクラスの選択を求められます。
このとき、関連付けするクラスはやはりCViewの派生クラスが適当でしょうか?
その場合、複数あるビュークラスのうちどれに関連付けるべきでしょうか?
足りない脳味噌しぼったところ、以下のような方法を思いつきました。
1. 一番メインとなるCView派生クラス
(クリック検出のコード等とかもあるのでメンバ関数がかなり多くなる)
2. 新規に、メニュー関係のイベントを扱うCView派生クラスを作成
(1に比べると1クラスあたりのメンバ関数は減るが、メモリ上に余計なものが増える気がする)
3. CDocumentやCWinAppあたりの派生クラス
(なんか反則っぽい)
#アプリケーションのバージョン情報ダイアログって、最初からCWinApp派生クラスに関連付けられてるような…?
そのメニュー項目の機能によりまちまちだ。
メインフレームが普通
ありがとうございます。
何もウィザードや本の指示通り、CView派生クラスに関連付けなくても特に問題は無いのですね。
>>870 例えば「ファイル」メニューはドキュメントクラスに、「表示」メニューはビュークラスに、
バージョン情報やヘルプはメインフレームに、という感じでしょうか?
>>871 なるほど、やってみたいと思います。
でもなんでClassWizardはわざわざCViewを指定してくるんでしょうね。
メニューリソースの追加だよね
メニューの項目(ボタン)の追加のような気もするけど
最初からあるメニューのリソース名はIDR_MAINFRAMEになってるし、
メニューの表示もメインフレームでやってるからそう思ったんだけど、
もうひとつメニューのリソースを追加すると
たしかにウイザードはviewとか言ってくるね。
その辺はよくわからん。
test
CEditCtrl版の
CDialogで言うOnInitDialogみたいな
メッセージってありますか?
作成された時のみ1度だけ呼ばれるやつ。
メッセージもらうつもりならメッセージマップがいるだろ
ぬう
ちゃんとVCで
CEditTest ってクラスを CEdit 継承して作って
WM_CREATEをマップしたOnCreateに処理を書いたが
通らないみたいなのです。
デバッガ使って調べても通ってないみたい。
Editは、WM_Createを受け取らないのかなと。
ダイアログエディタ上に置いたCEditなどはOnCreateを通らなかった希ガス
WM_CREATE後にCEditにアタッチされるからね。
CWndからHWND得る方法教えてください。
別な方法でもいいんでお願いします。
MFCたまにしか使わないんで、いつも
この方法に悩まされます。
CWnd wnd;
HWND hwnd = wnd;
CWnd::m_hWnd
CWnd::GetSafeHwnd()
CWnd wnd;
(HWND)wnd
CWnd wnd;
wnd.m_hwnd;
下記のコードでエラーが出ます。
なぜでしょう?
error C2664: 'SystemParametersInfoA' : 3 番目の引数を 'DWORD' から 'PVOID' に変換できません。
void CXSystemApp::SetAbsoluteForegroundWindow(CWnd *pWnd)
{
int nTargetID, nForegroundID;
DWORD sp_time;
// フォアグラウンドウィンドウを作成したスレッドのIDを取得
nForegroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
// 目的のウィンドウを作成したスレッドのIDを取得
nTargetID = GetWindowThreadProcessId(pWnd->GetSafeHwnd(), NULL );
// スレッドのインプット状態を結び付ける
AttachThreadInput(nTargetID, nForegroundID, TRUE ); // TRUE で結び付け
// 現在の設定を sp_time に保存
SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT,0,&sp_time,0);
// ウィンドウの切り替え時間を 0ms にする
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,(LPVOID)0,0);
// ウィンドウをフォアグラウンドに持ってくる
pWnd->SetForegroundWindow();
// 設定を元に戻す
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,sp_time,0);
// スレッドのインプット状態を切り離す
AttachThreadInput(nTargetID, nForegroundID, FALSE ); // FALSE で切り離し
}
SystemParametersInfo
システムに関するパラメータを取得 (または設定) します。
BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);
これの解説探して読め
(LPVOID)sp_time
>>867 その方法でうまくいきそうです。
ありがとうございました。
>>858 すげー参考になった。サンクス!
CWnd::ActivateTopParent()
こんな便利な関数がなんでマニュアルにのってないんだろう。
protectedメンバなんだからさあ、隠さずに俺にも使わせろっ!って思った。
MFCでタイトルバーがクリックされたことを拾うにはどうすればいい?
WM_NCLBUTTONDOWN
WM_NCRBUTTONDOWN
WM_NCMBUTTONDOWN
897 :
デフォルトの名無しさん:05/02/12 01:12:47
エクスプローラの右側のような感じでファイルの一覧を表示したいのですが、
このコントロールはMFCに入っているのでしょうか。
あるいはどこかにいいサンプルはありませんか?
899 :
897:05/02/12 04:34:06
いえ、リストコントロールではなくて、
たとえばフォルダのパスを指定するとそのフォルダの中身を表示してくれるような、
つまりエクスプローラの右側そのままです。
900 :
デフォルトの名無しさん:05/02/12 08:22:35
>>899 リストコントロールでそのような機能を自分で実装する。
どこかのメーカーがそんなActiveXコントロールを売ってるかもしれない。売ってないかもしれない。
そういえばMFCのウィザードの5/6に
Windowsエクスプローラスタイルというのがあるな
>>897 codeprojectかcodeguruにあるんでは?
アイコンとか右クリックメニューとかファイル変更の監視とか
細かく作りこむのは結構大変だと思うが。
手抜きしたければCHtmlViewで
file:///c:/hogehogeにNavigateすればいいよ
904 :
デフォルトの名無しさん:05/02/12 16:50:19
DIB形式(モノクロ)のファイルから、データ を読み取りたいのですが、
GetDIBitsの行のコメントを外すと、下記エラーが出ます・・・
「Run-Time Check Failure #2 - Stack around the variable 'binfo' was corrupted.」
なぜ、binfoが怒られているのでしょうか?
BITMAPINFO binfo;
HBITMAP hbmp = (HBITMAP)LoadImage(NULL, "Test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
BITMAP bmp;
GetObject(hbmp, sizeof(BITMAP), &bmp);
unsigned char *pixelBuf;
LONG xBytes = (bmp.bmWidth + 31) / 32 * 4;
pixelBuf = (unsigned char *)malloc(bmp.bmHeight * xBytes * 1);
binfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
binfo.bmiHeader.biHeight = bmp.bmHeight;
binfo.bmiHeader.biWidth = bmp.bmWidth;
binfo.bmiHeader.biPlanes = 1;
binfo.bmiHeader.biBitCount = 1;
binfo.bmiHeader.biSizeImage = 1;
binfo.bmiHeader.biCompression = 0;
CDC memDC;
memDC.CreateCompatibleDC(NULL);
// int ret = GetDIBits(memDC.GetSafeHdc(), hbmp, 0, bmp.bmHeight, pixelBuf, &binfo, DIB_RGB_COLORS);
free(pixelBuf);
905 :
デフォルトの名無しさん:05/02/12 18:57:13
>904
BITMAPINFOは不完全な構造体。
GetDIBitsは動的に確保したpacked DIBこそ
906 :
904:05/02/12 23:30:04
>>905 ありがとうございます
BITMAPINFOをポインタ変数で宣言し
malllocでメモリ確保したら、エラーが出なくなりました。
free()すると、何故かエラー吐きますが・・・
がんばってみます
MFCだと malloc じゃなくて new するもんじゃないの?
んで delete
908 :
??:05/02/13 22:31:56
ツールバーとスティタスバーのRECTまたはCRectを
拾いたいんだけど、pls. advise。
GetClientRectやGetWindowRectは、RECT/CRectの
戻り値が??なのです。。。 Appreciate。
910 :
デフォルトの名無しさん:05/02/13 23:00:52
>906 メモリサイズ間違いだろ?bppごとに対処法が違う。
BITMAPINFO,BITMAPINFOHEADER,GetDIBitsのMSDNページとサンプルコードを下ろせ。GetDIBitsに特殊な引数を渡したり、カラーテーブル用意したり、スキャン行数を変えるとか…。
>907 &rc
>>910 ご指摘ありがとうございます。
やはりメモリサイズが間違っていた様です。
LPBITMAPINFOHEADER lpInfo;
×lpInfo = (LPBITMAPINFOHEADER)malloc(sizeof(BITMAPINFOHEADER));
○lpInfo = (LPBITMAPINFOHEADER)malloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
これでfree(lpInfo)が通る様になりましたm(_ _)m
一つ質問があるのですが、
CRichEditCtrlは、任意の場所に文字列を挿入するということはできないのでしょうか?
もしできるなら、その際に使用する関数(方法)を教えていただきたいのですが。
宜しくお願いいたします。
おまえには出来ない
MFCでイベントループを使うことはできますか?
CRichEditの表示倍率って変えられないのかな。
或いは任意の解像度のDC作成する方法とか。
あったら教えてくださいおながいします。
無い
AL-Mail32 (www.almail.com) というメーラがあり、その公開仕様(Cの
コールバック関数群)に沿ってpluginを開発してます。
既に多数のpluginが公開されていて、自分でも作ってみましたが意図した
ように動かず困っています。
スレ違いでしょうか?
コンパイルエラーや実行時エラーはなく、とあるメニュー項目をグレイアウト
したいのに変わらない、といった内容です。
うん、スレ違い
開発停止してるのかな?
そういうスレは見あたらないね
そうですか。
もう少し自分でデバッグしてみることにします。
ありがとうございました。
メニュー項目ってダイアログに付けたメニュー?
それともフレームに付けるメニュー?
927 :
デフォルトの名無しさん:05/02/19 20:22:19
スレ立ててみるか? しばらく
>>1 の努めがあるけど、開発中いろいろ話せるって考え方ができるなら・・・
ソフト板にスレないの?
あるなら他のプラグイン作者もいるかもしれないから
そこで情報交換できるかも。
929 :
デフォルトの名無しさん:05/02/19 21:12:07
ソフト板はユーザ
ム板はデベロッパ
てな棲み分けはあったほうがいいと思うか? それともないほうがいいと思う?
俺は・・・うーん、どっちとも言えん・・・
作者がねらーの場合は開発も含めてソフト板にでやってる場合もあるけど
そうじゃない場合は作者のサイト、ユーザーグループ、メーリングリストとかが
どこかに存在するはず。
GetDlgItemの戻り値はホントに
aButton = (CButton*)etDlgItem(IDD_HOGE);
こんな感じでキャストしても大丈夫なんだよな?
デバッガで見るとC戻り値の型がCTempWndだし
dynamic_castも駄目だし、DYNAMIC_DOWNCASTでも変換できないし、なぜ???
>>931 class A
{
public:
HWND h;
};
class B : public A
{
public:
HWND get_handle() { return h; }
};
A a;
B* pb = (B*)&a;
HWND h = pb->get_handle(); // a.hが返る
というのと同じ。
C++的には良くないやり方だと思うが。
教えてくだちい。
通常のexeで、UIスレッドから測定のためのワーカスレッドを
生成しています。そのワーカスレッドの作業状況をステータスバー
に表示するためにUIスレッドのメインウィンドウにユーザ定義の
メッセージ(WM_UPDATESTATUSBARみたいなの)を投げている
のですが、これをPostMessageでやるとOKなのですがSendMessage
でやると固まってしまいます。いくつか書籍も読んだのですが、
SendMessageすると呼び出しが帰ってくるまではワーカスレッドは
スリープ状態になるが固まってしまう現象は報告されていません。
ご教授お願いいたします。。。
934 :
デフォルトの名無しさん:05/02/20 02:32:10
ageさせてくだちい
SendMessageは投げたメッセージが処理されるまで待つ
PostMessageはキューに投げるだけ
>>935 レスどうもありがとうございます。
そうなのですが、そのSendMessageしたメッセージのハンドラではたいした
作業はしてないのです。(ステータスバーをリフレッシュするだけ)
すぐに制御が帰ってくるはずなのでフリーズするのはおかしい
と思うのですが。。。
計測スレッドからリフレッシュというのはどう実装してる?
もしUIスレッドのメソッドを呼び出してるのだとしたら
ちゃんとHWND渡してる?
レスありがとうございます。遅れますた
>>937 ::AfxGetApp()->GetMainWnd()->SendMessage(WM_UPDATESTATUSBAR, ...)
みたいな感じでメッセージを投げています。(WM_UPDATESTATUSBARはユーザメッセージ
です)
>>938 WaitForSingleObjectで測定終了を待っていました。これが原因のようです。
教えていただいたMSDN読んだのですがデッドロックの項目にWait〜の件は
書かれてないですね。
Win32マルチスレッドプログラミングという書籍も読んだのですがやはり書かれて
ませんでした。
Wait〜で待っている以上、SendMessageといえどもOSはCPU時間を割いてくれないのですね。
勉強になりますた。
レスくださったみなさんどうもありがとうございました。。。
940 :
デフォルトの名無しさん:05/02/20 15:55:12
質問です。VC++にて開発中です。
クラスウィザードでCEdtiにint型の変数を設定すると、
実行時にDoDataExchangeで以下のような警告が出力されます。
Warning: initial dialog data is out of range.
変数の範囲を1-9999にすると警告が出ます。0-9999だと出ません。
解決方法をご存知の方がいらっしゃいましたらお願いします。
>>940 コンストラクタで1(つーか自分の指定した範囲内の数値)を入れて味噌。
941とかぶっちゃいましたが
意図するところは同じです orz
>>941, 942
解決しました。ありがとうございました。
945 :
??:05/02/20 20:40:01
AppWizardで自動生成されるWindowsメニューでの
IDR_MAINFRAMEの、
MENUITEM "ツール バー(&T)", ID_VIEW_TOOLBARや、
MENUITEM "ステータス バー(&S)", ID_VIEW_STATUS_BAR
は、MFCのどこでハンドルされているのでしょうか?
−− 消去や再表示など。
又はデバッガでトレースする方法(適当なブレーク
ポイントなど)を教えて下さい。
>>945 MFCソース内をID_VIEW_TOOLBARやID_VIEW_STATUS_BARで検索してみる気はないのかい?
>>946 検索する気がないから尋ねているんです。
ワロス
949 :
デフォルトの名無しさん:05/02/21 22:22:14
主張としては正当だね。
回答者も答えるかどうかで自らの主張を示せばいい。
CWinThreadの派生クラスを作ってCreateThread(0,0)を呼び出すとRun()が
動き始めるんですが、これをワーカースレッドとして使うのは問題ないですか?
>>953 多分永遠にメッセージを待つことになるのでスレッドが終わらなくなる。
InitInstanceがFALSEを返せばRunは呼ばれない。
>>954 そうなんですか・・・ありがとう御座います。
続けざまの質問且つCWinThreadの理解不足で申し訳ないのですが、
CWinThread::CreateThreadというのはどういう用途で使われるのでしょうか?
AfxBeginThreadのようにスレッド関数のポインタを渡したりはしないのですよね?
>>955 以下、MSDN
| 呼び出したプロセスのアドレス空間内で実行されるスレッドを作成します。
| 1 ステップでスレッドを作成し実行するには AfxBeginThread 関数を使います。
| 連続したスレッドの作成とスレッドの実行を繰り返すときに
| スレッド オブジェクトを再利用したいときは CreateThread を使います。
>>956 私もそれはMSDNで読んだのですが、どうも下記の
| 連続したスレッドの作成とスレッドの実行を繰り返すときに
| スレッド オブジェクトを再利用したいときは CreateThread を使います。
この意味がよくわからなかったんですよね・・・。
CreateThreadを呼び出す事でどのスレッドが起動されるのかと言う所が
わからないと言った感じです。抽象的な物言いで申し訳ありません。
MFCとちょっと離れるかもしれませんが・・・
CString str = "0x12345678";
これをDWORD型に格納したいのですが、
何か良い関数等ありますでしょうか?
テキストファイルに出力された値を読み込みたいのですが…
strtolか・・・
失礼しました。
960 :
デフォルトの名無しさん:05/02/22 20:20:07
StrToInt
>>957 AfxBeginThread() って、
CWinThread 作って CreateThread 呼び出すくらいしか
やってなくて、で生成したスレッドが実行するのは
ワーカースレッド: AfxBeginThread に渡した関数
インタフェーススレッド:_AfxThreadEntry() 関数(非公開)
この _AfxThreadEntry() の中で、CWinThread の InitInstance() だの
Run() だのが呼び出されてる。
>>961 成る程ですね!ありがとうございました。
963 :
デフォルトの名無しさん:05/02/23 18:07:52
すいません、質問なのですがスプリットウィンドウの幅を動的に変更するにはどの様にすれば良いのでしょうか?
自己解決しました
VC++6.0を使ってます。
ファイルの読み込み中など、モーダルなダイアログを出して
逐次表示を更新→終わったら即ダイアログ閉 をやりたいのですが、
CDialog::DoModal()で呼び出すとどこに実行が移るのかわかりません。
DoDataExchange()だとウインドウを開いたときと閉じるときに2回実行されてうまくないです。
いちいちOKボタンを押してダイアログを閉じるのも嫌です。
こういう場合は自分でメンバ関数を作って、CDialog::Create()、CDialog::ShowWindow()したあと
そのメンバ関数を呼び出すのがいいのでしょうか?
いちいちお前の日本語モドキを解読して答えるのも嫌です。
>>965 だね。DoModalするとダイアログ側に実行権が移っちゃうんで。
逐次表示を更新ならスレッド作らないとだめだな
SetTimer(1,1000,NULL);
for (aPlaying = TRUE; aPlaying; ) {
//Do somethig
if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}
Sleep(1);
}
こんな感じで擬似スレッドつくれば?
そんな無茶苦茶な設計にするより、素直にスレッド使ったほうがすっきりする。
972 :
デフォルトの名無しさん:05/02/24 23:30:29
クソスレ立てんなヴォケ!!
ちょっとワロってしまった…
これで画面に表示してある、
例えば「1」「2」「3」「4」「5」という文字をを識別して表示するみたいな事って出来るんでしょうか?
できるよ
意味がわからん
画像処理?
ワンパターンマッチング?
MFCを始めたばかりの若造です。
CText(ラベルという?)に表示されている文字を画面から
はみ出たら改行されるようにしたいのですが、設定の仕
方が分かりません。
大きな文字をウィンドウ上に表示したいのですが、
SetFontでフォントサイズを大きくしたのですが、
ウィンドウ上に収まりきらない文字の場合、文字
切れしてしまいます。
これを解決する良い方法はないのでしょうか?
>979
スタティックテキストです。
スマソ
これは通常内部でいじったりはしないのですか?
MFCならプロパティに改行って項目が普通にあった気がしたが?
>>983 ないから質問してるんです
知らない人は黙っててください
つーか、改行使う理由が分からない。
つーかデフォルトで勝手に改行されはずなんだけど。
方法を変えてDrawTextで対応してみます。
MFCを行うのは初めてで、どのやり方が一番適切か
分からなかったため聞きました。
ありがとうございました。