トップページ⇒tech
1001コメント287KB

■ VisualC++(MFC限定)相談室 MFC10.dll■

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Microsoft Foundation Classライブラリ専用スレです。

スレタイ壊れているけど前スレ
■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc2.2ch.net/test/read.cgi/tech/1062098350/

関連リンクは >>2-10 の辺り。
0153デフォルトの名無しさんNGNG
>>151
クイックレスありがとうございます。

とりあえず
PreCreateWindow()でcs.style &= ~(FWS_ADDTOTITLE | FWS_PREFIXTITLE);
これで表示されなくなりました。
0154デフォルトの名無しさんNGNG
>>152
ドモドモ。ありがとうございます。
0155デフォルトの名無しさんNGNG
メインのOnCreate()で

SetWindowText("(゚д゚)ウマー ver 1.0");

とかでいけるんでないかい?
0156デフォルトの名無しさんNGNG
って更新してなかったよ。_| ̄|○
0157デフォルトの名無しさんNGNG
.NET2003のブラウザスタイルのツールバーなんですが、
Rebarのバンド位置を保存したり読み込んだりしたいのですが
どのようにすればできるのでしょうか?

よろしくお願いします。
0158デフォルトの名無しさんNGNG
.NET2003 のダイアログベースでプロジェクトを作成し、
ダイアログの上にEditBox(EditCntrol)をいくつか置いて、
プロパティでAcceptFilesをTRUEにしました。
要は、このエディットボックスにファイルをドロップして
そのファイル名を表示したいのですが
PreTranslateMessage()の中でWM_DROPFILEを監視するとかでなく、
OnDropFiles()のように関数が呼ばれるようにはできないのでしょうか?

MESSAGE_MAPに
ON_EN_DROPFILES(IDC_EDIT1, OnEnDropFileEdit1)
みたいなイメージです。

なにか、情報があればよろしくお願い致します。
0159デフォルトの名無しさんNGNG
サブクラス化すれば?
0160デフォルトの名無しさんNGNG
>>157
donutを参考にすればいいと思うよ。
0161デフォルトの名無しさんNGNG
内部で生成したHTML表示させて、
リンクのクリックとかを取得
ってことってできますか?
0162デフォルトの名無しさんNGNG
ダイアログバーのコンボボックスついての質問です。

1.リソースエディタでダイアログバーを新規作成してコンボボックス(IDC_COMBO)を貼り付ける。
2.CMainFrameのCDialogBar型メンバ変数(m_wndDlgBar)を追加する
3.CMainFrameのOnCreate関数でCreateする

以上の手順でダイアログバーを生成しました。で、コンボボックスに項目を
追加しようと、CMainFrameのメンバ関数に下のコードを入れました。

CCombBox* pCombo = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO);
pCombo.InsertString(-1, "aaaaa");

ところが実行してみるとコンボボックスに項目が追加されません。
どんな原因が考えられるでしょうか。
0163デフォルトの名無しさんNGNG
ソースからコピペで持ってくることはできんのか
追加されてないというのはどうやって確認したのか
0164デフォルトの名無しさんNGNG
CCombBox* pCombo = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO);
pCombo.InsertString(-1, "aaaaa");

問題の件はどこが悪いのかはしらんけど、これってコンパイル通るのか?
なんかすごいことしまくってるな。
0165デフォルトの名無しさんNGNG
追加されるされないの前にコンパイルできないよねぇ。
もいちど見直してみてはいかが?>>162
0166162NGNG
レスありがとうございます

