トップページ⇒tech
987コメント301KB

■ MFC相談室 MFC12.dll■

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/

関連リンクは >>2-10 の辺り。
0002デフォルトの名無しさんNGNG
>>1 訂正
>■ VisualC++(MFC限定)相談室 MFC10.dll■
■ VisualC++(MFC限定)相談室 MFC11.dll■
0003デフォルトの名無しさんNGNG
>>2 さらに訂正
>■ VisualC++(MFC限定)相談室 MFC11.dll■
■ MFC相談室 MFC11.dll■
0004デフォルトの名無しさんNGNG
過去スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc2.2ch.net/test/read.cgi/tech/1062098350/
■ VisualC++(MFC限定)相談室 MFC8.dll■ (スレタイ壊れているけど前スレ)
http://pc2.2ch.net/test/read.cgi/tech/1056584836/
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc2.2ch.net/test/read.cgi/tech/1047949606/l50
■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc2.2ch.net/test/read.cgi/tech/1039607377/
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/tech/kako/1028/10285/1028553308.html
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/tech/kako/1021/10216/1021620974.html
■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/tech/kako/1014/10140/1014057520.html
■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/tech/kako/1008/10080/1008031675.html
■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/tech/kako/989/989902845.html
0005デフォルトの名無しさんNGNG
MFCってもうすぐなくなるそうですが、本当ですか?
0006デフォルトの名無しさんNGNG
>>1
乙
0007デフォルトの名無しさんNGNG
>>5
本当です。
0008デフォルトの名無しさんNGNG
MFC42.DLL
   シニ

で命運尽きたと見るべきだろう
0009デフォルトの名無しさんNGNG
>>8
いつの時代の話だ。
いまはMFC70.dllだぞ。
0010デフォルトの名無しさんNGNG
>>5, 7-8
これテンプレの一部かと思って貼ったんだけど違ったのかな?
0011デフォルトの名無しさん NGNG
突然質問で失礼します。
CDialogの継承クラスにおいて
ワーカスレッドからメインスレッドに15msecおきに
SendNotifyでユーザ定義メッセージを送って
関数を実行させようとしています
しかし、どうしてもランダムに
200msec前後の遅延が発生します
どうにか15msecぐらい間隔で目的の関数を
呼び出すことはできないでしょうか?
どうか、アドバイスをよろしくお願いします
0012デフォルトの名無しさんNGNG
>>11
厳密なタイマーを使うには、マルチメディアタイマー関数を使うしかない。
しかし、200mSecも遅延しているから、そういう問題じゃないと思う。
多分、メッセージループのコールバックで時間がかかっている。
過剰な描画要求・過剰な計算をコールバックプロシージャで行っていないか確認するのが先決。
マルチスレッドにできるかどうか検討するのはその後。
0013デフォルトの名無しさんNGNG
>>12
アドバイスありがとうございます
2chは初めてで、嫌悪感をもってましたが
思い切って質問してよかったです。
0014デフォルトの名無しさんNGNG
>>13
一言余計
0015デフォルトの名無しさんNGNG
>>13
http://pc5.2ch.net/test/read.cgi/tech/1095534704/320-
マルチ。おまえに嫌悪感を抱いた。
0016デフォルトの名無しさんNGNG
ATL スレとこちらと、どちらの質問が妥当か迷ったのですが
こちらに書き込みさせていただきます。

Visual C++ で MFC を使ったアプリケーションを作成しています。
IE コンポーネント(IWebBrowser2)を貼り付けて、
そこから(ExecWB で)印刷を行わせているのですが
印刷完了イベントのようなものはないのでしょうか?

DWebBrowserEvents2 には該当するような
イベントを見つけることが出来ませんでした。

なにか OLE 汎用のイベントのようなものがあるのでしょうか。
よろしくお願いします。
0017デフォルトの名無しさんNGNG
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環境では使えないし、何よりたかが日本語の
インクリメンタル検索でこんなに手間がかかるのは直感的におかしいと
思うので、誰かいい方法をご存知の方がいらっしゃったら教えてください。
001817NGNG
WM_IME_COMPOSITOIN→WM_IME_COMPOSITIONでした。
0019デフォルトの名無しさんNGNG
>>14
マルチメディアタイマを使ってみたのですが
コールバック関数内で呼び出している関数が
イベント発生時に呼び出されていないように
見える現象が10000回に一度程度発生します
一度発生すると5回前後スルーされているようです
イベントインターバルを100msec、
コールバック関数内の処理を軽くしても改善されません
どうしてでしょうか?
心当たりがありましたらアドバイスよろしくお願いします。
0020デフォルトの名無しさんNGNG
>>19
http://pc5.2ch.net/test/read.cgi/tech/1095534704/337
0021デフォルトの名無しさんNGNG

起動したプログラムの絶対パスがわかる方法ありますかね?
自分で調べればいいのですがどうも見つからなくて、わかりません
全てのディレクトリを検索する場合だとうまくないのでいい方法ご教授おねがいします
0022デフォルトの名無しさんNGNG
>>21
GetModuleFileName
0023デフォルトの名無しさんNGNG
VC++6.0を使っています。
子ウィンドウにタブとかスライダーなどいろいろ配置したいのですが
何かいい方法ってあるでしょうか?
プロパティシートを使えばとも思いましたが、[OK]ボタン等が必要ないので
他の方法を考えております。
いい方法をご存知の方、アドバイスよろしくお願いします。
0024デフォルトの名無しさんNGNG
本読め
0025デフォルトの名無しさんNGNG
いい方法はないです。
サイズの変更がめんどくさいなら、タブに WS_MAXIMIZE
0026デフォルトの名無しさんNGNG
CFormViewじゃいかんの?
0027デフォルトの名無しさんNGNG
DLLを作り終わってから、ATLクラスはC++呼び出しで直接インスタンス化できないことを
知りましたorz

COMのDLLにするときには、ATLオブジェクトは利用したいクラスをラップする形で実装するのが
デザインとして正しいんでしょうか?
たとえば、通常のクラスHogeがあったとして、ATLオブジェクトCHogeを派生させるのが正しい
使い方でしょうか。

0028デフォルトの名無しさんNGNG
>>27
ウィザードが作った雛形どおりにすればよいと思う。
0029デフォルトの名無しさんNGNG
>>28
ATLオブジェクトに内部的なメソッドも実装してしまって、VC++からでもCOM呼び出しで使うようにすべきだ、
という理解でいいんでしょうか。
DLLにATLでないクラスも定義している場合なんかは、デフォルトで作られるヘッダファイルでは
それらが利用できませんよね?

あ、ひょっとしてそのヘッダに書き加えればいいのか?
0030デフォルトの名無しさんNGNG
内部的なクラスはCOMオブジェクトにする必要はない。
外部から使用される対象のクラスをCOMオブジェクトにすればよい。
0031デフォルトの名無しさんNGNG
CtreeCtrlを使ってあるデータを階層上に表現したいのですが
あるサンプルを見ながら書いてみたのですが"+","-"が表示されません。
そのソースを見る限りでは
InsertItem("asfd", 0, 0, hParent );
InsertItem("", 0, 0, hParent );
これだけで+マークが表示されてるようですが。
同じようにやっているつもりでも表示されません
なんでですか?

0032デフォルトの名無しさんNGNG
31
TreeControlのプロパティを 「ボタンあり」
または
windowスタイル += TVS_HASBUTTONS
のどちらか。
0033デフォルトの名無しさんNGNG
CEditクラスの変数を、リソースエディタでダイアログに張り付けるようにしないで、
ダイアログクラスのメンバとして確保しました。その後、ダイアログクラスの
OnInitDialog()でCEdit型変数のCreate()を呼び出してものっぺりとしてしまって
リソースエディタで張り付けたときのような窪みを作れません。どうやったら
窪みを付けられますか?実際のCreateは以下のようにしてます。

 m_cEdit.Create(WS_VISIBLE|ES_WANTRETURN|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE,
cRect, this, IDC_ED_TEST);
0034デフォルトの名無しさんNGNG
>>33
WS_EX_CLIENTEDGEあたりじゃないのかなぁ
003533NGNG
>>34
とりあえず
 m_cEdit.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
 m_cEdit.ShowWindow(SW_SHOW);
を直後に入れてみましたが相も変わらずです。@WinXPSP1 VC6SP6
0036デフォルトの名無しさんNGNG
WS_BORDER
0037デフォルトの名無しさんNGNG
拡張スタイルは CreateWindowEx で指定できて
CreateWindowで指定できないよな
003833NGNG
とりあえず自前の派生クラスを作成し、PreCreateWindow(CREATESTRUCT& cs)で
 cx.dwStyleEx|=WS_EX_CLIENTEDGE;
としたところ無事に窪みが発生しました。

CreateWindowEx()の方は引数をどうしたらいいのかさっぱりです
0039デフォルトの名無しさんNGNG
MFCならCWnd::CreateEx
0040デフォルトの名無しさんNGNG
>>39 は?
0041デフォルトの名無しさんNGNG
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 はだめなのでしょうか?
004241NGNG
すいません、
環境:Visual Studio .NET 2002 です
0043デフォルトの名無しさんNGNG
MFCの例外スローを使わないようにするのが一番手軽なのだが。
0044デフォルトの名無しさんNGNG
ところで、try〜catchとTRY〜CATCHって、いまはtryのほうがいいんですよね?

マクロと機能がかぶってるのって、どっちつかうか迷う。
0045デフォルトの名無しさんNGNG
>>41
文字列リソースのAFX_IDP_FILE_NOT_FOUNDが見つからないから。
debugモードだとアサート出なかったか?
0046デフォルトの名無しさんNGNG
スタティックリンクにするなら、アプリのリソースから、ライブラリのリソースをインクルードしなきゃ。
004741NGNG
>>43-46
afxres.rc をコピーしてきてプロジェクトに加えたら、
うまくいきました!
どうもです。
004841NGNG
>>47
コピーじゃくてインクルードするのがいいですね。
すいません。
004917NGNG
誰かわかる方いらっしゃらないですか〜?
なんだかとてもよくありそうな処理の気がするんですが。

ちなみに今はWM_IME_COMPOSITIONでGCS_RESULTSTRが
立ってるとき(変換確定)に確定文字列の長さを数えて、
その分だけWM_CHARを無視する方法に変えました(CEで
WM_IME_CHARが送られないため)。

でも相変わらずUnicode依存だし(今回はそれでいいんですが)、
直感的に「この処理は汚い」と思うので、アドバイスいただけたら
うれしいです。または、「前そんな処理やったけどそれしか方法が
なかった」というのでもいいです。
0050デフォルトの名無しさんNGNG
分割ウィンドウを作るときに、createviewで各ビューのサイズを設定して
いるんですが、1行2列で一列目がさらに2行に分割されているような
ウィンドウを作る場合、1列めの二つのビューの列幅がどうしても極狭に
なります。これを任意の幅にしたい場合、ウィンドウを作ったあとにリサイズ
するしか方法はないでしょうか?
0051デフォルトの名無しさんNGNG
CreateViewの前後に SetColumnInfo とか SetRowInfo 使うらしいです
0052デフォルトの名無しさんNGNG
>>51
やっぱそれしかないですか・・・
せっかくサイズ設定できるのに、あとでSetColumnInfo とかつかうと
なんか二度手間でかっこわるいんですよねぇ・・・
0053デフォルトの名無しさんNGNG
CDocumentなんてデフォルトコンストラクタがprotectedなのにオブジェクトの生成が
できるの?
ったく、わけわかんね
0054デフォルトの名無しさんNGNG
CRuntimeClass::CreateObject
0055デフォルトの名無しさんNGNG
CSplitterWndでフレームを分割しているのですが、サイズを可変できる必要はないので
サイズを固定し、分割ウィンドウの境界線を補足したいのですがどうすればいいのですか?
0056デフォルトの名無しさんNGNG
>>55
サイズ変更しないんなら単にペインを子ウィンドウとして配置するだけだと思うが。
0057デフォルトの名無しさんNGNG
>>56
なにをキーワードにMSDNを引けばいいの?
0058デフォルトの名無しさんNGNG
>>57
・・・。
CWnd・・・かな・・・。
0059デフォルトの名無しさんNGNG
タブコントロール内のタブページの領域の大きさを取得する
方法ってありますか?
0060デフォルトの名無しさんNGNG
>>55
CSplitterWndを入力禁止にするのはどう?
0061デフォルトの名無しさんNGNG
>>60
アドバイス頂けるのはありがたいでのすが、造語?を使われると意味がわかりません。
入力禁止ってなんですか?
0062デフォルトの名無しさんNGNG
ぇー、EnableWindow(FALSE) のこと。
0063デフォルトの名無しさんNGNG
::EnableWindow(m_wndSplitter.m_hWnd,FALSE);
すると、スクロールも出来なくなりました
0064デフォルトの名無しさんNGNG
少し自分でも試行錯誤してみたら?
0065デフォルトの名無しさんNGNG
なんじゃそりゃ
わかないならはなっから口出しすなよ、ぼけ
0066おれおれNGNG
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);
}
0067デフォルトの名無しさんNGNG
>>66
これだけだとマウスカーソルの変化が食い止められないです
006867NGNG
失礼しました、直りました。
0069デフォルトの名無しさんNGNG
CFileDialogクラスを使用して
フォルダのみ選択できるダイアログを作りたいのですが

OnFolderChange関数をオーバーライドして、
選択中のフォルダ名は取得できるようになったのですが、
ファイルを選択しているわけではないので、開くボタンを押してもダイアログを閉じられません

どういう方法でダイアログを閉じる事ができるんでしょうか
0070デフォルトの名無しさんNGNG
>>69
開くボタンに対するイベントハンドラ作れば
0071デフォルトの名無しさんNGNG
http://ahiru2.zive.net/joyful/img/3951.zip
http://ahiru2.zive.net/joyful/img/3944.zip
007269NGNG
>>70
そういわれればそうですね
やり方がよくわからないんですが
サブクラス化とか使わないとだめっぽいですかね

やった事ないですが調べつつやってみます
0073デフォルトの名無しさんNGNG
>>69
フォルダ選択だけが目的なら
SHBrowseForFolder使うのは?
0074デフォルトの名無しさんNGNG
>>73

私もググってみたところそのやり方を見つけたのですが、
なるべくCFileDialogと見た目を近づけたいので質問しました

CFileDialogでやってみてダメならその方向でいこうと思います
007569NGNG
色々やってみましたがダメでした・・・OTL

素直にSHBrowseForFolderで行きます

・・なんでFolderDialogみたいなクラスないんだろ・・
0076デフォルトの名無しさんNGNG
そこでWTLって言いたいけどスレ違いだから言わない
0077デフォルトの名無しさんNGNG
WTLなんて糞みたいなライブリつかえるかよ
ATL、MFC、VCLすべて糞だよ

自作のフレームワークでOK
0078デフォルトの名無しさんNGNG
>>77が一番クソ
0079デフォルトの名無しさんNGNG
なにを根拠に?
0080デフォルトの名無しさんNGNG
用途と機能を限定してコンパクトにまとめた
ライブラリを作るのもアリだと思うけど

よっぽど出来がよくない限り仕事には使えんわな
0081デフォルトの名無しさんNGNG
>>79
既存の他人が作ったライブラリは使いこなせず
自作の物しか理解できない典型的な無能タイプでしょ。
0082デフォルトの名無しさんNGNG
Classwizardでエディットボックスの最小値、最大値を
設定したのですが、
ボタンが押されたときに、エディットボックスに範囲外の値が入力されているか
知りたいのですが、どのようにしたらよいのでしょうか。

0083デフォルトの名無しさんNGNG
>>82
入門書持ってる?
本見ながらやればできる。
0084デフォルトの名無しさんNGNG
>82
検索のヒント。
・UpdateData()
・DDX
0085デフォルトの名無しさんNGNG
>>84
ヒントになってないと思う。
DDXなんてわざわざ学習する必要ないし。
初心者相手にムダで遠回りな回答するのは止めろ。
悪質だぞ。
0086デフォルトの名無しさんNGNG
そういうブラックボックスがあることくらい知っておいてもばちは当たらんと思うが。
あーそうか、自分が知らなかったもんだから必死なのか。
0087デフォルトの名無しさんNGNG
>>82
ボタンが押されたときに、エディットボックスに範囲外の値が入力されているか調べるようにする。
0088デフォルトの名無しさんNGNG
CString tmp="a\nb\nc\n";
とかやった後
tmp中の改行コードを"\n"という文字列に変換してくれるクラス関数はありますか?
0089デフォルトの名無しさんNGNG
>>88
MSDNでCStringのメンバ眺めろよ
CString::Replace

と言いたい所だけど2バイト文字を考慮しないバグがあった気がする。
0090デフォルトの名無しさんNGNG
条件あげない方も悪いんだろうけどバージョン依存のある関数名を
当たり前のように出してしまうのもどうかと思う
0091デフォルトの名無しさんNGNG
Excelでコピーや切り取りをした時のようなアニメーションする点線はどのように表示すればよいのでしょうか?

CPenの種類を見てみましたがありませんでした。
0092デフォルトの名無しさんNGNG
std:mbcstring とかが有ればなぁ。。。
0093デフォルトの名無しさんNGNG
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();
}
009493NGNG
# 肝心の質問忘れた orz
【質問】
BitBlt() は 1 を返しますがウィンドウは灰色のままです。
どこがマズいのでしょうか?
0095デフォルトの名無しさんNGNG
>>93
> mydc = this->CreateCompatibleDC(NULL);
これコンパイル通らんだろ。
あと裏画面用のビットマップはどこ?
009693NGNG
>>95
はぅ!すいません。
mydc.CreateCompatibleDC(NULL);
でした。

あと、ビットマップはビットマップファイル(.bmp)では無く
DC上に描画したグラフ画像のことです。分かり難くてすいません。
実際には
mydc.MoveTo();
mydc.LineTo();
で色々描いてますが今回はテストのためFillSolidRect()を使いました。
(これでも豆腐が描画できるはずですよね?)
0097デフォルトの名無しさんNGNG
>>96
いやそういうことじゃなくて、裏DCが描画する領域のこと。
作成したDCに最初に選択されているのは1x1のモノクロビットマップ。
だから必要な大きさのビットマップを作ってSelectObjectしないと。
009893NGNG
>>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); //追加
でできました。
きっとはじめから見越されてたんでしょうね・・・本当にありがとうございました。
0099デフォルトの名無しさんNGNG
割り込むようですいません。
いろいろ調べたけど、どうしても分からないので質問させてもらいます。

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
です
0100デフォルトの名無しさんNGNG
(LPCTSTR)IDI_ICON1
0101デフォルトの名無しさんNGNG
>>100
(LPCTRSTR)
をなくしてもだめでした。
0102デフォルトの名無しさんNGNG
>>99
AfxGetApp()->LoadIconで有効なアイコンハンドルが得られているか確認。
image_list.Addの戻り値を確認。
これ基本。
0103デフォルトの名無しさんNGNG
AfxGetApp()->LoadIcon( IDI_ICON1 );
だと読み込み失敗で、
AfxGetApp()->LoadIcon( (LPCTSTR)IDI_ICON1 );
だと読み込みが成功していました。
でも、後者でも表示されませんでした
0104デフォルトの名無しさんNGNG
CWinApp::LoadIconはUINTもオーバーロードしてるからIDだけでも失敗しないと思うんだけど、
根本的な問題はCImageList image_list;がローカルにあるのでスコープを抜けると破棄されること。
0105デフォルトの名無しさんNGNG
>>104
ありがとうございました!!
image_listをメンバ変数に加えたら成功しました。!!
0106デフォルトの名無しさんNGNG
よくあるよな。ハンドルとかアドレスで登録する関数のスコープに関する問題。
関数説明ドキュメントのどこにも「ローカル変数を指定しないで下さい。」とは書かれてないので、
入門者が必ず一度は通る落とし穴だ。
0107デフォルトの名無しさんNGNG
ややこしいんだよなぁ。
CDC::SelectClipRgn はコピーを使うから元のオブジェクトは削除しなきゃいけないし。
CWnd::SetWindowRgn はオブジェクトをそのまま使うから削除しちゃいけないし。
0108デフォルトの名無しさんNGNG
>>107 また見当はずれの馬鹿が北・・・
0109デフォルトの名無しさんNGNG
WindowsXP
VisualC++.NET 2003

CTeeCtrlでチェックボックス付きのツリーを作ってます。
任意の階層のチェックをした時に、そのアイテム以下の階層を
全部グレー表示というか操作できないようにさせたいのですが
良い方法は無いでしょうか?
0110デフォルトの名無しさんNGNG
そのアイテム以下をクリックしたら何もしないようにする
0111109NGNG
CTeeCtrlになってるよorz

>>110
見た目も変えたいです。
説明悪くて申し訳ないです。
0112デフォルトの名無しさんNGNG
ツリーアイテムにアイテムが有効/無効を示すフラグを持たせ、
フラグがfalseの場合はカスタムドローかなにかでアイテムをグレーに描画し、
アイテムをクリックしても何もしないようにする。
フラグがtrueの場合は通常処理。
と思いつきで答えてみる。
0113デフォルトの名無しさんNGNG
ダイアログベースのアプリ作ってんですけど、ランダムなタイミングでダイアログ全体が
再描画されます。原因わかる人いませんか?
まだコントロールを並べて動きを考えているだけで中身は全然ないんですが...

怪しいのはコントロールやメインダイアログの中に貼った子ダイアログとかを
MoveWindowやShowWindow、UpdateWindowで動かしたり表示切り替えしてることぐらいです。
でも全体を再描画するようなコードは書いてないし、発生タイミングも全然違うみたい。

OSが勝手に再描画をするタイミングって、制御できないんですかね?
0114デフォルトの名無しさんNGNG
ActiveXコントロール関連の相談もここでいいのかな?
もしご存じの人がいたら教えてください。

ActiveXコントロールはバージョンアップに対応するため(?)に
インターフェースを複数持てる、みたいなことを聞きかじったのですが、
MFCで作るActiveXコントロールで複数インターフェースを持たせるには
どうすればいいんでしょうか?

&

MFCで作ったActiveXコントロールをVBで使ったときに、プロパティの値を
コンボボックスで指定できるようにしたり、内容の説明の追加や項目の順序
指定をしたいのですが、どうやればできるのでしょうか?
普通に作るとすべてカスタムプロパティになってしまいます。
0115デフォルトの名無しさんNGNG
COMインターフェイスをV2用に拡張するだけじゃないの?
interface IMyControl{};
interface IMyControl2 : IMyControl{};
0116デフォルトの名無しさんNGNG
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: 未解決の外部シンボル」
のリンクエラーが発生します。
どうすればいいのでしょうか。教えてください。
0117デフォルトの名無しさんNGNG
>>116
DLLを利用する側のプロジェクトは何で作った?
0118デフォルトの名無しさんNGNG
>>117
MFCアプリケーションです
0119デフォルトの名無しさんNGNG
今日からVC++6.0でMFC(というかC++)をはじめました。とりあえず、画像ファイルを表示するSDIをつくってます。
んで、ファイルダイアログでファイルを選択して表示するところまで作ったのですが、
ファイルを選択してダイアログが消えた直後に画像が表示されなくて、ウインドウサイズ
の変更などをすると画像が表示されます。
ちなみに、ダイアログはメインのAppクラスから呼んでて、CViewの派生クラスのOnDraw()が実行されない
のが原因じゃないかなと、訳がわからないながらもいろいろ考えております。
ダイアログが消えた直後に画像を表示させるにはどうすればいいんでしょうか?
すんごく初心者の質問で申し訳ありません。