>163
コンボボックスをクリックしてもaaaaaが表示されませんでした
>164
すいません
CComboBox* pCombo = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO);
pCombo->InsertString(-1, "aaaaa");
の間違いでした。
0167デフォルトの名無しさんNGNG
コンボボックスの高さ設定とかは?よくわかんないけど。
0168デフォルトの名無しさんNGNG
>>167
オレもそう思って高さ縮めてやってみたけど
追加すると拡張されるようだ
0169デフォルトの名無しさんNGNG
そこらへんが気になるならとりあえず
SetCurSel
0170デフォルトの名無しさんNGNG
ダイアログバーにメッセージが飛んできてない。
0171デフォルトの名無しさんNGNG
CTreeCtrlで作成した階層構造を保存したり読み込んだりしたいのですが、
どのようにデータを保存したらよいのでしょうか?
0172デフォルトの名無しさんNGNG
>>171
XML
0173デフォルトの名無しさんNGNG
ちょっと質問。
CButton.Create()で設定したテキストを取りだしたいんですが、どうすればいいでしょうか?
ボタン状態を取得するのはあったんですが、それはスタイル情報だけみたいなんです。
よろしくです。
0174デフォルトの名無しさんNGNG
MFCじゃなくても良いのですが
バイナリデータを表示してくれるクラスはありますか?
0175デフォルトの名無しさんNGNG
>>173
GetWindowText()
0176デフォルトの名無しさんNGNG
>>174
そりゃ16進ダンプで出せってことか?
多分ないぞ。自分で作れ。
0177デフォルトの名無しさんNGNG
関係ないけどCButton.Create()という書き方に違和感がある
0178デフォルトの名無しさんNGNG
>>174
デバッグ用ダンプなら
CDumpContext
CObject::Dump
AfxDump
というのがあるが

データを16進数で文字列化したいっていうのだったら
wsprintf(DumpBuf, "%02x", buf[i]);
とかでループすれば?
0179デフォルトの名無しさんNGNG
2進数で表示するって意味だったりして<バイナリデータ
0180173NGNG
>>175
�dくす!
0181デフォルトの名無しさんNGNG
ディレクトリを指定できるエディットボックスを作りたいんだけど、
そんなコントロールないのかな?

コンボボックスのボタンの所が"..."ってなってるヤツ。
0182デフォルトの名無しさんNGNG
あるからそういうのが存在するんだろ。
0183デフォルトの名無しさんNGNG
>>181
ようわからんけど、標準のダイアログの引数うんにゃってやってなんかしたら
ディレクトリのパスは取得出来たと思うぞ。
0184デフォルトの名無しさんNGNG
>>181
1."..."というテキストを設定したボタンをエディット・ボックスの横に置く
2.ボタンにCFileDialogを起動してパスを取得するコードを付ける
3.取得したパスをエディット・ボックスに入れる
0185デフォルトの名無しさんNGNG
>>184
4.最後によく煮込んだカレーをまんべんなくかける。

これで完璧。
0186デフォルトの名無しさんNGNG
質問はコンボボックスだっつってんのに。
0187デフォルトの名無しさんNGNG
>>186
> ディレクトリを指定できるエディットボックスを作りたいんだけど、

??????
0188デフォルトの名無しさんNGNG
これだろ?
http://www.codeproject.com/editctrl/fileeditctrl.asp
0189デフォルトの名無しさんNGNG
ぁっ、ソレソレ。
ありがとうございます。
0190デフォルトの名無しさんNGNG
エクスプローラで、デスクトップ以下のディレクトリがツリー表示で出て、
ディレクトリを選択できるヤツあるじゃないですか?
あれはどうやるんですか?
0191デフォルトの名無しさんNGNG
>>190
ttp://codeguru.earthweb.com/treeview/CDirTreeCtrl.shtml
ttp://codeguru.earthweb.com/treeview/DynmDirTree.shtml
0192デフォルトの名無しさんNGNG
ttp://codeguru.earthweb.com/treeview/DirTreeCtrl.htm
これも
0193デフォルトの名無しさんNGNG
ありがとうございます。
なんていい人達なんだ・・・
金持ちになったら雇ってあげます。
0194デフォルトの名無しさんNGNG
>>193
そんな気使わなくていいから今すぐ千円くれ。
0195デフォルトの名無しさんNGNG
>>193
そんな気使わなくていいから今すぐ一万円くれ。
0196デフォルトの名無しさんNGNG
>>194-195
オイおまいら
>>191-192を書いたのはオレなんだが・・・
0197デフォルトの名無しさんNGNG
>>196
オレオレ詐欺ですか?
0198デフォルトの名無しさんNGNG
楽しい雰囲気のとこすみません。