0120デフォルトの名無しさんNGNG
>>119
CWnd::Invalidate
フレームワークに従って処理すれば勝手に呼ばれたと思ったけど違ったかな…
0121デフォルトの名無しさんNGNG
CListViewの各項目を編集可能にするにはどうするの?
0122デフォルトの名無しさんNGNG
>>121
スタイルを設定する
0123デフォルトの名無しさんNGNG
>>121
ラベルしか編集できないので、各セルを編集したいならCodeGuru辺りで手頃なのを探すこと。
#最近作ったばかりだw
0124デフォルトの名無しさんNGNG
GetDocument()
ってDebugモードとReleaseモードでinlineか否かをわけてるの?
どっちもinlineでいいじゃん
0125デフォルトの名無しさんNGNG
>>124
通常、Debugビルドは最適化しないから、inline指定の有無に関わらずインライン展開されない。
0126デフォルトの名無しさんNGNG
View内の一部だけを再描画したい場合InvalidateRectで指定領域を無効化できるのですが
CxxxView::OnDrawで無効化された部分だけ再描画したいのですがどうすればいいの?
0127デフォルトの名無しさんNGNG
>>126
InvalidateRectで指定したRECTを覚えておく。
0128デフォルトの名無しさんNGNG
>>127
マジですか?
それしかないのですか?
0129デフォルトの名無しさんNGNG
>>128
CDCにクリッピング矩形を取得するメソッドがある。
0130デフォルトの名無しさんNGNG
>>126
GetUpdateRect
GetUpdateRgn
0131デフォルトの名無しさんNGNG
>>130
GetClipBox
こっちだろ
0132デフォルトの名無しさんNGNG
どっち
0133デフォルトの名無しさんNGNG
StatusBarに文字列を表示するにはCMainFrameで
m_wndStatusBar.SetPaneText(0,"hoge");
で駄目なのですか?
0134デフォルトの名無しさんNGNG
ダイアログ上に直線(メニューでいうとセパレータのような)
を引くコントロールってありますか?
0135デフォルトの名無しさんNGNG
>>134
ないと思う
DCに直接、MoveTO() してLineTo() かなぁ。
0136デフォルトの名無しさんNGNG
なんか適当なコントロール置いてサイズを調整すると線らしきものができるけど
0137デフォルトの名無しさんNGNG
>>134
高さの無いフレームとか。
0138134NGNG
>>135
>>136
アドバイスありが�dです

LineTOでやってみます

これだけの為にカスタムコントロールつくるのもどうかと
思っていたので聞いてみました

0139デフォルトの名無しさんNGNG
それだけのためにDC確保するのも馬鹿馬鹿しいと思うけど。
0140デフォルトの名無しさんNGNG
カスタムコントロール作ってもDCは確保されるじゃんよ
ばかかおめー
0141デフォルトの名無しさんNGNG
むしろそれだけのためにコード書くのが馬鹿馬鹿しいだろ
0142デフォルトの名無しさんNGNG
なら、コード書いてること自体馬鹿馬鹿しいだろ?
外注になげろよ
0143デフォルトの名無しさんNGNG
>>142
外注に金払うこと自体馬鹿馬鹿しいだろ。
仕事とって来んなよ。
0144デフォルトの名無しさんNGNG
>>134
ピクチャコントロール
Type=水平(垂直)縁取り
0145デフォルトの名無しさんNGNG
>>143
おまえばかだろ?
普通プロパーと外注だと半分くらいの費用だぞ
プログラマなんて肉体労働者は時間4000円程度で雇えるんだよ
0146デフォルトの名無しさんNGNG
CDialogBar を実行時に表示/非表示を切り替えれませんか?
0147デフォルトの名無しさんNGNG
>>140
カスタムコントロール以外の手段が書いてあるのは読めないのかな?
0148デフォルトの名無しさんNGNG
>>145
時間4000円払うこと自体馬鹿馬鹿しいだろ。
仕事とって来んなよ。
0149デフォルトの名無しさんNGNG
>>146
::SetWindowLong(
 GetDlgItem(IDD_DIALOGBAR)->m_hWnd,GWL_STYLE,
 ::GetWindowLong(GetDlgItem(IDD_DIALOGBAR)->m_hWnd,GWL_STYLE) ^ WS_VISIBLE
);
じゃ駄目かしらん?
0150デフォルトの名無しさんNGNG
>>148
おまい生きてること自体馬鹿馬鹿しいだろ。
死ねよ
0151デフォルトの名無しさんNGNG
>>149
それだけじゃ、非表示にはできないんだな〜
ここの連中も大したことないねw
0152デフォルトの名無しさんNGNG
>>150
わざわざ自殺すること自体馬鹿馬鹿しいだろ。
ボーッとしとけよ。
0153デフォルトの名無しさんNGNG
>>152
おまえら邪魔。
0154146NGNG
あの〜僕の質問はどうなったの?
0155デフォルトの名無しさんNGNG
>>154
ShowWindow(SW_HIDE);
0156146NGNG
>>155
思いつきいうのやめてくれませんか?試しました?
それだとウィンドウを最小化して最大化しないと消せません。
Invalidate()
なども試したけどNGでした。
0157デフォルトの名無しさんNGNG
Recalcなんちゃらとか言うの呼ぶんじゃねぇの?
0158デフォルトの名無しさんNGNG
>>156
なんでいちいちお前のために試さなきゃいけないんだ。
また思いつきでレスしてやるけど、
CFrameWnd::RecalcLayout()を試せ。
0159146NGNG
>>158
へぇ、ばかかとおもってたらやるじゃんw
0160デフォルトの名無しさんNGNG
>>159
あなたはこちらのスレの方がふさわしいですね。
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
0161デフォルトの名無しさんNGNG
>>160
とっちにそっちでも暴れてますよ
0162デフォルトの名無しさんNGNG
あちきのことかしらん?
0163デフォルトの名無しさんNGNG
ツールバー、ステータスバーと同じやりかたで
表示/非表示きりかえできるぞ

0164デフォルトの名無しさんNGNG
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;
}
0165デフォルトの名無しさんNGNG
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により擬似的にそのキーを入力するように
しているのですが…。

現在フォーカスの当たっている部分の指定方法が違うのでしょうか?
0166デフォルトの名無しさんNGNG
SendInput使ってみたら?
0167デフォルトの名無しさんNGNG
AfxBeginThreadで開始したスレッドの終了はどのようにして
知ることができますか?
0168165NGNG
>>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でも送信されないようです。
クリップボードか何かを使い、インプットボックスに文字列の値が
一括して挿入できれば最良なのですが…。
0169デフォルトの名無しさんNGNG
>>167
CREATE_SUSPENDEDでAfxBeginThread
CWinThread::m_bAutoDeleteをFALSEに
CWinThread::m_hThreadがシグナル状態になるまでWaitForSingleObjectで待つ
スレッドオブジェクトをdeleteする
0170デフォルトの名無しさんNGNG
>>169
謝謝
0171165NGNG
>>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回目に正常な出力が行われているので、何が原因になっているのか見当がつきません。

どなたか気付いた点がございましたら、ご教授下さい。
0172165NGNG
すみません、自己解決しました。

  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に殆ど載ってない…。
0173デフォルトの名無しさんNGNG
初心者なんですけど教えてくださいネ
水平スライダーコントロールの値がうまく取得できないんです。
VC++6.0でMFCでやってんすけどググって調べたとおり

OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
から
int iPos = pScrollBar->GetScrollPos();
で値取得して
switch(nSBCode) {
で条件分岐してるんだけど
case SB_PAGELEFT:
case SB_PAGERIGHT:
のとき、つまりスライダーのつまみをドラッグせずにつまみの近辺をクリック
したときにiPosに入ってくる値が無茶苦茶なんですよ。他の条件の時は
いいみたいなんですけど。
ちなみに同じことをスクロールバーコントロールでやると思ったとおりの
動きになります。
誰か教えて下さい。おながいします。
0174デフォルトの名無しさんNGNG
>>173
CScrollBar*はCSliderCtrl*にキャストしないとダメでは?
CSliderCtrl* pSliderCtrl = (CSliderCtrl*)pScrollBar;
int iPos = pSliderCtrl->GetPos();

あと、SB_**ってのはTB_** (同じ値がdefineされてるけど)
0175デフォルトの名無しさんNGNG
nPos使えば?
0176デフォルトの名無しさんNGNG
173はマルチポスト
以下スルーでよろぴく
0177デフォルトの名無しさんNGNG
マルチのなにがいけないの?
たくさんのところに助けを求めたほうが
解決が早いことに疑問を挟む余地はないじゃん

おまいらばか?
0178デフォルトの名無しさんNGNG
そういう自分のことしか考えないところが嫌われる原因じゃないかな。
0179デフォルトの名無しさんNGNG
つーか、マルチかどうかわざわざ調べて回って報告に来る香具師のほうがキモイ
調べるべき範囲は非現実的だし、途中でやめて帰ってきた報告が誰の役に立つのかも疑問だ
結局、自分の個人的な好みでじたばた喚いてるがきんちょそのまんまやん
腐ってもム板の住人が恥を知れやまったく
0180デフォルトの名無しさんNGNG
わざわざ調べてってか、例えばいつもC++系スレチェックしてたらどこ行っても同じ質問が書いてあったらうざいよな。
0181デフォルトの名無しさんNGNG
>>180
スルーしとけばいいだろ。
いちいち報告してる奴の方がウザイ。
0182デフォルトの名無しさんNGNG
>>180
だから、それはオマエ個人のブックマークだろうがよwww
0183デフォルトの名無しさんNGNG
なぜ報告するかというと、↑のようにマルチ厨のほとんどは逆ギレして暴れるから。
だから「こいつはマルチ(つまり関わるとDQNレスが返ってくる)なのでスルーしろ」と各スレの住人に報告されます。
0184デフォルトの名無しさんNGNG
>>183
マルチうさい
0185デフォルトの名無しさんNGNG
>>184
禿藁
0186デフォルトの名無しさんNGNG
マルチの指摘まではいいけど、逆切れされたらスルーしろよ・・・
0187デフォルトの名無しさんNGNG
もう5時間近くスルーされてるがな
0188デフォルトの名無しさんNGNG
>>186
逆切れと言うからには、自分が正だという前提があるらしいな。
誰がどこで何を聞こうが、それは個人の主権だぞ。
仮にあんたが科学的な統計調査を行っていてそこから得た相関係数に基づいて発言していても、
173という個人がこのあと無礼を働くと決めてかかるのはステレオタイプであり、
人格に対するそれを行う者こそ無礼者のレッテルを免れない。

と、ずいぶん買いかぶってやったが
おおかた某コミュニティの流行に乗って喜んでるだけの軽薄野郎だろw
0189デフォルトの名無しさんNGNG
>>188は自分が正しいと思っているんですか?
0190デフォルトの名無しさんNGNG
>>189
2行目は読んだか?
あと俺は173じゃないぜ
0191デフォルトの名無しさんNGNG
必死だなw
0192デフォルトの名無しさんNGNG
定型句のみに縮退いっちょあがり

・・・もともと定型句のみが骨子でハリボテが吹っ飛んだだけだが・・・
0193マイク ◆yrBrqfF1Ew NGNG
お前ら頭悪そうだね。
0194デフォルトの名無しさんNGNG
VS2002とVS2003でMFCのヴァージョンって違うの?
0195デフォルトの名無しさんNGNG
Oh, Yes !!
0196デフォルトの名無しさんNGNG
>>194
0.1違う
0197デフォルトの名無しさんNGNG
ビジュアルスタイルのラジオボタン(とチェックボックス)の文字の色を変えたいんだけど、
どうすればいいの?
クラシックだとOnCtlColor()でCTLCOLOR_STATICの時、色を変えたら変わったんだけど..
ラジオボタンの絵の部分はスタイルに連動させたいんで、オーナードローは使えないし。
0198デフォルトの名無しさんNGNG
>>197
ラジオボタンの文字を使わず、そこにStaticTextを貼り付ける。
イベント処理をどこまで真面目にやるかはお好みで。
0199デフォルトの名無しさんNGNG
オーナー描写ボタンをMDIの子ウインドウにつけたいのですが。
プロジェクトのアプリケーションウィザードで
MDI、基本クラスをCFormViewクラスにしてFormViewダイアログに
ボタンを配置して、OwnerDrawをtrueにして
CAboutDialogにプライベートメンバを追加して、
オーバーライドしたOnInitDialogで
VERIFY(m_editRec.AutoLoad(IDC_REC, this));
としたのですが、FormViewである子ウインドウに
ボタンが描写されません。
どうしたらようでしょうか?
0200デフォルトの名無しさんNGNG
>>199
オーナードローなんだから、自分で描画処理を記述する必要があるんでしょ。
0201デフォルトの名無しさんNGNG
描画処理をしても、描写はされないと思うがな。
0202デフォルトの名無しさんNGNG
すみませんでした。
オーナードローではなくて、CBitmapButtonでした。
0203デフォルトの名無しさんNGNG
解決しました。
0204デフォルトの名無しさんNGNG
http://www.codeproject.com/internet/winarpspoof/CBuildPacket.zip
を利用してパケットを自作するプログラムをMFCで作りたいのですが、
このCBuildPacketクラスを利用するためにはどのように設定すればいいでしょうか?
コンパイルがうまくできなくて困っています。
0205204NGNG
すいません。上のURLだとダウンロードできないので、
http://www.codeguru.com/dbfiles/get_file/CBuildPacket.zip?id=6861&lbl=CBUILDPACKET_ZIP&ds=20040331
0206デフォルトの名無しさんNGNG
multi kayo!!
0207デフォルトの名無しさんNGNG
>>206
だから何?
0208デフォルトの名無しさんNGNG
MDIの子ウインドウを消すときに呼び出されるAPIをオーバーライドしたいのですが。
どうしたらよいでしょうか?
0209デフォルトの名無しさんNGNG
>>208
OnDestroy()をオーバーライド
0210デフォルトの名無しさんNGNG
OnDestroyがMFCのクラスの中にみあたらないのですが。
0211デフォルトの名無しさんNGNG
>>210
気のせいです
0212デフォルトの名無しさんNGNG
もしかして、子ウインドウを消すときにバッファを解放するには、
CChildFrmのデクストラクタで解放したのでいいのでしょうか?
0213デフォルトの名無しさんNGNG
>>211
CWndの関数のようですが、
MDIの子ウインドウなのでCMDIChildWndかCFrameWndに関係した関数だと思うのですが。
どうでしょうか?
0214デフォルトの名無しさんNGNG
>>213
MFCの継承図をよく見ましょう。
つーか、これだけヒントがあればMSDNでも解説サイトでも見つかるだろうに。
0215デフォルトの名無しさんNGNG
・・・・・・・・・
プロパティウインドウからでないとオーバーライドできないと思い込んでました。
アドバイスありがとうございます。
CMDIChildWndもCFrameWndもCWndから派生しているということですね。
0216デフォルトの名無しさんNGNG
ところで、MFCでメインループのようなものを実現するには
どうすれば良いのでしょうか?
0217デフォルトの名無しさんNGNG
メインループ?
メッセージループじゃなくて?
0218デフォルトの名無しさんNGNG
>>216
コンソールか? afx.h
0219デフォルトの名無しさんNGNG
IEのダウンロード画面等の
1 プログレスバーあり
2 途中キャンセル可能
3 その間アニメーションが動く
を実現しようとしてます

12まではどうにかできたんですが、3のやり方がいまいちわかりません
参考になるサイト等を教えてもらえませんか

ちなみに1,2は進捗表示用のダイアログを作って、
時間のかかる処理を別スレッドで起動、
スレッドから進捗ダイアログに進捗状況を送るようにしています
こういうやり方でいいんですかね
0220デフォルトの名無しさんNGNG
アニメーションコントロールを貼り付けてaviファイルを
再生しているだけじゃないのか?そういうことではなくて?
0221デフォルトの名無しさんNGNG
ActiveXコントロールをダイアログベースではないプロジェクトで利用できないの?

CScrollViewから派生させたCGLChartViewをメインに使ってるのですが
やっぱり、CFormViewから派生させなきゃいけないの?
0222デフォルトの名無しさんNGNG
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に代入してしまうのではないのでしょうか?

0223デフォルトの名無しさんNGNG
うるせぇっての、カス。自分で考えろ。
0224デフォルトの名無しさんNGNG
>>222
そういう仕様になってるから大丈夫。
喩えて言えばこんなコード。
int setValue(int newValue)
{
int oldValue = getSystemValue();
setSystemValue(newValue);
return oldValue;
}
0225デフォルトの名無しさんNGNG
>>222
本来はこんな流れ
紺.CreateSolidBrush();
白 = dc.SelectObject(紺);
紺 = dc.SelectObject(白);
紺.DeleteObject();

紺 = を省略しているから
この流れが見えにくくなっている
入門書にあるまじき怠慢なコード
0226デフォルトの名無しさんNGNG
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
0227デフォルトの名無しさんNGNG
>>225
そんなすっとこどっこいなコードの方が問題だろ。
0228デフォルトの名無しさんNGNG
相談室にあるまじきすっとこどっこいないいがかりだな。。
0229デフォルトの名無しさんNGNG
ここのスレは役にたたんカスばっかだな。死ね。
0230デフォルトの名無しさんNGNG
マルチレス逆切れの後は荒しかよ
0231222NGNG
>224 225
ふむふむ、別にきにしなくていいんですね。ありがとうございました
0232デフォルトの名無しさんNGNG
>>230
よっぽど悔しかったんだね (プププ

まあせいぜいマルチ叩きにがんばれや
1人も逃すなよ、どうやって検出するのかは謎だがw
0233デフォルトの名無しさんNGNG
波形表示の上に小節数を表示するメジャーのようなコントロールをつけたいのですが、
そのようなコントロールをしりませんか?
0234デフォルトの名無しさんNGNG
>>233
無理矢理やるとすればCListCtrlでグリッドラインを表示するとか

波形表示とか言ってる時点で自分で描くしかないビューのような気がする
0235デフォルトの名無しさんNGNG
>無理矢理やるとすればCListCtrlでグリッドラインを表示するとか
少しきついかもしれません。

よく画像編集ソフトや波形編集そふとで画面上方にルーラーがついているのを
見るのですが、あれはActiveXコントロールなのですか?
0236デフォルトの名無しさんNGNG
違う
0237デフォルトの名無しさんNGNG
現在、MFCのCPenを使って絵を描いています
問題は描いた画面を保存(jpg,tif,bmpなど)したいのですが、、
方法をご存知の方、お教えくださいm(__)m
また複数描いて動画(aviなど)にもしたいのです。

環境はVC.net2003です
0238デフォルトの名無しさんNGNG
これってMFCの質問?
0239デフォルトの名無しさんNGNG
つーか、MFCの質問かどうか以前に、根本的に基礎が抜けている悪寒。
0240デフォルトの名無しさんNGNG
CPenを使ってるからかも知れナイチンゲール。
0241デフォルトの名無しさんNGNG
This is a pen. アライチュー。
0242デフォルトの名無しさんNGNG
MFCでダイアログ内にあるListView内のコラムのクリック検出をするのって
何か設定が必要なのでしょうか?
そのままではクリックしてもOnNotifyがコールされないのですが、
どなたか教えてください
0243デフォルトの名無しさんNGNG
>>242
ListCtrlをクラスにして、LVN_CLUMNCLICKメッセージからイベント関数を作る。
0244本田NGNG
>>237
Classes to read and write BMP, JPEG and JPEG 2000
By Tony Lin
http://www.cis.pku.edu.cn/teacher/vision/lintong/webpages/The%20Code%20Project%20-%20Classes%20to%20read%20and%20write%20BMP,%20JPEG%20and%20JPEG%202000%20-%20Bitmaps%20&%20Palettes.htm
0245デフォルトの名無しさんNGNG
MFCでCImage使えなかったっけ。
0246本田NGNG
>>237
>>245
>MFCでCImage使えなかったっけ。
使えるみたい。
CImage クラス
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/vcrefCImage.asp
0247デフォルトの名無しさんNGNG
CImageってGDI+必要じゃなかったっけ?
0248本田NGNG
>>247
GDI+は必須では無いみたい。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/vcconCImageLimitationsWithEarlierOperatingSystems.asp
0249デフォルトの名無しさんNGNG
すんまそん教えて下さい。(x_x)
OnPaint()でBitBltするためにCPaintDCを使ってるんですが、
こやつはコンストラクタでBeginPaintを呼び出し無効領域を
クリップしてしまいます。
無効領域の有無によらず常に全領域をクリップするにはどう
すればいいでしょうか?

ちなみに、CDC::IntersectClipRectではダメでした。
0250デフォルトの名無しさんNGNG
>>249
CClientDC
0251249NGNG
>>250
�d
でも、OnPaint内だとCClientDC, CWindowDCはダメなんですよ。
(WM_PAINTが再発行されてループする感じ)

どうも、this->GetDC()したらダメみたい。
ちなみに環境は
W2K+VC6で、モードレスダイアログです。
0252デフォルトの名無しさんNGNG
>>251
CPaintDCはそのままで、追加でCClientDCした?
CPaintDC(BeginPaint, EndPaint)が無効領域をクリアしてるから
消したら駄目よ。
0253249NGNG
>>252
できました!
CPaintDC dc_dummy(this); //未使用
CClientDC dc(this);
のようにしたんですが、順番も関係なくインスタンスがあれば良いようです。

後学のために教えて頂きたいんですが、「〜が無効領域をクリアしてるから」は
「セットしてるから」では無くていいんですよね?今までずっとBeginPaintが
無効領域をセットしてる、と考えていたもので。
0254デフォルトの名無しさんNGNG
すみません。
CStringの使い方についてお聞きしたいのですが

CString strText;
::GetWindowText(hwnd, strText.GetBuffer(_MAX_PATH), _MAX_PATH);
strText.ReleaseBuffer();

このような使い方は妥当でしょうか?
0255デフォルトの名無しさんNGNG
ごく普通。
0256デフォルトの名無しさんNGNG
>>254
>>254
良いんじゃないの

でもCWndのGetWindowText使えばGetBufferしなくて良いよ
0257デフォルトの名無しさんNGNG
>>253
無効領域=再描画する必要がある領域。
他のウィンドウで隠された部分が現れたり、InvalidateRectが呼ばれると追加される。
無効領域があるとシステムはWM_PAINTを発行する。
0258デフォルトの名無しさんNGNG
>>0x0FF-0x100

問題ないみたいで安心しました。
ありがとうございました。

0259デフォルトの名無しさんNGNG
>>254
::GetWindowText(hwnd, strText.GetBuffer(_MAX_PATH), _MAX_PATH + 1);
0260デフォルトの名無しさんNGNG
>>無効領域=再描画する必要がある領域
...
0261デフォルトの名無しさんNGNG
質問です。
rebarのバンドにIEやエクスプローラのような、コンボボックスと移動ボタンがあるアドレスバーを作ろうとしています。
ダイアログバーにコンボボックスを乗せたのですが、このままではコンボボックスがバンドの横幅に合わせてリサイズされません。
コンボボックスの幅を自動的にバンドの長さに合わせるようにするには、どのようにすればいいでしょうか?

バンドにそのままコンボボックスを乗せればうまく行くのですが・・それでは移動ボタンが同じバンドに置けなくなってしまいます。
0262デフォルトの名無しさんNGNG
>>261
RBN_AUTOSIZEとかRBN_LAYOUTCHANGEDとかをキャッチして
自分でコンボボックスのサイズ変更をすればいいんじゃなかろうか。
0263デフォルトの名無しさんNGNG
>>262
レスありがとうございます。
やっぱり自分で処理するしか方法はないみたいですね・・・
0264デフォルトの名無しさんNGNG
ダイアログベースのピクチャボックスに対してドラックアンドドロップを使えるようにしたいのですが、
どのようにすればいいかわかりません
ダイアログ自体に対してのドロップはWM_DROPFILESで大丈夫でしたが、
ピクチャボックスなどのコントロールに対してドロップした場合には、このメッセージは送られてきませんでした。
どうしたらいいか教えていただけないでしょうか?
0265デフォルトの名無しさんNGNG
教えない。
0266デフォルトの名無しさんNGNG
>>264
PreTranslateMessage ドロップ あたりでぐぐれば?
0267デフォルトの名無しさんNGNG
親ウィンドにD&Dが許可されていたら
子にWM_DROPFILESが飛んでこない。
0268デフォルトの名無しさんNGNG
D&Dー>D&G
0269デフォルトの名無しさんNGNG
教えない。
0270デフォルトの名無しさんNGNG
あれ飛んできた。
0271264NGNG
出来ました。ありがとうございました。
0272デフォルトの名無しさんNGNG
CStringについてアドバイスをください
ifstreamなどのopenではファイル名をchar*型で指定します
ところがCString→char*変換が見当たりません。

現在はCString→std::string→char* (c_str())としています
何かよりよい方法はないでしょうか?
0273デフォルトの名無しさんNGNG
また、CString オブジェクトは次の特性を持っています。
CString オブジェクトは、連結操作で拡張できます。
CString オブジェクトは、"値を重視" します。つまり、CString を文字列へのポインタとして考えるのではなく、実際の文字列として考えます。
関数の引数 const char* や LPCTSTR の代わりに自由に CString を使うことができます。
変換演算子を使って、読み込み専用の文字配列 (C スタイルの文字列) として、文字列内の文字に直接アクセスできます。
0274デフォルトの名無しさんNGNG
OH!!
ありがとうございます
0275デフォルトの名無しさんNGNG
ifstreamにchar*を渡すopenなんてあったか?
0276デフォルトの名無しさんNGNG
>>275
自分で調べろ
0277デフォルトの名無しさんNGNG
教える気ないならレスすんな
0278デフォルトの名無しさんNGNG
>>277
だな
0279デフォルトの名無しさんNGNG
>>277-278
自分で調べろ
0280デフォルトの名無しさんNGNG
>>279
お前が>>275の為に必死こいて調べろ
0281デフォルトの名無しさんNGNG
>>280
調べなくても知ってる
0282デフォルトの名無しさんNGNG
他人に不快感を与えることのみを目的とした書き込みを 荒らし行為 と定義する
0283デフォルトの名無しさんNGNG
教えてくんウゼー
0284デフォルトの名無しさんNGNG
質問つうかつっこみなんじゃ?
0285272NGNG
basic_filebuf *open(
const char *_Filename,
ios_base::openmode _Mode
);
0286デフォルトの名無しさんNGNG
VC.net2003で以下の書き方がコンパイルできたりエラーになったりします
////////////////////////
class test
{
  int someValue
  test();
};
test::test()
{
  someValue=0;
}
////////////////////
つまりクラスの定義と実装をひとつのファイル(test.h)に書くとコンパイルエラーで、
二つのファイル(test.h,test.cpp)に分けるとコンパイルできます。

どうもMFCを使うとtest.hだけではコンパイルできなくて、コンソールアプリではコンパイル可能です
なぜかご存知のかた、ご教授ください。
0287286NGNG
someValue;
↑
訂正します
0288デフォルトの名無しさんNGNG
CStringをchar*にするには
GetBufferとReleaseBufferでいいんじゃないの
0289デフォルトの名無しさんNGNG
class test
{
  int someValue
  test() { someValue = 0; }
};
0290デフォルトの名無しさんNGNG
>286
そもそもなんで *.h に定義も突っ込もうとしてるんでしょうか?
0291286NGNG
>そもそもなんで *.h に定義も突っ込もうとしてるんでしょうか?
その方が見通しがよく、きれいな設計かと思ったのですが、、、
有名なTNT(http://math.nist.gov/tnt/index.html)はヘッダーに定義も書いてあります

はやり*.hと*.cppは分けたほうかいいのでしょうか?
0292286NGNG
>そもそもなんで *.h に定義も突っ込もうとしてるんでしょうか?
実はTNT(http://math.nist.gov/tnt/index.html)をまねてみました
TNTはヘッダーに宣言と定義を書いていて、非常に使いやすいです

ただやはり*.hと*.cppは分けるべきでしょうか?
0293286NGNG
↑すみません、書き込めていないと思って2重投稿してしまいました
申し訳ありません。
0294デフォルトの名無しさんNGNG
TNTはテンプレートだろ。
0295デフォルトの名無しさんNGNG
>>293
TNTが良いと思ったんならなんでTNTと同じようにクラス内で定義しないんだ。
TNTと違う書き方してエラーが出ますとか言われても
そら違う書き方してるんだから当たり前だろとしか答えられん。
0296デフォルトの名無しさんNGNG
>286
宣言は何回あっても構わないですが、定義は一度だけです。
*.h には宣言を、*.cpp には定義を記述します。
テンプレート周りはいろんな理由で *.h にまとめて書く場合があります。

MFCスレで聞くよりは C++ スレかくだ質で聞く方が良いのでは。
0297デフォルトの名無しさんNGNG
>>286
inline test::test()
{
...
}
まぁ上のコーディングだと意味合いが変わってくるけど、
その辺は自分で調べませう
0298デフォルトの名無しさんNGNG
>>297

コラ、もったいぶらずに教えろや。カスが。
0299286NGNG
なるほど,,,
やっぱり*hと*cppに分けて書くことにします
ありがとうございました

↑は私ではありません
0300デフォルトの名無しさんNGNG
ダイアログベースのアプリに常に最前面に表示するメニューをつけようとしてます。
UPDATE_COMMAND_UIでpCmdUI->SetCheck(TRUE);
としてるのですがメニューにチェックがつきません。
メニューはC〜Dlgの既存クラスを選択しました。
どのようにすればチェックが付けられますか?
0301デフォルトの名無しさんNGNG
がんばる
0302300NGNG
>>301
がんばってみたら出来ました。thx
0303デフォルトの名無しさんNGNG
質問です。ダイアログバーの横幅などを変えるにはどのようにしたらいいでしょうか?
0304デフォルトの名無しさんNGNG
>>303
消えろ。
0305303NGNG
>>304
消えたら出来ました。thx
0306デフォルトの名無しさんNGNG
ダイアログにメニューを関連付けて表示させたのですが、そのメニューを押してもOn〜のような関数の反応がありません。
どうしたら動いてくれるのでしょうか?
0307306NGNG
間違ってたところがわかりました。ごめんなさい。
0308telnesNGNG
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) それ以外(作り方を教えてください)
0309デフォルトの名無しさんNGNG
>>308
http://pc5.2ch.net/test/read.cgi/tech/1097880265/

マルチすなや。
0310telnesNGNG
>>309
ID無いのをいいことに勝手に人の名前語って
マルチ捏造しないように。
0311telnesNGNG
>>310
てめぇ、人の名前騙ってんじゃねぇよ。
0312デフォルトの名無しさんNGNG
厨が粘着してるよな。このスレ。
0313デフォルトの名無しさんNGNG
>・MFCを使用しなくてはならない
なら(1)でいいじゃない。
0314telnesNGNG
>>311
てめぇ、人の名前騙ってんじゃねぇよ。
ところで俺の質問早く答えろ、馬鹿が。
0315デフォルトの名無しさんNGNG
>>313
向こうで拾ってるからこっちはスルーで。
0316telnesNGNG
>>314のように暴言を吐くのは私ではないので無視を。
私はもうこちらにも書き込みません。
0317デフォルトの名無しさんNGNG
>>316
本人なら向こうのフォローをお忘れなく。
つーか、こっちのフォローより先にするべきっしょや。
0318telnesNGNG
集団痴漢現場
http://www.cty-net.ne.jp/~taitiro/imgboard/data/img20040825044524.jpg

0319デフォルトの名無しさんNGNG
Visual C++6.0MFCで開発を行っています。
エディットボックスでドラッグ&ドロップをしたいと思い
エディットボックスをサブクラス化しました。
ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/subclsi.html
上記方法でうまくいきましたが、エディットボックスを
メンバ変数として割り当てた場合、SubclassDlgItemの時に
Debug Assertion Feiledエラーが発生してしまいました。
メンバ変数として割り当てているコントロールではサブクラス化
はできないのでしょうか?
0320デフォルトの名無しさんNGNG
変な例だな。
メンバ変数の型をCMyEditにするだけで済むが。
0321デフォルトの名無しさんNGNG
>>320
なんだと。

0322デフォルトの名無しさんNGNG
>>320
それはウィザード使ってDDX利用した場合だろ。
その例はDDX使ってねーから。
0323デフォルトの名無しさんNGNG
>>309
独り言は楽しいかい?
0324デフォルトの名無しさんNGNG
釣りは楽しいかい
0325デフォルトの名無しさんNGNG
一応書いておく。
>318はVirusなど。触った人はよく手を洗うように。
0326デフォルトの名無しさんNGNG
.netのMFCでMDI&タブのエディタを作っています。
とりあえずタブを作成してみたのですがMDIの子ウィンドウの下に表示されてしまうのです。
もし解決方法ご存じの方が居たら是非教えて下さい。
0327デフォルトの名無しさんNGNG
新しいクラスを追加する際に基本クラスを無しで作りたいのですが、
プロジェクトの追加でヘッダーとcppを自分で作る以外に方法はないでしょうか?
0328デフォルトの名無しさんNGNG
ありますよ
0329デフォルトの名無しさんNGNG
>>326
タブをコントロールバーにして表示する。
0330デフォルトの名無しさんNGNG
その基本クラス無しでクラスを作成する方法をご教授ください。><
0331デフォルトの名無しさんNGNG
珍しいところでつまづくやつだな・・・。
でもVCのバージョンも言わないやつには教えてあーげない。
0332デフォルトの名無しさんNGNG
(´Д`;)
6デス6デス6デスVC++6デス
オスエテオスエテ
ミステナイデ
0333デフォルトの名無しさんNGNG
age
0334デフォルトの名無しさんNGNG
sageアンド飛鳥
0335デフォルトの名無しさんNGNG
>>329
出来ました。
どうも有り難う御座いました。
0336デフォルトの名無しさんNGNG
>>332
クラスビューで右クリックしてクラスの追加
クラスの種類をGenericクラス
に設定
0337デフォルトの名無しさんNGNG
>>336
ありがとうございます。(≧▽≦)
0338デフォルトの名無しさんNGNG
ダイアログベースで簡単な計算アプリを作っています。
その際、doModal()で子ウィンドウを生成し、そこのエディットボックスで
数値入力をしています。  このエディットボックスにスピンコントロールを
つけたのですが、挙動がおかしくなってしまいます。

通常、setRange()やsetPos()による初期設定を行なうと思いますが、
メインウィンドウのOnInitDialog()で行なう初期化は、子ウィンドウの場合は
どこで行なえばよいのでしょうか? 子ウィンドウのコンストラクタやdoModal
呼び出し元での設定を試みましたが、どれもだめでした。 
よろしくお願いします。
0339デフォルトの名無しさんNGNG
ダイアログからダイアログなんだろ
0340デフォルトの名無しさんNGNG
EditBoxとSpinPuttonのタブオーダとか
SpinButtonのスタイルとか
0341デフォルトの名無しさんNGNG
WM_SETPONT
ばいらすばすたー
0342デフォルトの名無しさんNGNG
test
0343デフォルトの名無しさんNGNG
MFCを使ってソフトを作っているのですが,
hdc = BeginPaint(hWnd, &ps);
という行は
1.GDI HDC BeginPaint(HWND, LPPAINTSTRUCT);
2.MFC CDC* BeginPaint(LPPAINTSTRUCT);
のうち,2と判断され,コンパイルできません

どうしたら1と判断されるでしょうか?
0344デフォルトの名無しさんNGNG
::
0345デフォルトの名無しさんNGNG
MFCを使ってソフトを作っているのですが,
hdc = BeginPaint(hWnd, &ps);
という行は
1.GDI HDC BeginPaint(HWND, LPPAINTSTRUCT);
2.MFC CDC* BeginPaint(LPPAINTSTRUCT);
のうち,2と判断され,コンパイルできません

どうしたら1と判断されるでしょうか?
0346デフォルトの名無しさんNGNG
頭につける
0347デフォルトの名無しさんNGNG
::BeginPaint()
0348デフォルトの名無しさんNGNG
ヅラ
0349デフォルトの名無しさんNGNG
>>345
C++ の多重定義解決は1つのスコープしか見ないんだよ
0350デフォルトの名無しさんNGNG
345です
できました!!!!!!
ありがとうございます
ヘッダーをインクルードする順番などをいじってもできなかったので,,
0351338NGNG
>>340
タブオーダーも正しく設定しました。
メインのウィンドウで正常に動作しているスピンコントロールがあるので、
それと同様のプロパティにしています。

おかしな挙動というのは、例えば m_spin.SetPos(10) としても
1回目だけ値が0になり、次からは11として動くというものです。
ちなみに、100ずつ増やす動作をさせているので、WM_VSCROLLを
処理しています。

>>339
はい、そのとおりです。 その場合どうなるのでしょうか?

0352デフォルトの名無しさんNGNG
ClassWizzardでダイアログに
OnDeltaposSpinHOGEHOGE()を生成して
(SpinButtonのUDN_DELTAPOS NOTIFYハンドラ)

//TODO: ・・・
pNMUpDown->iDelta *= 100;

とすると自動的に100ステップになる。
WM_VSCROLLの処理のしかたわからん。
0353338NGNG
>>352
この方法は知りませんでした。ありがとうございます。

しかし、子ウィンドウではだめでした。
子ウィンドウでの SetRange()やSetPos() を行なうタイミングが分かりません。
子ウィンドウのコンストラクタではやはりだめなんですよね?
0354デフォルトの名無しさんNGNG
>>353
親でやってるように子でもOnInitに書けば良いだろ
0355デフォルトの名無しさんNGNG
うっせーチンカス
0356338NGNG
できました! ありがとうございました。
ダイアログのダブルクリックで生成されたクラスのコードに
OnInitがなかったので、それを自分で書くという発想がでませんでした。
0357デフォルトの名無しさんNGNG
ScreenToClientみたいにウィンドウの座標を他のウィンドウの相対座標に直してくれる関数があったと思うんですがなんでしたっけ?
0358デフォルトの名無しさんNGNG
>>357
いいこと教えちゃう。MSDNでScreenToClientのページを見ると、
下のほうにMapWindowPointsへのリンクがある。
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_screentoclient.asp
0359デフォルトの名無しさんNGNG
>>358
気づかなかった・・・すみませんでした
0360デフォルトの名無しさんNGNG
ラジオボタンのメンバ変数がクラスウィザードで出てこないんですがそーゆーもんなんですか?
0361デフォルトの名無しさんNGNG
ラジオボタン1個だけ?
→それはチェックボックス使うべき。
0362デフォルトの名無しさんNGNG
>>360
そーゆーもん。ラジオボタンのグループに一つの変数を割り当てると考えればいい。
ボタン0を選択すると変数=0
ボタン1を選択すると変数=1
ボタン2を選択すると変数=2
という感じ。
0363デフォルトの名無しさんNGNG
VC.netのMFCです。
CReBar使ってるんですけどReBarに設定した各コントロールの位置をどうやって保存・読み込みするのか分かりません。
GetReBarCtrl().GetRect()かとも思いましたが設定する関数が見あたらないし……。
検索しても見つかりませんでした。
教えて下さい、お願いします。
0364デフォルトの名無しさんNGNG
0365デフォルトの名無しさんNGNG
ぼくダイアログだもんね
0366デフォルトの名無しさんNGNG
CToolBar のボタンにドロップダウンボタンを追加すると、
後端が切れてしまう現象で悩んでいます。
ドロップダウン属性をつけた以外のボタンのサイズも勝手に一回り大きく
なっているのが原因のようです・・・。CToolBar::SetSizeでそのサイズに変更すると、
切れなくなるのですが、ボタンが重なったり等表示がおかしくなってしまいます。
識者の方お助けください。

環境はVC7.1+XPです。
0367デフォルトの名無しさんNGNG
VC6のMFCでCStaticをサブクラス化して、
フォント、文字色、背景色を変更できるようにしています。
現在、CStaticからの派生クラスCStaticExのコンストラクタで、

HFONT hFont = (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
::GetObject(hFont, sizeof(LOGFONT), &m_LogFont);

のようにしてLOGFONT構造体を初期化しているのですが、
これを親ダイアログのフォントを引き継いでLOGFONT構造体を
初期化するにはどうしたらいいのでしょうか?
初歩的は質問だと思いますが、宜しくお願いします。
0368367NGNG
下記のようにやってみたのですが、アサート発生が発生してしまいました…
GetParent()->GetFont()->GetLogFont(&m_LogFont);
何がいけないのでしょうか?
0369デフォルトの名無しさんNGNG
↓ここでいつもの厨が登場
0370デフォルトの名無しさんNGNG
・一般的に親ダイアログにフォントは設定されていない
 ダイアログテンプレートにあるフォントは、各コントロールにはセットされているが
 ダイアログ自身にはセットされない。
なので、
1. ダイアログテンプレートを読む
2. てきとーな兄弟からフォントをゲットしてくる
くらいしか無いのではなかろうか
0371デフォルトの名無しさんNGNG
>>368
各APIの戻値を確認すれば、ここに書き込んでいる時間内に
原因がわかるだろうに。
0372367NGNG
>370
なるほど、そういうことなのですか。
ありがとうございました。 m(_ _)m

>1. ダイアログテンプレートを読む
ちなみにこれはどのようにすればよいのでしょうか?
0373367NGNG
下記のような方法でダイアログテンプレートを読み込んでみたのですが、
肝心のフォント情報へアクセスできませんでした…(;_;)

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構造体にはフォント名やサイズ情報が無いみたい…
}

ダイアログテンプレートからフォント情報を取得する方法をご存知の方、
宜しくお願いします。
0374デフォルトの名無しさんNGNG
MFCのCDialogTemplate(非公開クラス)のソース(DlgTempl.cpp)でも見てみれ。
0375367NGNG
レス、ありがとうございます。
ネットで調べたところ、LPCDLGTEMPLATE以降の構造解説があったので
参考にしたところ、無事フォント情報を取得することができました。

>374
後ほど教えていただいたソースファイルも覗いてみたいと思います。

レス下さった方々、本当にありがとうございました。
0376367NGNG
>374
CDialogTemplateクラスを試してみました。
す・すばらしいです。
苦労して同等のソースを書いたことに思わず笑ってしまいました。
CDialogTemplateクラスを使った方法で行きたいと思います。

ありがとうございました。
0377デフォルトの名無しさんNGNG
あー、CDialogTemplateその物を使えってんじゃなくて、処理を参考にしろと
いう意味だったんだが。
非公開クラスはMFCの都合で使われている物なので、MFCのバージョンが変わると
無くなる可能性もあることに注意しなよ。

って、MFC自体が(ry
0378デフォルトの名無しさんNGNG
WindowsXPでクラシックスタイルかどうかを調べる方法は
あるんでしょうか?
存知の方、宜しくお願いします。
0379デフォルトの名無しさんNGNG
あります
0380378NGNG
379様レスありがとうございます。

その方法をご教授願えないでしょうか。
お願いいたします。
0381デフォルトの名無しさんNGNG
MDIの子ウィンドウ(MDIのChildFrame)のタイトルバーのタイトルを生成時に取得したいのですが、
WM_CREATEでGetWindowTextを呼んでも上手くいきません。
WM_CREATEはどうやらタイミング的にタイトルが設定される前のようなのですが、どのタイミングでやれば上手くいくのでしょうか?
バージョンは.netです。
0382デフォルトの名無しさんNGNG
>>381
なんでタイトルのテキストを取得したいの?
0383デフォルトの名無しさんNGNG
ちがったらごめん。
CWnd::PreCreateWindow の CREATESTRUCT.lpszName で取得できるんでは?
0384デフォルトの名無しさんNGNG
>>382
そんなもん人の勝手
0385デフォルトの名無しさんNGNG
>>382
タブのエディタ作ってるので。
対応するタブに表示する文字をウィンドウと同じにしたいんです。
タイトルには開いたファイル名が表示されるので……。

>>383
試してみましたが駄目でした。
PreCreateWindow時点でのlpszNameの中身は空です。
これはMDIで子ウィンドウに表示されるファイル名は生成時に引数として渡されているのではなく、
後付でSetWindowText等が使われているという事何でしょうかね……?

タイトルの取得するのではなくOnOpenDocument等から持ってきた方が楽でしょうか。
もし何かアイデアややり方ご存じの方居たら、是非お願いします。
0386デフォルトの名無しさんNGNG
>>385
CDocument::GetTitle()は?
0387デフォルトの名無しさんNGNG
WM_CREATEで一旦DefWindowProcを行ってからGetWindowTextするとどうなる?
0388デフォルトの名無しさんNGNG
>>387
この場合のDefWindowProcとは基底クラスであるCMDIChildWndのOnCreate呼び出し、という事でしょうか?
念のため自分でOnCreate内でDefWindowProcをやってみましたが、その後に処理しても結果は同じでした。タイトルは空です。
>>386で言われているようにドキュメントの方では捕まえられるのでとりあえずはこれで行こうと思います。
ビューの方の初期化を別でやっているのであまり美しいとは言えないのですが……。
0389デフォルトの名無しさんNGNG
PreSubClassWindowとか
0390デフォルトの名無しさんNGNG
> 370 :デフォルトの名無しさん :04/11/22 14:19:06
> ・一般的に親ダイアログにフォントは設定されていない
>  ダイアログテンプレートにあるフォントは、各コントロールにはセットされているが
>  ダイアログ自身にはセットされない。

ダイアログはフォントのオーナー、WM_NCDESTROYでフォントを削除する。
フォントはWM_GETFONTで取得可。
0391デフォルトの名無しさんNGNG
Win32サービスでMFC(主にCString系とCWinThread派生クラス)を使いたいんだけど、
::AfxWinInit()をコールすれば動くんかなあ?
0392デフォルトの名無しさんNGNG
>>391
サービスの場合、初期化関数の呼び出し自体もさることながらそれを呼び出す場所も重要。
main()、WinMain()の最初で呼んでも無効なものもあるので注意汁。
0393デフォルトの名無しさんNGNG
>>391
試してみたら?
CStringなら私も使ってるからそのまま使えるはず。
#適当なインクルードとリンクをした上で。
CWinThread系は使ってないので悪しからず。
0394デフォルトの名無しさんNGNG
CViewクラスのメッセージハンドラに
たとえばOnMouseMove(UINT nFlag, CPoint point)
とかありますが,

この場合,このハンドラが呼び出される原因となった
WM_MOUSEMOVEメッセージ自体を見たい場合は
どのようにすればよいのでしょうか?
0395デフォルトの名無しさんNGNG
WindowProcでもオーバーライドすればええんじゃないかい?
0396デフォルトの名無しさんNGNG
>>395
WindowProcも引数がUINTで
ただのメッセージの識別子をとるだけですが
MSG構造体の形でメッセージを見たい場合はどうすればいいのでしょうか?

やりたいことを言ってしまうと
MSG構造体のtimeパラメータで
メッセージのポストされた時間を見たいのです
0397デフォルトの名無しさんNGNG
>>396
関数の頭でGetMessageTimeを呼ぶか、それが使えなければGetTickCountを呼ぶのはどう?
0398デフォルトの名無しさんNGNG
引数

pMsg

処理するメッセージを含む MSG 構造体へのポインタ。

解説

Windows 関数TranslateMessage やDispatchMessage にディスパッチされる前に、ウィンドウ メッセージをフィルタ処理するために、この関数をオーバーライドします。
0399デフォルトの名無しさんNGNG
C++相談室から回されて参りました:

おこんばんは、お願いいたします。
ステップ実行時、「ほにゃららDllが見つかりません」と言われます。

とあるexeから、自分の作っているdllを呼ぶ処理です。
プロジェクトの「設定」で、とあるexeを指定して、
そのexeでファイル選択をすると、
自分のdllのソースのブレークポイントで止まってくれる予定なのですが。。。


プロジェクトの「設定」のどこかに、
関連するdllを列挙する必要って、ありましたっけ?
何が設定不足なのでしょうか?
よろしくお願いいたします。


0400396NGNG
>>397
>>398
なるほど
ありがとうございます
参考にします
0401デフォルトの名無しさんNGNG
>>399
そのexeがどこにDLLがあるかわからないってことです。
exeの実行フォルダにDLLをコピーすればとりあえず動くかと。
0402デフォルトの名無しさんNGNG
あああ
0403デフォルトの名無しさんNGNG
VC++.NET2003です。
MFC拡張DLLにてCObjectから派生させたクラスをエクスポートしてます。
DEFファイルは使わずに、AFX_EXT_CLASSでクラス全部をエクスポート
してます。
WinXPProだと、AfxLoadLibrary()でHINSTANCEもらえるんですけど、
Win2KProだと、Entrypoint not foundとかって怒られて蹴られてしまう
んです。
もちろん、実装したクラス定義とクラスメソッドも対比させて見回した
んですけど足りないモノがないようで、困ってます。
こういう現象の問題として何が考えられるでしょうか?
0404デフォルトの名無しさんNGNG
DependencyWalker で調べてみたら?
2k上で。
0405デフォルトの名無しさんNGNG
>>403
解決しますた
PlatformSDKの関数で2k非対応なものがコッソリ...
VC6を2Kに入れて発覚.ちょっとブルー入りましたが
MSに一問一答\29400円也を払わずに済みました
0406デフォルトの名無しさんNGNG
GetDC(NULL)で
スクリーンのデバイスコンテキストを取得し,
デスクトップ上に落書きをしたのですが,

この落書きをクリアするなにか良い方法はあるでしょうか?
スクリーン全体を再描画したいのです
0407デフォルトの名無しさんNGNG
普通にInvalidateRect(NULL, NULL, FALSE);すれば元に戻らない?
0408デフォルトの名無しさんNGNG
ダイアログのクライアント領域を印刷しようとしています。
とりあえず画面イメージを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();

画面イメージの印刷をするには、どのようにすればいいのでしょうか?
宜しくお願いします。
0409408NGNG
すみません、失礼しました。
用紙を節約して、AcrobatでPDFで出力した結果、にじんだ印刷になっていたのですが、
なんと印字品質の設定が問題だったようです…
大変お騒がせしました。 m(_ _)m
0410デフォルトの名無しさんNGNG
ピクチャボックスコントロールに対してSetScrollInfoを使ってスクロールバーを表示したのですが、スクロールしようとしても反応してくれません。
内部的な変数が変わらないとかバーの位置が変わらないとかではなくて、クリックしても反応しないと言った感じです。
どなたか治す方法が分かる方いらっしゃいましたら、教えていただけないでしょうか?
0411デフォルトの名無しさんNGNG
>>410
メッセージハンドラは?
0412410NGNG
>>411
メッセージハンドラにも反応がないです
0413デフォルトの名無しさんNGNG
新しく作成したスレッドクラスからViewクラスポインタを取得したいのですが、
エラーが発生してうまくいきません。
インクルード文をどこに追加すればいいのでしょうか?
教えてください。お願いします。
0414デフォルトの名無しさんNGNG
必要なところにです。
0415デフォルトの名無しさんNGNG
いつもの厨が出た
0416デフォルトの名無しさんNGNG
>413
昔同じことで困ったことがあるから助けてみる。

スレッドクラスのヘッダにもビューのヘッダにも互いを include する。
その上でビューのヘッダに

class スレッドクラス;

class ビュークラス{
0417デフォルトの名無しさんNGNG
class スレッドクラス; // ←前方参照

class ビュークラス{
ビューのメンバの定義
};

と言った形で書く。
詳しくは「クラス」「前方参照」とかでググるヨロシ。
0418デフォルトの名無しさんNGNG
>>416さん 有難うございました。解決しました。
0419デフォルトの名無しさんNGNG
_beginthread()で起動したワーカースレッドの処理内で
App.CreateDispatch()を行うと失敗してしまいます。
OLEオートメーションのサーバオブジェクト作成って
ワーカースレッドからできないのでしょうか?
何かヒントでもいいのでご存知の方教えてください。お願いします。

・ビルド出力にはエラー警告は出ていません。
・VC++.NET2003、WinXP、MFCアプリ(ダイアログ)
0420デフォルトの名無しさんNGNG
>>419
ワーカスレッドでAfxWinApp()は使えないけど、ちゃんとCWinAppのポインタは取れてる?
0421デフォルトの名無しさんNGNG
スレ違いごめん
MFCN40D.dllってどこで手に入る?
0422デフォルトの名無しさんNGNG
>>420
CWinApp* pApp= AfxGetApp();
でワーカスレッド内でポインタはとれましたが
何かすべきことがあるのでしょうか?

・AfxOleInit()はInitInstance(メインスレッド)でやっています。
0423デフォルトの名無しさんNGNG
とりあえず?
_beginthread() → AfxBeginThread()
0424デフォルトの名無しさんNGNG
ワーカースレッド内でも最初にAfxOleInit()をせんといかんよ。
0425デフォルトの名無しさんNGNG
エェー。
0426410NGNG
度々すみません。
410のスクロールバーなのですが、まだ解決できません。
どなたかわかる方いらっしゃいませんか?
0427デフォルトの名無しさんNGNG
>>410
多分、Focusが合ってないから。Dialog中のControlの場合は、GotoDlgCtrl。
それ以外の場合はSetFocusで合わせれば良いかと。
0428デフォルトの名無しさんNGNG
MFCって化粧品?
0429デフォルトの名無しさんNGNG
Micro soft Foundation Cream...
細かく柔らかな下地クリームか。
0430デフォルトの名無しさんNGNG
Microsoft Funky Cinema
0431デフォルトの名無しさんNGNG
Majide Fuyouna Classtachi
0432デフォルトの名無しさんNGNG
Mike Founds Cookie
0433デフォルトの名無しさんNGNG
Microsoft Forever Congratuations
0434デフォルトの名無しさんNGNG
Microsoft Fan Club
0435デフォルトの名無しさんNGNG
Microsoft For CORBA
0436デフォルトの名無しさんNGNG
やめろ
0437デフォルトの名無しさんNGNG
>>434
ワロタ
0438デフォルトの名無しさんNGNG
VC++.NET2003を利用しています。学校で「Win32プロジェクトで
作成したSDKのプログラムをMFCに変更しなさい」という課題が
出されましたが、今までMFCを習った事がなく(前回の授業一回
のみ)検索していたのですが、わかりやすいサイトを見つける事
が出来ませんでした。「猫でもわかる〜」も参照してみたのです
が、途中で終わってしまっているようです。「SDKではこう記述
するところはMFCではこのように書く」といったような説明がさ
れているサイトがありましたら、どうかご教授ください。
それか直接教えていただけるようでしたら、課題のSDKのプログラム
(簡単な描画プログラム)をUpします。
0439デフォルトの名無しさんNGNG
>>438
正直、やっても意味の無い課題だな。
0440デフォルトの名無しさんNGNG
VS .Netはあんまり使ってないからそのまんまにはわからんけど、
・MFCアプリケーション(SDI)をウィザードに従って作成。
・ViewクラスのOnDraw(あるいはOnPaint)にその描画プログラムでの描画部を実装。
だけで済むかと。
0441デフォルトの名無しさんNGNG
なんだかしばらく前に全く同じ内容の書き込みを見たんだが・・・
0442デフォルトの名無しさんNGNG
>>440
>>441
ありがとうございます。ということは、ここで質問するのは板違い
ですね。他の場所探してみます!
0443デフォルトの名無しさんNGNG
.NETには6.0にあったプロファイラはなくなっちゃったんですか?
0444デフォルトの名無しさんNGNG
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 となってしまいます。

この理由がわかる方、ご教授お願いします。
0445デフォルトの名無しさんNGNG
LR_LOADFROMFILE | LR_CREATEDIBSECTION
で?
0446デフォルトの名無しさんNGNG
LR_CREATDIBRECTIONを追加したらどうだろ?
0447444NGNG
>>445 さん
ありがとうございます!
LR_CREATEDIBSECTION を追記したら、ちゃんと
取得できました。
0448446NGNG
プンスカプン!!!!
0449444NGNG
>>446
間違ったレス付けるヤシにお礼は言えません
0450444NGNG
>>449
誰ですか?

>>446 さん
レスありがとう。
更新せずにレス書いたために、見落としました。
すいません(^^;
0451デフォルトの名無しさんNGNG
DirectXで動くゲームよりも最前面にウィンドウを出したいのですが、
SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
とやっても、ちらちらと映るだけでうまくいきません。
どのようにすればよいのでしょうか?
0452デフォルトの名無しさんNGNG
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が拾われているのか調べる上手い方法はないでしょうか?
0453デフォルトの名無しさんNGNG
>>452
考えられることとして
・_WIN32_WINNTや_WIN32_WINDOWSの定義
 (現象から言ってこれは無いと思うが念のため)
・対象ウィンドウにフォーカスが当たっていない。
・マウスドライバ(ユーティリティソフト等も含む)が勝手にフックしている。
 (WM_MOUSEWHEELを自動的にWM_VSCROLLやWM_HSCROLLに変換してしまっている)
0454デフォルトの名無しさんNGNG
>>453
マウスドライバの設定を「Office準拠」とやらにしてみたら拾えるようになりました。ありがとうございます。

ちなみに、elecomの
http://www2.elecom.co.jp/products/M-PGUP2RGNN.html
このマウスでした。

実装ではオプションでホイールの設定を出来るようにした上で、「変更が反映されない場合はコントロール
パネルのマウスから云々…」とでもするしかないですかね。
0455453NGNG
>>454
それか、アプリごとに設定を切替可能なドライバであれば、
ユーザーにそのように設定してもらうとか

それと、ELECOMホイールユーティリティだとポインタの下にあるウィンドウに
ホイールメッセージが届きますが、MSDNに書いてある通り
本来はフォーカスが当たっていないウィンドウには届きません。
今は、この機能を実装している他社ユーティリティもありますが、
その辺も注意が必要。

ついでに
そのようなユーティリティは他社マウスでも使える場合があります。
うちのはMITSUMIマウスでELECOMのユーティリティ
0456デフォルトの名無しさんNGNG
ダイアログボックスのピクチャーコントロールに
実行中のデータを逐次表示させようとスレッドのなかで
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]です。
0457デフォルトの名無しさんNGNG
>>456
ダイアログクラスのメンバ関数版のGetDlgItem()を使えば引き数はIDC_GRAPHのみ。
0458デフォルトの名無しさんNGNG
そのメンバ関数はどうやって扱ったらよいのですか?
0459デフォルトの名無しさんNGNG
ダイアログクラスのポインタ→GetDlgItem()
0460デフォルトの名無しさんNGNG
>>458
宿題スレで、C++の基本を勉強しろと言われてなかったか?
0461デフォルトの名無しさんNGNG
UINT GraphView(LPVOID MsObjPtr){
CWnd* ptr = (CWnd *) MsObjPtr;
CEdit* h = (CEdit*)ptr->GetDlgItem(IDC_GRAPH);
CDC* pDC=h->GetDC();
で上手くいきました
0462デフォルトの名無しさんNGNG
>>460
お前が言ったんだろ
わざわざ粘着して来るなよ
キモイ
0463デフォルトの名無しさんNGNG
簡単なブラウザを作ってます
CHtmlViewつかってとりあえずほかのところは作ったんですが
Proxyをこのブラウザを使ったときだけはさみたいのですが
(インターネットオプションで設定〜、ではなく。)
ぐぐってもいまいちどうしたらいいかちゃんとのってるところが見つかりません

どうしたらいいか、あるいは解説サイトなどを、教えていただきたい。
よろしくおねがいします。
0464デフォルトの名無しさんNGNG
>>461
なんでCEdit*にするの?
0465デフォルトの名無しさんNGNG
>>463
InternetSetOption
0466463NGNG
>>465
あんがとです
完成したです♪
さんきゅぅです
0467デフォルトの名無しさんNGNG
こういう事がやりたいん(グリッドの欄には入力可)ですが、
ttp://www.physci.org/codes/tame/screenshot/landscape/table1.gif
方法ありますか?
0468デフォルトの名無しさんNGNG
あります。
0469デフォルトの名無しさんNGNG
これってCListCtrlのオーナー泥でやってるのかな?
俺の場合タブが階層っぽくなってる方に興味があるけど
それっぽい解説が載ってるページがあったら教えてくだちい。
0470デフォルトの名無しさんNGNG
そもそもこれってWindowsじゃないような?
467はWindows上でこれを実現したいといっているのかも知れないけど。
0471デフォルトの名無しさんNGNG
>>467
ラベルの編集が可能なので、そのときのオーナードローで編集位置をあたかもセルであるかの如く見せかければよい。
CodeGuruに色々応用例がある。
#が、多機能すぎて使いづらいか表示がおかしくなるかのどちらかのものが多い。

>>469
直接知っているわけではないが、画像に書かれているキーワードで検索してみたら?
0472デフォルトの名無しさんNGNG
VC++のデバッガ上で値を代入するには?
0473デフォルトの名無しさんNGNG
>>472
正規品ならヘルプのユーザーズガイドに書いてあるはずだけど
0474デフォルトの名無しさんNGNG
>>471
入力はそれでOKだけれど、その、多段階になってるヘッダが難しいと思われ。
つか、出来るのか?これ。
0475デフォルトの名無しさんNGNG
出来るでしょ。
0476デフォルトの名無しさんNGNG
ラベル描画を乗っ取って全部自前で書けばできると思うけど…
メンドクセ
0477デフォルトの名無しさんNGNG
DialogBarを「クラスの追加」を使い、CMyRebarDialogというクラスを作ったんですが、
(そのダイアログには、ボタンが一つあります)

class CMyDialog : public CDialog
{
DECLARE_DYNAMIC(CMyDialog)

public:
CMyDialog(CWnd* pParent = NULL); // 標準コンストラクタ
virtual ~CMyDialog();

// ダイアログ データ
enum { IDD = IDR_MAINFRAME };

ボタンを押した際のイベント処理を追加したくて、
プロパティからOnBnClickedButtonを追加しましたが、
ボタンを押しても、まったく無反応です。

そういう仕様なのでしょうか?
0478478NGNG
宜しくお願いします。
0479デフォルトの名無しさんNGNG
>>477
サブクラス化するか
クラスを作らないでCMainFrameでやる
0480477NGNG
>>479
解決しました。
ありがとうございました。
0481デフォルトの名無しさんNGNG
すみません さっき別スレに書いてしまいました
お世話になっております

VC++でMFCのプロジェクトを作っているんですが、
CSVファイルを読み込んで、1カラムずつ
取得してファイルの最後まで読み込むというロジックをつくりたいんです

�@ Readfile で、 file のEOF 検出ってできますでしょうか?
�A 1カラムずつの取得ってどうやるんでしょうか?
   readfile だと、バイト取得しかできないのでしょうか?

2点お願いします



0482481NGNG
あげます
0483デフォルトの名無しさんNGNG
ReadFileってことはMFCの話題では無いな
0484481NGNG
>>483
あれ?
CSVファイルをCreateFile でオープンして、readfileで要素を
取得するということではダメでしょうか?
0485デフォルトの名無しさんNGNG
やり方がどうこうではなく、ここで聞くのが間違っている。
0486481NGNG
>>485
わかりました
失礼しました
0487デフォルトの名無しさんNGNG
CSpritterWndで分割した個々のViewに、
それぞれRebarを装着させることはできるのでしょうか?

たとえば、OpenJaneSytleというソフトのように、
ウィンドウ内がエリアごとに分割されてます。
そして一つのエリアが、書き込み用のエリアとなっていて、
そのエリアの上側にツールバーが装着されてますよね。
http://janestyle.s11.xrea.com/images/index.html
このようにツールバー(Rebar)を装着させたいのです。

できるのなら、簡潔で構いませんので
方法を教えていただきたいのですが。

初歩的な質問で申し訳ございませんが、
宜しくお願いします。

0488デフォルトの名無しさんNGNG
>>487
要するにCViewにCRebarを付けるということか。
俺にもわからん。
0489デフォルトの名無しさんNGNG
>>487
こんなん参考にならない?
http://www.codeproject.com/splitter/toolbar_splitter.asp
0490デフォルトの名無しさんNGNG
CViewはCWndの派生クラスなのに、ツールバーを付けれないっつーのがMFC特有の癖だよな。
ほかにもコーユー癖がある
ムズカシイやね
0491デフォルトの名無しさんNGNG
>>490
MainFrame(CFrameWnd)だからToolbarを付けれたんだよ
0492デフォルトの名無しさんNGNG
ら抜き言葉が許されるのは小学生まで
0493デフォルトの名無しさんNGNG
どっかで変なこと吹き込まれた DQN が virtual インテリをやろうと必死のようでw
0494デフォルトの名無しさんNGNG
いい加減誰かまともな返答できる奴はいないのか?
0495デフォルトの名無しさんNGNG
>>487
これなんかどう?
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100017.txt
0496デフォルトの名無しさんNGNG
ビュー用にCViewの派生クラス作って、
その派生クラスのOnCreateでCRebarをCreateする。
でもOpenJaneみたくしたいならFormViewでやってもいいかも。
0497デフォルトの名無しさんNGNG
>>494
お前が答えろよ
0498478NGNG
皆様ご返答ありがとうございました。
>>495さんのリンク先の内容で試してみましたらうまくいきました。

あと、
>その派生クラスのOnCreateでCRebarをCreateする。
ではうまくいきませんでした。

本当にありがとうございました。
0499デフォルトの名無しさんNGNG
どういたしまして。
0500デフォルトの名無しさんNGNG
ここは礼儀正しいインターネッツですね
0501デフォルトの名無しさんNGNG
>>500
ウルセーよ
0502デフォルトの名無しさんNGNG
日経BPのMFC本、分厚ぅwww
アレ片手に電車の中で勉強してたら注目された。
俺がイケメンだからってのもあるが。
0503デフォルトの名無しさんNGNG
MFC本?読むものじゃないだろ、あれはリファレンス程度。
言語解説の本ならいざしらず、ライブラリ解説書など「読む」とは言わないのでは?

周りの乗客からは、電話帳を読むのと同じくらいアフォな光景として写ったに違いない。
0504デフォルトの名無しさんNGNG
単にウザかっただけだろ。
0505デフォルトの名無しさんNGNG
どうしても分からないので質問させて頂きます。

TRACE("%u\n", m_Btn.GetState() & 0x0003);

この様にボタンの状態(ON/OFF)を調べているのですが
ボタンをON/OFFしても常に0しか返ってきません…
ヘルプには、OFF=0 ON=1 不確定=2 と記載されているのですが…
0506デフォルトの名無しさんNGNG
SetStateしてみれば?
0507デフォルトの名無しさんNGNG
ボタンのスタイルは?
ただのPUSHBUTTONだったら、ON/OFF状態は無いぞ。
0508505NGNG
>>506
今回は外部から押された状態を取得したいものでして…

>>507
えっ、そうなんですか!?
一応、MSDNに「オプション ボタンはチェック マーク () になっているときがオン状態です」
と記載されているのですが…「チェック マーク ()」とは何なのでしょうか?

今回は単純に、ボタンのON/OFF(クリックではない)を取得していんですが
通常はどの様にして状態を取得するものなんでしょうか?
0509デフォルトの名無しさんNGNG
ON/OFF状態があるのは、チェックボックスやオプションボタン(ラジオボタン)。
0510505NGNG
>>509
そうなんですか??
でもオーナードローにすると通常のボタンでもON/OFFを取得出来るのですが…

CWnd::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
switch(nIDCtl){
case IDC_BUTTON1:
if(lpDrawItemStruct->itemState & ODS_SELECTED)
…
else
…
}
}
0511デフォルトの名無しさんNGNG
プッシュボタンは違うって言ってるのに、オーナードローボタンの例を出されても…
0512505NGNG
>>511
オーナードローになるとまた別なんですか…
すみません、なんか変な事言っちゃったようで…
わかりました。プッシュボタンでは無理だという事ですね。
親切に答えて頂き、ありがとうございました。
0513デフォルトの名無しさんNGNG
んでまあ、君のやりたいことはチェックボックスやラジオボタンでBS_PUSHLIKE
たてとけばいいんじゃ無かろうかと思われるが。
0514デフォルトの名無しさんNGNG
しつもんですが、

lpHttpFile->SendRequest(〜をして、パケットキャプチャーでヘッダを覗き見たところ、

「Cookie: PON=nttkyo******.tkyo.nt.adsl.ppp.infoweb.ne.jp;」が勝手に挿入されてました。
CHttpFileが勝手にCookieを挿入しないようにするためにはどうすればいいのでしょうか?
(こちら側がSendRequestに指定しているのは、下記のものだけです)

Content-Length:
Host:
Referer:
User-Agent:


初歩的な質問で申し訳ございませんがよろしくお願いいたします。
0515デフォルトの名無しさんNGNG
>>514
INTERNET_FLAG_NO_COOKIES
0516デフォルトの名無しさんNGNG
皆さん今年もお世話になりました。
来年もMFC関連でよろしく!
0517デフォルトの名無しさんNGNG
誰もテメーの世話なんかしたくないぞ。
自分の尻くらい自分で拭けよ
二度と来るな
0518デフォルトの名無しさんNGNG
いるよね。こういうの。
xxさん、ありがとうございます。
これからもよろしくお願いしますって書く香具師。
完全に教えて君だもんな。
ベリューションとか、高橋とかに沢山いるのも
ウゼー
0519デフォルトの名無しさんNGNG
おまいら、禿誉め

仕方ねーべ。本人は謙虚にしているつもりなんだろう。
しかし、それ以上に鬱陶しいのは、
以前〜〜でお世話になった●●です。
とか言い出す奴だな。
お前なんか誰も覚えてねーよ、って。w
0520デフォルトの名無しさんNGNG
たし蟹
0521デフォルトの名無しさんNGNG
タブコントロールをメインフレームに追加して表示したいのですが、
上手く配置して表示できません。
どうすればできるのでしょうか?
0522デフォルトの名無しさんNGNG
あ〜あ、噂をすれば何とやら。
上手く配置してなんてどういうのが
上手いのか分かるわけねーじゃん。
どうすればって、どういう配置なのか
全然書いてねーじゃん。これで答えて欲しいのかよ。
質問する態度じゃねーぞ。
0523デフォルトの名無しさんNGNG
>522
どうもすいませんでした。
上手く配置するとは、この場合は、ツールバーの下にタブコントロールを配置表示することなのですが。
ただ単にフレームにタブコントロールを追加するとそうはならないので、
どうすればいいのでしょうか?


0524デフォルトの名無しさんNGNG
>523
>522はただの荒らしだから気にしないように。
0525デフォルトの名無しさんNGNG
だが核心を突いている。
0526デフォルトの名無しさんNGNG
>>523
ツールバーの下にタブコントロールを表示すれば?
0527デフォルトの名無しさんNGNG
嫌です。
別の方法はありませんか?
0528デフォルトの名無しさんNGNG
>>526
どうやってツールバーの下で表示すればよいのでしょうか?(^^;
RecalcLayoutをオーバーライドして何かするのでしょうか?
0529デフォルトの名無しさんNGNG
ツールバーと同様
0530デフォルトの名無しさんNGNG
>529
そうですか。
でも同様にするという分からないんです。
重ね重ねすいません。m(_ _)m
0531デフォルトの名無しさんNGNG
>530
ぷっ。この板にその質問答えられる程のスキル持った奴なんていないよ。m9(^Д^)プギャー
0532デフォルトの名無しさんNGNG
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CWorkPlusMFCView),CSize(100,100),pContext);

分割ウィンドウを作成するとき、Viewを指定できますが、
例えば、あるFrameWnd内に3つの分割されたエリアがあるとして、それぞれ上記のCreateViewでViewを固定させました。

その固定させたViewを変更したいのですが、どのようにすればいいのでしょうか?

ひとつの分割されたエリアに、メニュー操作によっていろんなViewを表示させるようにしたいのです。
ご返答をいただけると助かります。
0533532NGNG
参考になるサイトを見つけました。
知りたいことが書いてあります。
http://www.google.co.jp/search?q=cache:L-cBvD_ftPgJ:www.interq.or.jp/jazz/iijima/mfc/iijima/12dynsplit.html+CSplitterWnd%E3%80%80CView%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B&hl=ja

あとは自分で学習します。
どうもご迷惑おかけしました。
0534デフォルトの名無しさんNGNG
View内のOnDrawをメニューを選ぶことで強制再描画させる関数って何なんでしょうか?
かなり基本的な質問ですが・・・。
0535デフォルトの名無しさんNGNG
Invalidate()
UpdateWindow()
0536デフォルトの名無しさんNGNG
ClistCtrl クラスの表示方法で困ってます。

タイトル行はCenter位置に、
値が入る行はLeft位置に、それぞれ表記したいのですが方法はあるのでしょうか?

例) ずれなきゃいいけど・・・

タイトル行→|   名前   |    中央表示
値行   →|a.txt       |   左詰
0537デフォルトの名無しさんNGNG
右寄せ左寄せは可能(自分が過去に作ったプログラムがそうなってる)
真ん中は不明
0538デフォルトの名無しさんNGNG
>>535
CViewへの再描画は、その関数ではできない。
MFCの仕様。
0539デフォルトの名無しさんNGNG
>534
ぷっ。まちがえてやんの。m9(^Д^)プギャー
0540536NGNG
>>537
レスさんく。
うまく理解できていないような気がするので一応書いときます。

タイトル行と値行の両方を 中央配置(左詰、右詰)にすることはできてます。
問題は、タイトル行と値行の表示位置を違うものにできるか?ということです。

タイトル行作成時には、中央、左、右と配置する箇所を指定する変数が存在するのですが
値行に追加するときには、配置箇所を指定する変数が見当たりません。
0541デフォルトの名無しさんNGNG
>>538
で、どうすればいいわけ?
0542デフォルトの名無しさんNGNG
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);
}
0543デフォルトの名無しさんNGNG
>>538
ビューが乗ってるフレームにInvalidateしてできないと言ってる予感
0544デフォルトの名無しさんNGNG
>>540
カスタムドローするとか空白を自分で入れるとかして調整しないといけないんでなかろか。
0545デフォルトの名無しさんNGNG
>>538
ぷっ。まちがえてやんの。m9(^Д^)プギャー
0546デフォルトの名無しさんNGNG
SplitterWndを2分割したいのですが、
Rebar上のコントロールボタンを押したときだけ、分割される(分割無し→2分割)ようにするにはどうすればいいのでしょうか?

Windowsフォルダウィンドウの検索ボタンを押したら、左側に検索分割ウィンドウが表示されるようなことをしたいのです。
動的に分割を操作したい。
0547デフォルトの名無しさんNGNG
>>546
・Windowサイズ変更
・Window表示・非表示
0548デフォルトの名無しさんNGNG
>>547
ぷっ。まちがえてやんの。m9(^Д^)プギャー
0549デフォルトの名無しさんNGNG
>>548
ぷっ。回答出来ないでやんの。m9(^Д^)プギャー
0550デフォルトの名無しさんNGNG
頭のおかしな人の判定基準

・「みんなの意見」「他の人もそう思ってる」など、自分の意見なのに他人もそう思ってると力説する人
 他人が自分とは違うという事実が受け入れられない人です。自分の意見が通らないとコピペや荒らしなど
 無茶をし始めるので見かけたら放置してください。

・根拠もなく、他人を卑下したり、差別したりする人、自分で自分を褒める人
 他人を卑下することで自分を慰めようとする人です。実生活で他人に褒めてもらう機会がないが
 プライドだけは高いとか、匿名の掲示板しか話し相手のいない人です。可哀想なので放置してください。

・自分の感情だけ書く人
 「〜〜がムカツク」とか自分の感情を掲示板に書くことに意味があると思っている人です。
 何がどのようにムカツクのか論理的に書いてあれば、他人が読んでも意味のある文章になりますが、
 そういった論理的思考の出来ない人です。もうちょっと賢くなるまでは放置してあげてください。
0551デフォルトの名無しさんNGNG
>>546
Explorer Bar
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/bands.asp
0552デフォルトの名無しさんNGNG
>>551
それってシェルエクステンションの作り方だろ
0553デフォルトの名無しさんNGNG
MFCで画面遷移したいです
とあるコマンドボタンを押したら、
別の画面が表示されるという風にしたいのですが、以下のようにコーディングしたら、
押した瞬間に消えてしまうようになってしまいます。
どうか、ご教授ください
void CXXXX::OnSubmit() { // コマンドボタン押下
遷移したいダイアログ tmpdlg;
tmpdlg.Show(ID);
}
void CXXXX::Show(unsigned int uID)
{
Create(uID);
ShowWindow(SW_SHOW);
CenterWindow();
}
0554デフォルトの名無しさんNGNG
それじゃtmpdlgがすぐ消えちゃうから
モーダルにするか変数のスコープを広くする
0555553NGNG
>>554
ありがとうございます。
ちょっと モーダル使うほうで組みなおしてみます

アクティブウィンドウになってないと、すぐ消えるんですね
ShowWindowって
0556デフォルトの名無しさんNGNG
>>555
おいおい、変数のスコープの問題だってばさ。
0557デフォルトの名無しさんNGNG
>>548
ぷっ。ちゃんと教えてもらってるのに解釈間違えてやんの。m9(^Д^)プギャー
0558デフォルトの名無しさんNGNG
>>557
レス番555だった(´・_・`)
0559デフォルトの名無しさんNGNG
ここは簡単な質問しか答えられないDQNが集まるインターネッツですね
0560デフォルトの名無しさんNGNG
>>557-558
バカか?
0561デフォルトの名無しさんNGNG
560 名前: デフォルトの名無しさん 投稿日: 05/01/05 17:19:44
>>557-558
バカか?
0562デフォルトの名無しさんNGNG
自分が乗ってる木の枝切り落とすようなものか
0563デフォルトの名無しさんNGNG
>559
ぷっ。みんなが分かってて誰も口にしないこといってやんの。m9(^д^)プギャ
0564デフォルトの名無しさんNGNG
>563
同じようなことを何度も書くな。ヴォケが。駄スレ化するだろうがっ!!!
0565デフォルトの名無しさんNGNG
dll の関数から,
その dll で定義されているダイアログを呼び出そうとしたところ,
エラーが出ました.

調べてみると,DoModal() が OnInitDialog() を呼ばず,
明示的に OnInitDialog() を呼んでやると,
CDialog::OnInitDialog() を実行しようとしてエラーが出ます.

なぜでしょうか?
0566デフォルトの名無しさんNGNG
>>565
そのエラーが何なのかわからんことには
0567デフォルトの名無しさんNGNG
>>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.
0568デフォルトの名無しさんNGNG
>>567
そのメッセージが指してる場所見てみ。
ASSERT(なんたら) とか VERIFY(なんたら) とか書いてあるから。
その「なんたら」の部分が0(false)になるとそのエラーメッセージ出して止まるようになってるの。
逆に言うと「なんたら」の部分が0(false)になってはいけないということで
そうなった原因は君のプログラムにあるわけだ。
0569デフォルトの名無しさんNGNG
>>568

CDialog を使った dll を呼びだして
ダイアログを表示するには,
呼びだし側は MFC アプリでなければ
ならないのでしょうか?
0570デフォルトの名無しさんNGNG
>>569
んなことはない
0571デフォルトの名無しさんNGNG
こんばんは、質問します。

santa.exeが、A.dllとB.dllを呼んでいます。
それぞれ別々にプロジェクトを作りました。


まず、A.dllをテストしました。
santa.exeに呼び出させて、ステップ実行しました。問題なさそうです。
でも、そのあとで、どうも他のメモリを書き潰しているようです。

そこでB.dllやsanta.exeをステップ実行でながめたいです。
でも、他のプロジェクトのソースをステップ実行する方法が分かりません。
どうすればよろしいでしょうか?




初心者ですいません、バカですいません。
でも冷やかしはゴメンなさい。よろしくお願いします。
0572デフォルトの名無しさんNGNG
>>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を複数立ち上げておくのが楽。
0573571NGNG
>572 おぉ!さっそく神の声が!!ありがとうございます。お手数かけます。(*^-^)ノ

つまり、
私はA.dllのプロジェクトを開いて、
A.dllのソースを眺めながら悩んでいたわけだけれども、

正解は、
大もとのsanta.exeのプロジェクトを開けば、
それをステップ実行していけば、
呼んでいる関数にドンドン入っていける、
という事なのですか?

呼び出し先のソースのありかを
santa.exeのプロジェクトが分からない場合は、
ダイアログが出て、指定するように催促される、
のですかね?
だとすると、{ディレクトリ/ソース/プロジェクトファイル}、
どれを聞かれるのでしょうかね?
0574デフォルトの名無しさんNGNG
>正解は、
いや、何をもって正解というのかわからんです。
ほかにもっといい方法があるかもしれないし、
用途によってやり方を選べばいいだけ。

>呼び出し先のソースのありかを
>santa.exeのプロジェクトが分からない場合は、
>ダイアログが出て、指定するように催促される、
>のですかね?
 んと…

>逆に、デバッグでコンパイルしたあと、ソースを移動させるとF11で関数の中に
>はいれずふつーに実行される
 って書いたけど、「ふつーに実行される」が伝わらなかったのかな

 場所がわからない場合は、F11を押しても、F10のように、
 処理を実行後、次の行に行くだけで、場所指定するようなことはありません。
0575571NGNG
ありが�d♪
0576デフォルトの名無しさんNGNG
365 名前:デフォルトの名無しさん[] 投稿日:05/01/08 14:55:00
結論:MFC使え。

366 名前:デフォルトの名無しさん[sage] 投稿日:05/01/08 19:20:45
MFCって、広く使われてるクラスライブラリの中では最悪の部類に属するよね。
0577デフォルトの名無しさんNGNG
そりゃ一番最初にできた商用ライブラリだもんな。
いいんだよ、なんでも。どーせwindowsは誰が作ってもよく落ちるんだw
0578デフォルトの名無しさんNGNG
MFCって、広く使われてるクラスライブラリの中では最良の部類に属するよね。
0579デフォルトの名無しさんNGNG
365 名前:デフォルトの名無しさん[] 投稿日:05/01/08 14:55:00
結論:MFC使え。

578 :デフォルトの名無しさん :05/01/09 18:07:36
MFCって、広く使われてるクラスライブラリの中では最良の部類に属するよね。
0580デフォルトの名無しさんNGNG
質問ですが、
オリジナルのテキストエディタを作ろうと思ってます。

で、ひらがなを漢字変換にするさい、通常のテキストエディタだと、スペースキーを押すことで、「漢字変換のサブメニュー」
が表示されて、その中から漢字を選び出しますが、
そういう仕様をMFCで作るには、どうすればいいのでしょうか?

要するに、「ひらがな」を「漢字」に変換したいから、IMEの漢字選択サブメニュー?(正式な名称がわかりませんすいません)を開くための
クラスを知りたいのです。
そういうIME関連のクラスってあります?
0581デフォルトの名無しさんNGNG
>>580
CEditそのまんまじゃだめ?
0582580NGNG
>>581
返答のほど、ありがとうです。

Windowsで用意されているテキストエディタ機能ではなくて、
自分でテキストエディタのシステムを作りたいのです。

ただ、そうすると、漢字変換とかの問題が出てきますよね。
その漢字変換システムを自分で作るのはさすがに無理なので、
それだけはWindowsのシステムを利用したいのです。

で、漢字変換をライブラリーで扱えるMFCクラスはないのでしょうか?
それをぜひお聞きしたいのです。
0583デフォルトの名無しさんNGNG
>>582
よく知らんがImmで始まるAPI使うんじゃないかな?
0584デフォルトの名無しさんNGNG
>582
MSDNにサンプルあるぜ
0585デフォルトの名無しさんNGNG
>>582
もし本当に、まともなオリジナルのテキストエディタを開発しようとしていると言うのなら、
漢字の入力なんて瑣末な問題に拘泥せずに取り敢えず英文をまともに入力できるものを目指したら?
#つーか、そのレベルでまともなものが作れるとは思わんのだが。
0586デフォルトの名無しさんNGNG
>>585
>英文をまともに入力できるものを目指したら
漢字変換って書いてあるだろ。
近眼か?
0587デフォルトの名無しさんNGNG
>>582
http://home.h07.itscom.net/buruturi/VCTIPS_008.html
これが参考になる。

ちなみに(3)の(F)のImm〜の次の行にreturn 0;と書けば(4)は省略できるはず。
0588デフォルトの名無しさんNGNG
>>582
第282章 IMEの操作 その5
http://www.kumei.ne.jp/c_lang/sdk3/sdk_282.htm

猫さんのHPにありましたよ。
ここを参照するべし!うしうし!
0589デフォルトの名無しさんNGNG
>>586
敢えてそう書いているんだろ。
池沼か?
0590582NGNG
>>587-588
ありがとうございます
Win32でも構いません

本当にありがとうです
参照してみます。
0591MFCでは勘が上手く働かん・・・NGNG
MFC初めてなんだけど、質問。

class宣言にあるAFX_***等ののコメントは消しちゃだめなの?
ClassWizardが参照してるのか?
消してからClassWizardがエラーメッセージっぽい
ダイアログを出すようになったんだが・・・

ほかにも消したらだめなコメントってあるの?
0592デフォルトの名無しさんNGNG
CRichEditCtrlで、単にエディット内の全ての文字列を取り出すというメンバ関数はないん?
0593592NGNG
自己解決

EDITSTREAMを使ってできました。

すいませんです。
0594デフォルトの名無しさんNGNG
CTreeCtrlのそれぞれのツリー要素にツールチップをつける方法を教えてください。
0595AYANANGNG
MFCでRebarコントロールを作ろうとしてますが、
下記の画像のように、ひとつのバーにいろんなコントロールをつけるのと、
特定のコントロールを左寄せまたは右寄せにしたいのですが、どうしても方法がわかりません。
http://www.geocities.jp/ayana_city/rebar.JPG

誰かわかる方いますか?

1)ひとつのバーにいろんなコントロールをつける
2)特定のコントロールを左寄せまたは右寄せにしたい
0596AYANANGNG
1)のひとつのバーにいろんなコントロールをつける は、DialogBarを搭載すれば解決しますが、
そうすると、DialogBarだと、2)が出来ないと思うんですけども。