CEditViewにログを出力していくようなプログラムなんですが
ログを保存しようとすると文字化けしてしまいます。

画面上は正しく表示されているんですが、
保存するとUNICODE変換されてしまっているようです。

hEdit.ReplaceSel(strbuf); //strbufはMBCS
でも
::SendMessage(hEdit, WM_GETTEXT, sizeof(buf), (LPARAM)buf); //bufはMBCS
でも
LockBuffer();でみると勝手にUNICODEに変換されてしまっています。

なにが原因なのかさっぱりわからないんです。
よろしくお願いします。

.Net2003 XPSP1
0199デフォルトの名無しさんNGNG
画像の表示について質問があります。
サブクラスにしたstaticコントロールに画像ファイルをドラッグ&ドロップして
画像を表示させようとしていますが、ドラッグした後に一度ウィンドウを
他のウィンドウの下に隠さないと描画されません。
OnPaintを直接呼び出したり、WM_PAINTのメッセージを送ってもダメなので
解決法がわかりません。

.Net2003Pro XPProSP1です。
よろしくお願いします。
0200デフォルトの名無しさんNGNG
InvalidateRect()かな?
0201デフォルトの名無しさんNGNG
PAINTメッセージは無効領域が無いと描画しません
無効領域(Windowsを一度隠すとか)ができるとWM_PAINが発生し、
めでたく描画できます。
InvalidateRectはこの無効領域を発生させるためのものです。
0202199NGNG
>200-201
OnDropFiles()の最後で利用したら解決しました。
ありがとうございます。
0203デフォルトの名無しさんNGNG
>>198
MFCから離れて久しい俺が答えるのもはばかられるけど
NT系は内部で文字列をUnicodeで管理してるからじゃないですか?
0204デフォルトの名無しさんNGNG
一連の流れと
>>198
の出だしに藁他
0205デフォルトの名無しさんNGNG
CImageList クラスで、

BOOL GetImageInfo( int nImage, IMAGEINFO* pImageInfo ) const;

 nImage :イメージの 0 から始まるインデックス。

を用いて、たとえばリストの3番目のIMAGEINFOを得ようと、 nImage に2といれても、
イメージリスト全体の情報が取られるようで、
そこから得られた HBITMAPを描画すると、イメージリストの全体の画像が表示されます、
リストの特定の番目の IMAGEINFO が得られるような雰囲気がある関数なんですが、
そうなってくれません。
任意の IMAGEINFO が欲しいときはどうしたらいいでしょうか?
0206デフォルトの名無しさんNGNG
>>205
先ずはマルチはよせ。
0207デフォルトの名無しさんNGNG
>>205
pImageInfo->rcImage
0208デフォルトの名無しさんNGNG
ちょっと質問を。
"2003/03/02 12:34:56"といったような文字列をCTimeに変換する関数はありますか?
sscanf使っても出来るんですが、この手の変換は良く使われそうだからありそうな気が。
0209デフォルトの名無しさんNGNG
>>208
CTimeのメンバを調べてみる
オブジェクト作成に関する関数は以下の三つ

CTime()
GetCurrentTime()
operator =

勝手形式で文字列化したものは自分で処理するべし
0210デフォルトの名無しさんNGNG
>>208
直接は無いような気が。
InternetTimeToSystemTimeとか、COleDateTime::ParseDateTimeとか、代替がきくやつはあるけど。
どっちも反則気味だけど
0211デフォルトの名無しさんNGNG
年月日の形式は国によって全然違うから
一般的なものはないんじゃないかな。
0212デフォルトの名無しさんNGNG
COleDateTime::ParseDateTime
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_MFC_COleDateTime.3a3a.ParseDateTime.asp

これならいけそうだな
0213208NGNG
>>210 >>212
おお、出来ました出来ました。
intで年月日バラバラと書くのがかっこ悪いと思っていただけなので、これが求めていたものです。
ありがとうございました〜。
0214デフォルトの名無しさんNGNG
質問お願いします。
MFCのAppWizardで生成されあcppファイルには全て先頭に

ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