DialogBarで特定のコントロールを右寄せにしたりできます?
たしか位置は固定なはずでしたが・・・(勘違いならすいません
0597AYANANGNG
http://www.google.co.jp/search?q=cache:uOLyTe-4rtoJ:www.codeproject.com/docking/toolbarwithcombo.asp+Toolbar+Combo+MFC&hl=ja

↑で解決。
ども〜でした。
0598デフォルトの名無しさんNGNG
MFCでチェックボックスを作る場合ってどうするんでしょうか?
0599デフォルトの名無しさんNGNG
>>598
リソースエディタで貼り付けたり、CButtonで直接作ったり。
0600598NGNG
>>599
チェックボックスってCButtonで作るんですか。
へぇ。試してみます。
ありがとう。
0601デフォルトの名無しさんNGNG
>>600
CreateWindow 関数をぐぐるなり MSDN なり、何でもいいから調べてみろ
ウインドウクラスに "BUTTON" を指定する場合の説明をよく読め
0602デフォルトの名無しさんNGNG
MFC使ってる人なんてまだいるんですか?
便利ですか?
0603デフォルトの名無しさんNGNG
>>602
Javaに比べたら、すげー使いにくい。
最悪。
Win32なんてもって最悪だけど。

最近、初めてWindowsプログラミング始めたが、なんじゃこりゃってな具合の使いにくさ。

なんで、ツールバーにボタンを追加するだけで、こんな遠回りなことしなきゃならんのか疑問。
今、ツールバーにテキストだけのボタンをつけようとしてるが、そういうメンバ関数が見当たらない。
AddButtonというのがあるが、なんかTBBUTTONという構造体を使って詳細に指定してから作れと・・・・・。

しかも、TBBUTTONに文字列を指定するとこないしw
あるのは「INT_PTR iString; // テキストのインデックス」
>0 から始まるボタンテキストのインデックスが格納されます。または、ボタンテキストが格納されたバッファのアドレスが格納されます

0から始まるテキストのインデックスはいいけど・・・、どこのテキストの事を指してるのかまったくわからん。
どこにあるテキスト情報のインデックスなのか?

Javaのほうがほんと、つくりがしっかりしてるよ。
0604デフォルトの名無しさんNGNG
>Win32なんてもって最悪だけど。

プ
0605デフォルトの名無しさんNGNG
>>603
Windowsでは文字列だけのボタンは基本的に作れないんです。
仕様です。
作りたいならDialogリソース経由で作れといいたいらしぃ。>Microsoft
0606デフォルトの名無しさんNGNG
>>605
何を寝言言ってる

CButton::Create
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
引数
lpszCaption
ボタン コントロールのテキストを指定します。
0607デフォルトの名無しさんNGNG
これのことか。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_ctoolbarctrl.3a3a.addbuttons.asp

>>603
俺はWindowsプログラマーじゃないが、VS持ってるから
一緒に考えてやろう。(今暇だから^^
0608デフォルトの名無しさんNGNG
指定するインデックスのイメージと文字列は、AddBitmap、AddString、
および AddStrings を使用してあらかじめツール バー コントロールのリストに追加しておく必要があります

ツールバーの文字は絵の下に出るやつだろ(IEみたいなやつ)
0609デフォルトの名無しさんNGNG
CToolBar::SetButtonText
こいうのもあるけどな
0610デフォルトの名無しさんNGNG
ボタンだけ表示のものって簡単には作れないっぽいな。
Win32から操作するしかないんとちゃう?
0611607NGNG
>>603
わかりましたよ^^

CButtonをCToolBarにのっける形にするです
CButtonをCreateしますよね。
そのとき指定する親ウィンドウを、「CToolBar」にすれば、そのままToolbar上にのっかります。

そのCreateする前に重要なPointがありまして、
指定した位置にそのボタンを挿入したいですよね?

そうすると、SetButtonInfo(nIndex, nID, TBBS_SEPARATOR, nWidth);をCreateの前に呼び出して、
区切りを入れるんです。
そうすることで、そのあとCreateすると、その区切りを入れた箇所にそのボタンが入ります。
nIndexは挿入したいインデックス値、iIDはコマンドIDです。nWidthはいうまでもない^^

確かにとっつきにくいですね。
MFCっていつごろ生まれたものなんですか?
0612607NGNG
当然、CButtonに限らず、コンボボックスやチェックボックス、そのた各種コントロールクラスも同じようにCreateして挿入できるはずです。
これが、ツールバーに様々なコントロールを搭載する答えなんでしょうかね。

(でも、間違った解説だったらスマソ^^ いちおーWindowsプログラマーではないので^^)
0613デフォルトの名無しさんNGNG
文字だけのボタンの場合はTBSTYLE_LISTかな
ただ全部のボタンがそうなるから
部分的に変えたい場合は>611-612のやりかたで

あとMFCも中でWin32呼んでるから
Win32もMFCもやってることは同じだよ
0614603NGNG
>>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個以上は作れません。

この辺、難しいですね。。。
かなり困ってます。
0615デフォルトの名無しさんNGNG
CToolBar関連は、どーしようもない糞仕様w
あきらめろ
Win32APIでもややこしーんだから(ぷ
0616デフォルトの名無しさんNGNG
相談したいのですが、
リストビューのアイテムを取得して、
ソートをしたいのですがリストビューのアイテムを取得してくれません
リストビューは、サブウィンドウにあるので、

?? CWriteList* pDlg = (CWriteList*)AfxGetMainWnd();
    CString str1 = pDlg->リストビューのメンバ変数.GetItemText(param1, 1);

??のところが間違っていると思うのですが、
よければ御教授ください
リストビューにはデータは入っています
ブレイクしたら、str1は"" とNULL でした
0617デフォルトの名無しさんNGNG
CView へのポインタを取得するには?
http://techtips.belution.com/ja/vc/0055/
0618616NGNG
>>617様
どうもありがとうございます

どうも、そのリンク先の通りにやってみますと、
不正アドレスを指すエラーが発生する模様です
もうちょっと調べてみます
0619デフォルトの名無しさんNGNG
どのクラスからViewを参照するのかで話が違ってくる。
0620デフォルトの名無しさんNGNG
リストコントロールで1つ項目しか
選択できなようにできますか?
0621デフォルトの名無しさんNGNG
>620
スタイル設定
0622こんばんはNGNG

ある構造体を一個分、allocしました。
そこに、ファイルから構造体3個分、コピーしました。
(void)&Data, size というような指定でデータを読み込みました。

これって、人のメモリ領域を書き潰していますよね?
でも、落ちないです。
ま、当然自分の処理には被害がないから、すぐには落ちませんね。

そこで、BoundsCheckerにチェックさせたんです。
「人のメモリを書き潰しているよ。」
ってレポートしてくれると思ったら、「エラーなし」なんです。
(つーか、微妙に大きく領域切ってあって、
 無理くりキャストしてallocしてるンですよね。)


BoundsCheckerでチェックしても、
(Void)使ってファイルから書き込んだら、
ちゃんとチェックしきれないモンなのでしょうか?
0623デフォルトの名無しさんNGNG
この世界では、キャストは責任範囲の移管
0624デフォルトの名無しさんNGNG
>>622
BoundsCheckerはコードレベルでチェックするツールだからある意味当然。
でも、実際に壊すケースはきちんと検出できるからソースの品質に問題がある場合は役に立つ。
0625デフォルトの名無しさんNGNG
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' : 定義されていない識別子です。"
とコンパイルが通りません。このエラーを無くすにはどうしたらいいですか。
0626デフォルトの名無しさんNGNG
>>625
#define VK_0 0x30

と自分で定義しておけば、エラーは消える

とりあえず、winuser.hの中身を読んでおくと、面白いことが書いてある
(「VK_0」で検索かけると該当箇所はすぐ見つかる)
0627622NGNG
>>623
>>624
しかし
「BoundsCheckerがモンク言わないように」
って考えで、
10バイトだけ大きくしたって、
500バイトを10個も放り込まれたら、
BoundsCheckerで訳の分からないリークがもーゴロゴロ・・・

0628デフォルトの名無しさんNGNG
BoundsChecker動かしてる暇にソースを見直せってこった。
0629デフォルトの名無しさんNGNG
ダイアログを開くような dll を作っています.
dll の中の CDialog の派生クラスから AfxGetApp() を呼んで,
呼び出し側の CWinApp* を得ようとしたところ,
NULL しか返ってきません.

なぜでしょうか?
0630デフォルトの名無しさんNGNG
呼び出し側のCWinApp*がエクスポートされてない
0631デフォルトの名無しさんNGNG
>>629

   中
  出
   し
0632デフォルトの名無しさんNGNG
メモリデバイスコンテキストの作成について質問があるんですが、

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で宣言した場合、なぜかエラーが出る。

}
0633デフォルトの名無しさんNGNG
デバッガくらい使え
0634デフォルトの名無しさんNGNG
MFCに限らずWIN32のデバイスコンテキストには寿命があるが、それが原因と思う。
<OnDrawなら1回のWM_PAINTメッセージ処理がその範囲>
0635デフォルトの名無しさんNGNG
いや、どーせ二回目のCreateCompatibleDCでASSERTってオチだろ。
0636632NGNG
同じようにグローバル変数として宣言したものでも正常に処理されます


オフスクリーンバッファとして使いたいので
一度宣言したらアプリが終了するまで使えるようにしたいのですが
他によい方法はございますか?
0637デフォルトの名無しさんNGNG
「まともに書く」
0638632NGNG
アプリケーションの特性上、クラス内のメンバとしたいのです

なのでローカル変数やグローバル変数では困るのです
0639デフォルトの名無しさんNGNG
そうですね

さあ、次の患者さんドゾー
0640デフォルトの名無しさんNGNG
エラーが出る、とだけ言われてもねぇ。
0641デフォルトの名無しさんNGNG
deleteしないのに毎回Createしてんの?
0642632NGNG
http://www.geocities.jp/ayana_city/error.jpg

↑こういうエラーダイアログが出ます
0643632NGNG
>>641
いえ、deleteはしません。
create(new)1回のみです。

それをクラス内のメンバ変数として宣言してます。

要するに、オフスクリーンバッファを作りたいだけなんですが、
メモリデバイスコンテキスト以外でMFCで作れる方法ってありますか?
0644デフォルトの名無しさんNGNG
>>643
まずデバッガ使って落ちたところを特定してからいらっしゃい。
0645デフォルトの名無しさんNGNG
ローカルで宣言すればdeleteはデストラクタがやってくれるけど
外に出したら自分で後始末しないとだめだろ
0646632NGNG
もちろん、アドレス値が0になっているから、それを参照したらエラーになるのはわかってますが。。。
やはり、デバイスコンテキストは保持の時間制限があるので、無理なんでしょうか。
0647デフォルトの名無しさんNGNG
CDC::~CDC()
{
if (m_hDC != NULL)
::DeleteDC(Detach());
}
0648632NGNG
>>647
deleteはしないので、デストラクタが呼び出されることはないです。

クラス内に宣言しているだけです。
class CXSFrm : public CXSObject
{
public:
CXSFrm();
~CXSFrm();

(省略)

CDC dcDisplayMemory; ←これ
};

ちなみに、CXSFrmクラス自体もアプリケーションが終了するまで削除されることはありません。
0649632NGNG
クラス内にあるdcDisplayMemoryをcreateしてるんです。
0650デフォルトの名無しさんNGNG
池沼の相手はほどほどに。
他のお客さんの迷惑です。
0651632NGNG
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);
}
0652632NGNG

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);
}
0653632NGNG
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);
}

グローバル変数だと問題ないのに、メンバ変数だと問題ある(エラー)なのが納得いかない。
0654デフォルトの名無しさんNGNG
俺はグローバル変数でうまくいっている、という方が納得いかない
0655632NGNG
>>654
ですよね。
私もそう。

なぜかグローバルだとエラーが出ないです。ずっと。
0656デフォルトの名無しさんNGNG
652のローカルの方は
毎回デストラクタが呼ばれてdeleteしてる(馬鹿にはそう見えないだろうけど)
0657デフォルトの名無しさんNGNG
632は定時になったので帰宅しますた。
また明日来ます
0658632NGNG
いえ、今も会社です。
オフスクリーン(裏バッファ)は、皆さんどのようにしてますか?
DirectXを使わないと行けないのかな・・w
0659デフォルトの名無しさんNGNG
>>658

>>633
>>637
>>644
0660632NGNG
落ちるところは、裏バッファから、View(表)へ転送するときです。

pDC->BitBlt(0, 0, 500, 500, &dcDisplayMemory, 0, 0, SRCCOPY);

どうやら、dcDisplay〜のアドレスが不正値になってます。
0661632NGNG
デバガではこうなります。

BitBltする直前ですが
-dcDisplayMemory{hDC=??? attrib=???}CDC
+m_hDCCXX0030: エラーです : 式を評価できませんHDC__ *
0662デフォルトの名無しさんNGNG
俺の持ってる本のサンプルだとローカルじゃなくてメンバ変数でやってる。

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);
0663デフォルトの名無しさんNGNG
>>653
毎回CreateCompatibleDCしてるしSelectObjectしたものを戻してないし
もうグダグダ
0664デフォルトの名無しさんNGNG
バッファとして使いたいなら、ビットマップの方を保存しとけ。
DCなんか後生大事にとっといても無意味。
0665デフォルトの名無しさんNGNG
仮想ウィンドウ 再描画 の検索結果 約 58 件中 1 - 10 件目 (0.20 秒)