と書かれますが、なぜデバッグ時だけTHIS_FILEを変数として定義
する必要があるのでしょうか?
0215デフォルトの名無しさんNGNG
visual C++6.0を使おうと思うんですが、ネットで使い方載ってるサイトあります?
初心者レベルで、本当に1からみたいなやつで。
0216デフォルトの名無しさんNGNG
割れ厨は帰れ。通報するぞごるぁ。
0217デフォルトの名無しさんNGNG
>>20
初めて聞いたよ。詳しく教えてくれ。
0218デフォルトの名無しさんNGNG
>>214
DEBUG_NEWで確保したメモリをdelete忘れしたときに、DEBUG_NEWされたソースファイル名と行番号を表示するのに使うから。
別に無くてもプログラム自体は動く。
0219デフォルトの名無しさんNGNG

1つのクラス(A)を複数のクラス(B,C,D)で使っているんだけど、

そのAクラスにブレークポイントをおいた場合、
デバッガ上で、どのクラス(A,B,C)から呼び出されたかかを知る方法は無いでしょうか?
プログラム的に理解できるように作成するしか無いでしょうか?

0220デフォルトの名無しさんNGNG
>>219
そのためのスタックトレース。
0221デフォルトの名無しさんNGNG
スタティックとボタンに貼り付けるアイコンについて質問です。
リソースで96x96(256色)のアイコンだけを作成して下のように
SetIconで貼り付けたのですが、サイズが32x32に縮小されてしまいます。

m_Static1.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));
m_Button1.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON2));

縮小されずに表示するにはどうすればいいですか
よろしくおねがいします。

0222デフォルトの名無しさんNGNG
>>221
アイコンやめてビットマップ貼ったら?
0223221NGNG
>222
最初はビットマップでやっていたのですが画像の背景を
透過にしたかったのでアイコンにしました。
ビットマップでも画像の背景を透過できるのであれば
どのような方法があるのでしょうか?
0224221NGNG
自己レスです。
m_Button1.SetIcon((HICON)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1),IMAGE_ICON,0,0,LR_DEFAULTCOLOR));

LoadImageがキャストできたのでこの方法で解決しました。
0225デフォルトの名無しさんNGNG
IDD_FORMVIEWってどうやってはりつけするんですか?
0226デフォルトの名無しさんNGNG
>>225
釣られませんよ。
0227デフォルトの名無しさんNGNG
ちょっと質問させてもらいますね。
MFCにはあんまり関係ないんですけど…
最近VCがやたら固まります。
特にビルドとかしたら、かなりの確立で「応答なし」状態になってしまいます
以前まではまったくこんなことはなくすらすらとビルドできていたのですが…
どなたか解決法おしえてください
おねがいします
0228デフォルトの名無しさんNGNG
>>227
現象出る直前に何をしてたか語れ。
0229デフォルトの名無しさんNGNG
>>228
いぁ、普通にビルドしてたんすよ。
そしたら急に固まっちゃって…、それ以来ずっとです
0230デフォルトの名無しさんNGNG
入れ直せば?
0231デフォルトの名無しさんNGNG
取り敢えず.nobファイル消してみ
0232225NGNG
つりじゃないです。
本当にわからないんです。
0233227NGNG
だめです、再インストールも試してみましたが。どうしてもコンパイル時に
固まります。
>>.nobファイル
これ自体見当たらないのですが…どこにあるのでしょうか?
0234227NGNG
固まるというよりも、コンパイラからの応答がなくなっているという感じです
VC++自体は固まってはいません。ビルドの中止も選べますが…選んでも何の
応答もありません、結局のところ強制終了するしか次の作業に進む方法はありません

いったいどうなってるんでしょう…
0235227NGNG
何度も何度も申し訳わけありません。
Debugフォルダを消すとビルド+コンパイルが可能になります。
しかしいったんDebugフォルダができてしまうと、それ以降コンパイルができなく
なるようです…
0236デフォルトの名無しさんNGNG