WindowsAPI Programming
... 再描画には大きく分けて2つの手法があり、WM_PAINT命令が発行されるたびに再度
描き直す方法と、仮想ウィンドウを作成して(CreateCompatibleBitmap関数を使用)
描画処理は仮想ウィンドウに行い、再描画のときにビットマップ ...
0666デフォルトの名無しさんNGNG
確かに他のメモリ領域を書き潰しているケースは、至上最悪の症例。
自分は落ちないからな。ウソコ撒き散らしているようなものだからね。
書き潰されたほうは、正しいデータだと思ってウソコ食べちゃう・・・。
するとどっかで段々と変な動きに。でも次起動した時って再現しない。
なぜなら、その時々でとなりに誰のデータが割り当てられるは、
CPU任せだからだ。でも、放っておくと客は逃げるし、ライバルはほくそえむ。

チェッカーでメモリをチェックしても、文法チェックだから、
ファイルからの読込みのようにvoidやchar*を使われると、
チェッカーは読込み毎に異なるファイルのサイズまでは計算しないわけよ。
でも、担当者は「手順に基づき」「チェッカー異常なし」と済ます。
すると、もう絶対に出てこないね。消えることのない数百byteのリーク・・・
そんな時、アナタはどうする? プロの意見を聞こう↓
0667632NGNG
家に着きました。
解決するまで寝ないで続行したいと思います。
初心者でスマソ!

>>663
いえ、それは大まかなソースで。
実際には、
CreateCompatibleDCは一回だけ呼び出して、メモリDCを作成。
最後にSelectしたものを戻してますよ。

それでも駄目なんです。


基本的に繰り返すのは、(メモリDC)→(CView)へのビットマップ転送(BitBlt)

void CXSFrmMain::Draw(CDC* pDC){
pDC->BitBlt(0, 0, 500, 500, &m_memDC, 0, 0, SRCCOPY);
}

ま、自己解決できるよう頑張ります。
ご迷惑おかけしました。
どうも。
0668デフォルトの名無しさんNGNG
そんなコードは書かない。
0669デフォルトの名無しさんNGNG

>>667
デバイスコンテキストは、OSが完全にメモリ管理しているから、
「OSを使わせていただく」って感じになる。
だから、自分のクラスに取り込む、なんてことは出来ない。
これから生成するクラスが既にあるシステムを生み出す、って変でしょ?

だから今後も「使わせていただく」リソースは、
できるだけすぐにお返ししましょう。
うっかりすると、マシンが固まります。意外とリソースは少ないものです。
0670632NGNG
>>669
そうすると、アプリケーションを起動してから、終了するまで、ずっと保持していたいオフスクリーンバッファはどのように作ればいいのでしょうか?
MFCにおいては、(Win32もそうですが)メモリDCを使う以外に無いはずです。。。

ビットマップとして持っておくとなると、Update描画のたびに、ビットマップからメモリDCへSelect、そしてBitBlt。
終わったら、メモリDCからビットマップへ転送。
見たいなことをしないといけないみたいなので、無駄な処理が増えますよね。
0671デフォルトの名無しさんNGNG
DC 自体がピクセルを持つように聞こえるんだが、
どっちかつーと DC はポインタのようなものだぞ
hdc = &hbitmap; 的なイメージで
SelectObject(hdc, hbitmap);
代入と違って元の値を返すがな
0672デフォルトの名無しさんNGNG
>>670
本気で迷ってるなら、本当に迷っているソースをそのまま貼り付けろ。
0673デフォルトの名無しさんNGNG
いや、貼るな。普通に書ける物を普通に書かないで文句言ったり、
普通に書きたくないと駄々を捏ねたりするような香具師のソースなぞ見たくもないわ。
0674デフォルトの名無しさんNGNG
>すると、もう絶対に出てこないね。消えることのない数百byteのリーク・・・
>そんな時、アナタはどうする? プロの意見を聞こう↓
わたしも是非聞きたいです。
0675デフォルトの名無しさんNGNG
つーか、>666はBoundsCheckerがドンなものかわかっていない悪寒。
0676デフォルトの名無しさんNGNG
>>632
おまえの言ってること矛盾だらけなんで
再現実験してみた

ローカルに宣言→OK
メンバ変数として宣言→死亡
グローバルに宣言→死亡
0677デフォルトの名無しさんNGNG
あとメンバ変数、グローバルの時は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

警告を無視して実行すると、一瞬うまく行く場合もあるが、何回か再描画すると死亡
0678デフォルトの名無しさんNGNG
誤解があるとあれなので補足

メンバ変数、グローバルで宣言するのが悪いんじゃなくて、
その場合はローカルで宣言する場合とやり方を変えないとダメ
0679デフォルトの名無しさんNGNG
画面のプロパティで、ウィンドウとかの色を変えられるけども、
その現在のシステムカラーの色とかはどうやってGETするんですか?

あと、プロパティーでシステムカラーを変更したことがわかる方法ってあるんですか?
0680デフォルトの名無しさんNGNG
>>679
GetSysColorってまんまな名前のAPIがあるんだけど。
変更通知は知らん。Spy++でそれらしいメッセージが来ないか調べてみれば?
0681デフォルトの名無しさんNGNG
WM_SYSCOLORCHANGE
0682デフォルトの名無しさんNGNG
dll で ::AfxGetAppName() を使って,
呼び出し側 exe のアプリケーション名を
取得しようとしましたが,
例外にひっかかってしまいました.

なぜでしょう?
0683デフォルトの名無しさんNGNG
>>682
AfxGetAppNameの中のどこで例外が出たか
デバッガで追いかければわかる。
0684674NGNG
>>675教えて君でスマソ。でも>666に対する解決手法を知りたい。ズバリ聞かせてよ
使いたい。だけどきっと675は知らない予感。そんなヤツばっかだものな。
0685デフォルトの名無しさんNGNG
スレ違い。
市販ソフトの使い方はサポートで聞きましょう。
0686デフォルトの名無しさんNGNG
欽ちゃんの仮装ウィンドウ大賞
0687デフォルトの名無しさんNGNG
スレ違いだったらごめんなさい。
.dllの拡張子のファイルの中身を見てみたいのですが
メモ帳とかだと、変な文字列が出て(暗号化?)さっぱりなのですが
ちゃんと中身を見る方法や、見れるソフトとかないのでしょうか?
もしあれば紹介していただきたいです。
簡潔でも構いませんのでよろしくお願いします。
0688デフォルトの名無しさんNGNG
>>687
バイナリエディタで見ればいいんじゃないの。
0689デフォルトの名無しさんNGNG
>>688
レスありがとうございます。
バイナリエディタで見てみましたが、やはり同じような感じでした。
何がやりたいかということをかくと、PC初心者の考えそうなことで
理解しがたいことだと思いますので、仕様だと思ってあきらめます。
お騒がせしました。
0690デフォルトの名無しさんNGNG
マシン語で会話できる人じゃないと、exeとかdllの中身読めないだろうな。
0691デフォルトの名無しさんNGNG
>>689
「仕様」という言葉の使い方をまちがいてる
0692デフォルトの名無しさんNGNG
「ちゃんと中身を見る」の意味が判らん。
シンボルは Dependency Walker で見られるし
コードやリソースは Visual Studio で見られるだろうが
一体何を見たいのか…
0693デフォルトの名無しさんNGNG
VC−MFCでダイアログベースで
画面作ったんですが、とあるところからもらったDLLの
ライブラリAPIを使いたいのに、LNK2001エラーがコンパイル時に
出てしまいます

lib ファイルを、プロジェクトに追加して、APIのプロトタイプ
宣言のあるヘッダファイルをパスでinclude するだけで
なく、何か抜けている手順があるでしょうか?

エラーメッセージ
error LNK2001: 外部シンボル ""int __stdcall XXX は未解決です ってでます
0694693NGNG
すみません 解決しました 失礼いたしました
0695デフォルトの名無しさんNGNG
CSliderCtrlのSetSelection()で選択範囲を指定すると、その部分の色が変わるのですが、XPでマニフェスを有効にするとこの部分の描画がされません。(白いまま)
回避策があれば、教えてください。
0696デフォルトの名無しさんNGNG
まにまにまにまに、マニフェスト!
0697デフォルトの名無しさんNGNG
基本的な質問になりますが、
MFCでint値をCString(もしくは、unsigned char*)に変換する方法はどのようにするんですか?
0698697NGNG
_itoa( X, S, 10 ) を使うしかないみたいですね。
.NETにはConvetクラスという便利なものがありますが、
MFCにはそれが見当たらないですね。

すいません、自己解決ということで。
0699 NGNG
>>697
CString str;
int value = 100;
str.Format("%d",str,value);
0700デフォルトの名無しさんNGNG
>>697
const char * Convert(int val)
{
static char buf[20];
sprintf(buf, "%d", val);
return buf;
}
0701デフォルトの名無しさんNGNG
ツリービューでマウスクリックイベントを捕まえて
GetSelectedItem() すると、「一つ前」に選択された
ツリーアイテムが取れてしまいますよね。

マウスでクリックしたアイテムのツリーアイテムを
取得するにはどうしたらよいのでしょうか?
0702デフォルトの名無しさん05/01/17 18:34:32
TCHARで宣言されていたものが文字セットをUnicodeにするとWCHARで処理されるわけですが、
こうなると CFontDialog に CHARFORMAT 構造体の szFaceName が上手く渡せません。(フォントダイアログのフォント名の初期値として処理されない)

これは WideCharToMultiByte なんかを使用して ASCII に直し、szFaceName に入れなおさないとダメってことですか?
0703デフォルトの名無しさん05/01/17 19:40:25,
>>702
WCHARなのにWideCharToMultiByte?
0704デフォルトの名無しさん05/01/17 20:22:40
>>702

そうみたい。CFontDialog::CFontDialog(const CHARFORMAT &,〜)が内部で
szFaceNameをMBCS→UNICODE変換している。
ので、入力値はMBCSじゃなきゃならない。

以上はVC6の話ね。
0705デフォルトの名無しさん05/01/17 21:11:55
>>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
サンクス
とりあえずはこのまま条件で分けときます。
0706デフォルトの名無しさん05/01/17 21:56:59
VC2003だと、cbSize見てCHARFORMAT2だったらそのまま、それ未満だと
MBCS->UNICODE変換かけるように変わってるな。
CHARFORMATじゃどうやってもUNICODEで設定できない。

何を考えてこんな実装になっているのやら。
0707デフォルトの名無しさん05/01/18 08:36:39
>>705
VC7以上なら、CT2A()を使うとスマートに変換処理が書ける。
0708デフォルトの名無しさん05/01/18 18:31:05
>>706
バグなんだけど互換性に問題出るから今更直せなくて仕様って事になったんだろ。
0709デフォルトの名無しさん05/01/18 18:46:42
CDialog ではコンストラクタの引数として,
CWnd* をとって,それをダイアログの親ウィンドウとしますが,
あたえられたウィンドウのハンドルを HWND を親ウィンドウとして
設定するにはどうしたらいいのでしょうか?
0710デフォルトの名無しさん05/01/18 19:08:59
>>709
CWnd::FromHandle
0711デフォルトの名無しさん05/01/18 20:13:42
MFC におけるグリッドについて質問します。

VC6では MSFlexGrid という ActiveX を使ってグリッド表示のアプリを書いていましたが、
VS.NET 2002/2003になるとデザインタイムライセンスがない、ということで使えなくなったようです。
VS.NETでMFCアプリを記述するのにお勧めのコントロールは何になるのでしょうか?

それとも、デザイン時に MSFlexGrid コントロールがポトペタできないだけで
自前でインスタンス生成コードとかを記述してプログラミングできるのでしょうか?

厨な質問ですいませんが、教えてください。
0712デフォルトの名無しさん05/01/18 20:14:03
リストビューなんですが、
CListCtrl コントロールで、リストのすでにあるレコードの
あるカラムの値を上書き編集したいのですが、
メンバはありますでしょうか?

SetItemTextや、SetItemなどでは新規レコード挿入してしまいます
よろしくご教授ください
0713デフォルトの名無しさん05/01/18 22:00:14
VC7でダイアログアプリのウィンドウクラス名を変えるにはどうすればいいですか?
VC6ならなんとか出来るのですが…。
0714デフォルトの名無しさん05/01/18 23:41:59
>>711
OfficeインストールしているならExcel使うとか。それならOCXでできるし。
MSFlexGridはdll自体ないと思った。GrapeCityから正規版を買うのも手かも。

>>712
普通にSetItemでできると思うが。いっそコードさらしてみ。
071571205/01/19 09:01:22
>>714
遅くなりましてすみません
上書きできました インデックス間違ってただけでした すみません
0716デフォルトの名無しさん05/01/19 13:14:32
VC6で作成してたMFCアプリをVS2003に移行したらDDVの
エラーメッセージが英語で表示されるようになっちゃった。
どうすれば日本語になるの?
0717デフォルトの名無しさん05/01/19 13:57:00
リソースを日本語に
0718デフォルトの名無しさん05/01/19 19:58:54
CScrollViewのSDIアプリを作っています。
わけあって、水平、垂直スクロールバーが表示されているかどうか知りたいのですが、
どのようにすればわかるでしょうか?

ググったら ::GetWindowLong 使ってウインドウ状態を調べろ、というのがあったのですが、
わたしの技術力、想像力が乏しくて、具体的にどうすればいいかわかりませんでした。
0719デフォルトの名無しさん05/01/19 20:08:43
>>714
711です。レスありがとうございます。
そんなに高価でもないようなのでVSFlexGridを買ってみます。

ただ、VS2002/2003などでMFCアプリを開発する人は、
どのようにしてグリッドを扱うのでしょうか?
全部自前で描画するのでしょうか?
それとも何らかのコントロールを継承してグリッドっぽいものを作るのでしょうか?
0720デフォルトの名無しさん05/01/19 21:00:01
>>718
GetStyle() & (WS_HSCROLL|WS_VSCROLL)
0721デフォルトの名無しさん05/01/20 01:21:18
普通のウィンドウならそれでもいいけど、CScrollViewの場合にはそれだけじゃ駄目だ。
一般的にはね。
0722デフォルトの名無しさん05/01/20 01:59:20
>>719
今やってるプロジェクトではListViewを拡張してお茶を濁した。
その前のプロジェクトではVC6だったのでFlexGridを使った。
今度のプロジェクトではFlexGridを買うことになりそうだ。
0723デフォルトの名無しさん05/01/20 08:15:01
>>719
codeprojectやcodeguruにGrid系のコードあるよ
072472205/01/20 12:30:56
>>723
私もCodeGuruのを参考にしたけど、帯襷で…
0725デフォルトの名無しさん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;
}
0726デフォルトの名無しさん05/01/20 21:25:08
718 です。
GetStyle() & (WS_HSCROLL|WS_VSCROLL) でビットを調べて、
スクロールバーの表示状態を調べました。
CScrollView だとそれだけじゃだめだ、というカキコもしていただいたのですが、
いまのところ私の実現したいことには支障がないようですので、
問題が出たら再び考えることにします。ありがとうございました。
0727デフォルトの名無しさん05/01/20 21:38:33
フォントの設定に関して質問させてください。

たとえば.....
ビュークラスのOnDraw内でフォントを設定するには CreateFontIndirect(LOGFONT*) を使いますが、
SelectObject する前のデフォルトのフォントの LOGFONT 構造体データを取得する方法はありませんか?

寸前の HFONT だったら SelectObject の戻り値に入るので、
HFONT から LOGFONT を導く方法でもあるのでしょうか?
0728デフォルトの名無しさん05/01/20 21:47:06
GetObject?
0729デフォルトの名無しさん05/01/20 21:47:30
711=719です。.NET Frameworkを使ってもいいのだったら
DataGridというコントロールが標準で用意されているので問題ないですが、
あと2、3年ぐらいは純MFCでの開発も続くでしょうからグリッドについては悩むトコですね。
0730デフォルトの名無しさん05/01/20 21:54:16
>>728
727です。すばやいご回答感謝いたします。

int GetObject(
 HGDIOBJ hgdiobj, // グラフィックオブジェクトのハンドル
 int cbBuffer, // オブジェクト情報を格納するバッファのサイズ
 LPVOID lpvObject // オブジェクト情報を格納するバッファ
);
0731デフォルトの名無しさん05/01/20 21:55:57
MFCスレなんだから、CGdiObject::GetObjectだろ、ふつー
0732デフォルトの名無しさん05/01/20 22:00:48
>>731 あ、そーいや、そうですね...
0733デフォルトの名無しさん05/01/22 17:06:02
MFCで作った実行ファイルを別マシンで起動すると
MFC42D.DLL
を必要とするのですが、これらのファイルを添付する以外で起動する方法ってあるのでしょうか?
出来ればEXEに埋め込むみたいな方法がよいのですが。。。
0734デフォルトの名無しさん05/01/22 17:11:02
デバッグ用DLLじゃない?
0735デフォルトの名無しさん05/01/22 17:25:23
うむ。リリースビルドしれ。
0736デフォルトの名無しさん05/01/22 17:26:01
リリースでやれば良かったのですね・・・
PC全部VC入ってたので全部普通にビルドしてましたorz

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

これってリリースでビルドするとサイズ凄く小さくなりますけど、何か変わるんですかね?
0737デフォルトの名無しさん05/01/22 17:30:10
>>736
デバッグに必要な情報が要らなくなったり最適化したりするから。
0738デフォルトの名無しさん05/01/22 18:06:34
デバッグでは出なかったバグがリリースにしたら出たりするから、
テストも十分にしておくように。
リリースしてからとんでもないことではまることがあるから。
0739デフォルトの名無しさん05/01/22 18:48:00
細かいこといえば、リリースでビルドして、VCから起動させずに、
単体で起動してみてきちんとうごくかどうか試さないと危険。
0740デフォルトの名無しさん05/01/22 18:55:45
>>738,739
それだけでは足りない場合もある。
MFCのリンク方法が違うと挙動が変わる。
納品物の仕様にあわせたビルド版のテストを早い段階で行う必要がある。

デバッグ版の存在価値は、
対話デバッグテストによる例外処理強制終了の位置確認ぐらいしかあるまい。
とはいえ、例外処理強制終了の位置確認できるのはそれなりに美味しいけどな。
0741デフォルトの名無しさん05/01/22 19:03:59
ビルド版って言い方は初めてみた

メモリリークの調査にもいいぞ。
デバッグ版というより、デバッグモードだが。
0742デフォルトの名無しさん05/01/22 19:06:19
リリースビルドでもMFC42.dllが無いと動かないよ。
よほど古くなけりゃ入ってると思うけど。
MFCを実行ファイルに埋め込む(スタティックリンク)スイッチは
プロジェクト -> 設定 -> [一般]タブ
にあるよ。
これStandard版は無いんだっけ?
0743デフォルトの名無しさん05/01/22 19:09:33
>それだけでは足りない場合もある。

つーか、テスト計画ない時点で終わってるw
0744デフォルトの名無しさん05/01/22 19:25:40
>>741
ビルド版じゃなくて、「納品物の仕様にあわせたビルド」版という意味で書いた。
送信してから「わかりにくいな。しまった・・。」と思ったが
誰もそんなところまで突っ込むほど暇人じゃないだろうと勝手に思い込んだ俺が甘かった。
0745デフォルトの名無しさん05/01/22 19:40:41
そんな本格的なソフトならこんな所でそんな質問するわけない。
0746デフォルトの名無しさん05/01/22 19:42:59
それは思い込みだよ
0747デフォルトの名無しさん05/01/22 21:09:55
コンボボックスリストを別の値に選択した時に、IDC_EDIT1に格納されてる値を
コンボボックスで選択した値+100してIDC_EDIT1に表示するみたいな事をしたいのですが、
これをボタンが押された時、とかではなくリアルタイムでコンボボックスの中の値が別の値に選択された直後に
IDC_EDIT1に計算結果を表示するにはどうしたらよろしいのでしょうか?
0748デフォルトの名無しさん05/01/22 21:44:59
>>747
対象となるコンボボックスで、以下のメッセージを受ければよい
================================================
ON_CBN_SELCHANGE
ユーザーがリスト ボックス内でクリックするか、方向キーを使って選択を変更した結果、コンボ ボックスのリスト
ボックスで選択されている内容が変わることを通知します。このメッセージを処理するとき、コンボ ボックスのエディット
コントロール内のテキストを取得するには、GetLBText 関数または別の同種の関数を使います。
GetWindowText 関数は使用できません。
================================================
0749デフォルトの名無しさん05/01/22 22:27:23
>>748
教えて頂いた方法で解決しました。
ありがとうございましたm(_ _)m
0750デフォルトの名無しさん05/01/23 01:27:42
うぉ、ON_CBN_SELCHANGE の時はGetWindowText使ってはいけないのか。
思いっきり使ってた。どうりで上手く行くときと行かないときがあるんだ・・・
0751デフォルトの名無しさん05/01/23 02:18:32
ダイアログベースで作ったものに、メニュークリックしたらIDD_DIALOG2みたいな別のダイアログを出すには、どーすればいいんでしょう(;´Д`)
0752デフォルトの名無しさん05/01/23 06:05:36
新規クラス DoModal でぐぐれ
0753デフォルトの名無しさん05/01/23 12:15:48
モードレスならcreateとshowwindowでぐぐれ
0754デフォルトの名無しさん05/01/23 18:09:45
すみません 教えてください
処理ゲージを表示する画面をつくったのですが、
これをshow で表示すると、タイトルバーにタイトルが表示されないんです
これ表示するようにするには、どうしたらいいのでしょうか?

setWindowText だと、その画面が終わったあとに出てきますので
show で画面が消える間(画面が表示されたときから)
タイトルがでていればいいのですが。
0755デフォルトの名無しさん05/01/23 18:15:54
処理ゲージを表示しているときにメッセージ処理をしてやる。
075675405/01/23 18:21:22
>>755
えーと レスありがとうございます
処理ゲージ画面をshow関数をコールした後、
呼ばれたほうのshow 関数で何か処理を
行うということでしょうか?

具体的に、どんなメッセージ処理をすればいいのでしょうか
0757デフォルトの名無しさん05/01/23 18:50:22
処理ゲージ の検索結果 約 12 件中 1 - 10 件目 (0.40 秒)

知らない言葉がでてきて自分が不勉強なのかとあせった
0758デフォルトの名無しさん05/01/23 20:27:43
プログレスバーの処理を別のスレッドで処理すれば良いんじゃないかい?
075975405/01/23 21:54:48
>>758
一応、別の関数に分けて処理していますので、
それは大丈夫と思います

やはり、show だと DoModalと違って出力直後に
処理はできないものでしょうか?
0760デフォルトの名無しさん05/01/23 22:13:51
>>759
show関数ってなんだっけ?

まぁいいや、DoModalを使ってないなら、開くダイアログをどっかでCreateしてるはず。
そのCreateを見せて、
ついでに、設定したウィンドウスタイルとかもあわせて
0761デフォルトの名無しさん05/01/23 23:48:43
ActiveXコントロールのウィンドウをCreateWindowで作ろうとしていますがうまくいきません。

ttp://www.nitoyon.com/vc/tips/ie_component.htm
こちらを参考にして、AtlAxWinInit()を読んだあとに
クラス名に 『AtlAxWin』のウィンドウをCreateWindowで作成したのですが、
戻り値がNULLで返ってきます。

WinMain関数で何か初期化処理をしている事を紹介しているサイトが有ったのですが、
プロジェクト内にWinMain関数が無いため試すことが出来ませんでした。

どうすればうまくいくでしょうか。
076275905/01/24 08:48:40
Createは、ゲージを表示するwindow のIDを渡しています

  Create(uID);
  ShowWindow(SW_SHOW);
  CenterWindow();

これだけです 
ちなみに、Createの前で SetWindowTextを実行すると、
メモリリークを起こして死にます
Createの後にSetWindowTextを入れると、ゲージ処理が終了してから
タイトルが表示されます
Window スタイルは、デフォルトでした(チェックとかは特についてないです)
0763デフォルトの名無しさん05/01/24 10:25:13
CDialog のCreate?
だったらCDialogの初期化でやればいい
076475905/01/24 10:27:29
>>763
ちょっと試してみます。
ありがとうございました。
0765デフォルトの名無しさん05/01/25 12:30:25
自作のアプリでダイアログによって設定を行う際、
ViewやFrame等各クラスのメンバに設定を反映させるコードが非常に見苦しくなってしまいます。
設定ダイアログはまあ、大抵のアプリには付いている物なので、美しいやり方などがあるのかも、と思っているのですが……。
皆さんどの様にコーディングしているのでしょうか。
アイデアのある方、アドバイスなどお願いします。
0766デフォルトの名無しさん05/01/25 15:08:55
どう見苦しくなったのか晒してみ。
0767デフォルトの名無しさん05/01/29 17:15:37
MFCで配列をソートしてくれるクラスってどれになります?
0768デフォルトの名無しさん05/01/29 17:41:41
>>767
ない
0769デフォルトの名無しさん05/01/29 17:46:38
そういうのは普通関数にすると思う
0770デフォルトの名無しさん05/01/29 18:49:18
MFCでゲームを作ろうとしています。
ゲーム画面をフルスクリーンにしたいのですがどうすればいいのでしょうか?
0771デフォルトの名無しさん05/01/29 19:16:06
>>770
画面いっぱいにウィンドウを広げる
0772デフォルトの名無しさん05/01/29 19:17:37
> プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
> Javascript は Web 制作板、CGI は Web プログラミング板へ。
> 業界談義、愚痴はプログラマ板へどうぞ。
> ゲーム関係の話題はゲーム製作板へどうぞ。← ← ← ← ← ← ←
> ネタ、板とは関係の無い話題はご遠慮ください。
0773デフォルトの名無しさん05/01/30 00:29:49
質問なのですがCFromViewを使ってHTMLを表示するのはどうすれば良いのでしょうか?
CHtmlViewを使えば表示する事はできるのは解かるのですが他にもコントロールを使いたいのです…。
ご教授お願い致します。
0774デフォルトの名無しさん05/01/30 00:31:31
フォームビューのフォームにブラウザコントロールを貼り付ける
0775デフォルトの名無しさん05/01/30 00:40:22
>>774
レスありがとうございます。
仰る通りの方法で解決できました。ありがとうございました
0776デフォルトの名無しさん05/01/30 02:00:45
>>761
CoInitializeしてないとかいうオチじゃないだろうね?
0777デフォルトの名無しさん05/01/30 08:37:51
今、オリジナルのカスタムコントロールを作ろうとしてる。
BCGみたいなやつ。

結構大変だなw
http://www.bcgsoft.com/bcgcontrolbar.htm

VSみたいなものを作ってます。
0778デフォルトの名無しさん05/01/30 10:43:49
特定の範囲だけを描画対象とする、Clipみたいなものってありますか?
0779デフォルトの名無しさん05/01/30 10:58:31
>>778
CDC
0780デフォルトの名無しさん05/01/30 10:59:08
リージョンの話かな?
0781鳥取県推進委員会05/01/30 18:09:58
デスクトップのビットマップを取り出すには、「MFC」でどうすればいいんでしょーか?
0782デフォルトの名無しさん05/01/30 18:26:40
>>781
死ね馬鹿
0783デフォルトの名無しさん05/01/30 19:12:52
>>781

ttp://homepage2.nifty.com/DSS/VCPP/MFC/Other/CBitmapDesktop.htm
0784デフォルトの名無しさん05/01/30 21:07:56
>>782
分からない人には尋ねていません
0785デフォルトの名無しさん05/01/30 21:33:41
SystemParametersInfo
0786よし子05/01/31 16:46:58
>>782
分からない奴が答えんな糞グラマーが
0787デフォルトの名無しさん05/01/31 17:10:25
スクリーンセーバーを作るには、「MFC」でどうすればいいんでしょーか?
0788デフォルトの名無しさん05/01/31 18:29:05
>>787
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample98/html/_sample_mfc_saver.asp
0789デフォルトの名無しさん05/01/31 22:30:11
>>787
好きに作れ。SDKで作れるならMFCでも作れるだろ?
0790デフォルトの名無しさん05/02/01 04:59:01
特定のUSBメモリのドライブレターを取得する方法がわからない。
USBメモリのデバイス名を取得することはできてるんだけども、そこからどやってドライブレターを取得していいのやら。
ぐぐって同じような質問を見つけても、コレだという回答はされていないようだし。
教えてエロい人。
0791デフォルトの名無しさん05/02/01 09:13:11
MFCには、そんな機能は無い
0792デフォルトの名無しさん05/02/01 09:29:29
>>790
CUsbMemory
0793デフォルトの名無しさん05/02/02 22:23:37
タブ型のファイラーをMFCとAPIで作ろうと思ってます
大まかでかまいません
どんな手順で作るんですか
0794デフォルトの名無しさん05/02/02 22:26:09
>>793
1.VC++を立ち上げる
2.作る
0795デフォルトの名無しさん05/02/02 22:29:03
いや…それは…
0796デフォルトの名無しさん05/02/02 22:29:27
>>794
おそらく作り方がわかんないから聞きにきてるんだろ
>>793
0.ぐぐる
1.VC++を立ち上げる
2.作る
0797デフォルトの名無しさん05/02/02 22:32:42
>>796
一度、ディレクトリをツリー表示にするのと
ファイルをリスト表示するのは作ったんです
次はそれを発展させたいなと思って。
0798デフォルトの名無しさん05/02/02 22:47:22
3.発展させる
0799デフォルトの名無しさん05/02/02 22:51:21
2.5 .バグ取り
0800デフォルトの名無しさん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);
0801デフォルトの名無しさん05/02/03 01:04:01
「うまくいかない」で問題が伝わると思ってるのか?
0802デフォルトの名無しさん05/02/03 01:16:51
ですぅ
0803デフォルトの名無しさん05/02/03 01:18:13
すみません、自己解決しました
0804デフォルトの名無しさん05/02/03 04:52:21
>>790
方法論としてはこれ使えるんじゃ?
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/042/042468.html

>>797
とりあえずコピー貼り付け機能とかを盛り込む。
0805デフォルトの名無しさん05/02/03 17:14:25
CListViewをエクスプローラの縮小版みたいな表示にすることはできませんか?
0806デフォルトの名無しさん05/02/04 12:18:20
>>805
オーナードロー
0807デフォルトの名無しさん05/02/04 17:30:49
ローカル座標とグローバル座標を変換するためには?
どうしたらよいのでしょうか?
0808デフォルトの名無しさん05/02/04 18:12:32
>>807
MapWindowPoints
ClientToScreen
ScreenToClient
0809デフォルトの名無しさん05/02/04 23:51:36
>>765
設定をすべて保持するクラスなりモジュールなりを定義して,あらゆるところからそこを読み書きするようにしてる。
きれいはきれいだがコードは増える。
0810デフォルトの名無しさん05/02/05 02:32:34
下記のウィンドウを作成すると、アプリケーション終了時にデバッグエラーが出ます。
どうしてなのでしょうか?
私のほうで調べてみましたが、まったくわかりません。
よろしくお願いいたします。


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);
}
0811デフォルトの名無しさん05/02/05 09:28:44
エラー内容調べないの?
0812デフォルトの名無しさん05/02/05 10:32:04
エラー内容は問題解決のための重要な情報を含んでます。
081381005/02/05 10:40:46
>>811 >>812
エラー内容はこれです。
http://www.geocities.jp/ayana_city/error.JPG

素人なもので、このエラーを見て解決する方法がわかりません

CMyFrameMenuはCFrameWndから派生されたものです。
pWndは、CFrameWndが入ってます。
081481005/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);
0815デフォルトの名無しさん05/02/05 10:49:34
HCURSOR hCursor = ::LoadCursor( NULL, MAKEINTRESOURCE(IDC_ARROW));
081681005/02/05 10:58:00
>>815
それを試してみましたが、駄目でした。

他の部分に問題があるわけではなく、そのBOOL CMyFrameMenu::Create(CWnd* pWnd,CRect GlobalRect) を呼び出したら、
エラーが出ます。
そのBOOL CMyFrameMenu::Create(CWnd* pWnd,CRect GlobalRect) を呼び出さないと、エラーも出ません。

私の乏しい知識では難しいですね。・・・・・・・
0817デフォルトの名無しさん05/02/05 11:13:00
GlobalRectの中身は?
081881005/02/05 11:17:11
>>817
CRect rect( 0, 0, 300, 200);
0819デフォルトの名無しさん05/02/05 11:37:21
既にできてるウィンドウのCreateEx呼び出したらいかんだろ。
082081005/02/05 11:41:41
>>819
CreateExは上記の一回のみの呼び出しです。
082181005/02/05 11:57:55
WS_POPUPで親をNULLをしてCreateExすると→アプリケーション終了時エラーが出ない
WS_CHILDで親をCMainFrameをしてCreateExすると→アプリケーション終了時エラーが出る

何に問題が起きてるのかがわかりません。
0822デフォルトの名無しさん05/02/05 12:05:21
自分自身を親ウィンドウ指定するな。
082381005/02/05 12:13:22
>>822
いえ、別のCFrameWndですが。

親、CMainFrame
子、CMyFrameMenu

両方とも、CFrameWndから派生されたもの。



子にCFrameWndを指定してはいけないのでしょうか?
0824デフォルトの名無しさん05/02/05 12:30:28
>>823
情報小出しでわかりにくい。
まず、クラス図かけ。
0825デフォルトの名無しさん05/02/05 16:20:10
継承図
CFrameWnd
  →CMainFrame
  →CMyFrameMenu
相関関係
CMainFrame
  →CMyFrameMenu
0826デフォルトの名無しさん05/02/05 16:25:53
dc.FillRgn(&rgn,&bbb);で描こうとしたら
まったく描いてくれん orz
dc.FillRect(&rect,&bbb);だと描かれるのに
ワケワカメ
0827デフォルトの名無しさん05/02/05 16:35:24
>>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;
0828デフォルトの名無しさん05/02/05 22:45:01
>>825
ちゃんとヒープにメモリ確保してからCreateしてる?
0829デフォルトの名無しさん05/02/06 07:51:02
LButtonClickだけを無視させる(回避)方法ってあるか?
0830デフォルトの名無しさん05/02/06 08:54:17
はぁ?
0831デフォルトの名無しさん05/02/06 09:26:46
EnableWindowにFALSEを指定するとWM_LBUTTONDOWNは来なくなるよな
0832デフォルトの名無しさん05/02/06 09:36:54
EnableWindowだと全てのマウスイベントが来なくなるが、それでいいのか?>>829
0833デフォルトの名無しさん05/02/06 09:38:09
>>829
オーバーライドして中で無かった事にすればおk
0834デフォルトの名無しさん05/02/06 09:44:44
何となくだけど、クリックしてもアクティベートされなくしたいんじゃないか?
0835デフォルトの名無しさん05/02/06 09:46:13
OnLButtonDownはVirtualでなかったような…調べてみまつ
0836デフォルトの名無しさん05/02/06 10:04:40
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 ↑
只のコメントキーワード
0837デフォルトの名無しさん05/02/06 10:06:05
>>833
C++ でオーバーライドを実現するには、オーバーライドする基本クラスのメソッドに virtual 修飾子をつけて仮想関数として定義しなければいけません。
0838デフォルトの名無しさん05/02/06 10:29:50
オーバーライドとオーバーロードを混同しているアフォのいるスレはここですか?
0839デフォルトの名無しさん05/02/06 10:35:33
>>832
SetWindowsHookExはお嫌いですか?
0840デフォルトの名無しさん05/02/06 12:28:25
>>839
それはMFCじゃないから・・・
084182905/02/06 12:58:36
説明不足スマソ

FloatingWindow(WS_EX_TOOLWINDOW)を作ったんだが、
そのFloatingWindowをクリックすると、CFrameWndが非アクティブになってしまう。
FloatingWindowをクリックしても、CFrameWndはアクティブのまま(一切非アクティブへ切り替わらない)にしたいんだ。
0842デフォルトの名無しさん05/02/06 14:32:30
WM_SETFOCUSでできれば楽だが、アクティブ化殺すなんてできたかな

0843デフォルトの名無しさん05/02/06 16:15:55
アクティブ化をポイするってどっかで見たな。

んー、コンボボックスとかってそうじゃん。それ系のカスタムコントロールを参考にしてみたら?
0844デフォルトの名無しさん05/02/06 17:23:59
スクリーンキーボードのように、アクティブ化させないウィンドウスタイルはある。

が、なんだったかわすれた(つ∀`テヘ
SPY++でスクリーンキーボードみればたしかでてくるのだが、今の環境にVCないのでわからん。
084582905/02/06 18:19:29
オレの知識不足スマソ

↓こんな感じ
http://www.geocities.jp/devil_man_kekeke/sample.JPG

アウトプットウィンドウ(WS_EX_TOOLWINDOW)をクリックしても、その下のウィンドウが非アクティブ化されないようにするには、どうすればいいんだい?
度々スマソ
084682905/02/06 18:21:39
そのスレイプニアでは両方ともアクティブ化されてるだろ。

SPYでスタイル調べて、試したんだが、どうもうまくいかん orz
0847デフォルトの名無しさん05/02/06 19:04:34
普通のドッキングツールバーがそうだろ
084882905/02/06 20:59:19
クリックしても、ほかのウィンドウが非アクティブにならない代表的なIMEツールバーをSPYしたんだけど、

WS_DISABLEDとなってる。
でもマウス入力は受け付けるよね。

この辺のカラクリが知りたい。
0849デフォルトの名無しさん05/02/06 21:40:31
非アクチブになりそうになったら、そいつにWM_NCACTIVATEを投げてやる。

と適当に答えてみる。
0850デフォルトの名無しさん05/02/06 22:17:18
ソースみたら簡単に見つかるな
// clicking on floating frame when it does not have
// focus itself -- activate the toplevel frame instead.
0851デフォルトの名無しさん05/02/07 02:01:42
誘導されてきました。以下他スレの書き込みと同様です。

VC.NETでダイアログベースのアプリを作っています。
ダイアログを任意の数だけ表示させたかったのでポインタでCDialogを宣言して
new→create→ShowWindow(SW_SHOW)の手順で表示させているのですが
消すとき、OnOKまたはOnCancelでDestroyWindowしてPostNcDestroyで
delte thisしているのですがメモリが完全に元に戻りません。(少し残ります)
これはこういうもんなんでしょうか
0852デフォルトの名無しさん05/02/07 06:49:33
>>850
それが何なんだ???
0853デフォルトの名無しさん05/02/07 07:06:49
>>829
この人と同じ系統の質問ぽいね
たぶんそうだとおもうけど

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200405/04050029.txt
もやも・/B> 2004/05/19(水) 23:59:59

Adobe Photoshop のツールやレイヤーなどの小さいウィンドウは
これをクリックしてもメインのウィンドウが非アクティブになりません。
Visual Studioのツールバーを切り離したときもそうですが、
このようなOVERLAPPEDまたはPOPUPで親と一緒にアクティブになる
子ウィンドウはどのように作るのでしょうか。
APIのみでやりたいのですが、
CreateWindowEx時のスタイルや拡張スタイルで
指定できるのでしょうか。
それともキーボードフォーカスの関係でしょうか。
よろしくお願いします。
0854デフォルトの名無しさん05/02/07 09:42:16
だからMFCのソース見ろよ
MFCの中でAPI呼んでるからAPIのみでも同じ
ツールバーを切り離す
クリックでブレーク
そこのソース見る
0855デフォルトの名無しさん05/02/07 12:25:58
>>854
探してみる。
ファイル名はなんだい?
0856デフォルトの名無しさん05/02/07 13:22:59
wincore.cpp
0857デフォルトの名無しさん05/02/07 15:37:30
>ツールバーを切り離す
>クリックでブレーク

がどこにあるかわからんね。
莫大すぎて。
砂漠でアリ探すようだ。
0858デフォルトの名無しさん05/02/07 17:11:46
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()
0859デフォルトの名無しさん05/02/07 20:08:21
>>858
ごめんなさい。
難しすぎて。

それをどうしろと?
0860デフォルトの名無しさん05/02/08 00:13:19
とりあえず調べてみたか?
0861デフォルトの名無しさん05/02/08 00:30:44
>>851
デストラクタはvirtualになってるか?
0862デフォルトの名無しさん05/02/08 00:40:11
>>851
なんで OnOK で DestroyWindow するんだよ?
モードレスかと思いきやダイアログベースらしいし・・・ >EndDialog
0863デフォルトの名無しさん05/02/08 00:55:51
最初のMFCアプリケーションウィザードで設定した
[[最近使ったファイル] のファイル数] や
[ファイル拡張子][フィルタ名]などを
後から変更するにはどうしたらいいんでしょうか。
0864デフォルトの名無しさん05/02/08 01:03:34
レジストリ書き換える
0865デフォルトの名無しさん05/02/08 01:26:35
>>863
[[最近使ったファイル] のファイル数] はInitInstanceのLoadStdProfileSettingsに必要な数を(デフォルト引数は4)
[ファイル拡張子][フィルタ名]は
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_cdoctemplate.3a3a.cdoctemplate.asp
を参考にリソース編集。
0866デフォルトの名無しさん05/02/08 12:50:03
質問です。
VC++で、画面起動後にCEditコントロールの背景色を変更する
にはどうしたらよいのでしょうか?
画面起動時ならOnCtlColorの中で設定できるのですが・・・。
よろしくお願いします。
0867デフォルトの名無しさん05/02/08 15:30:12
そのやり方を変えたくなければOnCtlColorで指定する色を変更できるようにしておいて
変えたいタイミングで色を変えてInvalidateなりなんなりしてやれば良いんじゃ寝?
086886305/02/08 22:39:06
>>865
おかげさまでうまくいきました。
ありがとうございます。
0869デフォルトの名無しさん05/02/09 08:34:34
当方Win2000+VC6環境で、SDI+複数ビューのアプリケーションを作ろうとしています。

リソースエディタでメニューを作り、ClassWizardを実行すると
関連付けする既存または新規のクラスの選択を求められます。

このとき、関連付けするクラスはやはりCViewの派生クラスが適当でしょうか?
その場合、複数あるビュークラスのうちどれに関連付けるべきでしょうか?

足りない脳味噌しぼったところ、以下のような方法を思いつきました。

 1. 一番メインとなるCView派生クラス
  (クリック検出のコード等とかもあるのでメンバ関数がかなり多くなる)
 2. 新規に、メニュー関係のイベントを扱うCView派生クラスを作成
  (1に比べると1クラスあたりのメンバ関数は減るが、メモリ上に余計なものが増える気がする)
 3. CDocumentやCWinAppあたりの派生クラス
  (なんか反則っぽい)

#アプリケーションのバージョン情報ダイアログって、最初からCWinApp派生クラスに関連付けられてるような…?
0870デフォルトの名無しさん05/02/09 10:12:19
そのメニュー項目の機能によりまちまちだ。
0871デフォルトの名無しさん05/02/09 12:35:45
メインフレームが普通
087286905/02/09 16:04:01
ありがとうございます。
何もウィザードや本の指示通り、CView派生クラスに関連付けなくても特に問題は無いのですね。

>>870
例えば「ファイル」メニューはドキュメントクラスに、「表示」メニューはビュークラスに、
バージョン情報やヘルプはメインフレームに、という感じでしょうか?

>>871
なるほど、やってみたいと思います。
でもなんでClassWizardはわざわざCViewを指定してくるんでしょうね。
087387105/02/09 17:12:14
メニューリソースの追加だよね
メニューの項目(ボタン)の追加のような気もするけど

最初からあるメニューのリソース名はIDR_MAINFRAMEになってるし、
メニューの表示もメインフレームでやってるからそう思ったんだけど、
もうひとつメニューのリソースを追加すると
たしかにウイザードはviewとか言ってくるね。
その辺はよくわからん。
0874デフォルトの名無しさん05/02/09 18:29:38
test
0875デフォルトの名無しさん05/02/09 18:31:13
CEditCtrl版の
CDialogで言うOnInitDialogみたいな
メッセージってありますか?

作成された時のみ1度だけ呼ばれるやつ。


0876デフォルトの名無しさん05/02/09 18:53:06
>>875
OnCreate
0877デフォルトの名無しさん05/02/09 22:01:02
>>876
呼ばれないです。
0878デフォルトの名無しさん05/02/09 22:10:48
メッセージもらうつもりならメッセージマップがいるだろ
0879デフォルトの名無しさん05/02/09 23:23:34
ぬう
ちゃんとVCで
CEditTest ってクラスを CEdit 継承して作って
WM_CREATEをマップしたOnCreateに処理を書いたが
通らないみたいなのです。
デバッガ使って調べても通ってないみたい。

Editは、WM_Createを受け取らないのかなと。
0880デフォルトの名無しさん05/02/09 23:30:05
>>879
サブ暮らすか
0881デフォルトの名無しさん05/02/09 23:51:53
ダイアログエディタ上に置いたCEditなどはOnCreateを通らなかった希ガス
0882デフォルトの名無しさん05/02/10 00:15:52
WM_CREATE後にCEditにアタッチされるからね。
0883デフォルトの名無しさん05/02/10 10:03:16
>>879
PreSubclassWindow
0884デフォルトの名無しさん05/02/10 13:39:01
CWndからHWND得る方法教えてください。
別な方法でもいいんでお願いします。
MFCたまにしか使わないんで、いつも
この方法に悩まされます。
0885デフォルトの名無しさん05/02/10 13:45:01
CWnd wnd;
HWND hwnd = wnd;
0886デフォルトの名無しさん05/02/10 14:02:22
CWnd::m_hWnd
CWnd::GetSafeHwnd()
0887デフォルトの名無しさん05/02/10 17:53:05

CWnd wnd;

(HWND)wnd
0888デフォルトの名無しさん05/02/10 17:53:42


CWnd wnd;

wnd.m_hwnd;
0889デフォルトの名無しさん05/02/10 19:38:12
下記のコードでエラーが出ます。
なぜでしょう?
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 で切り離し
}
0890デフォルトの名無しさん05/02/10 19:50:59
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
);