OSごと再インスコしたら?
もしくはVCだけ、アンインスコ/インスコするとか。

メモリ周りは大丈夫かな?
うちはメモリ設定がSTDだと、メモリがスピードに
ついていけずに誤った値になってしまってたよ。

時々、いきなりリブートしてたんだけど、
メモリ設定を遅めにしたらmemtest86でも
エラーが出なくなったし安定した。
0237デフォルトの名無しさんNGNG
>>227
それ、うちもたまにある。再現不可能。
でも、忘れたころに起きる(w
ビルド直前にファイルは保存するみたいなので、
KILLしてもソース関係は最新状態で残るみたいだけど。
ビルドは終わったのに制御が戻ってこないっていう感じ。
ボタンやメニューはビルド中のステータスのまま。
なんか、特定の操作を行った時に起こる感じはするが、
それがどういう手順なのかはわからない。
ビルドを中止した後に再ビルドすると、
起きやすい感じ(あくまでも感じ)はする。
0238デフォルトの名無しさんNGNG
もしかして>>231は.ncbのことを言ってるのではなかろうか。
0239デフォルトの名無しさんNGNG
メニューのオーナードローなんかで、
無効で灰色になっているメニューを描画する関数をなんて言いましたっけ?
誰か覚えている方、関数名とその引数フラグを教えて下さい。
0240デフォルトの名無しさんNGNG
>>227
XPで使用しているとき、VCのsp5を入れていないと
起こるようです。sp5を入れたらほぼ無くなります
0241デフォルトの名無しさんNGNG
>>239
DrawState
引数はMSDNで...
0242デフォルトの名無しさんNGNG
>>239
DrawState? 詳細は自分で調べて。
0243デフォルトの名無しさんNGNG
あうちちち。リロードしてから書けばよかった…。
0244デフォルトの名無しさんNGNG
>>239
灰色文字列
かも
0245227NGNG
皆さんお騒がせしました。
sp5入れたら解決しました
ありがとうございますm(_ _)m
0246デフォルトの名無しさんNGNG
VS6.0SP6マダー? マチクタビレターマチクタビレター
0247デフォルトの名無しさんNGNG
98世代だかんねー もうじき(ry
0248デフォルトの名無しさんNGNG
MFCでプロセス間でメモリを共有させるにはどうすればよいのでしょうか?
0249デフォルトの名無しさんNGNG
>>241 >>242 >>244
どうもありがとうございました
0250デフォルトの名無しさんNGNG
>>248
MSDN読め。
共有メモリ、セマフォ、mutex、選り取り緑だ。
0251デフォルトの名無しさんNGNG
エクスプローラー上で、現在選択しているファイル名を取得したいんですが、
何かいい方法はないですか?
アクティブになっているエクスプローラのウィンドウハンドルとか取得すればなんとかなりますか?
0252デフォルトの名無しさんNGNG
>>251 すべてXPの場合だが
エクスプローラのウインドウ(クラス名ExploreWClassかCabinetWClass)をEnumWindowsなどを利用して検出、
その子ウインドウのクラス名SHELLDLL_DefViewをFindWindowExを利用して検出
そのまた子ウインドウのクラス名SysListView32のウインドウがフォルダービューのウインドウとなるので
同じくFindWindowExを利用して取得。

int Selected=ListView_GetSelectedCount(ハンドル);
関数を利用すれば選択されているファイル数が取得できる。

while(1)
{
i = ListView_GetNextItem(ハンドル,i,LVNI_ALL|LVNI_SELECTED);
if(LvItem->iItem == -1)
break;
}
と回せば、選択されているアイテムのインデックスが次々に返る。

しかし、残念ながらそのアイテムのテキストを取得する方法がどうしてもわからん。
恐らくListView_GetItemかListView_GetItemTextを使用すると思われるが、
ことごとく失敗するのでその先は自分で調べてください
■ このスレッドは過去ログ倉庫に格納されています