これの解説探して読め
0891デフォルトの名無しさん05/02/10 20:37:43
(LPVOID)sp_time
0892デフォルトの名無しさん05/02/10 22:39:26
>>885 >>886 >>887 >>888
Thanks!!
089386605/02/11 00:07:00
>>867
その方法でうまくいきそうです。
ありがとうございました。
0894デフォルトの名無しさん05/02/11 05:25:51
>>858
すげー参考になった。サンクス!

CWnd::ActivateTopParent()
こんな便利な関数がなんでマニュアルにのってないんだろう。
protectedメンバなんだからさあ、隠さずに俺にも使わせろっ!って思った。
0895デフォルトの名無しさん05/02/11 13:01:59
MFCでタイトルバーがクリックされたことを拾うにはどうすればいい?
0896デフォルトの名無しさん05/02/11 13:20:45
WM_NCLBUTTONDOWN
WM_NCRBUTTONDOWN
WM_NCMBUTTONDOWN
0897デフォルトの名無しさん05/02/12 01:12:47
エクスプローラの右側のような感じでファイルの一覧を表示したいのですが、
このコントロールはMFCに入っているのでしょうか。
あるいはどこかにいいサンプルはありませんか?
0898デフォルトの名無しさん05/02/12 01:20:47
>>897
リストコントロール
089989705/02/12 04:34:06
いえ、リストコントロールではなくて、
たとえばフォルダのパスを指定するとそのフォルダの中身を表示してくれるような、
つまりエクスプローラの右側そのままです。
0900デフォルトの名無しさん05/02/12 08:22:35
>>897
リストコントロール
0901デフォルトの名無しさん05/02/12 11:19:14
>>899
リストコントロールでそのような機能を自分で実装する。
どこかのメーカーがそんなActiveXコントロールを売ってるかもしれない。売ってないかもしれない。
0902デフォルトの名無しさん05/02/12 12:05:13
そういえばMFCのウィザードの5/6に
Windowsエクスプローラスタイルというのがあるな
0903デフォルトの名無しさん05/02/12 15:47:07
>>897
codeprojectかcodeguruにあるんでは?
アイコンとか右クリックメニューとかファイル変更の監視とか
細かく作りこむのは結構大変だと思うが。

手抜きしたければCHtmlViewで
file:///c:/hogehogeにNavigateすればいいよ
0904デフォルトの名無しさん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);
0905デフォルトの名無しさん05/02/12 18:57:13
>904
BITMAPINFOは不完全な構造体。
GetDIBitsは動的に確保したpacked DIBこそ
090690405/02/12 23:30:04
>>905
ありがとうございます
BITMAPINFOをポインタ変数で宣言し
malllocでメモリ確保したら、エラーが出なくなりました。
free()すると、何故かエラー吐きますが・・・
がんばってみます
0907デフォルトの名無しさん05/02/12 23:35:28
MFCだと malloc じゃなくて new するもんじゃないの?
んで delete
0908??05/02/13 22:31:56
ツールバーとスティタスバーのRECTまたはCRectを
拾いたいんだけど、pls. advise。
GetClientRectやGetWindowRectは、RECT/CRectの
戻り値が??なのです。。。 Appreciate。
0909デフォルトの名無しさん05/02/13 22:56:51
>>908
君の日本語はmystery
0910デフォルトの名無しさん05/02/13 23:00:52
>906 メモリサイズ間違いだろ?bppごとに対処法が違う。
BITMAPINFO,BITMAPINFOHEADER,GetDIBitsのMSDNページとサンプルコードを下ろせ。GetDIBitsに特殊な引数を渡したり、カラーテーブル用意したり、スキャン行数を変えるとか…。
>907 &rc
091190405/02/14 10:18:20
>>910
ご指摘ありがとうございます。
やはりメモリサイズが間違っていた様です。

LPBITMAPINFOHEADER lpInfo;
 
×lpInfo = (LPBITMAPINFOHEADER)malloc(sizeof(BITMAPINFOHEADER));
○lpInfo = (LPBITMAPINFOHEADER)malloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);


これでfree(lpInfo)が通る様になりましたm(_ _)m
0912デフォルトの名無しさん05/02/14 14:57:00
一つ質問があるのですが、
CRichEditCtrlは、任意の場所に文字列を挿入するということはできないのでしょうか?

もしできるなら、その際に使用する関数(方法)を教えていただきたいのですが。

宜しくお願いいたします。
0913デフォルトの名無しさん05/02/14 15:00:52
おまえには出来ない
0914デフォルトの名無しさん05/02/14 15:13:17
>>912
EM_REPLACESEL
0915デフォルトの名無しさん05/02/14 15:14:03
>>912
http://pc5.2ch.net/test/read.cgi/tech/1108199304/50に聞け。
0916デフォルトの名無しさん05/02/14 16:21:44
MFCでイベントループを使うことはできますか?
0917デフォルトの名無しさん05/02/14 16:48:30
>>916
どぞ つOnWndMsg
091891605/02/14 16:58:13
>>917
THX
0919デフォルトの名無しさん05/02/17 19:11:30
CRichEditの表示倍率って変えられないのかな。
或いは任意の解像度のDC作成する方法とか。
あったら教えてくださいおながいします。
0920デフォルトの名無しさん05/02/17 19:15:00
無い
0921デフォルトの名無しさん05/02/18 15:22:39
AL-Mail32 (www.almail.com) というメーラがあり、その公開仕様(Cの
コールバック関数群)に沿ってpluginを開発してます。
既に多数のpluginが公開されていて、自分でも作ってみましたが意図した
ように動かず困っています。

スレ違いでしょうか?

コンパイルエラーや実行時エラーはなく、とあるメニュー項目をグレイアウト
したいのに変わらない、といった内容です。
0922デフォルトの名無しさん05/02/18 15:32:41
うん、スレ違い
092392105/02/18 16:39:14
>>922
どこか適当なスレはあるでしょうか
0924デフォルトの名無しさん05/02/18 16:56:04
開発停止してるのかな?
そういうスレは見あたらないね
092592105/02/18 17:04:57
そうですか。
もう少し自分でデバッグしてみることにします。
ありがとうございました。
0926デフォルトの名無しさん05/02/19 20:10:59
メニュー項目ってダイアログに付けたメニュー?
それともフレームに付けるメニュー?
0927デフォルトの名無しさん05/02/19 20:22:19
スレ立ててみるか? しばらく >>1 の努めがあるけど、開発中いろいろ話せるって考え方ができるなら・・・
0928デフォルトの名無しさん05/02/19 21:04:40
ソフト板にスレないの?
あるなら他のプラグイン作者もいるかもしれないから
そこで情報交換できるかも。
0929デフォルトの名無しさん05/02/19 21:12:07
ソフト板はユーザ
ム板はデベロッパ

てな棲み分けはあったほうがいいと思うか? それともないほうがいいと思う?
俺は・・・うーん、どっちとも言えん・・・
0930デフォルトの名無しさん05/02/19 21:46:37
作者がねらーの場合は開発も含めてソフト板にでやってる場合もあるけど
そうじゃない場合は作者のサイト、ユーザーグループ、メーリングリストとかが
どこかに存在するはず。
0931アホな質問かもしれんが05/02/20 01:09:53
GetDlgItemの戻り値はホントに
aButton = (CButton*)etDlgItem(IDD_HOGE);
こんな感じでキャストしても大丈夫なんだよな?

デバッガで見るとC戻り値の型がCTempWndだし
dynamic_castも駄目だし、DYNAMIC_DOWNCASTでも変換できないし、なぜ???
0932デフォルトの名無しさん05/02/20 01:36:05
>>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++的には良くないやり方だと思うが。
0933デフォルトの名無しさん05/02/20 02:25:27
教えてくだちい。
通常のexeで、UIスレッドから測定のためのワーカスレッドを
生成しています。そのワーカスレッドの作業状況をステータスバー
に表示するためにUIスレッドのメインウィンドウにユーザ定義の
メッセージ(WM_UPDATESTATUSBARみたいなの)を投げている
のですが、これをPostMessageでやるとOKなのですがSendMessage
でやると固まってしまいます。いくつか書籍も読んだのですが、
SendMessageすると呼び出しが帰ってくるまではワーカスレッドは
スリープ状態になるが固まってしまう現象は報告されていません。
ご教授お願いいたします。。。
0934デフォルトの名無しさん05/02/20 02:32:10
ageさせてくだちい
0935デフォルトの名無しさん05/02/20 02:33:31
SendMessageは投げたメッセージが処理されるまで待つ
PostMessageはキューに投げるだけ
093693305/02/20 02:44:46
>>935
レスどうもありがとうございます。
そうなのですが、そのSendMessageしたメッセージのハンドラではたいした
作業はしてないのです。(ステータスバーをリフレッシュするだけ)
すぐに制御が帰ってくるはずなのでフリーズするのはおかしい
と思うのですが。。。
0937デフォルトの名無しさん05/02/20 04:00:29
計測スレッドからリフレッシュというのはどう実装してる?
もしUIスレッドのメソッドを呼び出してるのだとしたら
ちゃんとHWND渡してる?
0938デフォルトの名無しさん05/02/20 11:42:49
ビジーループしてたりWaitFor〜で待ってる間は、他スレッドからのSendMessageはブロックされるよ。

詳しくは下記のMessage Deadlocksを参照
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/aboutmessagesandmessagequeues.asp
093993305/02/20 14:03:07
レスありがとうございます。遅れますた

>>937
::AfxGetApp()->GetMainWnd()->SendMessage(WM_UPDATESTATUSBAR, ...)
みたいな感じでメッセージを投げています。(WM_UPDATESTATUSBARはユーザメッセージ
です)

>>938
WaitForSingleObjectで測定終了を待っていました。これが原因のようです。
教えていただいたMSDN読んだのですがデッドロックの項目にWait〜の件は
書かれてないですね。
Win32マルチスレッドプログラミングという書籍も読んだのですがやはり書かれて
ませんでした。
Wait〜で待っている以上、SendMessageといえどもOSはCPU時間を割いてくれないのですね。
勉強になりますた。

レスくださったみなさんどうもありがとうございました。。。
0940デフォルトの名無しさん05/02/20 15:55:12
質問です。VC++にて開発中です。
クラスウィザードでCEdtiにint型の変数を設定すると、
実行時にDoDataExchangeで以下のような警告が出力されます。
Warning: initial dialog data is out of range.
変数の範囲を1-9999にすると警告が出ます。0-9999だと出ません。
解決方法をご存知の方がいらっしゃいましたらお願いします。
0941デフォルトの名無しさん05/02/20 16:04:45
>>940
コンストラクタで1(つーか自分の指定した範囲内の数値)を入れて味噌。
0942デフォルトの名無しさん05/02/20 16:08:15
>>940
変数の初期化をしてないからでは?
094394205/02/20 16:10:19
941とかぶっちゃいましたが
意図するところは同じです orz
094494005/02/20 17:45:09
>>941, 942
解決しました。ありがとうございました。
0945??05/02/20 20:40:01
AppWizardで自動生成されるWindowsメニューでの
IDR_MAINFRAMEの、

MENUITEM "ツール バー(&T)", ID_VIEW_TOOLBARや、
MENUITEM "ステータス バー(&S)", ID_VIEW_STATUS_BAR

は、MFCのどこでハンドルされているのでしょうか?
−− 消去や再表示など。

又はデバッガでトレースする方法(適当なブレーク
ポイントなど)を教えて下さい。

0946デフォルトの名無しさん05/02/20 20:59:52
>>945
MFCソース内をID_VIEW_TOOLBARやID_VIEW_STATUS_BARで検索してみる気はないのかい?
0947デフォルトの名無しさん05/02/21 02:06:38
>>946
検索する気がないから尋ねているんです。
0948デフォルトの名無しさん05/02/21 02:31:18
ワロス
0949デフォルトの名無しさん05/02/21 22:22:14
主張としては正当だね。
回答者も答えるかどうかで自らの主張を示せばいい。
095094505/02/21 22:27:29
>>947は偽物です
095194505/02/21 22:49:00
>>950こそ偽物です
095294505/02/21 23:07:30
>>950
>>951
やめてください・・・
0953デフォルトの名無しさん05/02/22 17:01:24
CWinThreadの派生クラスを作ってCreateThread(0,0)を呼び出すとRun()が
動き始めるんですが、これをワーカースレッドとして使うのは問題ないですか?
0954デフォルトの名無しさん05/02/22 17:36:54
>>953
多分永遠にメッセージを待つことになるのでスレッドが終わらなくなる。
InitInstanceがFALSEを返せばRunは呼ばれない。
0955デフォルトの名無しさん05/02/22 17:45:05
>>954
そうなんですか・・・ありがとう御座います。
続けざまの質問且つCWinThreadの理解不足で申し訳ないのですが、
CWinThread::CreateThreadというのはどういう用途で使われるのでしょうか?
AfxBeginThreadのようにスレッド関数のポインタを渡したりはしないのですよね?
0956デフォルトの名無しさん05/02/22 18:31:13
>>955
以下、MSDN
| 呼び出したプロセスのアドレス空間内で実行されるスレッドを作成します。
| 1 ステップでスレッドを作成し実行するには AfxBeginThread 関数を使います。
| 連続したスレッドの作成とスレッドの実行を繰り返すときに
| スレッド オブジェクトを再利用したいときは CreateThread を使います。
0957デフォルトの名無しさん05/02/22 18:38:25
>>956
私もそれはMSDNで読んだのですが、どうも下記の

| 連続したスレッドの作成とスレッドの実行を繰り返すときに
| スレッド オブジェクトを再利用したいときは CreateThread を使います。

この意味がよくわからなかったんですよね・・・。
CreateThreadを呼び出す事でどのスレッドが起動されるのかと言う所が
わからないと言った感じです。抽象的な物言いで申し訳ありません。
0958デフォルトの名無しさん05/02/22 19:38:46
MFCとちょっと離れるかもしれませんが・・・

CString str = "0x12345678";
これをDWORD型に格納したいのですが、
何か良い関数等ありますでしょうか?

テキストファイルに出力された値を読み込みたいのですが…
095995805/02/22 20:07:56
strtolか・・・
失礼しました。
0960デフォルトの名無しさん05/02/22 20:20:07
StrToInt
0961デフォルトの名無しさん05/02/22 21:02:09
>>957
AfxBeginThread() って、
CWinThread 作って CreateThread 呼び出すくらいしか
やってなくて、で生成したスレッドが実行するのは

  ワーカースレッド: AfxBeginThread に渡した関数
  インタフェーススレッド:_AfxThreadEntry() 関数(非公開)

この _AfxThreadEntry() の中で、CWinThread の InitInstance() だの
Run() だのが呼び出されてる。
0962デフォルトの名無しさん05/02/22 21:36:43
>>961
成る程ですね!ありがとうございました。
0963デフォルトの名無しさん05/02/23 18:07:52
すいません、質問なのですがスプリットウィンドウの幅を動的に変更するにはどの様にすれば良いのでしょうか?
096496305/02/23 19:11:56
自己解決しました
0965デフォルトの名無しさん05/02/24 15:47:07
VC++6.0を使ってます。

ファイルの読み込み中など、モーダルなダイアログを出して
逐次表示を更新→終わったら即ダイアログ閉 をやりたいのですが、
CDialog::DoModal()で呼び出すとどこに実行が移るのかわかりません。
DoDataExchange()だとウインドウを開いたときと閉じるときに2回実行されてうまくないです。
いちいちOKボタンを押してダイアログを閉じるのも嫌です。

こういう場合は自分でメンバ関数を作って、CDialog::Create()、CDialog::ShowWindow()したあと
そのメンバ関数を呼び出すのがいいのでしょうか?
0966デフォルトの名無しさん05/02/24 15:50:24
いちいちお前の日本語モドキを解読して答えるのも嫌です。
0967デフォルトの名無しさん05/02/24 16:17:09
>>966の日本語の方が変に見える件について。
0968デフォルトの名無しさん05/02/24 16:31:06
>>965
だね。DoModalするとダイアログ側に実行権が移っちゃうんで。
0969デフォルトの名無しさん05/02/24 16:45:50
逐次表示を更新ならスレッド作らないとだめだな
0970デフォルトの名無しさん05/02/24 21:33:05
  SetTimer(1,1000,NULL);
for (aPlaying = TRUE; aPlaying; ) {

//Do somethig

if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}
    Sleep(1);
}

こんな感じで擬似スレッドつくれば?
0971デフォルトの名無しさん05/02/24 23:22:37
そんな無茶苦茶な設計にするより、素直にスレッド使ったほうがすっきりする。
0972デフォルトの名無しさん05/02/24 23:30:29
クソスレ立てんなヴォケ!!
0973デフォルトの名無しさん05/02/24 23:54:38
ちょっとワロってしまった…
0974デフォルトの名無しさん05/02/25 16:09:51
これで画面に表示してある、
例えば「1」「2」「3」「4」「5」という文字をを識別して表示するみたいな事って出来るんでしょうか?
0975デフォルトの名無しさん05/02/25 16:11:25
できるよ
0976デフォルトの名無しさん05/02/25 19:37:30
意味がわからん
0977デフォルトの名無しさん05/02/25 23:19:43
画像処理?
0978デフォルトの名無しさん05/02/26 01:07:21
ワンパターンマッチング?
0979デフォルトの名無しさん 05/02/27 15:57:03
MFCを始めたばかりの若造です。
CText(ラベルという?)に表示されている文字を画面から
はみ出たら改行されるようにしたいのですが、設定の仕
方が分かりません。

大きな文字をウィンドウ上に表示したいのですが、
SetFontでフォントサイズを大きくしたのですが、
ウィンドウ上に収まりきらない文字の場合、文字
切れしてしまいます。

これを解決する良い方法はないのでしょうか?
0980デフォルトの名無しさん05/02/27 16:04:25
>>979
CTextなんてものはMFCには無い
0981デフォルトの名無しさん05/02/27 16:28:00
>979
スタティックテキストです。
スマソ

これは通常内部でいじったりはしないのですか?
0982デフォルトの名無しさん05/02/27 18:50:26
>>981
何べんも同じこと質問するなドアホ
http://pc5.2ch.net/test/read.cgi/tech/1107926989/274-280n
0983デフォルトの名無しさん05/02/27 19:00:02
MFCならプロパティに改行って項目が普通にあった気がしたが?
0984デフォルトの名無しさん05/02/27 19:02:29
>>983
ないから質問してるんです
知らない人は黙っててください
0985デフォルトの名無しさん05/02/27 19:05:37
つーか、改行使う理由が分からない。
0986デフォルトの名無しさん05/02/27 20:08:15
つーかデフォルトで勝手に改行されはずなんだけど。
0987デフォルトの名無しさん05/02/27 20:09:44
方法を変えてDrawTextで対応してみます。
MFCを行うのは初めてで、どのやり方が一番適切か
分からなかったため聞きました。
ありがとうございました。
レス数が950を超えています。1000を超えると書き込みができなくなります。