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

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

■ MFC相談室 MFC12.dll■

1 :デフォルトの名無しさん:04/10/04 09:12:51
Microsoft Foundation Classライブラリ専用スレです。

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

関連リンクは >>2-10 の辺り。

2 :デフォルトの名無しさん:04/10/04 09:14:58
>>1 訂正
>■ VisualC++(MFC限定)相談室 MFC10.dll■
■ VisualC++(MFC限定)相談室 MFC11.dll■


3 :デフォルトの名無しさん:04/10/04 09:17:27
>>2 さらに訂正
>■ VisualC++(MFC限定)相談室 MFC11.dll■
■ MFC相談室 MFC11.dll■

4 :デフォルトの名無しさん:04/10/04 09:21:30
過去スレ
■ 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

5 :デフォルトの名無しさん:04/10/04 09:24:12
MFCってもうすぐなくなるそうですが、本当ですか?

6 :デフォルトの名無しさん:04/10/04 09:24:59
>>1


7 :デフォルトの名無しさん:04/10/04 10:01:32
>>5
本当です。

8 :デフォルトの名無しさん:04/10/04 10:05:13
MFC42.DLL
   シニ

で命運尽きたと見るべきだろう

9 :デフォルトの名無しさん:04/10/04 10:40:34
>>8
いつの時代の話だ。
いまはMFC70.dllだぞ。

10 :デフォルトの名無しさん:04/10/04 13:02:29
>>5, 7-8
これテンプレの一部かと思って貼ったんだけど違ったのかな?

11 :デフォルトの名無しさん :04/10/04 23:23:28
突然質問で失礼します。
CDialogの継承クラスにおいて
ワーカスレッドからメインスレッドに15msecおきに
SendNotifyでユーザ定義メッセージを送って
関数を実行させようとしています
しかし、どうしてもランダムに
200msec前後の遅延が発生します
どうにか15msecぐらい間隔で目的の関数を
呼び出すことはできないでしょうか?
どうか、アドバイスをよろしくお願いします

12 :デフォルトの名無しさん:04/10/05 00:05:35
>>11
厳密なタイマーを使うには、マルチメディアタイマー関数を使うしかない。
しかし、200mSecも遅延しているから、そういう問題じゃないと思う。
多分、メッセージループのコールバックで時間がかかっている。
過剰な描画要求・過剰な計算をコールバックプロシージャで行っていないか確認するのが先決。
マルチスレッドにできるかどうか検討するのはその後。

13 :デフォルトの名無しさん:04/10/05 00:21:15
>>12
アドバイスありがとうございます
2chは初めてで、嫌悪感をもってましたが
思い切って質問してよかったです。

14 :デフォルトの名無しさん:04/10/05 00:44:39
>>13
一言余計

15 :デフォルトの名無しさん:04/10/05 00:59:52
>>13
http://pc5.2ch.net/test/read.cgi/tech/1095534704/320-
マルチ。おまえに嫌悪感を抱いた。

16 :デフォルトの名無しさん:04/10/05 17:50:59
ATL スレとこちらと、どちらの質問が妥当か迷ったのですが
こちらに書き込みさせていただきます。

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

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

なにか OLE 汎用のイベントのようなものがあるのでしょうか。
よろしくお願いします。

17 :デフォルトの名無しさん:04/10/05 20:45:23
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環境では使えないし、何よりたかが日本語の
インクリメンタル検索でこんなに手間がかかるのは直感的におかしいと
思うので、誰かいい方法をご存知の方がいらっしゃったら教えてください。

18 :17:04/10/05 20:47:46
WM_IME_COMPOSITOIN→WM_IME_COMPOSITIONでした。

19 :デフォルトの名無しさん:04/10/05 20:51:54
>>14
マルチメディアタイマを使ってみたのですが
コールバック関数内で呼び出している関数が
イベント発生時に呼び出されていないように
見える現象が10000回に一度程度発生します
一度発生すると5回前後スルーされているようです
イベントインターバルを100msec、
コールバック関数内の処理を軽くしても改善されません
どうしてでしょうか?
心当たりがありましたらアドバイスよろしくお願いします。

20 :デフォルトの名無しさん:04/10/05 21:29:12
>>19
http://pc5.2ch.net/test/read.cgi/tech/1095534704/337

21 :デフォルトの名無しさん:04/10/06 18:21:03

起動したプログラムの絶対パスがわかる方法ありますかね?
自分で調べればいいのですがどうも見つからなくて、わかりません
全てのディレクトリを検索する場合だとうまくないのでいい方法ご教授おねがいします


22 :デフォルトの名無しさん:04/10/06 18:39:59
>>21
GetModuleFileName

23 :デフォルトの名無しさん:04/10/07 15:50:38
VC++6.0を使っています。
子ウィンドウにタブとかスライダーなどいろいろ配置したいのですが
何かいい方法ってあるでしょうか?
プロパティシートを使えばとも思いましたが、[OK]ボタン等が必要ないので
他の方法を考えております。
いい方法をご存知の方、アドバイスよろしくお願いします。

24 :デフォルトの名無しさん:04/10/07 19:34:21
本読め

25 :デフォルトの名無しさん:04/10/07 19:57:20
いい方法はないです。
サイズの変更がめんどくさいなら、タブに WS_MAXIMIZE

26 :デフォルトの名無しさん:04/10/09 05:32:36
CFormViewじゃいかんの?

27 :デフォルトの名無しさん:04/10/09 09:41:13
DLLを作り終わってから、ATLクラスはC++呼び出しで直接インスタンス化できないことを
知りましたorz

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



28 :デフォルトの名無しさん:04/10/09 12:20:39
>>27
ウィザードが作った雛形どおりにすればよいと思う。

29 :デフォルトの名無しさん:04/10/09 13:56:39
>>28
ATLオブジェクトに内部的なメソッドも実装してしまって、VC++からでもCOM呼び出しで使うようにすべきだ、
という理解でいいんでしょうか。
DLLにATLでないクラスも定義している場合なんかは、デフォルトで作られるヘッダファイルでは
それらが利用できませんよね?

あ、ひょっとしてそのヘッダに書き加えればいいのか?


30 :デフォルトの名無しさん:04/10/09 17:27:19
内部的なクラスはCOMオブジェクトにする必要はない。
外部から使用される対象のクラスをCOMオブジェクトにすればよい。

31 :デフォルトの名無しさん:04/10/09 20:46:26
CtreeCtrlを使ってあるデータを階層上に表現したいのですが
あるサンプルを見ながら書いてみたのですが"+","-"が表示されません。
そのソースを見る限りでは
InsertItem("asfd", 0, 0, hParent );
InsertItem("", 0, 0, hParent );
これだけで+マークが表示されてるようですが。
同じようにやっているつもりでも表示されません
なんでですか?



32 :デフォルトの名無しさん:04/10/09 21:39:28
31
TreeControlのプロパティを 「ボタンあり」
または
windowスタイル += TVS_HASBUTTONS
のどちらか。

33 :デフォルトの名無しさん:04/10/10 09:57:07
CEditクラスの変数を、リソースエディタでダイアログに張り付けるようにしないで、
ダイアログクラスのメンバとして確保しました。その後、ダイアログクラスの
OnInitDialog()でCEdit型変数のCreate()を呼び出してものっぺりとしてしまって
リソースエディタで張り付けたときのような窪みを作れません。どうやったら
窪みを付けられますか?実際のCreateは以下のようにしてます。

 m_cEdit.Create(WS_VISIBLE|ES_WANTRETURN|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE,
cRect, this, IDC_ED_TEST);

34 :デフォルトの名無しさん:04/10/10 11:05:52
>>33
WS_EX_CLIENTEDGEあたりじゃないのかなぁ

35 :33:04/10/10 11:40:01
>>34
とりあえず
 m_cEdit.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
 m_cEdit.ShowWindow(SW_SHOW);
を直後に入れてみましたが相も変わらずです。@WinXPSP1 VC6SP6

36 :デフォルトの名無しさん:04/10/10 12:41:20
WS_BORDER

37 :デフォルトの名無しさん:04/10/10 13:18:35
拡張スタイルは CreateWindowEx で指定できて
CreateWindowで指定できないよな

38 :33:04/10/10 13:55:57
とりあえず自前の派生クラスを作成し、PreCreateWindow(CREATESTRUCT& cs)で
 cx.dwStyleEx|=WS_EX_CLIENTEDGE;
としたところ無事に窪みが発生しました。

CreateWindowEx()の方は引数をどうしたらいいのかさっぱりです

39 :デフォルトの名無しさん:04/10/10 14:41:12
MFCならCWnd::CreateEx

40 :デフォルトの名無しさん:04/10/10 14:59:51
>>39 は?

41 :デフォルトの名無しさん:04/10/10 21:56:20
CException の ReportError() がうまく動作しなくて困っています。

Win32 プロジェクトを作成し、
「コンソールアプリケーション」「MFC」を選ぶ。
コードは
try {
 CStdioFile fin("in.txt", CFile::modeRead);
} catch(CException* e) {
 e->ReportError();
 e->Delete();
}
これを "in.txt" がない状態で実行すると、
「in.txt が見つかりませんでした。」とうまく表示されます。

しかし、MFC の使用を
「共有 DLL で MFC を使う」から「スタティック ライブラリで MFC を使用する」にすると、
ReportError() はなにもメッセージを表示しません。(空文字で、[OK] ボタンのみ)
debug / Release どちらもだめでした。

スタティック ライブラリで ReportError はだめなのでしょうか?


42 :41:04/10/10 21:58:08
すいません、
環境:Visual Studio .NET 2002 です


43 :デフォルトの名無しさん:04/10/10 21:59:49
MFCの例外スローを使わないようにするのが一番手軽なのだが。

44 :デフォルトの名無しさん:04/10/10 23:09:07
ところで、try〜catchとTRY〜CATCHって、いまはtryのほうがいいんですよね?

マクロと機能がかぶってるのって、どっちつかうか迷う。

45 :デフォルトの名無しさん:04/10/11 01:24:17
>>41
文字列リソースのAFX_IDP_FILE_NOT_FOUNDが見つからないから。
debugモードだとアサート出なかったか?

46 :デフォルトの名無しさん:04/10/11 11:07:05
スタティックリンクにするなら、アプリのリソースから、ライブラリのリソースをインクルードしなきゃ。

47 :41:04/10/11 16:30:02
>>43-46
afxres.rc をコピーしてきてプロジェクトに加えたら、
うまくいきました!
どうもです。


48 :41:04/10/11 17:05:56
>>47
コピーじゃくてインクルードするのがいいですね。
すいません。


49 :17:04/10/11 20:32:26
誰かわかる方いらっしゃらないですか〜?
なんだかとてもよくありそうな処理の気がするんですが。

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

でも相変わらずUnicode依存だし(今回はそれでいいんですが)、
直感的に「この処理は汚い」と思うので、アドバイスいただけたら
うれしいです。または、「前そんな処理やったけどそれしか方法が
なかった」というのでもいいです。

50 :デフォルトの名無しさん:04/10/11 22:00:31
分割ウィンドウを作るときに、createviewで各ビューのサイズを設定して
いるんですが、1行2列で一列目がさらに2行に分割されているような
ウィンドウを作る場合、1列めの二つのビューの列幅がどうしても極狭に
なります。これを任意の幅にしたい場合、ウィンドウを作ったあとにリサイズ
するしか方法はないでしょうか?

51 :デフォルトの名無しさん:04/10/11 23:02:36
CreateViewの前後に SetColumnInfo とか SetRowInfo 使うらしいです

52 :デフォルトの名無しさん:04/10/12 23:39:56
>>51
やっぱそれしかないですか・・・
せっかくサイズ設定できるのに、あとでSetColumnInfo とかつかうと
なんか二度手間でかっこわるいんですよねぇ・・・

53 :デフォルトの名無しさん:04/10/13 20:30:57
CDocumentなんてデフォルトコンストラクタがprotectedなのにオブジェクトの生成が
できるの?
ったく、わけわかんね

54 :デフォルトの名無しさん:04/10/13 20:48:56
CRuntimeClass::CreateObject

55 :デフォルトの名無しさん:04/10/13 22:07:27
CSplitterWndでフレームを分割しているのですが、サイズを可変できる必要はないので
サイズを固定し、分割ウィンドウの境界線を補足したいのですがどうすればいいのですか?

56 :デフォルトの名無しさん:04/10/13 22:11:21
>>55
サイズ変更しないんなら単にペインを子ウィンドウとして配置するだけだと思うが。

57 :デフォルトの名無しさん:04/10/13 22:48:10
>>56
なにをキーワードにMSDNを引けばいいの?

58 :デフォルトの名無しさん:04/10/13 22:53:06
>>57
・・・。
CWnd・・・かな・・・。

59 :デフォルトの名無しさん:04/10/13 22:55:26
タブコントロール内のタブページの領域の大きさを取得する
方法ってありますか?

60 :デフォルトの名無しさん:04/10/13 23:03:04
>>55
CSplitterWndを入力禁止にするのはどう?

61 :デフォルトの名無しさん:04/10/13 23:07:44
>>60
アドバイス頂けるのはありがたいでのすが、造語?を使われると意味がわかりません。
入力禁止ってなんですか?

62 :デフォルトの名無しさん:04/10/13 23:14:13
ぇー、EnableWindow(FALSE) のこと。

63 :デフォルトの名無しさん:04/10/13 23:24:45
::EnableWindow(m_wndSplitter.m_hWnd,FALSE);
すると、スクロールも出来なくなりました

64 :デフォルトの名無しさん:04/10/13 23:57:43
少し自分でも試行錯誤してみたら?

65 :デフォルトの名無しさん:04/10/14 00:01:20
なんじゃそりゃ
わかないならはなっから口出しすなよ、ぼけ

66 :おれおれ:04/10/14 00:47:20
CSplitterWndの派生クラスを作る。例えばCHogeWndとする。
OnLButtonDown()とOnMouseMove()をオーバーライドする。

void CHogeWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
    CWnd::OnLButtonDown(nFlags, point);
}

void CHogeWnd::OnMouseMove(UINT nFlags, CPoint point)
{
    CWnd::OnMouseMove(nFlags, point);
}

67 :デフォルトの名無しさん:04/10/14 00:58:24
>>66
これだけだとマウスカーソルの変化が食い止められないです

68 :67:04/10/14 01:03:27
失礼しました、直りました。

69 :デフォルトの名無しさん:04/10/14 23:03:29
CFileDialogクラスを使用して
フォルダのみ選択できるダイアログを作りたいのですが

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

どういう方法でダイアログを閉じる事ができるんでしょうか

70 :デフォルトの名無しさん:04/10/14 23:21:15
>>69
開くボタンに対するイベントハンドラ作れば

71 :デフォルトの名無しさん:04/10/14 23:23:02
http://ahiru2.zive.net/joyful/img/3951.zip
http://ahiru2.zive.net/joyful/img/3944.zip

72 :69:04/10/14 23:25:37
>>70
そういわれればそうですね
やり方がよくわからないんですが
サブクラス化とか使わないとだめっぽいですかね

やった事ないですが調べつつやってみます

73 :デフォルトの名無しさん:04/10/14 23:29:04
>>69
フォルダ選択だけが目的なら
SHBrowseForFolder使うのは?

74 :デフォルトの名無しさん:04/10/14 23:33:45
>>73

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

CFileDialogでやってみてダメならその方向でいこうと思います

75 :69:04/10/16 00:42:46
色々やってみましたがダメでした・・・OTL

素直にSHBrowseForFolderで行きます

・・なんでFolderDialogみたいなクラスないんだろ・・


76 :デフォルトの名無しさん:04/10/16 01:08:04
そこでWTLって言いたいけどスレ違いだから言わない

77 :デフォルトの名無しさん:04/10/16 01:12:41
WTLなんて糞みたいなライブリつかえるかよ
ATL、MFC、VCLすべて糞だよ

自作のフレームワークでOK


78 :デフォルトの名無しさん:04/10/16 01:14:52
>>77が一番クソ

79 :デフォルトの名無しさん:04/10/16 01:21:11
なにを根拠に?

80 :デフォルトの名無しさん:04/10/16 01:27:09
用途と機能を限定してコンパクトにまとめた
ライブラリを作るのもアリだと思うけど

よっぽど出来がよくない限り仕事には使えんわな

81 :デフォルトの名無しさん:04/10/16 01:54:53
>>79
既存の他人が作ったライブラリは使いこなせず
自作の物しか理解できない典型的な無能タイプでしょ。

82 :デフォルトの名無しさん:04/10/16 02:23:52
Classwizardでエディットボックスの最小値、最大値を
設定したのですが、
ボタンが押されたときに、エディットボックスに範囲外の値が入力されているか
知りたいのですが、どのようにしたらよいのでしょうか。



83 :デフォルトの名無しさん:04/10/16 06:17:11
>>82
入門書持ってる?
本見ながらやればできる。

84 :デフォルトの名無しさん:04/10/16 08:39:26
>82
検索のヒント。
・UpdateData()
・DDX

85 :デフォルトの名無しさん:04/10/16 09:04:05
>>84
ヒントになってないと思う。
DDXなんてわざわざ学習する必要ないし。
初心者相手にムダで遠回りな回答するのは止めろ。
悪質だぞ。

86 :デフォルトの名無しさん:04/10/16 09:43:27
そういうブラックボックスがあることくらい知っておいてもばちは当たらんと思うが。
あーそうか、自分が知らなかったもんだから必死なのか。

87 :デフォルトの名無しさん:04/10/16 13:02:33
>>82
ボタンが押されたときに、エディットボックスに範囲外の値が入力されているか調べるようにする。

88 :デフォルトの名無しさん:04/10/19 16:18:08
CString tmp="a\nb\nc\n";
とかやった後
tmp中の改行コードを"\n"という文字列に変換してくれるクラス関数はありますか?

89 :デフォルトの名無しさん:04/10/19 16:24:24
>>88
MSDNでCStringのメンバ眺めろよ
CString::Replace

と言いたい所だけど2バイト文字を考慮しないバグがあった気がする。

90 :デフォルトの名無しさん:04/10/19 18:50:00
条件あげない方も悪いんだろうけどバージョン依存のある関数名を
当たり前のように出してしまうのもどうかと思う

91 :デフォルトの名無しさん:04/10/20 11:17:09
Excelでコピーや切り取りをした時のようなアニメーションする点線はどのように表示すればよいのでしょうか?

CPenの種類を見てみましたがありませんでした。

92 :デフォルトの名無しさん:04/10/20 12:07:35
std:mbcstring とかが有ればなぁ。。。

93 :デフォルトの名無しさん:04/10/20 16:57:53
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();
}


94 :93:04/10/20 17:01:24
# 肝心の質問忘れた orz
【質問】
BitBlt() は 1 を返しますがウィンドウは灰色のままです。
どこがマズいのでしょうか?

95 :デフォルトの名無しさん:04/10/20 18:01:01
>>93
> mydc = this->CreateCompatibleDC(NULL);
これコンパイル通らんだろ。
あと裏画面用のビットマップはどこ?

96 :93:04/10/20 18:24:51
>>95
はぅ!すいません。
mydc.CreateCompatibleDC(NULL);
でした。

あと、ビットマップはビットマップファイル(.bmp)では無く
DC上に描画したグラフ画像のことです。分かり難くてすいません。
実際には
mydc.MoveTo();
mydc.LineTo();
で色々描いてますが今回はテストのためFillSolidRect()を使いました。
(これでも豆腐が描画できるはずですよね?)

97 :デフォルトの名無しさん:04/10/20 18:30:54
>>96
いやそういうことじゃなくて、裏DCが描画する領域のこと。
作成したDCに最初に選択されているのは1x1のモノクロビットマップ。
だから必要な大きさのビットマップを作ってSelectObjectしないと。

98 :93:04/10/20 19:13:13
>>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); //追加
でできました。
きっとはじめから見越されてたんでしょうね・・・本当にありがとうございました。


99 :デフォルトの名無しさん:04/10/20 19:19:09
割り込むようですいません。
いろいろ調べたけど、どうしても分からないので質問させてもらいます。

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
です

100 :デフォルトの名無しさん:04/10/20 20:05:16
(LPCTSTR)IDI_ICON1

101 :デフォルトの名無しさん:04/10/20 20:07:33
>>100
(LPCTRSTR)
をなくしてもだめでした。

102 :デフォルトの名無しさん:04/10/20 20:44:00
>>99
AfxGetApp()->LoadIconで有効なアイコンハンドルが得られているか確認。
image_list.Addの戻り値を確認。
これ基本。

103 :デフォルトの名無しさん:04/10/20 21:08:48
AfxGetApp()->LoadIcon( IDI_ICON1 );
だと読み込み失敗で、
AfxGetApp()->LoadIcon( (LPCTSTR)IDI_ICON1 );
だと読み込みが成功していました。
でも、後者でも表示されませんでした

104 :デフォルトの名無しさん:04/10/20 21:24:14
CWinApp::LoadIconはUINTもオーバーロードしてるからIDだけでも失敗しないと思うんだけど、
根本的な問題はCImageList image_list;がローカルにあるのでスコープを抜けると破棄されること。

105 :デフォルトの名無しさん:04/10/20 21:36:37
>>104
ありがとうございました!!
image_listをメンバ変数に加えたら成功しました。!!

106 :デフォルトの名無しさん:04/10/20 21:53:30
よくあるよな。ハンドルとかアドレスで登録する関数のスコープに関する問題。
関数説明ドキュメントのどこにも「ローカル変数を指定しないで下さい。」とは書かれてないので、
入門者が必ず一度は通る落とし穴だ。

107 :デフォルトの名無しさん:04/10/21 00:50:23
ややこしいんだよなぁ。
CDC::SelectClipRgn はコピーを使うから元のオブジェクトは削除しなきゃいけないし。
CWnd::SetWindowRgn はオブジェクトをそのまま使うから削除しちゃいけないし。

108 :デフォルトの名無しさん:04/10/21 05:36:10
>>107 また見当はずれの馬鹿が北・・・

109 :デフォルトの名無しさん:04/10/21 14:58:21
WindowsXP
VisualC++.NET 2003

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


110 :デフォルトの名無しさん:04/10/21 15:15:51
そのアイテム以下をクリックしたら何もしないようにする

111 :109:04/10/21 15:54:17
CTeeCtrlになってるよorz

>>110
見た目も変えたいです。
説明悪くて申し訳ないです。

112 :デフォルトの名無しさん:04/10/21 15:54:26
ツリーアイテムにアイテムが有効/無効を示すフラグを持たせ、
フラグがfalseの場合はカスタムドローかなにかでアイテムをグレーに描画し、
アイテムをクリックしても何もしないようにする。
フラグがtrueの場合は通常処理。
と思いつきで答えてみる。

113 :デフォルトの名無しさん:04/10/22 21:33:33
ダイアログベースのアプリ作ってんですけど、ランダムなタイミングでダイアログ全体が
再描画されます。原因わかる人いませんか?
まだコントロールを並べて動きを考えているだけで中身は全然ないんですが...

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

OSが勝手に再描画をするタイミングって、制御できないんですかね?

114 :デフォルトの名無しさん:04/10/22 21:42:15
ActiveXコントロール関連の相談もここでいいのかな?
もしご存じの人がいたら教えてください。

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



MFCで作ったActiveXコントロールをVBで使ったときに、プロパティの値を
コンボボックスで指定できるようにしたり、内容の説明の追加や項目の順序
指定をしたいのですが、どうやればできるのでしょうか?
普通に作るとすべてカスタムプロパティになってしまいます。

115 :デフォルトの名無しさん:04/10/22 23:08:25
COMインターフェイスをV2用に拡張するだけじゃないの?
interface IMyControl{};
interface IMyControl2 : IMyControl{};

116 :デフォルトの名無しさん:04/10/23 08:35:10
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: 未解決の外部シンボル」
のリンクエラーが発生します。
どうすればいいのでしょうか。教えてください。

117 :デフォルトの名無しさん:04/10/23 11:00:49
>>116
DLLを利用する側のプロジェクトは何で作った?

118 :デフォルトの名無しさん:04/10/23 12:04:37
>>117
MFCアプリケーションです

119 :デフォルトの名無しさん:04/10/24 17:26:32
今日からVC++6.0でMFC(というかC++)をはじめました。とりあえず、画像ファイルを表示するSDIをつくってます。
んで、ファイルダイアログでファイルを選択して表示するところまで作ったのですが、
ファイルを選択してダイアログが消えた直後に画像が表示されなくて、ウインドウサイズ
の変更などをすると画像が表示されます。
ちなみに、ダイアログはメインのAppクラスから呼んでて、CViewの派生クラスのOnDraw()が実行されない
のが原因じゃないかなと、訳がわからないながらもいろいろ考えております。
ダイアログが消えた直後に画像を表示させるにはどうすればいいんでしょうか?
すんごく初心者の質問で申し訳ありません。



120 :デフォルトの名無しさん:04/10/24 17:36:43
>>119
CWnd::Invalidate
フレームワークに従って処理すれば勝手に呼ばれたと思ったけど違ったかな…

121 :デフォルトの名無しさん:04/10/25 12:04:51
CListViewの各項目を編集可能にするにはどうするの?

122 :デフォルトの名無しさん:04/10/25 12:12:47
>>121
スタイルを設定する

123 :デフォルトの名無しさん:04/10/25 12:17:01
>>121
ラベルしか編集できないので、各セルを編集したいならCodeGuru辺りで手頃なのを探すこと。
#最近作ったばかりだw

124 :デフォルトの名無しさん:04/10/25 14:31:53
GetDocument()
ってDebugモードとReleaseモードでinlineか否かをわけてるの?
どっちもinlineでいいじゃん

125 :デフォルトの名無しさん:04/10/25 15:02:56
>>124
通常、Debugビルドは最適化しないから、inline指定の有無に関わらずインライン展開されない。

126 :デフォルトの名無しさん:04/10/25 15:54:59
View内の一部だけを再描画したい場合InvalidateRectで指定領域を無効化できるのですが
CxxxView::OnDrawで無効化された部分だけ再描画したいのですがどうすればいいの?

127 :デフォルトの名無しさん:04/10/25 16:56:01
>>126
InvalidateRectで指定したRECTを覚えておく。

128 :デフォルトの名無しさん:04/10/25 17:00:40
>>127
マジですか?
それしかないのですか?

129 :デフォルトの名無しさん:04/10/25 17:01:48
>>128
CDCにクリッピング矩形を取得するメソッドがある。

130 :デフォルトの名無しさん:04/10/25 20:05:59
>>126
GetUpdateRect
GetUpdateRgn

131 :デフォルトの名無しさん:04/10/25 20:29:03
>>130
GetClipBox
こっちだろ

132 :デフォルトの名無しさん:04/10/25 21:50:32
どっち

133 :デフォルトの名無しさん:04/10/25 22:21:52
StatusBarに文字列を表示するにはCMainFrameで
m_wndStatusBar.SetPaneText(0,"hoge");
で駄目なのですか?

134 :デフォルトの名無しさん:04/10/25 22:31:43
ダイアログ上に直線(メニューでいうとセパレータのような)
を引くコントロールってありますか?

135 :デフォルトの名無しさん:04/10/25 23:02:52
>>134
ないと思う
DCに直接、MoveTO() してLineTo() かなぁ。

136 :デフォルトの名無しさん:04/10/25 23:08:54
なんか適当なコントロール置いてサイズを調整すると線らしきものができるけど

137 :デフォルトの名無しさん:04/10/25 23:11:12
>>134
高さの無いフレームとか。

138 :134:04/10/25 23:14:13
>>135
>>136
アドバイスありがdです

LineTOでやってみます

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



139 :デフォルトの名無しさん:04/10/25 23:17:21
それだけのためにDC確保するのも馬鹿馬鹿しいと思うけど。

140 :デフォルトの名無しさん:04/10/26 00:12:01
カスタムコントロール作ってもDCは確保されるじゃんよ
ばかかおめー

141 :デフォルトの名無しさん:04/10/26 00:13:41
むしろそれだけのためにコード書くのが馬鹿馬鹿しいだろ

142 :デフォルトの名無しさん:04/10/26 00:17:52
なら、コード書いてること自体馬鹿馬鹿しいだろ?
外注になげろよ

143 :デフォルトの名無しさん:04/10/26 00:24:23
>>142
外注に金払うこと自体馬鹿馬鹿しいだろ。
仕事とって来んなよ。

144 :デフォルトの名無しさん:04/10/26 00:27:49
>>134
ピクチャコントロール
Type=水平(垂直)縁取り


145 :デフォルトの名無しさん:04/10/26 00:36:38
>>143
おまえばかだろ?
普通プロパーと外注だと半分くらいの費用だぞ
プログラマなんて肉体労働者は時間4000円程度で雇えるんだよ

146 :デフォルトの名無しさん:04/10/26 00:40:12
CDialogBar を実行時に表示/非表示を切り替えれませんか?

147 :デフォルトの名無しさん:04/10/26 00:44:08
>>140
カスタムコントロール以外の手段が書いてあるのは読めないのかな?

148 :デフォルトの名無しさん:04/10/26 01:09:57
>>145
時間4000円払うこと自体馬鹿馬鹿しいだろ。
仕事とって来んなよ。

149 :デフォルトの名無しさん:04/10/26 01:11:41
>>146
::SetWindowLong(
 GetDlgItem(IDD_DIALOGBAR)->m_hWnd,GWL_STYLE,
 ::GetWindowLong(GetDlgItem(IDD_DIALOGBAR)->m_hWnd,GWL_STYLE) ^ WS_VISIBLE
);
じゃ駄目かしらん?

150 :デフォルトの名無しさん:04/10/26 01:12:38
>>148
おまい生きてること自体馬鹿馬鹿しいだろ。
死ねよ

151 :デフォルトの名無しさん:04/10/26 01:15:16
>>149
それだけじゃ、非表示にはできないんだな〜
ここの連中も大したことないねw

152 :デフォルトの名無しさん:04/10/26 01:28:44
>>150
わざわざ自殺すること自体馬鹿馬鹿しいだろ。
ボーッとしとけよ。

153 :デフォルトの名無しさん:04/10/26 01:29:55
>>152
おまえら邪魔。

154 :146:04/10/26 01:36:15
あの〜僕の質問はどうなったの?


155 :デフォルトの名無しさん:04/10/26 01:38:51
>>154
ShowWindow(SW_HIDE);

156 :146:04/10/26 02:01:50
>>155
思いつきいうのやめてくれませんか?試しました?
それだとウィンドウを最小化して最大化しないと消せません。
Invalidate()
なども試したけどNGでした。

157 :デフォルトの名無しさん:04/10/26 02:06:55
Recalcなんちゃらとか言うの呼ぶんじゃねぇの?

158 :デフォルトの名無しさん:04/10/26 02:09:35
>>156
なんでいちいちお前のために試さなきゃいけないんだ。
また思いつきでレスしてやるけど、
CFrameWnd::RecalcLayout()を試せ。

159 :146:04/10/26 02:19:05
>>158
へぇ、ばかかとおもってたらやるじゃんw

160 :デフォルトの名無しさん:04/10/26 02:22:58
>>159
あなたはこちらのスレの方がふさわしいですね。
http://pc5.2ch.net/test/read.cgi/tech/1097880265/

161 :デフォルトの名無しさん:04/10/26 02:43:53
>>160
とっちにそっちでも暴れてますよ

162 :デフォルトの名無しさん:04/10/26 02:57:45
あちきのことかしらん?

163 :デフォルトの名無しさん:04/10/26 08:07:28
ツールバー、ステータスバーと同じやりかたで
表示/非表示きりかえできるぞ



164 :デフォルトの名無しさん:04/10/27 20:35:29
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;
}

165 :デフォルトの名無しさん:04/10/27 20:35:53
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により擬似的にそのキーを入力するように
しているのですが…。

現在フォーカスの当たっている部分の指定方法が違うのでしょうか?

166 :デフォルトの名無しさん:04/10/27 20:59:33
SendInput使ってみたら?

167 :デフォルトの名無しさん:04/10/27 21:47:39
AfxBeginThreadで開始したスレッドの終了はどのようにして
知ることができますか?

168 :165:04/10/27 22:14:23
>>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でも送信されないようです。
クリップボードか何かを使い、インプットボックスに文字列の値が
一括して挿入できれば最良なのですが…。

169 :デフォルトの名無しさん:04/10/28 01:00:09
>>167
CREATE_SUSPENDEDでAfxBeginThread
CWinThread::m_bAutoDeleteをFALSEに
CWinThread::m_hThreadがシグナル状態になるまでWaitForSingleObjectで待つ
スレッドオブジェクトをdeleteする

170 :デフォルトの名無しさん:04/10/28 01:12:29
>>169
謝謝

171 :165:04/10/28 13:16:39
>>166さん
SendInputを利用して書き換えました。

  INPUT srINP[16];
  for(i = 0; i < 16; i++){
    srINP[i].type = INPUT_KEYBOARD;
    srINP[i].ki.wVk = WORD(SendStr.GetAt(i));
    srINP[i].ki.dwFlags = 0;
    srINP[i].ki.time = 0;
    SendInput(1, &srINP[i], sizeof(srINP));
  }

このようにして、CString型のSendStrに格納された文字列を
一文字ずつSendInputにて出力するように記述したところ、成功しました。

…成功したのですが、1回目と2回目ではなぜか値が異なります。

  SendStrの値
  1254002369000541

  一回目
  1254002369000541 (問題なし)

  二回目
  1254023690541 (0が2個以上続くと、2個目以降が表示されない)

WORD()の型変換をchar()にしたり、外してみたりしましたが、改善されませんでした。
1回目に正常な出力が行われているので、何が原因になっているのか見当がつきません。

どなたか気付いた点がございましたら、ご教授下さい。

172 :165:04/10/28 15:29:53
すみません、自己解決しました。

  INPUT srINP[16];
  for(i = 0; i < 16; i++){
    //キーを押す
    srINP[i].type = INPUT_KEYBOARD;
    srINP[i].ki.wVk = WORD(SendStr.GetAt(i));
    srINP[i].ki.dwFlags = 0;
    srINP[i].ki.time = 0;
    SendInput(1, &srINP[i], sizeof(srINP));
    //キーを離す
srINP[i].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &srINP[i], sizeof(srINP));
  }

単純に離すのを忘れていただけのようでした。
SendInputの情報がWebに殆ど載ってない…。

173 :デフォルトの名無しさん:04/10/28 23:21:13
初心者なんですけど教えてくださいネ
水平スライダーコントロールの値がうまく取得できないんです。
VC++6.0でMFCでやってんすけどググって調べたとおり

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

174 :デフォルトの名無しさん:04/10/29 10:00:32
>>173
CScrollBar*はCSliderCtrl*にキャストしないとダメでは?
CSliderCtrl* pSliderCtrl = (CSliderCtrl*)pScrollBar;
int iPos = pSliderCtrl->GetPos();

あと、SB_**ってのはTB_** (同じ値がdefineされてるけど)

175 :デフォルトの名無しさん:04/10/29 10:11:14
nPos使えば?

176 :デフォルトの名無しさん:04/10/29 13:27:36
173はマルチポスト
以下スルーでよろぴく

177 :デフォルトの名無しさん:04/10/31 00:13:27
マルチのなにがいけないの?
たくさんのところに助けを求めたほうが
解決が早いことに疑問を挟む余地はないじゃん

おまいらばか?

178 :デフォルトの名無しさん:04/10/31 00:15:07
そういう自分のことしか考えないところが嫌われる原因じゃないかな。

179 :デフォルトの名無しさん:04/10/31 00:22:14
つーか、マルチかどうかわざわざ調べて回って報告に来る香具師のほうがキモイ
調べるべき範囲は非現実的だし、途中でやめて帰ってきた報告が誰の役に立つのかも疑問だ
結局、自分の個人的な好みでじたばた喚いてるがきんちょそのまんまやん
腐ってもム板の住人が恥を知れやまったく

180 :デフォルトの名無しさん:04/10/31 00:25:45
わざわざ調べてってか、例えばいつもC++系スレチェックしてたらどこ行っても同じ質問が書いてあったらうざいよな。

181 :デフォルトの名無しさん:04/10/31 00:28:57
>>180
スルーしとけばいいだろ。
いちいち報告してる奴の方がウザイ。

182 :デフォルトの名無しさん:04/10/31 00:29:39
>>180
だから、それはオマエ個人のブックマークだろうがよwww

183 :デフォルトの名無しさん:04/10/31 00:37:36
なぜ報告するかというと、↑のようにマルチ厨のほとんどは逆ギレして暴れるから。
だから「こいつはマルチ(つまり関わるとDQNレスが返ってくる)なのでスルーしろ」と各スレの住人に報告されます。

184 :デフォルトの名無しさん:04/10/31 00:42:16
>>183
マルチうさい

185 :デフォルトの名無しさん:04/10/31 00:50:27
>>184
禿藁

186 :デフォルトの名無しさん:04/10/31 05:32:12
マルチの指摘まではいいけど、逆切れされたらスルーしろよ・・・

187 :デフォルトの名無しさん:04/10/31 05:47:15
もう5時間近くスルーされてるがな

188 :デフォルトの名無しさん:04/11/01 20:58:03
>>186
逆切れと言うからには、自分が正だという前提があるらしいな。
誰がどこで何を聞こうが、それは個人の主権だぞ。
仮にあんたが科学的な統計調査を行っていてそこから得た相関係数に基づいて発言していても、
173という個人がこのあと無礼を働くと決めてかかるのはステレオタイプであり、
人格に対するそれを行う者こそ無礼者のレッテルを免れない。

と、ずいぶん買いかぶってやったが
おおかた某コミュニティの流行に乗って喜んでるだけの軽薄野郎だろw

189 :デフォルトの名無しさん:04/11/01 21:13:31
>>188は自分が正しいと思っているんですか?

190 :デフォルトの名無しさん:04/11/01 21:27:34
>>189
2行目は読んだか?
あと俺は173じゃないぜ

191 :デフォルトの名無しさん:04/11/01 21:39:11
必死だなw

192 :デフォルトの名無しさん:04/11/01 21:41:48
定型句のみに縮退いっちょあがり

・・・もともと定型句のみが骨子でハリボテが吹っ飛んだだけだが・・・

193 :マイク ◆yrBrqfF1Ew :04/11/01 21:44:57
お前ら頭悪そうだね。

194 :デフォルトの名無しさん:04/11/03 03:32:08
VS2002とVS2003でMFCのヴァージョンって違うの?

195 :デフォルトの名無しさん:04/11/03 10:34:27
Oh, Yes !!

196 :デフォルトの名無しさん:04/11/03 14:01:27
>>194
0.1違う

197 :デフォルトの名無しさん:04/11/03 14:51:46
ビジュアルスタイルのラジオボタン(とチェックボックス)の文字の色を変えたいんだけど、
どうすればいいの?
クラシックだとOnCtlColor()でCTLCOLOR_STATICの時、色を変えたら変わったんだけど..
ラジオボタンの絵の部分はスタイルに連動させたいんで、オーナードローは使えないし。

198 :デフォルトの名無しさん:04/11/03 22:29:05
>>197
ラジオボタンの文字を使わず、そこにStaticTextを貼り付ける。
イベント処理をどこまで真面目にやるかはお好みで。

199 :デフォルトの名無しさん:04/11/04 16:04:03
オーナー描写ボタンをMDIの子ウインドウにつけたいのですが。
プロジェクトのアプリケーションウィザードで
MDI、基本クラスをCFormViewクラスにしてFormViewダイアログに
ボタンを配置して、OwnerDrawをtrueにして
CAboutDialogにプライベートメンバを追加して、
オーバーライドしたOnInitDialogで
VERIFY(m_editRec.AutoLoad(IDC_REC, this));
としたのですが、FormViewである子ウインドウに
ボタンが描写されません。
どうしたらようでしょうか?

200 :デフォルトの名無しさん:04/11/04 16:09:24
>>199
オーナードローなんだから、自分で描画処理を記述する必要があるんでしょ。

201 :デフォルトの名無しさん:04/11/04 16:13:12
描画処理をしても、描写はされないと思うがな。

202 :デフォルトの名無しさん:04/11/04 17:22:30
すみませんでした。
オーナードローではなくて、CBitmapButtonでした。

203 :デフォルトの名無しさん:04/11/04 20:02:08
解決しました。

204 :デフォルトの名無しさん:04/11/04 20:11:57
http://www.codeproject.com/internet/winarpspoof/CBuildPacket.zip
を利用してパケットを自作するプログラムをMFCで作りたいのですが、
このCBuildPacketクラスを利用するためにはどのように設定すればいいでしょうか?
コンパイルがうまくできなくて困っています。


205 :204:04/11/04 20:15:14
すいません。上のURLだとダウンロードできないので、
http://www.codeguru.com/dbfiles/get_file/CBuildPacket.zip?id=6861&lbl=CBUILDPACKET_ZIP&ds=20040331


206 :デフォルトの名無しさん:04/11/04 21:00:51
multi kayo!!

207 :デフォルトの名無しさん:04/11/04 22:10:40
>>206
だから何?

208 :デフォルトの名無しさん:04/11/05 00:10:31
MDIの子ウインドウを消すときに呼び出されるAPIをオーバーライドしたいのですが。
どうしたらよいでしょうか?

209 :デフォルトの名無しさん:04/11/05 00:19:10
>>208
OnDestroy()をオーバーライド

210 :デフォルトの名無しさん:04/11/05 01:01:46
OnDestroyがMFCのクラスの中にみあたらないのですが。

211 :デフォルトの名無しさん:04/11/05 01:04:20
>>210
気のせいです

212 :デフォルトの名無しさん:04/11/05 01:11:34
もしかして、子ウインドウを消すときにバッファを解放するには、
CChildFrmのデクストラクタで解放したのでいいのでしょうか?

213 :デフォルトの名無しさん:04/11/05 01:40:52
>>211
CWndの関数のようですが、
MDIの子ウインドウなのでCMDIChildWndかCFrameWndに関係した関数だと思うのですが。
どうでしょうか?

214 :デフォルトの名無しさん:04/11/05 01:51:24
>>213
MFCの継承図をよく見ましょう。
つーか、これだけヒントがあればMSDNでも解説サイトでも見つかるだろうに。

215 :デフォルトの名無しさん:04/11/05 02:50:14
・・・・・・・・・
プロパティウインドウからでないとオーバーライドできないと思い込んでました。
アドバイスありがとうございます。
CMDIChildWndもCFrameWndもCWndから派生しているということですね。

216 :デフォルトの名無しさん:04/11/05 04:18:11
ところで、MFCでメインループのようなものを実現するには
どうすれば良いのでしょうか?


217 :デフォルトの名無しさん:04/11/05 05:31:54
メインループ?
メッセージループじゃなくて?

218 :デフォルトの名無しさん:04/11/05 23:01:12
>>216
コンソールか? afx.h

219 :デフォルトの名無しさん:04/11/06 00:40:42
IEのダウンロード画面等の
1 プログレスバーあり
2 途中キャンセル可能
3 その間アニメーションが動く
を実現しようとしてます

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

ちなみに1,2は進捗表示用のダイアログを作って、
時間のかかる処理を別スレッドで起動、
スレッドから進捗ダイアログに進捗状況を送るようにしています
こういうやり方でいいんですかね

220 :デフォルトの名無しさん:04/11/06 00:58:16
アニメーションコントロールを貼り付けてaviファイルを
再生しているだけじゃないのか?そういうことではなくて?

221 :デフォルトの名無しさん:04/11/06 02:59:49
ActiveXコントロールをダイアログベースではないプロジェクトで利用できないの?

CScrollViewから派生させたCGLChartViewをメインに使ってるのですが
やっぱり、CFormViewから派生させなきゃいけないの?


222 :デフォルトの名無しさん:04/11/06 03:59:21
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に代入してしまうのではないのでしょうか?



223 :デフォルトの名無しさん:04/11/06 04:00:40
うるせぇっての、カス。自分で考えろ。


224 :デフォルトの名無しさん:04/11/06 05:02:43
>>222
そういう仕様になってるから大丈夫。
喩えて言えばこんなコード。
int setValue(int newValue)
{
int oldValue = getSystemValue();
setSystemValue(newValue);
return oldValue;
}

225 :デフォルトの名無しさん:04/11/06 07:48:15
>>222
本来はこんな流れ
紺.CreateSolidBrush();
白 = dc.SelectObject(紺);
紺 = dc.SelectObject(白);
紺.DeleteObject();

紺 = を省略しているから
この流れが見えにくくなっている
入門書にあるまじき怠慢なコード

226 :デフォルトの名無しさん:04/11/06 10:00:30
692 名前:M.B. :04/11/06 09:49:54
カード [] deck = new カード("全部"); // 配列の中にカードを全部生成
for (int n = 0;n < (deck.length - 1);m += 1) {
  m = n 以上 deck.length 未満の乱数;
  deck[m] と deck[n] を swap; // m == n の場合も気にせず実行。
}
※ deck を class として定義して、
swap を private なメソッド化としておいて、
shaffle を呼ぶようにすると綺麗になるかも。

693 名前:M.B. :04/11/06 09:53:09
【雑談】JavaっぽいけどJVMで走らず【ぬるぽ】
……狙いすぎたか。orz

227 :デフォルトの名無しさん:04/11/06 10:36:22
>>225
そんなすっとこどっこいなコードの方が問題だろ。

228 :デフォルトの名無しさん:04/11/06 19:01:11
相談室にあるまじきすっとこどっこいないいがかりだな。。

229 :デフォルトの名無しさん:04/11/06 21:23:09
ここのスレは役にたたんカスばっかだな。死ね。


230 :デフォルトの名無しさん:04/11/07 00:27:05
マルチレス逆切れの後は荒しかよ

231 :222:04/11/07 02:11:20
>224 225
ふむふむ、別にきにしなくていいんですね。ありがとうございました

232 :デフォルトの名無しさん:04/11/07 09:30:52
>>230
よっぽど悔しかったんだね (プププ

まあせいぜいマルチ叩きにがんばれや
1人も逃すなよ、どうやって検出するのかは謎だがw

233 :デフォルトの名無しさん:04/11/07 12:33:28
波形表示の上に小節数を表示するメジャーのようなコントロールをつけたいのですが、
そのようなコントロールをしりませんか?

234 :デフォルトの名無しさん:04/11/07 14:21:10
>>233
無理矢理やるとすればCListCtrlでグリッドラインを表示するとか

波形表示とか言ってる時点で自分で描くしかないビューのような気がする

235 :デフォルトの名無しさん:04/11/07 15:43:23
>無理矢理やるとすればCListCtrlでグリッドラインを表示するとか
少しきついかもしれません。

よく画像編集ソフトや波形編集そふとで画面上方にルーラーがついているのを
見るのですが、あれはActiveXコントロールなのですか?

236 :デフォルトの名無しさん:04/11/07 15:57:42
違う

237 :デフォルトの名無しさん:04/11/09 01:04:48
現在、MFCのCPenを使って絵を描いています
問題は描いた画面を保存(jpg,tif,bmpなど)したいのですが、、
方法をご存知の方、お教えくださいm(__)m
また複数描いて動画(aviなど)にもしたいのです。

環境はVC.net2003です

238 :デフォルトの名無しさん:04/11/09 15:17:51
これってMFCの質問?

239 :デフォルトの名無しさん:04/11/09 16:28:37
つーか、MFCの質問かどうか以前に、根本的に基礎が抜けている悪寒。

240 :デフォルトの名無しさん:04/11/09 16:50:46
CPenを使ってるからかも知れナイチンゲール。

241 :デフォルトの名無しさん:04/11/10 03:03:01
This is a pen. アライチュー。

242 :デフォルトの名無しさん:04/11/10 22:21:14
MFCでダイアログ内にあるListView内のコラムのクリック検出をするのって
何か設定が必要なのでしょうか?
そのままではクリックしてもOnNotifyがコールされないのですが、
どなたか教えてください


243 :デフォルトの名無しさん:04/11/10 22:29:04
>>242
ListCtrlをクラスにして、LVN_CLUMNCLICKメッセージからイベント関数を作る。

244 :本田:04/11/11 04:09:18
>>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


245 :デフォルトの名無しさん:04/11/11 04:20:57
MFCでCImage使えなかったっけ。

246 :本田:04/11/11 04:43:50
>>237
>>245
>MFCでCImage使えなかったっけ。
使えるみたい。
CImage クラス
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/vcrefCImage.asp

247 :デフォルトの名無しさん:04/11/11 22:38:13
CImageってGDI+必要じゃなかったっけ?

248 :本田:04/11/12 08:51:53
>>247
GDI+は必須では無いみたい。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/vcconCImageLimitationsWithEarlierOperatingSystems.asp

249 :デフォルトの名無しさん:04/11/12 11:23:30
すんまそん教えて下さい。(x_x)
OnPaint()でBitBltするためにCPaintDCを使ってるんですが、
こやつはコンストラクタでBeginPaintを呼び出し無効領域を
クリップしてしまいます。
無効領域の有無によらず常に全領域をクリップするにはどう
すればいいでしょうか?

ちなみに、CDC::IntersectClipRectではダメでした。


250 :デフォルトの名無しさん:04/11/12 11:44:03
>>249
CClientDC

251 :249:04/11/12 11:59:18
>>250
d
でも、OnPaint内だとCClientDC, CWindowDCはダメなんですよ。
(WM_PAINTが再発行されてループする感じ)

どうも、this->GetDC()したらダメみたい。
ちなみに環境は
W2K+VC6で、モードレスダイアログです。

252 :デフォルトの名無しさん:04/11/12 12:12:38
>>251
CPaintDCはそのままで、追加でCClientDCした?
CPaintDC(BeginPaint, EndPaint)が無効領域をクリアしてるから
消したら駄目よ。

253 :249:04/11/12 12:56:24
>>252
できました!
CPaintDC dc_dummy(this); //未使用
CClientDC dc(this);
のようにしたんですが、順番も関係なくインスタンスがあれば良いようです。

後学のために教えて頂きたいんですが、「〜が無効領域をクリアしてるから」は
「セットしてるから」では無くていいんですよね?今までずっとBeginPaintが
無効領域をセットしてる、と考えていたもので。

254 :デフォルトの名無しさん:04/11/12 13:15:30
すみません。
CStringの使い方についてお聞きしたいのですが

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

このような使い方は妥当でしょうか?


255 :デフォルトの名無しさん:04/11/12 13:25:17
ごく普通。

256 :デフォルトの名無しさん:04/11/12 13:28:05
>>254
>>254
良いんじゃないの

でもCWndのGetWindowText使えばGetBufferしなくて良いよ

257 :デフォルトの名無しさん:04/11/12 13:36:05
>>253
無効領域=再描画する必要がある領域。
他のウィンドウで隠された部分が現れたり、InvalidateRectが呼ばれると追加される。
無効領域があるとシステムはWM_PAINTを発行する。

258 :デフォルトの名無しさん:04/11/12 13:37:15
>>0x0FF-0x100

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



259 :デフォルトの名無しさん:04/11/12 13:55:58
>>254
::GetWindowText(hwnd, strText.GetBuffer(_MAX_PATH), _MAX_PATH + 1);


260 :デフォルトの名無しさん:04/11/12 14:24:59
>>無効領域=再描画する必要がある領域
...

261 :デフォルトの名無しさん:04/11/12 15:30:36
質問です。
rebarのバンドにIEやエクスプローラのような、コンボボックスと移動ボタンがあるアドレスバーを作ろうとしています。
ダイアログバーにコンボボックスを乗せたのですが、このままではコンボボックスがバンドの横幅に合わせてリサイズされません。
コンボボックスの幅を自動的にバンドの長さに合わせるようにするには、どのようにすればいいでしょうか?

バンドにそのままコンボボックスを乗せればうまく行くのですが・・それでは移動ボタンが同じバンドに置けなくなってしまいます。

262 :デフォルトの名無しさん:04/11/12 23:45:22
>>261
RBN_AUTOSIZEとかRBN_LAYOUTCHANGEDとかをキャッチして
自分でコンボボックスのサイズ変更をすればいいんじゃなかろうか。

263 :デフォルトの名無しさん:04/11/13 13:09:36
>>262
レスありがとうございます。
やっぱり自分で処理するしか方法はないみたいですね・・・

264 :デフォルトの名無しさん:04/11/13 21:26:42
ダイアログベースのピクチャボックスに対してドラックアンドドロップを使えるようにしたいのですが、
どのようにすればいいかわかりません
ダイアログ自体に対してのドロップはWM_DROPFILESで大丈夫でしたが、
ピクチャボックスなどのコントロールに対してドロップした場合には、このメッセージは送られてきませんでした。
どうしたらいいか教えていただけないでしょうか?

265 :デフォルトの名無しさん:04/11/13 21:34:40
教えない。


266 :デフォルトの名無しさん:04/11/13 21:41:30
>>264
PreTranslateMessage ドロップ あたりでぐぐれば?

267 :デフォルトの名無しさん:04/11/13 21:48:36
親ウィンドにD&Dが許可されていたら
子にWM_DROPFILESが飛んでこない。

268 :デフォルトの名無しさん:04/11/13 21:50:22
D&Dー>D&G

269 :デフォルトの名無しさん:04/11/13 22:03:54
教えない。

270 :デフォルトの名無しさん:04/11/13 22:08:22
あれ飛んできた。

271 :264:04/11/13 22:53:58
出来ました。ありがとうございました。

272 :デフォルトの名無しさん:04/11/14 12:27:02
CStringについてアドバイスをください
ifstreamなどのopenではファイル名をchar*型で指定します
ところがCString→char*変換が見当たりません。

現在はCString→std::string→char* (c_str())としています
何かよりよい方法はないでしょうか?

273 :デフォルトの名無しさん:04/11/14 12:30:26
また、CString オブジェクトは次の特性を持っています。
CString オブジェクトは、連結操作で拡張できます。
CString オブジェクトは、"値を重視" します。つまり、CString を文字列へのポインタとして考えるのではなく、実際の文字列として考えます。
関数の引数 const char* や LPCTSTR の代わりに自由に CString を使うことができます。
変換演算子を使って、読み込み専用の文字配列 (C スタイルの文字列) として、文字列内の文字に直接アクセスできます。

274 :デフォルトの名無しさん:04/11/14 12:36:29
OH!!
ありがとうございます


275 :デフォルトの名無しさん:04/11/14 21:51:42
ifstreamにchar*を渡すopenなんてあったか?

276 :デフォルトの名無しさん:04/11/14 22:11:04
>>275
自分で調べろ

277 :デフォルトの名無しさん:04/11/14 22:12:13
教える気ないならレスすんな

278 :デフォルトの名無しさん:04/11/14 22:31:46
>>277
だな

279 :デフォルトの名無しさん:04/11/14 22:33:43
>>277-278
自分で調べろ

280 :デフォルトの名無しさん:04/11/14 22:34:07
>>279
お前が>>275の為に必死こいて調べろ

281 :デフォルトの名無しさん:04/11/14 22:37:39
>>280
調べなくても知ってる

282 :デフォルトの名無しさん:04/11/14 22:41:15
他人に不快感を与えることのみを目的とした書き込みを 荒らし行為 と定義する

283 :デフォルトの名無しさん:04/11/14 22:43:47
教えてくんウゼー

284 :デフォルトの名無しさん:04/11/14 22:56:53
質問つうかつっこみなんじゃ?

285 :272:04/11/15 00:41:53
basic_filebuf *open(
const char *_Filename,
ios_base::openmode _Mode
);

286 :デフォルトの名無しさん:04/11/15 00:48:03
VC.net2003で以下の書き方がコンパイルできたりエラーになったりします
////////////////////////
class test
{
  int someValue
  test();
};
test::test()
{
  someValue=0;
}
////////////////////
つまりクラスの定義と実装をひとつのファイル(test.h)に書くとコンパイルエラーで、
二つのファイル(test.h,test.cpp)に分けるとコンパイルできます。

どうもMFCを使うとtest.hだけではコンパイルできなくて、コンソールアプリではコンパイル可能です
なぜかご存知のかた、ご教授ください。

287 :286:04/11/15 00:48:58
someValue;

訂正します

288 :デフォルトの名無しさん:04/11/15 01:06:06
CStringをchar*にするには
GetBufferとReleaseBufferでいいんじゃないの

289 :デフォルトの名無しさん:04/11/15 01:45:36
class test
{
  int someValue
  test() { someValue = 0; }
};

290 :デフォルトの名無しさん:04/11/15 01:55:40
>286
そもそもなんで *.h に定義も突っ込もうとしてるんでしょうか?

291 :286:04/11/15 02:51:42
>そもそもなんで *.h に定義も突っ込もうとしてるんでしょうか?
その方が見通しがよく、きれいな設計かと思ったのですが、、、
有名なTNT(http://math.nist.gov/tnt/index.html)はヘッダーに定義も書いてあります

はやり*.hと*.cppは分けたほうかいいのでしょうか?

292 :286:04/11/15 02:53:27
>そもそもなんで *.h に定義も突っ込もうとしてるんでしょうか?
実はTNT(http://math.nist.gov/tnt/index.html)をまねてみました
TNTはヘッダーに宣言と定義を書いていて、非常に使いやすいです

ただやはり*.hと*.cppは分けるべきでしょうか?

293 :286:04/11/15 02:54:21
↑すみません、書き込めていないと思って2重投稿してしまいました
申し訳ありません。

294 :デフォルトの名無しさん:04/11/15 03:04:39
TNTはテンプレートだろ。

295 :デフォルトの名無しさん:04/11/15 04:23:02
>>293
TNTが良いと思ったんならなんでTNTと同じようにクラス内で定義しないんだ。
TNTと違う書き方してエラーが出ますとか言われても
そら違う書き方してるんだから当たり前だろとしか答えられん。

296 :デフォルトの名無しさん:04/11/15 11:02:16
>286
宣言は何回あっても構わないですが、定義は一度だけです。
*.h には宣言を、*.cpp には定義を記述します。
テンプレート周りはいろんな理由で *.h にまとめて書く場合があります。

MFCスレで聞くよりは C++ スレかくだ質で聞く方が良いのでは。

297 :デフォルトの名無しさん:04/11/15 12:58:34
>>286
inline test::test()
{
...
}
まぁ上のコーディングだと意味合いが変わってくるけど、
その辺は自分で調べませう

298 :デフォルトの名無しさん:04/11/15 13:12:59
>>297

コラ、もったいぶらずに教えろや。カスが。

299 :286:04/11/15 13:24:41
なるほど,,,
やっぱり*hと*cppに分けて書くことにします
ありがとうございました

↑は私ではありません

300 :デフォルトの名無しさん:04/11/15 13:52:01
ダイアログベースのアプリに常に最前面に表示するメニューをつけようとしてます。
UPDATE_COMMAND_UIでpCmdUI->SetCheck(TRUE);
としてるのですがメニューにチェックがつきません。
メニューはC〜Dlgの既存クラスを選択しました。
どのようにすればチェックが付けられますか?

301 :デフォルトの名無しさん:04/11/15 15:12:01
がんばる

302 :300:04/11/15 16:32:29
>>301
がんばってみたら出来ました。thx

303 :デフォルトの名無しさん:04/11/15 16:38:10
質問です。ダイアログバーの横幅などを変えるにはどのようにしたらいいでしょうか?

304 :デフォルトの名無しさん:04/11/15 18:57:07
>>303
消えろ。


305 :303:04/11/15 19:25:39
>>304
消えたら出来ました。thx

306 :デフォルトの名無しさん:04/11/16 07:59:44
ダイアログにメニューを関連付けて表示させたのですが、そのメニューを押してもOn〜のような関数の反応がありません。
どうしたら動いてくれるのでしょうか?

307 :306:04/11/16 08:22:14
間違ってたところがわかりました。ごめんなさい。

308 :telnes:04/11/16 16:00:33
VC++6.0でWinsockを使ったソケット通信プログラム(クライアント/サーバ両方)を作成しようとしています。
TCPサーバの作成パターンをいくつか考えたのでどれが安定して動作しそうかなど意見を下さい。


▼条件と環境
・作成したTCPサーバ、TCPクライアントは24時間あげっぱなし
・TCPクライアントとコネクション確立しっぱなし
・接続、切断はボタンをダイアログに実装して行うかコマンドプロンプトから入力してできるようにする。
・非同期通信に対応する(selectかWSAAsyncSelectを使用する)
・実装形式は自由(COM、EXE、DLLなんでもOK)
・MFCを使用しなくてはならない
・Winsock2.0
・OSはWindows XP

▼選んでください
(1) TCPサーバをMFC AppWizardで作成する(起動はEXEダブクリ、インターフェースはダイアログ)
(2) TCPサーバをConsole Applicationで作成する(起動はEXEダブクリ、インターフェースもコマンドライン)
(3) TCPサーバをATLプロジェクトで作成する(サービスとして動作、OS起動時に自動実行)
(4) それ以外(作り方を教えてください)

309 :デフォルトの名無しさん:04/11/16 16:03:46
>>308
http://pc5.2ch.net/test/read.cgi/tech/1097880265/

マルチすなや。

310 :telnes:04/11/16 16:11:54
>>309
ID無いのをいいことに勝手に人の名前語って
マルチ捏造しないように。

311 :telnes:04/11/16 16:16:22
>>310
てめぇ、人の名前騙ってんじゃねぇよ。

312 :デフォルトの名無しさん:04/11/16 16:17:16
厨が粘着してるよな。このスレ。

313 :デフォルトの名無しさん:04/11/16 16:17:24
>・MFCを使用しなくてはならない
なら(1)でいいじゃない。

314 :telnes:04/11/16 16:18:20
>>311
てめぇ、人の名前騙ってんじゃねぇよ。
ところで俺の質問早く答えろ、馬鹿が。


315 :デフォルトの名無しさん:04/11/16 16:18:34
>>313
向こうで拾ってるからこっちはスルーで。

316 :telnes:04/11/16 16:36:08
>>314のように暴言を吐くのは私ではないので無視を。
私はもうこちらにも書き込みません。

317 :デフォルトの名無しさん:04/11/16 16:45:41
>>316
本人なら向こうのフォローをお忘れなく。
つーか、こっちのフォローより先にするべきっしょや。

318 :telnes:04/11/16 17:30:01
集団痴漢現場
http://www.cty-net.ne.jp/~taitiro/imgboard/data/img20040825044524.jpg



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

320 :デフォルトの名無しさん:04/11/16 18:38:23
変な例だな。
メンバ変数の型をCMyEditにするだけで済むが。

321 :デフォルトの名無しさん:04/11/16 18:46:14
>>320
なんだと。



322 :デフォルトの名無しさん:04/11/16 18:47:33
>>320
それはウィザード使ってDDX利用した場合だろ。
その例はDDX使ってねーから。

323 :デフォルトの名無しさん:04/11/16 20:37:47
>>309
独り言は楽しいかい?

324 :デフォルトの名無しさん:04/11/16 20:42:06
釣りは楽しいかい

325 :デフォルトの名無しさん:04/11/16 21:11:23
一応書いておく。
>318はVirusなど。触った人はよく手を洗うように。

326 :デフォルトの名無しさん:04/11/18 09:33:31
.netのMFCでMDI&タブのエディタを作っています。
とりあえずタブを作成してみたのですがMDIの子ウィンドウの下に表示されてしまうのです。
もし解決方法ご存じの方が居たら是非教えて下さい。

327 :デフォルトの名無しさん:04/11/18 23:54:39
新しいクラスを追加する際に基本クラスを無しで作りたいのですが、
プロジェクトの追加でヘッダーとcppを自分で作る以外に方法はないでしょうか?

328 :デフォルトの名無しさん:04/11/19 01:03:58
ありますよ

329 :デフォルトの名無しさん:04/11/19 01:30:35
>>326
タブをコントロールバーにして表示する。

330 :デフォルトの名無しさん:04/11/19 02:02:58
その基本クラス無しでクラスを作成する方法をご教授ください。><


331 :デフォルトの名無しさん:04/11/19 02:05:36
珍しいところでつまづくやつだな・・・。
でもVCのバージョンも言わないやつには教えてあーげない。

332 :デフォルトの名無しさん:04/11/19 02:18:55
(´Д`;)
6デス6デス6デスVC++6デス
オスエテオスエテ
ミステナイデ

333 :デフォルトの名無しさん:04/11/19 03:27:36
age

334 :デフォルトの名無しさん:04/11/19 03:40:29
sageアンド飛鳥

335 :デフォルトの名無しさん:04/11/19 05:26:24
>>329
出来ました。
どうも有り難う御座いました。

336 :デフォルトの名無しさん:04/11/19 12:32:17
>>332
クラスビューで右クリックしてクラスの追加
クラスの種類をGenericクラス
に設定

337 :デフォルトの名無しさん:04/11/19 14:08:01
>>336
ありがとうございます。(≧▽≦)

338 :デフォルトの名無しさん:04/11/19 21:38:58
ダイアログベースで簡単な計算アプリを作っています。
その際、doModal()で子ウィンドウを生成し、そこのエディットボックスで
数値入力をしています。  このエディットボックスにスピンコントロールを
つけたのですが、挙動がおかしくなってしまいます。

通常、setRange()やsetPos()による初期設定を行なうと思いますが、
メインウィンドウのOnInitDialog()で行なう初期化は、子ウィンドウの場合は
どこで行なえばよいのでしょうか? 子ウィンドウのコンストラクタやdoModal
呼び出し元での設定を試みましたが、どれもだめでした。 
よろしくお願いします。

339 :デフォルトの名無しさん:04/11/19 21:54:54
ダイアログからダイアログなんだろ

340 :デフォルトの名無しさん:04/11/19 22:33:12
EditBoxとSpinPuttonのタブオーダとか
SpinButtonのスタイルとか

341 :デフォルトの名無しさん:04/11/19 22:39:12
WM_SETPONT
ばいらすばすたー

342 :デフォルトの名無しさん:04/11/19 22:43:58
test

343 :デフォルトの名無しさん:04/11/19 22:47:30
MFCを使ってソフトを作っているのですが,
hdc = BeginPaint(hWnd, &ps);
という行は
1.GDI HDC BeginPaint(HWND, LPPAINTSTRUCT);
2.MFC CDC* BeginPaint(LPPAINTSTRUCT);
のうち,2と判断され,コンパイルできません

どうしたら1と判断されるでしょうか?

344 :デフォルトの名無しさん:04/11/19 22:48:57
::

345 :デフォルトの名無しさん:04/11/19 22:49:24
MFCを使ってソフトを作っているのですが,
hdc = BeginPaint(hWnd, &ps);
という行は
1.GDI HDC BeginPaint(HWND, LPPAINTSTRUCT);
2.MFC CDC* BeginPaint(LPPAINTSTRUCT);
のうち,2と判断され,コンパイルできません

どうしたら1と判断されるでしょうか?


346 :デフォルトの名無しさん:04/11/19 22:49:25
頭につける

347 :デフォルトの名無しさん:04/11/19 22:49:44
::BeginPaint()

348 :デフォルトの名無しさん:04/11/19 22:51:55
ヅラ

349 :デフォルトの名無しさん:04/11/19 22:52:35
>>345
C++ の多重定義解決は1つのスコープしか見ないんだよ

350 :デフォルトの名無しさん:04/11/19 22:57:43
345です
できました!!!!!!
ありがとうございます
ヘッダーをインクルードする順番などをいじってもできなかったので,,

351 :338:04/11/19 22:59:11
>>340
タブオーダーも正しく設定しました。
メインのウィンドウで正常に動作しているスピンコントロールがあるので、
それと同様のプロパティにしています。

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

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



352 :デフォルトの名無しさん:04/11/19 23:45:46
ClassWizzardでダイアログに
OnDeltaposSpinHOGEHOGE()を生成して
(SpinButtonのUDN_DELTAPOS NOTIFYハンドラ)

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

とすると自動的に100ステップになる。
WM_VSCROLLの処理のしかたわからん。

353 :338:04/11/20 00:13:46
>>352
この方法は知りませんでした。ありがとうございます。

しかし、子ウィンドウではだめでした。
子ウィンドウでの SetRange()やSetPos() を行なうタイミングが分かりません。
子ウィンドウのコンストラクタではやはりだめなんですよね?

354 :デフォルトの名無しさん:04/11/20 01:05:07
>>353
親でやってるように子でもOnInitに書けば良いだろ

355 :デフォルトの名無しさん:04/11/20 01:05:32
うっせーチンカス

356 :338:04/11/20 02:07:11
できました! ありがとうございました。
ダイアログのダブルクリックで生成されたクラスのコードに
OnInitがなかったので、それを自分で書くという発想がでませんでした。

357 :デフォルトの名無しさん:04/11/20 12:08:29
ScreenToClientみたいにウィンドウの座標を他のウィンドウの相対座標に直してくれる関数があったと思うんですがなんでしたっけ?

358 :デフォルトの名無しさん:04/11/20 13:01:51
>>357
いいこと教えちゃう。MSDNでScreenToClientのページを見ると、
下のほうにMapWindowPointsへのリンクがある。
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_screentoclient.asp

359 :デフォルトの名無しさん:04/11/20 13:12:35
>>358
気づかなかった・・・すみませんでした

360 :デフォルトの名無しさん:04/11/20 13:13:40
ラジオボタンのメンバ変数がクラスウィザードで出てこないんですがそーゆーもんなんですか?

361 :デフォルトの名無しさん:04/11/20 13:36:28
ラジオボタン1個だけ?
→それはチェックボックス使うべき。

362 :デフォルトの名無しさん:04/11/20 13:50:42
>>360
そーゆーもん。ラジオボタンのグループに一つの変数を割り当てると考えればいい。
ボタン0を選択すると変数=0
ボタン1を選択すると変数=1
ボタン2を選択すると変数=2
という感じ。

363 :デフォルトの名無しさん:04/11/20 21:05:57
VC.netのMFCです。
CReBar使ってるんですけどReBarに設定した各コントロールの位置をどうやって保存・読み込みするのか分かりません。
GetReBarCtrl().GetRect()かとも思いましたが設定する関数が見あたらないし……。
検索しても見つかりませんでした。
教えて下さい、お願いします。

364 :デフォルトの名無しさん:04/11/22 10:20:16


365 :デフォルトの名無しさん:04/11/22 10:48:11
ぼくダイアログだもんね

366 :デフォルトの名無しさん:04/11/22 12:00:32
CToolBar のボタンにドロップダウンボタンを追加すると、
後端が切れてしまう現象で悩んでいます。
ドロップダウン属性をつけた以外のボタンのサイズも勝手に一回り大きく
なっているのが原因のようです・・・。CToolBar::SetSizeでそのサイズに変更すると、
切れなくなるのですが、ボタンが重なったり等表示がおかしくなってしまいます。
識者の方お助けください。

環境はVC7.1+XPです。

367 :デフォルトの名無しさん:04/11/22 13:54:23
VC6のMFCでCStaticをサブクラス化して、
フォント、文字色、背景色を変更できるようにしています。
現在、CStaticからの派生クラスCStaticExのコンストラクタで、

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

のようにしてLOGFONT構造体を初期化しているのですが、
これを親ダイアログのフォントを引き継いでLOGFONT構造体を
初期化するにはどうしたらいいのでしょうか?
初歩的は質問だと思いますが、宜しくお願いします。

368 :367:04/11/22 14:05:02
下記のようにやってみたのですが、アサート発生が発生してしまいました…
GetParent()->GetFont()->GetLogFont(&m_LogFont);
何がいけないのでしょうか?

369 :デフォルトの名無しさん:04/11/22 14:05:52
↓ここでいつもの厨が登場

370 :デフォルトの名無しさん:04/11/22 14:19:06
・一般的に親ダイアログにフォントは設定されていない
 ダイアログテンプレートにあるフォントは、各コントロールにはセットされているが
 ダイアログ自身にはセットされない。
なので、
1. ダイアログテンプレートを読む
2. てきとーな兄弟からフォントをゲットしてくる
くらいしか無いのではなかろうか


371 :デフォルトの名無しさん:04/11/22 15:02:59
>>368
各APIの戻値を確認すれば、ここに書き込んでいる時間内に
原因がわかるだろうに。

372 :367:04/11/22 15:04:12
>370
なるほど、そういうことなのですか。
ありがとうございました。 m(_ _)m

>1. ダイアログテンプレートを読む
ちなみにこれはどのようにすればよいのでしょうか?

373 :367:04/11/22 16:41:48
下記のような方法でダイアログテンプレートを読み込んでみたのですが、
肝心のフォント情報へアクセスできませんでした…(;_;)

HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(IDD_TEST_DLG), RT_DIALOG);
HRSRC hResource = ::FindResource(hInst, MAKEINTRESOURCE(IDD_TEST_DLG), RT_DIALOG);
HGLOBAL hDialogTemplate = LoadResource(hInst, hResource);
if (hDialogTemplate != NULL) {
 LPCDLGTEMPLATE lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);
 // DLGTEMPLATE構造体にはフォント名やサイズ情報が無いみたい…
}

ダイアログテンプレートからフォント情報を取得する方法をご存知の方、
宜しくお願いします。

374 :デフォルトの名無しさん:04/11/22 17:13:12
MFCのCDialogTemplate(非公開クラス)のソース(DlgTempl.cpp)でも見てみれ。

375 :367:04/11/22 17:29:16
レス、ありがとうございます。
ネットで調べたところ、LPCDLGTEMPLATE以降の構造解説があったので
参考にしたところ、無事フォント情報を取得することができました。

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

レス下さった方々、本当にありがとうございました。

376 :367:04/11/22 17:43:17
>374
CDialogTemplateクラスを試してみました。
す・すばらしいです。
苦労して同等のソースを書いたことに思わず笑ってしまいました。
CDialogTemplateクラスを使った方法で行きたいと思います。

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

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

って、MFC自体が(ry

378 :デフォルトの名無しさん:04/11/22 21:51:19
WindowsXPでクラシックスタイルかどうかを調べる方法は
あるんでしょうか?
存知の方、宜しくお願いします。


379 :デフォルトの名無しさん:04/11/22 21:52:47
あります

380 :378:04/11/22 21:54:36
379様レスありがとうございます。

その方法をご教授願えないでしょうか。
お願いいたします。

381 :デフォルトの名無しさん:04/11/23 11:05:58
MDIの子ウィンドウ(MDIのChildFrame)のタイトルバーのタイトルを生成時に取得したいのですが、
WM_CREATEでGetWindowTextを呼んでも上手くいきません。
WM_CREATEはどうやらタイミング的にタイトルが設定される前のようなのですが、どのタイミングでやれば上手くいくのでしょうか?
バージョンは.netです。

382 :デフォルトの名無しさん:04/11/23 12:37:20
>>381
なんでタイトルのテキストを取得したいの?

383 :デフォルトの名無しさん:04/11/23 12:38:40
ちがったらごめん。
CWnd::PreCreateWindow の CREATESTRUCT.lpszName で取得できるんでは?

384 :デフォルトの名無しさん:04/11/23 12:55:09
>>382
そんなもん人の勝手

385 :デフォルトの名無しさん:04/11/23 13:03:13
>>382
タブのエディタ作ってるので。
対応するタブに表示する文字をウィンドウと同じにしたいんです。
タイトルには開いたファイル名が表示されるので……。

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

タイトルの取得するのではなくOnOpenDocument等から持ってきた方が楽でしょうか。
もし何かアイデアややり方ご存じの方居たら、是非お願いします。

386 :デフォルトの名無しさん:04/11/23 13:15:38
>>385
CDocument::GetTitle()は?

387 :デフォルトの名無しさん:04/11/23 16:53:18
WM_CREATEで一旦DefWindowProcを行ってからGetWindowTextするとどうなる?

388 :デフォルトの名無しさん:04/11/23 19:50:20
>>387
この場合のDefWindowProcとは基底クラスであるCMDIChildWndのOnCreate呼び出し、という事でしょうか?
念のため自分でOnCreate内でDefWindowProcをやってみましたが、その後に処理しても結果は同じでした。タイトルは空です。
>>386で言われているようにドキュメントの方では捕まえられるのでとりあえずはこれで行こうと思います。
ビューの方の初期化を別でやっているのであまり美しいとは言えないのですが……。

389 :デフォルトの名無しさん:04/11/23 23:53:54
PreSubClassWindowとか

390 :デフォルトの名無しさん:04/11/24 15:34:43
> 370 :デフォルトの名無しさん :04/11/22 14:19:06
> ・一般的に親ダイアログにフォントは設定されていない
>  ダイアログテンプレートにあるフォントは、各コントロールにはセットされているが
>  ダイアログ自身にはセットされない。

ダイアログはフォントのオーナー、WM_NCDESTROYでフォントを削除する。
フォントはWM_GETFONTで取得可。


391 :デフォルトの名無しさん:04/11/24 15:46:49
Win32サービスでMFC(主にCString系とCWinThread派生クラス)を使いたいんだけど、
::AfxWinInit()をコールすれば動くんかなあ?


392 :デフォルトの名無しさん:04/11/24 17:53:04
>>391
サービスの場合、初期化関数の呼び出し自体もさることながらそれを呼び出す場所も重要。
main()、WinMain()の最初で呼んでも無効なものもあるので注意汁。

393 :デフォルトの名無しさん:04/11/24 17:55:36
>>391
試してみたら?
CStringなら私も使ってるからそのまま使えるはず。
#適当なインクルードとリンクをした上で。
CWinThread系は使ってないので悪しからず。

394 :デフォルトの名無しさん:04/11/24 21:11:16
CViewクラスのメッセージハンドラに
たとえばOnMouseMove(UINT nFlag, CPoint point)
とかありますが,

この場合,このハンドラが呼び出される原因となった
WM_MOUSEMOVEメッセージ自体を見たい場合は
どのようにすればよいのでしょうか?

395 :デフォルトの名無しさん:04/11/24 21:17:53
WindowProcでもオーバーライドすればええんじゃないかい?

396 :デフォルトの名無しさん:04/11/24 21:34:32
>>395
WindowProcも引数がUINTで
ただのメッセージの識別子をとるだけですが
MSG構造体の形でメッセージを見たい場合はどうすればいいのでしょうか?

やりたいことを言ってしまうと
MSG構造体のtimeパラメータで
メッセージのポストされた時間を見たいのです

397 :デフォルトの名無しさん:04/11/24 21:40:29
>>396
関数の頭でGetMessageTimeを呼ぶか、それが使えなければGetTickCountを呼ぶのはどう?

398 :デフォルトの名無しさん:04/11/24 21:42:21
引数

pMsg

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

解説

Windows 関数TranslateMessage やDispatchMessage にディスパッチされる前に、ウィンドウ メッセージをフィルタ処理するために、この関数をオーバーライドします。


399 :デフォルトの名無しさん:04/11/25 00:41:29
C++相談室から回されて参りました:

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

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


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




400 :396:04/11/25 01:42:40
>>397
>>398
なるほど
ありがとうございます
参考にします

401 :デフォルトの名無しさん:04/11/25 02:43:36
>>399
そのexeがどこにDLLがあるかわからないってことです。
exeの実行フォルダにDLLをコピーすればとりあえず動くかと。

402 :デフォルトの名無しさん:04/11/25 15:47:00
あああ

403 :デフォルトの名無しさん:04/11/26 03:50:57
VC++.NET2003です。
MFC拡張DLLにてCObjectから派生させたクラスをエクスポートしてます。
DEFファイルは使わずに、AFX_EXT_CLASSでクラス全部をエクスポート
してます。
WinXPProだと、AfxLoadLibrary()でHINSTANCEもらえるんですけど、
Win2KProだと、Entrypoint not foundとかって怒られて蹴られてしまう
んです。
もちろん、実装したクラス定義とクラスメソッドも対比させて見回した
んですけど足りないモノがないようで、困ってます。
こういう現象の問題として何が考えられるでしょうか?

404 :デフォルトの名無しさん:04/11/26 10:10:37
DependencyWalker で調べてみたら?
2k上で。

405 :デフォルトの名無しさん:04/11/26 15:50:33
>>403
解決しますた
PlatformSDKの関数で2k非対応なものがコッソリ...
VC6を2Kに入れて発覚.ちょっとブルー入りましたが
MSに一問一答\29400円也を払わずに済みました

406 :デフォルトの名無しさん:04/11/27 05:33:30
GetDC(NULL)で
スクリーンのデバイスコンテキストを取得し,
デスクトップ上に落書きをしたのですが,

この落書きをクリアするなにか良い方法はあるでしょうか?
スクリーン全体を再描画したいのです

407 :デフォルトの名無しさん:04/11/27 08:30:02
普通にInvalidateRect(NULL, NULL, FALSE);すれば元に戻らない?

408 :デフォルトの名無しさん:04/11/29 11:28:09
ダイアログのクライアント領域を印刷しようとしています。
とりあえず画面イメージを4倍角でテスト印刷しようと思い
下記のようにしてみたのですが、にじんだイメージの印刷しかできません。
(貼り付けるソースが長いとエラーになったので、主要部分のみ)
CClientDC dc(this);
CDC    memDC;
CBitmap memBmp;
CRect   rect;
GetClientRect(rect);
memDC.CreateCompatibleDC(&dc);
memBmp.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
memDC.SelectObject(&memBmp);
memDC.BitBlt(0, 0, rect.Width(), rect.Height(), &dc, 0, 0, SRCCOPY);
〜中略〜
CDC *pdcDlg = GetDC();
dcPrint.StartDoc(&di);
dcPrint.StartPage();
if (!dcPrint.StretchBlt(0, 0, rect.Width() * 2, rect.Height() * 2, &memDC, 0, 0, rect.Width(), rect.Height(), SRCCOPY)) {
 dcPrint.TextOut(0, 0, "StretchBlt() error");
}
dcPrint.EndPage();
dcPrint.EndDoc();
dcPrint.Detach();

画面イメージの印刷をするには、どのようにすればいいのでしょうか?
宜しくお願いします。

409 :408:04/11/29 11:50:43
すみません、失礼しました。
用紙を節約して、AcrobatでPDFで出力した結果、にじんだ印刷になっていたのですが、
なんと印字品質の設定が問題だったようです…
大変お騒がせしました。 m(_ _)m

410 :デフォルトの名無しさん:04/11/29 16:45:47
ピクチャボックスコントロールに対してSetScrollInfoを使ってスクロールバーを表示したのですが、スクロールしようとしても反応してくれません。
内部的な変数が変わらないとかバーの位置が変わらないとかではなくて、クリックしても反応しないと言った感じです。
どなたか治す方法が分かる方いらっしゃいましたら、教えていただけないでしょうか?

411 :デフォルトの名無しさん:04/11/29 17:20:46
>>410
メッセージハンドラは?

412 :410:04/11/29 17:41:24
>>411
メッセージハンドラにも反応がないです

413 :デフォルトの名無しさん:04/11/30 15:04:18
新しく作成したスレッドクラスからViewクラスポインタを取得したいのですが、
エラーが発生してうまくいきません。
インクルード文をどこに追加すればいいのでしょうか?
教えてください。お願いします。


414 :デフォルトの名無しさん:04/11/30 15:10:01
必要なところにです。

415 :デフォルトの名無しさん:04/11/30 15:12:42
いつもの厨が出た

416 :デフォルトの名無しさん:04/11/30 15:15:45
>413
昔同じことで困ったことがあるから助けてみる。

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

class スレッドクラス;

class ビュークラス{


417 :デフォルトの名無しさん:04/11/30 15:17:28
class スレッドクラス; // ←前方参照

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

と言った形で書く。
詳しくは「クラス」「前方参照」とかでググるヨロシ。

418 :デフォルトの名無しさん:04/11/30 20:54:32
>>416さん 有難うございました。解決しました。


419 :デフォルトの名無しさん:04/12/07 09:51:44
_beginthread()で起動したワーカースレッドの処理内で
App.CreateDispatch()を行うと失敗してしまいます。
OLEオートメーションのサーバオブジェクト作成って
ワーカースレッドからできないのでしょうか?
何かヒントでもいいのでご存知の方教えてください。お願いします。

・ビルド出力にはエラー警告は出ていません。
・VC++.NET2003、WinXP、MFCアプリ(ダイアログ)

420 :デフォルトの名無しさん:04/12/07 10:03:29
>>419
ワーカスレッドでAfxWinApp()は使えないけど、ちゃんとCWinAppのポインタは取れてる?

421 :デフォルトの名無しさん:04/12/07 10:37:06
スレ違いごめん
MFCN40D.dllってどこで手に入る?

422 :デフォルトの名無しさん:04/12/07 10:52:03
>>420
CWinApp* pApp= AfxGetApp();
でワーカスレッド内でポインタはとれましたが
何かすべきことがあるのでしょうか?

・AfxOleInit()はInitInstance(メインスレッド)でやっています。

423 :デフォルトの名無しさん:04/12/08 23:49:17
とりあえず?
_beginthread() → AfxBeginThread()

424 :デフォルトの名無しさん:04/12/09 01:16:14
ワーカースレッド内でも最初にAfxOleInit()をせんといかんよ。

425 :デフォルトの名無しさん:04/12/09 15:01:20
エェー。

426 :410:04/12/10 06:01:25
度々すみません。
410のスクロールバーなのですが、まだ解決できません。
どなたかわかる方いらっしゃいませんか?

427 :デフォルトの名無しさん:04/12/10 08:29:07
>>410
多分、Focusが合ってないから。Dialog中のControlの場合は、GotoDlgCtrl。
それ以外の場合はSetFocusで合わせれば良いかと。

428 :デフォルトの名無しさん:04/12/10 10:48:45
MFCって化粧品?

429 :デフォルトの名無しさん:04/12/10 11:06:05
Micro soft Foundation Cream...
細かく柔らかな下地クリームか。

430 :デフォルトの名無しさん:04/12/10 11:32:28
Microsoft Funky Cinema

431 :デフォルトの名無しさん:04/12/10 11:34:09
Majide Fuyouna Classtachi

432 :デフォルトの名無しさん:04/12/10 12:29:38
Mike Founds Cookie

433 :デフォルトの名無しさん:04/12/10 12:39:48
Microsoft Forever Congratuations

434 :デフォルトの名無しさん:04/12/10 13:04:48
Microsoft Fan Club

435 :デフォルトの名無しさん:04/12/10 13:32:01
Microsoft For CORBA

436 :デフォルトの名無しさん:04/12/10 13:49:01
やめろ

437 :デフォルトの名無しさん:04/12/10 14:01:11
>>434
ワロタ

438 :デフォルトの名無しさん:04/12/10 18:34:19
VC++.NET2003を利用しています。学校で「Win32プロジェクトで
作成したSDKのプログラムをMFCに変更しなさい」という課題が
出されましたが、今までMFCを習った事がなく(前回の授業一回
のみ)検索していたのですが、わかりやすいサイトを見つける事
が出来ませんでした。「猫でもわかる〜」も参照してみたのです
が、途中で終わってしまっているようです。「SDKではこう記述
するところはMFCではこのように書く」といったような説明がさ
れているサイトがありましたら、どうかご教授ください。
それか直接教えていただけるようでしたら、課題のSDKのプログラム
(簡単な描画プログラム)をUpします。

439 :デフォルトの名無しさん:04/12/10 18:40:43
>>438
正直、やっても意味の無い課題だな。

440 :デフォルトの名無しさん:04/12/10 18:48:00
VS .Netはあんまり使ってないからそのまんまにはわからんけど、
・MFCアプリケーション(SDI)をウィザードに従って作成。
・ViewクラスのOnDraw(あるいはOnPaint)にその描画プログラムでの描画部を実装。
だけで済むかと。

441 :デフォルトの名無しさん:04/12/10 18:56:15
なんだかしばらく前に全く同じ内容の書き込みを見たんだが・・・

442 :デフォルトの名無しさん:04/12/10 19:15:39
>>440
>>441
ありがとうございます。ということは、ここで質問するのは板違い
ですね。他の場所探してみます!

443 :デフォルトの名無しさん:04/12/11 04:47:27
.NETには6.0にあったプロファイラはなくなっちゃったんですか?

444 :デフォルトの名無しさん:04/12/13 11:17:53
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 となってしまいます。

この理由がわかる方、ご教授お願いします。


445 :デフォルトの名無しさん:04/12/13 13:22:19
LR_LOADFROMFILE | LR_CREATEDIBSECTION
で?

446 :デフォルトの名無しさん:04/12/13 13:22:46
LR_CREATDIBRECTIONを追加したらどうだろ?

447 :444:04/12/13 13:28:02
>>445 さん
ありがとうございます!
LR_CREATEDIBSECTION を追記したら、ちゃんと
取得できました。


448 :446:04/12/13 13:41:13
プンスカプン!!!!

449 :444:04/12/13 13:51:46
>>446
間違ったレス付けるヤシにお礼は言えません

450 :444:04/12/13 14:00:10
>>449
誰ですか?

>>446 さん
レスありがとう。
更新せずにレス書いたために、見落としました。
すいません(^^;

451 :デフォルトの名無しさん:04/12/13 21:19:19
DirectXで動くゲームよりも最前面にウィンドウを出したいのですが、
SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
とやっても、ちらちらと映るだけでうまくいきません。
どのようにすればよいのでしょうか?

452 :デフォルトの名無しさん:04/12/17 01:24:16
Windows2000,VC++6.0です。

CScroolViewから派生させたクラスでWM_MOUSEWHEELを拾おうと思ってます。が、
スクロールバーが出てくるまではオーバーライドしたOnMouseWheelできちんと
拾えるのに、スクロールバーが出てくるとPreTranslateMessageですら拾えなく
なってしまいます。CMainFrameでも拾えません。ホイールを回すと勝手に
スクロールが実現されている状態です。WM_VSCROLLなどが来ているのは
確認できています。

環境によってはCScroolViewのスクロールが上手くいかないと聞くので自前で
スクロールさせようと試みているのですが、結局のところどこにWM_MOUSEWHEELが
拾われているのかさっぱり分からない状態です。CSplitterWndでウィンドウ分割
しているのが少々怪しいと踏んでいるのですが、勘止まりです。

Spy++で「すべてのウィンドウ」を対象にしてみると、CViewから派生させたウィンドウのみ
WM_MOUSEWHEELが発生しているようでした。他にCListView、CTreeViewから派生させた
ウィンドウなどではCScroolViewから派生させたクラスと同様WM_MOUSEWHEELが発生
している様子はありません。なお、VisualC++のエディタやアウトプットでやってみても
同じようです(Spy++のメッセージ監視ウィンドウにWM_MOUSEWHEELが出ない)。

どこにWM_MOUSEWHEELが拾われているのか調べる上手い方法はないでしょうか?

453 :デフォルトの名無しさん:04/12/17 23:12:55
>>452
考えられることとして
・_WIN32_WINNTや_WIN32_WINDOWSの定義
 (現象から言ってこれは無いと思うが念のため)
・対象ウィンドウにフォーカスが当たっていない。
・マウスドライバ(ユーティリティソフト等も含む)が勝手にフックしている。
 (WM_MOUSEWHEELを自動的にWM_VSCROLLやWM_HSCROLLに変換してしまっている)

454 :デフォルトの名無しさん:04/12/18 10:23:53
>>453
マウスドライバの設定を「Office準拠」とやらにしてみたら拾えるようになりました。ありがとうございます。

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

実装ではオプションでホイールの設定を出来るようにした上で、「変更が反映されない場合はコントロール
パネルのマウスから云々…」とでもするしかないですかね。

455 :453:04/12/18 18:40:48
>>454
それか、アプリごとに設定を切替可能なドライバであれば、
ユーザーにそのように設定してもらうとか

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

ついでに
そのようなユーティリティは他社マウスでも使える場合があります。
うちのはMITSUMIマウスでELECOMのユーティリティ

456 :デフォルトの名無しさん:04/12/18 23:52:00
ダイアログボックスのピクチャーコントロールに
実行中のデータを逐次表示させようとスレッドのなかで
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]です。

457 :デフォルトの名無しさん:04/12/19 00:45:44
>>456
ダイアログクラスのメンバ関数版のGetDlgItem()を使えば引き数はIDC_GRAPHのみ。

458 :デフォルトの名無しさん:04/12/20 13:40:57
そのメンバ関数はどうやって扱ったらよいのですか?

459 :デフォルトの名無しさん:04/12/20 15:03:40
ダイアログクラスのポインタ→GetDlgItem()

460 :デフォルトの名無しさん:04/12/20 15:27:01
>>458
宿題スレで、C++の基本を勉強しろと言われてなかったか?

461 :デフォルトの名無しさん:04/12/20 18:01:17
UINT GraphView(LPVOID MsObjPtr){
CWnd* ptr = (CWnd *) MsObjPtr;
CEdit* h = (CEdit*)ptr->GetDlgItem(IDC_GRAPH);
CDC* pDC=h->GetDC();
で上手くいきました

462 :デフォルトの名無しさん:04/12/20 18:32:31
>>460
お前が言ったんだろ
わざわざ粘着して来るなよ
キモイ

463 :デフォルトの名無しさん:04/12/20 19:10:24
簡単なブラウザを作ってます
CHtmlViewつかってとりあえずほかのところは作ったんですが
Proxyをこのブラウザを使ったときだけはさみたいのですが
(インターネットオプションで設定〜、ではなく。)
ぐぐってもいまいちどうしたらいいかちゃんとのってるところが見つかりません

どうしたらいいか、あるいは解説サイトなどを、教えていただきたい。
よろしくおねがいします。

464 :デフォルトの名無しさん:04/12/20 23:10:55
>>461
なんでCEdit*にするの?

465 :デフォルトの名無しさん:04/12/21 00:17:09
>>463
InternetSetOption

466 :463:04/12/21 18:16:53
>>465
あんがとです
完成したです♪
さんきゅぅです

467 :デフォルトの名無しさん:04/12/21 22:06:03
こういう事がやりたいん(グリッドの欄には入力可)ですが、
ttp://www.physci.org/codes/tame/screenshot/landscape/table1.gif
方法ありますか?

468 :デフォルトの名無しさん:04/12/21 22:10:12
あります。

469 :デフォルトの名無しさん:04/12/21 23:27:36
これってCListCtrlのオーナー泥でやってるのかな?
俺の場合タブが階層っぽくなってる方に興味があるけど
それっぽい解説が載ってるページがあったら教えてくだちい。

470 :デフォルトの名無しさん:04/12/21 23:49:38
そもそもこれってWindowsじゃないような?
467はWindows上でこれを実現したいといっているのかも知れないけど。

471 :デフォルトの名無しさん:04/12/21 23:55:03
>>467
ラベルの編集が可能なので、そのときのオーナードローで編集位置をあたかもセルであるかの如く見せかければよい。
CodeGuruに色々応用例がある。
#が、多機能すぎて使いづらいか表示がおかしくなるかのどちらかのものが多い。

>>469
直接知っているわけではないが、画像に書かれているキーワードで検索してみたら?

472 :デフォルトの名無しさん:04/12/22 06:38:05
VC++のデバッガ上で値を代入するには?


473 :デフォルトの名無しさん:04/12/22 08:02:47
>>472
正規品ならヘルプのユーザーズガイドに書いてあるはずだけど

474 :デフォルトの名無しさん:04/12/22 10:28:11
>>471
入力はそれでOKだけれど、その、多段階になってるヘッダが難しいと思われ。
つか、出来るのか?これ。

475 :デフォルトの名無しさん:04/12/22 10:54:52
出来るでしょ。

476 :デフォルトの名無しさん:04/12/22 11:16:00
ラベル描画を乗っ取って全部自前で書けばできると思うけど…
メンドクセ

477 :デフォルトの名無しさん:04/12/22 14:43:17
DialogBarを「クラスの追加」を使い、CMyRebarDialogというクラスを作ったんですが、
(そのダイアログには、ボタンが一つあります)

class CMyDialog : public CDialog
{
DECLARE_DYNAMIC(CMyDialog)

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

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

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

そういう仕様なのでしょうか?

478 :478:04/12/22 14:43:35
宜しくお願いします。

479 :デフォルトの名無しさん:04/12/22 15:09:14
>>477
サブクラス化するか
クラスを作らないでCMainFrameでやる

480 :477:04/12/22 16:25:54
>>479
解決しました。
ありがとうございました。

481 :デフォルトの名無しさん:04/12/24 15:32:11
すみません さっき別スレに書いてしまいました
お世話になっております

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

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

2点お願いします





482 :481:04/12/24 15:32:53
あげます

483 :デフォルトの名無しさん:04/12/24 15:36:26
ReadFileってことはMFCの話題では無いな


484 :481:04/12/24 15:49:22
>>483
あれ?
CSVファイルをCreateFile でオープンして、readfileで要素を
取得するということではダメでしょうか?

485 :デフォルトの名無しさん:04/12/24 15:56:17
やり方がどうこうではなく、ここで聞くのが間違っている。

486 :481:04/12/24 16:03:35
>>485
わかりました
失礼しました

487 :デフォルトの名無しさん:04/12/24 16:58:02
CSpritterWndで分割した個々のViewに、
それぞれRebarを装着させることはできるのでしょうか?

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

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

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



488 :デフォルトの名無しさん:04/12/24 17:47:42
>>487
要するにCViewにCRebarを付けるということか。
俺にもわからん。

489 :デフォルトの名無しさん:04/12/25 01:47:36
>>487
こんなん参考にならない?
http://www.codeproject.com/splitter/toolbar_splitter.asp

490 :デフォルトの名無しさん:04/12/25 09:26:02
CViewはCWndの派生クラスなのに、ツールバーを付けれないっつーのがMFC特有の癖だよな。
ほかにもコーユー癖がある
ムズカシイやね

491 :デフォルトの名無しさん:04/12/25 09:31:09
>>490
MainFrame(CFrameWnd)だからToolbarを付けれたんだよ

492 :デフォルトの名無しさん:04/12/25 10:54:15
ら抜き言葉が許されるのは小学生まで

493 :デフォルトの名無しさん:04/12/25 11:03:53
どっかで変なこと吹き込まれた DQN が virtual インテリをやろうと必死のようでw

494 :デフォルトの名無しさん:04/12/25 11:08:59
いい加減誰かまともな返答できる奴はいないのか?

495 :デフォルトの名無しさん:04/12/25 11:37:26
>>487
これなんかどう?
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100017.txt

496 :デフォルトの名無しさん:04/12/25 11:40:40
ビュー用にCViewの派生クラス作って、
その派生クラスのOnCreateでCRebarをCreateする。
でもOpenJaneみたくしたいならFormViewでやってもいいかも。

497 :デフォルトの名無しさん:04/12/25 12:40:45
>>494
お前が答えろよ

498 :478:04/12/25 14:20:06
皆様ご返答ありがとうございました。
>>495さんのリンク先の内容で試してみましたらうまくいきました。

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

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

499 :デフォルトの名無しさん:04/12/25 19:07:54
どういたしまして。

500 :デフォルトの名無しさん:04/12/26 00:26:42
ここは礼儀正しいインターネッツですね

501 :デフォルトの名無しさん:04/12/26 12:48:22
>>500
ウルセーよ

502 :デフォルトの名無しさん:04/12/26 20:15:59
日経BPのMFC本、分厚ぅwww
アレ片手に電車の中で勉強してたら注目された。
俺がイケメンだからってのもあるが。

503 :デフォルトの名無しさん:04/12/26 21:38:49
MFC本?読むものじゃないだろ、あれはリファレンス程度。
言語解説の本ならいざしらず、ライブラリ解説書など「読む」とは言わないのでは?

周りの乗客からは、電話帳を読むのと同じくらいアフォな光景として写ったに違いない。

504 :デフォルトの名無しさん:04/12/26 21:43:56
単にウザかっただけだろ。

505 :デフォルトの名無しさん:04/12/27 16:56:45
どうしても分からないので質問させて頂きます。

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

この様にボタンの状態(ON/OFF)を調べているのですが
ボタンをON/OFFしても常に0しか返ってきません…
ヘルプには、OFF=0 ON=1 不確定=2 と記載されているのですが…

506 :デフォルトの名無しさん:04/12/27 17:09:30
SetStateしてみれば?

507 :デフォルトの名無しさん:04/12/27 17:10:01
ボタンのスタイルは?
ただのPUSHBUTTONだったら、ON/OFF状態は無いぞ。

508 :505:04/12/27 17:24:43
>>506
今回は外部から押された状態を取得したいものでして…

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

今回は単純に、ボタンのON/OFF(クリックではない)を取得していんですが
通常はどの様にして状態を取得するものなんでしょうか?

509 :デフォルトの名無しさん:04/12/27 18:05:12
ON/OFF状態があるのは、チェックボックスやオプションボタン(ラジオボタン)。


510 :505:04/12/27 18:17:39
>>509
そうなんですか??
でもオーナードローにすると通常のボタンでもON/OFFを取得出来るのですが…

CWnd::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
switch(nIDCtl){
case IDC_BUTTON1:
if(lpDrawItemStruct->itemState & ODS_SELECTED)

else

}
}

511 :デフォルトの名無しさん:04/12/27 18:36:27
プッシュボタンは違うって言ってるのに、オーナードローボタンの例を出されても…

512 :505:04/12/27 18:44:48
>>511
オーナードローになるとまた別なんですか…
すみません、なんか変な事言っちゃったようで…
わかりました。プッシュボタンでは無理だという事ですね。
親切に答えて頂き、ありがとうございました。

513 :デフォルトの名無しさん:04/12/27 19:06:42
んでまあ、君のやりたいことはチェックボックスやラジオボタンでBS_PUSHLIKE
たてとけばいいんじゃ無かろうかと思われるが。

514 :デフォルトの名無しさん:04/12/31 14:35:17
しつもんですが、

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

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

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


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

515 :デフォルトの名無しさん:04/12/31 16:28:59
>>514
INTERNET_FLAG_NO_COOKIES

516 :デフォルトの名無しさん:04/12/31 22:17:26
皆さん今年もお世話になりました。
来年もMFC関連でよろしく!

517 :デフォルトの名無しさん:04/12/31 22:28:51
誰もテメーの世話なんかしたくないぞ。
自分の尻くらい自分で拭けよ
二度と来るな

518 :デフォルトの名無しさん:05/01/01 12:50:42
いるよね。こういうの。
xxさん、ありがとうございます。
これからもよろしくお願いしますって書く香具師。
完全に教えて君だもんな。
ベリューションとか、高橋とかに沢山いるのも
ウゼー

519 :デフォルトの名無しさん:05/01/01 14:13:00
おまいら、禿誉め

仕方ねーべ。本人は謙虚にしているつもりなんだろう。
しかし、それ以上に鬱陶しいのは、
以前〜〜でお世話になった●●です。
とか言い出す奴だな。
お前なんか誰も覚えてねーよ、って。w

520 :デフォルトの名無しさん:05/01/01 16:01:10
たし蟹

521 :デフォルトの名無しさん:05/01/02 16:51:57
タブコントロールをメインフレームに追加して表示したいのですが、
上手く配置して表示できません。
どうすればできるのでしょうか?

522 :デフォルトの名無しさん:05/01/02 17:03:54
あ〜あ、噂をすれば何とやら。
上手く配置してなんてどういうのが
上手いのか分かるわけねーじゃん。
どうすればって、どういう配置なのか
全然書いてねーじゃん。これで答えて欲しいのかよ。
質問する態度じゃねーぞ。

523 :デフォルトの名無しさん:05/01/02 17:09:41
>522
どうもすいませんでした。
上手く配置するとは、この場合は、ツールバーの下にタブコントロールを配置表示することなのですが。
ただ単にフレームにタブコントロールを追加するとそうはならないので、
どうすればいいのでしょうか?




524 :デフォルトの名無しさん:05/01/02 17:10:44
>523
>522はただの荒らしだから気にしないように。

525 :デフォルトの名無しさん:05/01/02 17:21:47
だが核心を突いている。

526 :デフォルトの名無しさん:05/01/02 18:27:28
>>523
ツールバーの下にタブコントロールを表示すれば?

527 :デフォルトの名無しさん:05/01/02 19:00:54
嫌です。
別の方法はありませんか?

528 :デフォルトの名無しさん:05/01/02 19:34:25
>>526
どうやってツールバーの下で表示すればよいのでしょうか?(^^;
RecalcLayoutをオーバーライドして何かするのでしょうか?

529 :デフォルトの名無しさん:05/01/02 19:43:18
ツールバーと同様

530 :デフォルトの名無しさん:05/01/02 20:23:14
>529
そうですか。
でも同様にするという分からないんです。
重ね重ねすいません。m(_ _)m

531 :デフォルトの名無しさん:05/01/03 00:08:08
>530
ぷっ。この板にその質問答えられる程のスキル持った奴なんていないよ。m9(^Д^)プギャー

532 :デフォルトの名無しさん:05/01/03 20:14:19
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CWorkPlusMFCView),CSize(100,100),pContext);

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

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

ひとつの分割されたエリアに、メニュー操作によっていろんなViewを表示させるようにしたいのです。
ご返答をいただけると助かります。

533 :532:05/01/03 20:29:25
参考になるサイトを見つけました。
知りたいことが書いてあります。
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

あとは自分で学習します。
どうもご迷惑おかけしました。

534 :デフォルトの名無しさん:05/01/03 22:26:56
View内のOnDrawをメニューを選ぶことで強制再描画させる関数って何なんでしょうか?
かなり基本的な質問ですが・・・。

535 :デフォルトの名無しさん:05/01/03 23:22:00
Invalidate()
UpdateWindow()

536 :デフォルトの名無しさん:05/01/03 23:38:22
ClistCtrl クラスの表示方法で困ってます。

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

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

タイトル行→|   名前   |    中央表示
値行   →|a.txt       |   左詰

537 :デフォルトの名無しさん:05/01/04 06:03:04
右寄せ左寄せは可能(自分が過去に作ったプログラムがそうなってる)
真ん中は不明

538 :デフォルトの名無しさん:05/01/04 07:38:09
>>535
CViewへの再描画は、その関数ではできない。
MFCの仕様。

539 :デフォルトの名無しさん:05/01/04 07:56:10
>534
ぷっ。まちがえてやんの。m9(^Д^)プギャー

540 :536:05/01/04 09:53:55
>>537
レスさんく。
うまく理解できていないような気がするので一応書いときます。

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

タイトル行作成時には、中央、左、右と配置する箇所を指定する変数が存在するのですが
値行に追加するときには、配置箇所を指定する変数が見当たりません。

541 :デフォルトの名無しさん:05/01/04 11:56:35
>>538
で、どうすればいいわけ?

542 :デフォルトの名無しさん:05/01/04 12:16:44
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);
}

543 :デフォルトの名無しさん:05/01/04 12:38:00
>>538
ビューが乗ってるフレームにInvalidateしてできないと言ってる予感

544 :デフォルトの名無しさん:05/01/04 17:50:09
>>540
カスタムドローするとか空白を自分で入れるとかして調整しないといけないんでなかろか。

545 :デフォルトの名無しさん:05/01/05 00:51:35
>>538
ぷっ。まちがえてやんの。m9(^Д^)プギャー

546 :デフォルトの名無しさん:05/01/05 01:33:59
SplitterWndを2分割したいのですが、
Rebar上のコントロールボタンを押したときだけ、分割される(分割無し→2分割)ようにするにはどうすればいいのでしょうか?

Windowsフォルダウィンドウの検索ボタンを押したら、左側に検索分割ウィンドウが表示されるようなことをしたいのです。
動的に分割を操作したい。

547 :デフォルトの名無しさん:05/01/05 02:32:25
>>546
・Windowサイズ変更
・Window表示・非表示

548 :デフォルトの名無しさん:05/01/05 04:12:54
>>547
ぷっ。まちがえてやんの。m9(^Д^)プギャー

549 :デフォルトの名無しさん:05/01/05 04:20:12
>>548
ぷっ。回答出来ないでやんの。m9(^Д^)プギャー

550 :デフォルトの名無しさん:05/01/05 04:29:40
頭のおかしな人の判定基準

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

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

・自分の感情だけ書く人
 「〜〜がムカツク」とか自分の感情を掲示板に書くことに意味があると思っている人です。
 何がどのようにムカツクのか論理的に書いてあれば、他人が読んでも意味のある文章になりますが、
 そういった論理的思考の出来ない人です。もうちょっと賢くなるまでは放置してあげてください。

551 :デフォルトの名無しさん:05/01/05 05:44:32
>>546
Explorer Bar
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/bands.asp

552 :デフォルトの名無しさん:05/01/05 12:48:39
>>551
それってシェルエクステンションの作り方だろ

553 :デフォルトの名無しさん:05/01/05 14:01:39
MFCで画面遷移したいです
とあるコマンドボタンを押したら、
別の画面が表示されるという風にしたいのですが、以下のようにコーディングしたら、
押した瞬間に消えてしまうようになってしまいます。
どうか、ご教授ください
void CXXXX::OnSubmit() { // コマンドボタン押下
遷移したいダイアログ tmpdlg;
tmpdlg.Show(ID);
}
void CXXXX::Show(unsigned int uID)
{
Create(uID);
ShowWindow(SW_SHOW);
CenterWindow();
}


554 :デフォルトの名無しさん:05/01/05 14:57:15
それじゃtmpdlgがすぐ消えちゃうから
モーダルにするか変数のスコープを広くする

555 :553:05/01/05 15:01:13
>>554
ありがとうございます。
ちょっと モーダル使うほうで組みなおしてみます

アクティブウィンドウになってないと、すぐ消えるんですね
ShowWindowって

556 :デフォルトの名無しさん:05/01/05 15:12:48
>>555
おいおい、変数のスコープの問題だってばさ。

557 :デフォルトの名無しさん:05/01/05 16:57:01
>>548
ぷっ。ちゃんと教えてもらってるのに解釈間違えてやんの。m9(^Д^)プギャー

558 :デフォルトの名無しさん:05/01/05 16:58:14
>>557
レス番555だった(´・_・`)

559 :デフォルトの名無しさん:05/01/05 16:59:33
ここは簡単な質問しか答えられないDQNが集まるインターネッツですね

560 :デフォルトの名無しさん:05/01/05 17:19:44
>>557-558
バカか?

561 :デフォルトの名無しさん:05/01/05 17:33:05
560 名前: デフォルトの名無しさん 投稿日: 05/01/05 17:19:44
>>557-558
バカか?

562 :デフォルトの名無しさん:05/01/05 17:33:09
自分が乗ってる木の枝切り落とすようなものか

563 :デフォルトの名無しさん:05/01/05 17:37:38
>559
ぷっ。みんなが分かってて誰も口にしないこといってやんの。m9(^д^)プギャ

564 :デフォルトの名無しさん:05/01/05 21:00:00
>563
同じようなことを何度も書くな。ヴォケが。駄スレ化するだろうがっ!!!

565 :デフォルトの名無しさん:05/01/06 09:34:58
dll の関数から,
その dll で定義されているダイアログを呼び出そうとしたところ,
エラーが出ました.

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

なぜでしょうか?


566 :デフォルトの名無しさん:05/01/06 10:17:01
>>565
そのエラーが何なのかわからんことには

567 :デフォルトの名無しさん:05/01/06 10:23:33
>>566
以下のようなメッセージです

Debug Assertion Failed!

Program: ...****.exe
File: f:\vs70builds\3077\vc\MFCATL\ship\atlmfc\include\afxwin1.inl
Line: 26

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.


568 :デフォルトの名無しさん:05/01/06 10:38:01
>>567
そのメッセージが指してる場所見てみ。
ASSERT(なんたら) とか VERIFY(なんたら) とか書いてあるから。
その「なんたら」の部分が0(false)になるとそのエラーメッセージ出して止まるようになってるの。
逆に言うと「なんたら」の部分が0(false)になってはいけないということで
そうなった原因は君のプログラムにあるわけだ。

569 :デフォルトの名無しさん:05/01/06 11:01:35
>>568

CDialog を使った dll を呼びだして
ダイアログを表示するには,
呼びだし側は MFC アプリでなければ
ならないのでしょうか?

570 :デフォルトの名無しさん:05/01/06 11:05:36
>>569
んなことはない

571 :デフォルトの名無しさん:05/01/06 23:09:07
こんばんは、質問します。

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


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

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




初心者ですいません、バカですいません。
でも冷やかしはゴメンなさい。よろしくお願いします。


572 :デフォルトの名無しさん:05/01/06 23:22:09
>>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を複数立ち上げておくのが楽。

573 :571:05/01/06 23:37:35
>572 おぉ!さっそく神の声が!!ありがとうございます。お手数かけます。(*^-^)ノ

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

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

呼び出し先のソースのありかを
santa.exeのプロジェクトが分からない場合は、
ダイアログが出て、指定するように催促される、
のですかね?
だとすると、{ディレクトリ/ソース/プロジェクトファイル}、
どれを聞かれるのでしょうかね?


574 :デフォルトの名無しさん:05/01/07 00:58:30
>正解は、
いや、何をもって正解というのかわからんです。
ほかにもっといい方法があるかもしれないし、
用途によってやり方を選べばいいだけ。

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

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

 場所がわからない場合は、F11を押しても、F10のように、
 処理を実行後、次の行に行くだけで、場所指定するようなことはありません。


575 :571:05/01/07 23:32:01
ありがd♪

576 :デフォルトの名無しさん:05/01/09 13:21:19
365 名前:デフォルトの名無しさん[] 投稿日:05/01/08 14:55:00
結論:MFC使え。

366 名前:デフォルトの名無しさん[sage] 投稿日:05/01/08 19:20:45
MFCって、広く使われてるクラスライブラリの中では最悪の部類に属するよね。

577 :デフォルトの名無しさん:05/01/09 17:40:17
そりゃ一番最初にできた商用ライブラリだもんな。
いいんだよ、なんでも。どーせwindowsは誰が作ってもよく落ちるんだw

578 :デフォルトの名無しさん:05/01/09 18:07:36
MFCって、広く使われてるクラスライブラリの中では最良の部類に属するよね。

579 :デフォルトの名無しさん:05/01/09 18:08:09
365 名前:デフォルトの名無しさん[] 投稿日:05/01/08 14:55:00
結論:MFC使え。

578 :デフォルトの名無しさん :05/01/09 18:07:36
MFCって、広く使われてるクラスライブラリの中では最良の部類に属するよね。

580 :デフォルトの名無しさん:05/01/09 19:55:19
質問ですが、
オリジナルのテキストエディタを作ろうと思ってます。

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

要するに、「ひらがな」を「漢字」に変換したいから、IMEの漢字選択サブメニュー?(正式な名称がわかりませんすいません)を開くための
クラスを知りたいのです。
そういうIME関連のクラスってあります?

581 :デフォルトの名無しさん:05/01/09 20:01:33
>>580
CEditそのまんまじゃだめ?

582 :580:05/01/09 20:06:14
>>581
返答のほど、ありがとうです。

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

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

で、漢字変換をライブラリーで扱えるMFCクラスはないのでしょうか?
それをぜひお聞きしたいのです。

583 :デフォルトの名無しさん:05/01/09 20:25:42
>>582
よく知らんがImmで始まるAPI使うんじゃないかな?

584 :デフォルトの名無しさん:05/01/09 20:28:08
>582
MSDNにサンプルあるぜ

585 :デフォルトの名無しさん:05/01/09 20:28:09
>>582
もし本当に、まともなオリジナルのテキストエディタを開発しようとしていると言うのなら、
漢字の入力なんて瑣末な問題に拘泥せずに取り敢えず英文をまともに入力できるものを目指したら?
#つーか、そのレベルでまともなものが作れるとは思わんのだが。

586 :デフォルトの名無しさん:05/01/09 20:31:38
>>585
>英文をまともに入力できるものを目指したら
漢字変換って書いてあるだろ。
近眼か?

587 :デフォルトの名無しさん:05/01/09 20:34:07
>>582
http://home.h07.itscom.net/buruturi/VCTIPS_008.html
これが参考になる。

ちなみに(3)の(F)のImm〜の次の行にreturn 0;と書けば(4)は省略できるはず。

588 :デフォルトの名無しさん:05/01/09 20:35:26
>>582
第282章 IMEの操作 その5
http://www.kumei.ne.jp/c_lang/sdk3/sdk_282.htm

猫さんのHPにありましたよ。
ここを参照するべし!うしうし!

589 :デフォルトの名無しさん:05/01/09 20:35:37
>>586
敢えてそう書いているんだろ。
池沼か?

590 :582:05/01/09 20:37:22
>>587-588
ありがとうございます
Win32でも構いません

本当にありがとうです
参照してみます。

591 :MFCでは勘が上手く働かん・・・:05/01/09 21:29:42
MFC初めてなんだけど、質問。

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

ほかにも消したらだめなコメントってあるの?


592 :デフォルトの名無しさん:05/01/10 03:11:58
CRichEditCtrlで、単にエディット内の全ての文字列を取り出すというメンバ関数はないん?

593 :592:05/01/10 05:29:38
自己解決

EDITSTREAMを使ってできました。

すいませんです。

594 :デフォルトの名無しさん:05/01/10 08:23:56
CTreeCtrlのそれぞれのツリー要素にツールチップをつける方法を教えてください。

595 :AYANA:05/01/10 15:48:11
MFCでRebarコントロールを作ろうとしてますが、
下記の画像のように、ひとつのバーにいろんなコントロールをつけるのと、
特定のコントロールを左寄せまたは右寄せにしたいのですが、どうしても方法がわかりません。
http://www.geocities.jp/ayana_city/rebar.JPG

誰かわかる方いますか?

1)ひとつのバーにいろんなコントロールをつける
2)特定のコントロールを左寄せまたは右寄せにしたい

596 :AYANA:05/01/10 16:14:08
1)のひとつのバーにいろんなコントロールをつける は、DialogBarを搭載すれば解決しますが、
そうすると、DialogBarだと、2)が出来ないと思うんですけども。

DialogBarで特定のコントロールを右寄せにしたりできます?
たしか位置は固定なはずでしたが・・・(勘違いならすいません

597 :AYANA:05/01/10 16:45:01
http://www.google.co.jp/search?q=cache:uOLyTe-4rtoJ:www.codeproject.com/docking/toolbarwithcombo.asp+Toolbar+Combo+MFC&hl=ja

↑で解決。
ども〜でした。

598 :デフォルトの名無しさん:05/01/10 17:05:12
MFCでチェックボックスを作る場合ってどうするんでしょうか?

599 :デフォルトの名無しさん:05/01/10 17:14:00
>>598
リソースエディタで貼り付けたり、CButtonで直接作ったり。

600 :598:05/01/10 17:15:18
>>599
チェックボックスってCButtonで作るんですか。
へぇ。試してみます。
ありがとう。

601 :デフォルトの名無しさん:05/01/10 17:33:43
>>600
CreateWindow 関数をぐぐるなり MSDN なり、何でもいいから調べてみろ
ウインドウクラスに "BUTTON" を指定する場合の説明をよく読め

602 :デフォルトの名無しさん:05/01/10 17:52:31
MFC使ってる人なんてまだいるんですか?
便利ですか?

603 :デフォルトの名無しさん:05/01/10 18:37:33
>>602
Javaに比べたら、すげー使いにくい。
最悪。
Win32なんてもって最悪だけど。

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

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

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

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

Javaのほうがほんと、つくりがしっかりしてるよ。

604 :デフォルトの名無しさん:05/01/10 18:39:09
>Win32なんてもって最悪だけど。

プ

605 :デフォルトの名無しさん:05/01/10 18:43:09
>>603
Windowsでは文字列だけのボタンは基本的に作れないんです。
仕様です。
作りたいならDialogリソース経由で作れといいたいらしぃ。>Microsoft

606 :デフォルトの名無しさん:05/01/10 18:56:50
>>605
何を寝言言ってる

CButton::Create
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
引数
lpszCaption
ボタン コントロールのテキストを指定します。

607 :デフォルトの名無しさん:05/01/10 19:05:01
これのことか。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_ctoolbarctrl.3a3a.addbuttons.asp

>>603
俺はWindowsプログラマーじゃないが、VS持ってるから
一緒に考えてやろう。(今暇だから^^

608 :デフォルトの名無しさん:05/01/10 19:14:50
指定するインデックスのイメージと文字列は、AddBitmap、AddString、
および AddStrings を使用してあらかじめツール バー コントロールのリストに追加しておく必要があります

ツールバーの文字は絵の下に出るやつだろ(IEみたいなやつ)

609 :デフォルトの名無しさん:05/01/10 19:23:12
CToolBar::SetButtonText
こいうのもあるけどな

610 :デフォルトの名無しさん:05/01/10 19:33:07
ボタンだけ表示のものって簡単には作れないっぽいな。
Win32から操作するしかないんとちゃう?

611 :607:05/01/10 20:23:23
>>603
わかりましたよ^^

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

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

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

確かにとっつきにくいですね。
MFCっていつごろ生まれたものなんですか?

612 :607:05/01/10 20:25:48
当然、CButtonに限らず、コンボボックスやチェックボックス、そのた各種コントロールクラスも同じようにCreateして挿入できるはずです。
これが、ツールバーに様々なコントロールを搭載する答えなんでしょうかね。

(でも、間違った解説だったらスマソ^^ いちおーWindowsプログラマーではないので^^)

613 :デフォルトの名無しさん:05/01/10 21:05:47
文字だけのボタンの場合はTBSTYLE_LISTかな
ただ全部のボタンがそうなるから
部分的に変えたい場合は>611-612のやりかたで

あとMFCも中でWin32呼んでるから
Win32もMFCもやってることは同じだよ

614 :603:05/01/11 02:26:15
>>611
そのやり方で作れましたが、
私が今回実現したい方法は、

まず、初めの状態では空のツールバー(コントロールが無いただのバー)を作っておき、
あとで任意にボタンを追加していくものを作りたいのです。

それを試しているんですが、なかなかうまくいきません。
空のツールバーを作成したとしても、そのあとCButtonをCToolBarを親としてCreateしても、Toolbarに挿入されません。

if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT,
WS_CHILD | WS_VISIBLE | CBRS_BOTTOM |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))

上記の方法でLoadToolBarでリソースを呼びこんでボタンを挿入していく方法を試しにしてみました。
(IDR_TOOLBAR1にはボタンが5個しかないとします)

そして、その後、DeleteButtonでリソースにあるボタンを5個削除して、空のツールバーにした後に、
CButtonのCreateでボタンを作っていきましたが、なぜかボタンが5個までしか作成できず、6個以上は作れません。

この辺、難しいですね。。。
かなり困ってます。

615 :デフォルトの名無しさん:05/01/11 04:11:07
CToolBar関連は、どーしようもない糞仕様w
あきらめろ
Win32APIでもややこしーんだから(ぷ

616 :デフォルトの名無しさん:05/01/11 12:22:45
相談したいのですが、
リストビューのアイテムを取得して、
ソートをしたいのですがリストビューのアイテムを取得してくれません
リストビューは、サブウィンドウにあるので、

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

??のところが間違っていると思うのですが、
よければ御教授ください
リストビューにはデータは入っています
ブレイクしたら、str1は"" とNULL でした

617 :デフォルトの名無しさん:05/01/11 14:07:49
CView へのポインタを取得するには?
http://techtips.belution.com/ja/vc/0055/

618 :616:05/01/11 15:55:02
>>617
どうもありがとうございます

どうも、そのリンク先の通りにやってみますと、
不正アドレスを指すエラーが発生する模様です
もうちょっと調べてみます


619 :デフォルトの名無しさん:05/01/11 16:49:52
どのクラスからViewを参照するのかで話が違ってくる。

620 :デフォルトの名無しさん:05/01/11 16:53:15
リストコントロールで1つ項目しか
選択できなようにできますか?


621 :デフォルトの名無しさん:05/01/11 16:57:20
>620
スタイル設定

622 :こんばんは:05/01/11 23:59:32

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

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

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


BoundsCheckerでチェックしても、
(Void)使ってファイルから書き込んだら、
ちゃんとチェックしきれないモンなのでしょうか?


623 :デフォルトの名無しさん:05/01/12 00:06:38
この世界では、キャストは責任範囲の移管

624 :デフォルトの名無しさん:05/01/12 00:18:06
>>622
BoundsCheckerはコードレベルでチェックするツールだからある意味当然。
でも、実際に壊すケースはきちんと検出できるからソースの品質に問題がある場合は役に立つ。

625 :デフォルトの名無しさん:05/01/12 02:19:13
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' : 定義されていない識別子です。"
とコンパイルが通りません。このエラーを無くすにはどうしたらいいですか。

626 :デフォルトの名無しさん:05/01/12 03:08:46
>>625
#define VK_0 0x30

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

とりあえず、winuser.hの中身を読んでおくと、面白いことが書いてある
(「VK_0」で検索かけると該当箇所はすぐ見つかる)

627 :622:05/01/12 06:59:59
>>623
>>624
しかし
「BoundsCheckerがモンク言わないように」
って考えで、
10バイトだけ大きくしたって、
500バイトを10個も放り込まれたら、
BoundsCheckerで訳の分からないリークがもーゴロゴロ・・・



628 :デフォルトの名無しさん:05/01/12 13:25:44
BoundsChecker動かしてる暇にソースを見直せってこった。

629 :デフォルトの名無しさん:05/01/12 14:50:21
ダイアログを開くような dll を作っています.
dll の中の CDialog の派生クラスから AfxGetApp() を呼んで,
呼び出し側の CWinApp* を得ようとしたところ,
NULL しか返ってきません.

なぜでしょうか?


630 :デフォルトの名無しさん:05/01/12 16:25:45
呼び出し側のCWinApp*がエクスポートされてない

631 :デフォルトの名無しさん:05/01/12 17:35:30
>>629

   中
  出
   し

632 :デフォルトの名無しさん:05/01/12 18:18:59
メモリデバイスコンテキストの作成について質問があるんですが、

CMyView::OnDraw(CDC* pDC)
{
CBitmap bitmap;
CDC dcDisplayMemory;  ←関数内にローカルに宣言した場合、正常に処理される。

bitmap.LoadBitmap(IDB_REDBLOCKS);
dcDisplayMemory.CreateCompatibleDC(pDC);
dcDisplayMemory.SelectObject(&bitmap);
pDC->BitBlt(100, 100, 54, 96, &dcDisplayMemory, 0, 0, SRCCOPY);
}

この「CDC dcDisplayMemory;」を、関数内のローカル変数として使うと、問題なく処理できますが、
これを、下記のクラス内のメンバ変数として宣言したものを使って、上記と同じような処理をするとエラーが出ます。
どうしてでしょうか?

class CMyView{
public:
CDC dcDisplayMemory; ←ヘッダファイルのクラス内のpublicで宣言した場合、なぜかエラーが出る。

}

633 :デフォルトの名無しさん:05/01/12 18:39:46
デバッガくらい使え

634 :デフォルトの名無しさん:05/01/12 18:40:26
MFCに限らずWIN32のデバイスコンテキストには寿命があるが、それが原因と思う。
<OnDrawなら1回のWM_PAINTメッセージ処理がその範囲>

635 :デフォルトの名無しさん:05/01/12 18:45:35
いや、どーせ二回目のCreateCompatibleDCでASSERTってオチだろ。

636 :632:05/01/12 18:47:28
同じようにグローバル変数として宣言したものでも正常に処理されます


オフスクリーンバッファとして使いたいので
一度宣言したらアプリが終了するまで使えるようにしたいのですが
他によい方法はございますか?

637 :デフォルトの名無しさん:05/01/12 18:48:58
「まともに書く」

638 :632:05/01/12 18:51:28
アプリケーションの特性上、クラス内のメンバとしたいのです

なのでローカル変数やグローバル変数では困るのです

639 :デフォルトの名無しさん:05/01/12 18:52:37
そうですね

さあ、次の患者さんドゾー

640 :デフォルトの名無しさん:05/01/12 18:54:56
エラーが出る、とだけ言われてもねぇ。

641 :デフォルトの名無しさん:05/01/12 18:58:16
deleteしないのに毎回Createしてんの?


642 :632:05/01/12 19:00:32
http://www.geocities.jp/ayana_city/error.jpg

↑こういうエラーダイアログが出ます

643 :632:05/01/12 19:01:52
>>641
いえ、deleteはしません。
create(new)1回のみです。

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

要するに、オフスクリーンバッファを作りたいだけなんですが、
メモリデバイスコンテキスト以外でMFCで作れる方法ってありますか?

644 :デフォルトの名無しさん:05/01/12 19:04:28
>>643
まずデバッガ使って落ちたところを特定してからいらっしゃい。

645 :デフォルトの名無しさん:05/01/12 19:05:07
ローカルで宣言すればdeleteはデストラクタがやってくれるけど
外に出したら自分で後始末しないとだめだろ

646 :632:05/01/12 19:06:29
もちろん、アドレス値が0になっているから、それを参照したらエラーになるのはわかってますが。。。
やはり、デバイスコンテキストは保持の時間制限があるので、無理なんでしょうか。


647 :デフォルトの名無しさん:05/01/12 19:10:43
CDC::~CDC()
{
if (m_hDC != NULL)
::DeleteDC(Detach());
}


648 :632:05/01/12 19:14:33
>>647
deleteはしないので、デストラクタが呼び出されることはないです。

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

(省略)

CDC dcDisplayMemory; ←これ
};

ちなみに、CXSFrmクラス自体もアプリケーションが終了するまで削除されることはありません。

649 :632:05/01/12 19:16:45
クラス内にあるdcDisplayMemoryをcreateしてるんです。

650 :デフォルトの名無しさん:05/01/12 19:20:12
池沼の相手はほどほどに。
他のお客さんの迷惑です。

651 :632:05/01/12 19:21:59
CDC dcDisplayMemory;  ←グローバルに宣言した場合、正常に処理される。
CMyView::OnDraw(CDC* pDC)
{
CBitmap bitmap;


bitmap.LoadBitmap(IDB_REDBLOCKS);
dcDisplayMemory.CreateCompatibleDC(pDC);
dcDisplayMemory.SelectObject(&bitmap);
pDC->BitBlt(100, 100, 54, 96, &dcDisplayMemory, 0, 0, SRCCOPY);
}

652 :632:05/01/12 19:22:39

CMyView::OnDraw(CDC* pDC)
{
CBitmap bitmap;
CDC dcDisplayMemory;  ←ローカルに宣言した場合、正常に処理される。

bitmap.LoadBitmap(IDB_REDBLOCKS);
dcDisplayMemory.CreateCompatibleDC(pDC);
dcDisplayMemory.SelectObject(&bitmap);
pDC->BitBlt(100, 100, 54, 96, &dcDisplayMemory, 0, 0, SRCCOPY);
}

653 :632:05/01/12 19:25:47
class CMyView{
CMyView();
~CMyView();

(省略)
public:
CDC dcDisplayMemory; ←メンバ変数として宣言したものを、OnDraw内で使うとエラーに!
}

CMyView::OnDraw(CDC* pDC)
{
CBitmap bitmap;

bitmap.LoadBitmap(IDB_REDBLOCKS);
dcDisplayMemory.CreateCompatibleDC(pDC);
dcDisplayMemory.SelectObject(&bitmap);
pDC->BitBlt(100, 100, 54, 96, &dcDisplayMemory, 0, 0, SRCCOPY);
}

グローバル変数だと問題ないのに、メンバ変数だと問題ある(エラー)なのが納得いかない。

654 :デフォルトの名無しさん:05/01/12 19:27:23
俺はグローバル変数でうまくいっている、という方が納得いかない

655 :632:05/01/12 19:31:38
>>654
ですよね。
私もそう。

なぜかグローバルだとエラーが出ないです。ずっと。

656 :デフォルトの名無しさん:05/01/12 19:31:50
652のローカルの方は
毎回デストラクタが呼ばれてdeleteしてる(馬鹿にはそう見えないだろうけど)

657 :デフォルトの名無しさん:05/01/12 20:03:09
632は定時になったので帰宅しますた。
また明日来ます

658 :632:05/01/12 20:04:23
いえ、今も会社です。
オフスクリーン(裏バッファ)は、皆さんどのようにしてますか?
DirectXを使わないと行けないのかな・・w

659 :デフォルトの名無しさん:05/01/12 20:06:45
>>658

>>633
>>637
>>644

660 :632:05/01/12 20:11:07
落ちるところは、裏バッファから、View(表)へ転送するときです。

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

どうやら、dcDisplay〜のアドレスが不正値になってます。

661 :632:05/01/12 20:16:27
デバガではこうなります。

BitBltする直前ですが
-dcDisplayMemory{hDC=??? attrib=???}CDC
+m_hDCCXX0030: エラーです : 式を評価できませんHDC__ *


662 :デフォルトの名無しさん:05/01/12 21:35:02
俺の持ってる本のサンプルだとローカルじゃなくてメンバ変数でやってる。

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);


663 :デフォルトの名無しさん:05/01/12 21:58:27
>>653
毎回CreateCompatibleDCしてるしSelectObjectしたものを戻してないし
もうグダグダ

664 :デフォルトの名無しさん:05/01/12 22:20:30
バッファとして使いたいなら、ビットマップの方を保存しとけ。
DCなんか後生大事にとっといても無意味。

665 :デフォルトの名無しさん:05/01/12 22:43:59
仮想ウィンドウ 再描画 の検索結果 約 58 件中 1 - 10 件目 (0.20 秒)

WindowsAPI Programming
... 再描画には大きく分けて2つの手法があり、WM_PAINT命令が発行されるたびに再度
描き直す方法と、仮想ウィンドウを作成して(CreateCompatibleBitmap関数を使用)
描画処理は仮想ウィンドウに行い、再描画のときにビットマップ ...

666 :デフォルトの名無しさん:05/01/12 23:30:32
確かに他のメモリ領域を書き潰しているケースは、至上最悪の症例。
自分は落ちないからな。ウソコ撒き散らしているようなものだからね。
書き潰されたほうは、正しいデータだと思ってウソコ食べちゃう・・・。
するとどっかで段々と変な動きに。でも次起動した時って再現しない。
なぜなら、その時々でとなりに誰のデータが割り当てられるは、
CPU任せだからだ。でも、放っておくと客は逃げるし、ライバルはほくそえむ。

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


667 :632:05/01/12 23:44:36
家に着きました。
解決するまで寝ないで続行したいと思います。
初心者でスマソ!

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

それでも駄目なんです。


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

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

ま、自己解決できるよう頑張ります。
ご迷惑おかけしました。
どうも。

668 :デフォルトの名無しさん:05/01/12 23:45:06
そんなコードは書かない。

669 :デフォルトの名無しさん:05/01/13 00:22:35

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

だから今後も「使わせていただく」リソースは、
できるだけすぐにお返ししましょう。
うっかりすると、マシンが固まります。意外とリソースは少ないものです。


670 :632:05/01/13 00:31:33
>>669
そうすると、アプリケーションを起動してから、終了するまで、ずっと保持していたいオフスクリーンバッファはどのように作ればいいのでしょうか?
MFCにおいては、(Win32もそうですが)メモリDCを使う以外に無いはずです。。。

ビットマップとして持っておくとなると、Update描画のたびに、ビットマップからメモリDCへSelect、そしてBitBlt。
終わったら、メモリDCからビットマップへ転送。
見たいなことをしないといけないみたいなので、無駄な処理が増えますよね。

671 :デフォルトの名無しさん:05/01/13 00:37:45
DC 自体がピクセルを持つように聞こえるんだが、
どっちかつーと DC はポインタのようなものだぞ
hdc = &hbitmap; 的なイメージで
SelectObject(hdc, hbitmap);
代入と違って元の値を返すがな

672 :デフォルトの名無しさん:05/01/13 01:16:31
>>670
本気で迷ってるなら、本当に迷っているソースをそのまま貼り付けろ。


673 :デフォルトの名無しさん:05/01/13 06:07:52
いや、貼るな。普通に書ける物を普通に書かないで文句言ったり、
普通に書きたくないと駄々を捏ねたりするような香具師のソースなぞ見たくもないわ。

674 :デフォルトの名無しさん:05/01/13 06:59:35
>すると、もう絶対に出てこないね。消えることのない数百byteのリーク・・・
>そんな時、アナタはどうする? プロの意見を聞こう↓
わたしも是非聞きたいです。

675 :デフォルトの名無しさん:05/01/13 08:28:12
つーか、>666はBoundsCheckerがドンなものかわかっていない悪寒。

676 :デフォルトの名無しさん:05/01/13 10:25:29
>>632
おまえの言ってること矛盾だらけなんで
再現実験してみた

ローカルに宣言→OK
メンバ変数として宣言→死亡
グローバルに宣言→死亡

677 :デフォルトの名無しさん:05/01/13 10:30:19
あとメンバ変数、グローバルの時は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

警告を無視して実行すると、一瞬うまく行く場合もあるが、何回か再描画すると死亡


678 :デフォルトの名無しさん:05/01/13 10:44:27
誤解があるとあれなので補足

メンバ変数、グローバルで宣言するのが悪いんじゃなくて、
その場合はローカルで宣言する場合とやり方を変えないとダメ

679 :デフォルトの名無しさん:05/01/13 14:31:45
画面のプロパティで、ウィンドウとかの色を変えられるけども、
その現在のシステムカラーの色とかはどうやってGETするんですか?

あと、プロパティーでシステムカラーを変更したことがわかる方法ってあるんですか?

680 :デフォルトの名無しさん:05/01/13 15:13:08
>>679
GetSysColorってまんまな名前のAPIがあるんだけど。
変更通知は知らん。Spy++でそれらしいメッセージが来ないか調べてみれば?

681 :デフォルトの名無しさん:05/01/13 15:35:13
WM_SYSCOLORCHANGE

682 :デフォルトの名無しさん:05/01/13 18:52:32
dll で ::AfxGetAppName() を使って,
呼び出し側 exe のアプリケーション名を
取得しようとしましたが,
例外にひっかかってしまいました.

なぜでしょう?


683 :デフォルトの名無しさん:05/01/13 19:01:19
>>682
AfxGetAppNameの中のどこで例外が出たか
デバッガで追いかければわかる。

684 :674:05/01/14 00:30:05
>>675教えて君でスマソ。でも>666に対する解決手法を知りたい。ズバリ聞かせてよ
使いたい。だけどきっと675は知らない予感。そんなヤツばっかだものな。


685 :デフォルトの名無しさん:05/01/14 01:33:06
スレ違い。
市販ソフトの使い方はサポートで聞きましょう。

686 :デフォルトの名無しさん:05/01/14 02:39:04
欽ちゃんの仮装ウィンドウ大賞

687 :デフォルトの名無しさん:05/01/14 07:01:35
スレ違いだったらごめんなさい。
.dllの拡張子のファイルの中身を見てみたいのですが
メモ帳とかだと、変な文字列が出て(暗号化?)さっぱりなのですが
ちゃんと中身を見る方法や、見れるソフトとかないのでしょうか?
もしあれば紹介していただきたいです。
簡潔でも構いませんのでよろしくお願いします。

688 :デフォルトの名無しさん:05/01/14 07:08:39
>>687
バイナリエディタで見ればいいんじゃないの。

689 :デフォルトの名無しさん:05/01/14 07:27:54
>>688
レスありがとうございます。
バイナリエディタで見てみましたが、やはり同じような感じでした。
何がやりたいかということをかくと、PC初心者の考えそうなことで
理解しがたいことだと思いますので、仕様だと思ってあきらめます。
お騒がせしました。

690 :デフォルトの名無しさん:05/01/14 10:01:37
マシン語で会話できる人じゃないと、exeとかdllの中身読めないだろうな。

691 :デフォルトの名無しさん:05/01/14 10:20:20
>>689
「仕様」という言葉の使い方をまちがいてる

692 :デフォルトの名無しさん:05/01/14 10:37:04
「ちゃんと中身を見る」の意味が判らん。
シンボルは Dependency Walker で見られるし
コードやリソースは Visual Studio で見られるだろうが
一体何を見たいのか…

693 :デフォルトの名無しさん:05/01/14 11:03:58
VC−MFCでダイアログベースで
画面作ったんですが、とあるところからもらったDLLの
ライブラリAPIを使いたいのに、LNK2001エラーがコンパイル時に
出てしまいます

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

エラーメッセージ
error LNK2001: 外部シンボル ""int __stdcall XXX は未解決です ってでます

694 :693:05/01/14 13:01:06
すみません 解決しました 失礼いたしました

695 :デフォルトの名無しさん:05/01/14 18:39:53
CSliderCtrlのSetSelection()で選択範囲を指定すると、その部分の色が変わるのですが、XPでマニフェスを有効にするとこの部分の描画がされません。(白いまま)
回避策があれば、教えてください。

696 :デフォルトの名無しさん:05/01/15 00:40:40
まにまにまにまに、マニフェスト!

697 :デフォルトの名無しさん:05/01/16 12:32:18
基本的な質問になりますが、
MFCでint値をCString(もしくは、unsigned char*)に変換する方法はどのようにするんですか?

698 :697:05/01/16 12:36:10
_itoa( X, S, 10 ) を使うしかないみたいですね。
.NETにはConvetクラスという便利なものがありますが、
MFCにはそれが見当たらないですね。

すいません、自己解決ということで。

699 : :05/01/16 12:39:16
>>697
CString str;
int value = 100;
str.Format("%d",str,value);

700 :デフォルトの名無しさん:05/01/16 14:34:58
>>697
const char * Convert(int val)
{
static char buf[20];
sprintf(buf, "%d", val);
return buf;
}

701 :デフォルトの名無しさん:05/01/16 18:27:50
ツリービューでマウスクリックイベントを捕まえて
GetSelectedItem() すると、「一つ前」に選択された
ツリーアイテムが取れてしまいますよね。

マウスでクリックしたアイテムのツリーアイテムを
取得するにはどうしたらよいのでしょうか?

702 :デフォルトの名無しさん:05/01/17 18:34:32
TCHARで宣言されていたものが文字セットをUnicodeにするとWCHARで処理されるわけですが、
こうなると CFontDialog に CHARFORMAT 構造体の szFaceName が上手く渡せません。(フォントダイアログのフォント名の初期値として処理されない)

これは WideCharToMultiByte なんかを使用して ASCII に直し、szFaceName に入れなおさないとダメってことですか?

703 :デフォルトの名無しさん:05/01/17 19:40:25 ,
>>702
WCHARなのにWideCharToMultiByte?

704 :デフォルトの名無しさん:05/01/17 20:22:40
>>702

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

以上はVC6の話ね。

705 :デフォルトの名無しさん: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
サンクス
とりあえずはこのまま条件で分けときます。

706 :デフォルトの名無しさん:05/01/17 21:56:59
VC2003だと、cbSize見てCHARFORMAT2だったらそのまま、それ未満だと
MBCS->UNICODE変換かけるように変わってるな。
CHARFORMATじゃどうやってもUNICODEで設定できない。

何を考えてこんな実装になっているのやら。

707 :デフォルトの名無しさん:05/01/18 08:36:39
>>705
VC7以上なら、CT2A()を使うとスマートに変換処理が書ける。

708 :デフォルトの名無しさん:05/01/18 18:31:05
>>706
バグなんだけど互換性に問題出るから今更直せなくて仕様って事になったんだろ。

709 :デフォルトの名無しさん:05/01/18 18:46:42
CDialog ではコンストラクタの引数として,
CWnd* をとって,それをダイアログの親ウィンドウとしますが,
あたえられたウィンドウのハンドルを HWND を親ウィンドウとして
設定するにはどうしたらいいのでしょうか?


710 :デフォルトの名無しさん:05/01/18 19:08:59
>>709
CWnd::FromHandle

711 :デフォルトの名無しさん:05/01/18 20:13:42
MFC におけるグリッドについて質問します。

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

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

厨な質問ですいませんが、教えてください。

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

SetItemTextや、SetItemなどでは新規レコード挿入してしまいます
よろしくご教授ください

713 :デフォルトの名無しさん:05/01/18 22:00:14
VC7でダイアログアプリのウィンドウクラス名を変えるにはどうすればいいですか?
VC6ならなんとか出来るのですが…。

714 :デフォルトの名無しさん:05/01/18 23:41:59
>>711
OfficeインストールしているならExcel使うとか。それならOCXでできるし。
MSFlexGridはdll自体ないと思った。GrapeCityから正規版を買うのも手かも。

>>712
普通にSetItemでできると思うが。いっそコードさらしてみ。

715 :712:05/01/19 09:01:22
>>714
遅くなりましてすみません
上書きできました インデックス間違ってただけでした すみません

716 :デフォルトの名無しさん:05/01/19 13:14:32
VC6で作成してたMFCアプリをVS2003に移行したらDDVの
エラーメッセージが英語で表示されるようになっちゃった。
どうすれば日本語になるの?

717 :デフォルトの名無しさん:05/01/19 13:57:00
リソースを日本語に

718 :デフォルトの名無しさん:05/01/19 19:58:54
CScrollViewのSDIアプリを作っています。
わけあって、水平、垂直スクロールバーが表示されているかどうか知りたいのですが、
どのようにすればわかるでしょうか?

ググったら ::GetWindowLong 使ってウインドウ状態を調べろ、というのがあったのですが、
わたしの技術力、想像力が乏しくて、具体的にどうすればいいかわかりませんでした。

719 :デフォルトの名無しさん:05/01/19 20:08:43
>>714
711です。レスありがとうございます。
そんなに高価でもないようなのでVSFlexGridを買ってみます。

ただ、VS2002/2003などでMFCアプリを開発する人は、
どのようにしてグリッドを扱うのでしょうか?
全部自前で描画するのでしょうか?
それとも何らかのコントロールを継承してグリッドっぽいものを作るのでしょうか?

720 :デフォルトの名無しさん:05/01/19 21:00:01
>>718
GetStyle() & (WS_HSCROLL|WS_VSCROLL)

721 :デフォルトの名無しさん:05/01/20 01:21:18
普通のウィンドウならそれでもいいけど、CScrollViewの場合にはそれだけじゃ駄目だ。
一般的にはね。

722 :デフォルトの名無しさん:05/01/20 01:59:20
>>719
今やってるプロジェクトではListViewを拡張してお茶を濁した。
その前のプロジェクトではVC6だったのでFlexGridを使った。
今度のプロジェクトではFlexGridを買うことになりそうだ。

723 :デフォルトの名無しさん:05/01/20 08:15:01
>>719
codeprojectやcodeguruにGrid系のコードあるよ

724 :722:05/01/20 12:30:56
>>723
私もCodeGuruのを参考にしたけど、帯襷で…

725 :デフォルトの名無しさん:05/01/20 21:18:49
アプリケーションのヘルプ...バージョン情報など、
メインウインドウから別ダイアログを表示するときに、
ダイアログを DoModal するほうで、ダイアログのタイトルをセットすることは可能でしょうか?

今は、ダイアログのクラスに public: な CString 型メンバを作成して、
ダイアログの OnInitDialog() のコードの中で SetWindowText(); して実現しています。
できれば、独自定義のメンバ変数をなるべく減らしたいと考えております。

//=========================================================
void CtheappApp::OnAppAbout()
{
  CAboutDlg aboutDlg;
  aboutDlg.m_myWindowText = "だいあろぐ";
 
  //-------------------------------------------------------
  // ほんとは、ここでダイアログに対して SetWindowText 的なことをしたい。
  //-------------------------------------------------------

  aboutDlg.DoModal();
}

BOOL CAboutDlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  this->SetWindowText( this->m_myWindowText );
 
  return TRUE;
}

726 :デフォルトの名無しさん:05/01/20 21:25:08
718 です。
GetStyle() & (WS_HSCROLL|WS_VSCROLL) でビットを調べて、
スクロールバーの表示状態を調べました。
CScrollView だとそれだけじゃだめだ、というカキコもしていただいたのですが、
いまのところ私の実現したいことには支障がないようですので、
問題が出たら再び考えることにします。ありがとうございました。

727 :デフォルトの名無しさん:05/01/20 21:38:33
フォントの設定に関して質問させてください。

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

寸前の HFONT だったら SelectObject の戻り値に入るので、
HFONT から LOGFONT を導く方法でもあるのでしょうか?

728 :デフォルトの名無しさん:05/01/20 21:47:06
GetObject?

729 :デフォルトの名無しさん:05/01/20 21:47:30
711=719です。.NET Frameworkを使ってもいいのだったら
DataGridというコントロールが標準で用意されているので問題ないですが、
あと2、3年ぐらいは純MFCでの開発も続くでしょうからグリッドについては悩むトコですね。


730 :デフォルトの名無しさん:05/01/20 21:54:16
>>728
727です。すばやいご回答感謝いたします。

int GetObject(
 HGDIOBJ hgdiobj, // グラフィックオブジェクトのハンドル
 int cbBuffer, // オブジェクト情報を格納するバッファのサイズ
 LPVOID lpvObject // オブジェクト情報を格納するバッファ
);


731 :デフォルトの名無しさん:05/01/20 21:55:57
MFCスレなんだから、CGdiObject::GetObjectだろ、ふつー

732 :デフォルトの名無しさん:05/01/20 22:00:48
>>731 あ、そーいや、そうですね...

733 :デフォルトの名無しさん:05/01/22 17:06:02
MFCで作った実行ファイルを別マシンで起動すると
MFC42D.DLL
を必要とするのですが、これらのファイルを添付する以外で起動する方法ってあるのでしょうか?
出来ればEXEに埋め込むみたいな方法がよいのですが。。。


734 :デフォルトの名無しさん:05/01/22 17:11:02
デバッグ用DLLじゃない?


735 :デフォルトの名無しさん:05/01/22 17:25:23
うむ。リリースビルドしれ。

736 :デフォルトの名無しさん:05/01/22 17:26:01
リリースでやれば良かったのですね・・・
PC全部VC入ってたので全部普通にビルドしてましたorz

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

これってリリースでビルドするとサイズ凄く小さくなりますけど、何か変わるんですかね?

737 :デフォルトの名無しさん:05/01/22 17:30:10
>>736
デバッグに必要な情報が要らなくなったり最適化したりするから。

738 :デフォルトの名無しさん:05/01/22 18:06:34
デバッグでは出なかったバグがリリースにしたら出たりするから、
テストも十分にしておくように。
リリースしてからとんでもないことではまることがあるから。

739 :デフォルトの名無しさん:05/01/22 18:48:00
細かいこといえば、リリースでビルドして、VCから起動させずに、
単体で起動してみてきちんとうごくかどうか試さないと危険。


740 :デフォルトの名無しさん:05/01/22 18:55:45
>>738,739
それだけでは足りない場合もある。
MFCのリンク方法が違うと挙動が変わる。
納品物の仕様にあわせたビルド版のテストを早い段階で行う必要がある。

デバッグ版の存在価値は、
対話デバッグテストによる例外処理強制終了の位置確認ぐらいしかあるまい。
とはいえ、例外処理強制終了の位置確認できるのはそれなりに美味しいけどな。

741 :デフォルトの名無しさん:05/01/22 19:03:59
ビルド版って言い方は初めてみた

メモリリークの調査にもいいぞ。
デバッグ版というより、デバッグモードだが。

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

743 :デフォルトの名無しさん:05/01/22 19:09:33
>それだけでは足りない場合もある。

つーか、テスト計画ない時点で終わってるw

744 :デフォルトの名無しさん:05/01/22 19:25:40
>>741
ビルド版じゃなくて、「納品物の仕様にあわせたビルド」版という意味で書いた。
送信してから「わかりにくいな。しまった・・。」と思ったが
誰もそんなところまで突っ込むほど暇人じゃないだろうと勝手に思い込んだ俺が甘かった。

745 :デフォルトの名無しさん:05/01/22 19:40:41
そんな本格的なソフトならこんな所でそんな質問するわけない。

746 :デフォルトの名無しさん:05/01/22 19:42:59
それは思い込みだよ

747 :デフォルトの名無しさん:05/01/22 21:09:55
コンボボックスリストを別の値に選択した時に、IDC_EDIT1に格納されてる値を
コンボボックスで選択した値+100してIDC_EDIT1に表示するみたいな事をしたいのですが、
これをボタンが押された時、とかではなくリアルタイムでコンボボックスの中の値が別の値に選択された直後に
IDC_EDIT1に計算結果を表示するにはどうしたらよろしいのでしょうか?


748 :デフォルトの名無しさん:05/01/22 21:44:59
>>747
対象となるコンボボックスで、以下のメッセージを受ければよい
================================================
ON_CBN_SELCHANGE
ユーザーがリスト ボックス内でクリックするか、方向キーを使って選択を変更した結果、コンボ ボックスのリスト
ボックスで選択されている内容が変わることを通知します。このメッセージを処理するとき、コンボ ボックスのエディット
コントロール内のテキストを取得するには、GetLBText 関数または別の同種の関数を使います。
GetWindowText 関数は使用できません。
================================================

749 :デフォルトの名無しさん:05/01/22 22:27:23
>>748
教えて頂いた方法で解決しました。
ありがとうございましたm(_ _)m

750 :デフォルトの名無しさん:05/01/23 01:27:42
うぉ、ON_CBN_SELCHANGE の時はGetWindowText使ってはいけないのか。
思いっきり使ってた。どうりで上手く行くときと行かないときがあるんだ・・・

751 :デフォルトの名無しさん:05/01/23 02:18:32
ダイアログベースで作ったものに、メニュークリックしたらIDD_DIALOG2みたいな別のダイアログを出すには、どーすればいいんでしょう(;´Д`)

752 :デフォルトの名無しさん:05/01/23 06:05:36
新規クラス DoModal でぐぐれ

753 :デフォルトの名無しさん:05/01/23 12:15:48
モードレスならcreateとshowwindowでぐぐれ

754 :デフォルトの名無しさん:05/01/23 18:09:45
すみません 教えてください
処理ゲージを表示する画面をつくったのですが、
これをshow で表示すると、タイトルバーにタイトルが表示されないんです
これ表示するようにするには、どうしたらいいのでしょうか?

setWindowText だと、その画面が終わったあとに出てきますので
show で画面が消える間(画面が表示されたときから)
タイトルがでていればいいのですが。

755 :デフォルトの名無しさん:05/01/23 18:15:54
処理ゲージを表示しているときにメッセージ処理をしてやる。

756 :754:05/01/23 18:21:22
>>755
えーと レスありがとうございます
処理ゲージ画面をshow関数をコールした後、
呼ばれたほうのshow 関数で何か処理を
行うということでしょうか?

具体的に、どんなメッセージ処理をすればいいのでしょうか


757 :デフォルトの名無しさん:05/01/23 18:50:22
処理ゲージ の検索結果 約 12 件中 1 - 10 件目 (0.40 秒)

知らない言葉がでてきて自分が不勉強なのかとあせった

758 :デフォルトの名無しさん:05/01/23 20:27:43
プログレスバーの処理を別のスレッドで処理すれば良いんじゃないかい?

759 :754:05/01/23 21:54:48
>>758
一応、別の関数に分けて処理していますので、
それは大丈夫と思います

やはり、show だと DoModalと違って出力直後に
処理はできないものでしょうか?

760 :デフォルトの名無しさん:05/01/23 22:13:51
>>759
show関数ってなんだっけ?

まぁいいや、DoModalを使ってないなら、開くダイアログをどっかでCreateしてるはず。
そのCreateを見せて、
ついでに、設定したウィンドウスタイルとかもあわせて

761 :デフォルトの名無しさん:05/01/23 23:48:43
ActiveXコントロールのウィンドウをCreateWindowで作ろうとしていますがうまくいきません。

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

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

どうすればうまくいくでしょうか。

762 :759:05/01/24 08:48:40
Createは、ゲージを表示するwindow のIDを渡しています

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

これだけです 
ちなみに、Createの前で SetWindowTextを実行すると、
メモリリークを起こして死にます
Createの後にSetWindowTextを入れると、ゲージ処理が終了してから
タイトルが表示されます
Window スタイルは、デフォルトでした(チェックとかは特についてないです)

763 :デフォルトの名無しさん:05/01/24 10:25:13
CDialog のCreate?
だったらCDialogの初期化でやればいい

764 :759:05/01/24 10:27:29
>>763
ちょっと試してみます。
ありがとうございました。

765 :デフォルトの名無しさん:05/01/25 12:30:25
自作のアプリでダイアログによって設定を行う際、
ViewやFrame等各クラスのメンバに設定を反映させるコードが非常に見苦しくなってしまいます。
設定ダイアログはまあ、大抵のアプリには付いている物なので、美しいやり方などがあるのかも、と思っているのですが……。
皆さんどの様にコーディングしているのでしょうか。
アイデアのある方、アドバイスなどお願いします。

766 :デフォルトの名無しさん:05/01/25 15:08:55
どう見苦しくなったのか晒してみ。

767 :デフォルトの名無しさん:05/01/29 17:15:37
MFCで配列をソートしてくれるクラスってどれになります?

768 :デフォルトの名無しさん:05/01/29 17:41:41
>>767
ない

769 :デフォルトの名無しさん:05/01/29 17:46:38
そういうのは普通関数にすると思う

770 :デフォルトの名無しさん:05/01/29 18:49:18
MFCでゲームを作ろうとしています。
ゲーム画面をフルスクリーンにしたいのですがどうすればいいのでしょうか?

771 :デフォルトの名無しさん:05/01/29 19:16:06
>>770
画面いっぱいにウィンドウを広げる

772 :デフォルトの名無しさん:05/01/29 19:17:37
> プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
> Javascript は Web 制作板、CGI は Web プログラミング板へ。
> 業界談義、愚痴はプログラマ板へどうぞ。
> ゲーム関係の話題はゲーム製作板へどうぞ。← ← ← ← ← ← ←
> ネタ、板とは関係の無い話題はご遠慮ください。

773 :デフォルトの名無しさん:05/01/30 00:29:49
質問なのですがCFromViewを使ってHTMLを表示するのはどうすれば良いのでしょうか?
CHtmlViewを使えば表示する事はできるのは解かるのですが他にもコントロールを使いたいのです…。
ご教授お願い致します。

774 :デフォルトの名無しさん:05/01/30 00:31:31
フォームビューのフォームにブラウザコントロールを貼り付ける

775 :デフォルトの名無しさん:05/01/30 00:40:22
>>774
レスありがとうございます。
仰る通りの方法で解決できました。ありがとうございました

776 :デフォルトの名無しさん:05/01/30 02:00:45
>>761
CoInitializeしてないとかいうオチじゃないだろうね?

777 :デフォルトの名無しさん:05/01/30 08:37:51
今、オリジナルのカスタムコントロールを作ろうとしてる。
BCGみたいなやつ。

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

VSみたいなものを作ってます。

778 :デフォルトの名無しさん:05/01/30 10:43:49
特定の範囲だけを描画対象とする、Clipみたいなものってありますか?

779 :デフォルトの名無しさん:05/01/30 10:58:31
>>778
CDC

780 :デフォルトの名無しさん:05/01/30 10:59:08
リージョンの話かな?

781 :鳥取県推進委員会:05/01/30 18:09:58
デスクトップのビットマップを取り出すには、「MFC」でどうすればいいんでしょーか?

782 :デフォルトの名無しさん:05/01/30 18:26:40
>>781
死ね馬鹿

783 :デフォルトの名無しさん:05/01/30 19:12:52
>>781

ttp://homepage2.nifty.com/DSS/VCPP/MFC/Other/CBitmapDesktop.htm

784 :デフォルトの名無しさん:05/01/30 21:07:56
>>782
分からない人には尋ねていません

785 :デフォルトの名無しさん:05/01/30 21:33:41
SystemParametersInfo

786 :よし子:05/01/31 16:46:58
>>782
分からない奴が答えんな糞グラマーが

787 :デフォルトの名無しさん:05/01/31 17:10:25
スクリーンセーバーを作るには、「MFC」でどうすればいいんでしょーか?

788 :デフォルトの名無しさん:05/01/31 18:29:05
>>787
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample98/html/_sample_mfc_saver.asp

789 :デフォルトの名無しさん:05/01/31 22:30:11
>>787
好きに作れ。SDKで作れるならMFCでも作れるだろ?

790 :デフォルトの名無しさん:05/02/01 04:59:01
特定のUSBメモリのドライブレターを取得する方法がわからない。
USBメモリのデバイス名を取得することはできてるんだけども、そこからどやってドライブレターを取得していいのやら。
ぐぐって同じような質問を見つけても、コレだという回答はされていないようだし。
教えてエロい人。

791 :デフォルトの名無しさん:05/02/01 09:13:11
MFCには、そんな機能は無い

792 :デフォルトの名無しさん:05/02/01 09:29:29
>>790
CUsbMemory

793 :デフォルトの名無しさん:05/02/02 22:23:37
タブ型のファイラーをMFCとAPIで作ろうと思ってます
大まかでかまいません
どんな手順で作るんですか

794 :デフォルトの名無しさん:05/02/02 22:26:09
>>793
1.VC++を立ち上げる
2.作る

795 :デフォルトの名無しさん:05/02/02 22:29:03
いや…それは…

796 :デフォルトの名無しさん:05/02/02 22:29:27
>>794
おそらく作り方がわかんないから聞きにきてるんだろ
>>793
0.ぐぐる
1.VC++を立ち上げる
2.作る

797 :デフォルトの名無しさん:05/02/02 22:32:42
>>796
一度、ディレクトリをツリー表示にするのと
ファイルをリスト表示するのは作ったんです
次はそれを発展させたいなと思って。

798 :デフォルトの名無しさん:05/02/02 22:47:22
3.発展させる

799 :デフォルトの名無しさん:05/02/02 22:51:21
2.5 .バグ取り

800 :デフォルトの名無しさん:05/02/03 00:59:09
ウィンドウを表示させようとしているのですが、
なかなかうまくいきません。
初歩的な質問になりますが、どこが間違っているのでしょうか?

//
WNDCLASS stWndClass;

stWndClass.style = CS_BYTEALIGNWINDOW;
stWndClass.lpfnWndProc = &AfxWndProc;
stWndClass.cbClsExtra = 0;
stWndClass.cbWndExtra = 0;
stWndClass.hInstance = AfxGetInstanceHandle();
stWndClass.hIcon = NULL;
stWndClass.hCursor = NULL;
stWndClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
stWndClass.lpszMenuName = NULL;
stWndClass.lpszClassName = "TestWClass";

AfxRegisterClass( &stWndClass );

//
CRect stRect( 0, 0, 300, 200 );

xsWnd.CreateEx( WS_EX_TOOLWINDOW,
"TestWClass"
, _T( "てすとですぅ" )
, WS_POPUP
, stRect
, NULL
, 1000 );

xsWnd.ShowWindow(SW_SHOW);

801 :デフォルトの名無しさん:05/02/03 01:04:01
「うまくいかない」で問題が伝わると思ってるのか?

802 :デフォルトの名無しさん:05/02/03 01:16:51
ですぅ

803 :デフォルトの名無しさん:05/02/03 01:18:13
すみません、自己解決しました

804 :デフォルトの名無しさん:05/02/03 04:52:21
>>790
方法論としてはこれ使えるんじゃ?
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/042/042468.html

>>797
とりあえずコピー貼り付け機能とかを盛り込む。

805 :デフォルトの名無しさん:05/02/03 17:14:25
CListViewをエクスプローラの縮小版みたいな表示にすることはできませんか?

806 :デフォルトの名無しさん:05/02/04 12:18:20
>>805
オーナードロー

807 :デフォルトの名無しさん:05/02/04 17:30:49
ローカル座標とグローバル座標を変換するためには?
どうしたらよいのでしょうか?

808 :デフォルトの名無しさん:05/02/04 18:12:32
>>807
MapWindowPoints
ClientToScreen
ScreenToClient

809 :デフォルトの名無しさん:05/02/04 23:51:36
>>765
設定をすべて保持するクラスなりモジュールなりを定義して,あらゆるところからそこを読み書きするようにしてる。
きれいはきれいだがコードは増える。

810 :デフォルトの名無しさん: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);
}

811 :デフォルトの名無しさん:05/02/05 09:28:44
エラー内容調べないの?

812 :デフォルトの名無しさん:05/02/05 10:32:04
エラー内容は問題解決のための重要な情報を含んでます。

813 :810:05/02/05 10:40:46
>>811 >>812
エラー内容はこれです。
http://www.geocities.jp/ayana_city/error.JPG

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

CMyFrameMenuはCFrameWndから派生されたものです。
pWndは、CFrameWndが入ってます。

814 :810:05/02/05 10:43:35
CMDIFrameWndを派生させて試してみましたが、無理でした。
ウィンドウスタイルは、WS_CHILDとしたいのです。



ちなみに、
WS_POPUPで親ウィンドウをNULLとした場合、アプリケーションを終了させたらエラーは出ませんでした。

dwExStyle = WS_EX_TOPMOST;
dwStyle = WS_POPUP;

return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, GlobalRect, NULL, NULL, NULL);

815 :デフォルトの名無しさん:05/02/05 10:49:34
HCURSOR hCursor = ::LoadCursor( NULL, MAKEINTRESOURCE(IDC_ARROW));


816 :810:05/02/05 10:58:00
>>815
それを試してみましたが、駄目でした。

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

私の乏しい知識では難しいですね。・・・・・・・

817 :デフォルトの名無しさん:05/02/05 11:13:00
GlobalRectの中身は?

818 :810:05/02/05 11:17:11
>>817
CRect rect( 0, 0, 300, 200);

819 :デフォルトの名無しさん:05/02/05 11:37:21
既にできてるウィンドウのCreateEx呼び出したらいかんだろ。

820 :810:05/02/05 11:41:41
>>819
CreateExは上記の一回のみの呼び出しです。

821 :810:05/02/05 11:57:55
WS_POPUPで親をNULLをしてCreateExすると→アプリケーション終了時エラーが出ない
WS_CHILDで親をCMainFrameをしてCreateExすると→アプリケーション終了時エラーが出る

何に問題が起きてるのかがわかりません。

822 :デフォルトの名無しさん:05/02/05 12:05:21
自分自身を親ウィンドウ指定するな。

823 :810:05/02/05 12:13:22
>>822
いえ、別のCFrameWndですが。

親、CMainFrame
子、CMyFrameMenu

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



子にCFrameWndを指定してはいけないのでしょうか?

824 :デフォルトの名無しさん:05/02/05 12:30:28
>>823
情報小出しでわかりにくい。
まず、クラス図かけ。

825 :デフォルトの名無しさん:05/02/05 16:20:10
継承図
CFrameWnd
  →CMainFrame
  →CMyFrameMenu
相関関係
CMainFrame
  →CMyFrameMenu


826 :デフォルトの名無しさん:05/02/05 16:25:53
dc.FillRgn(&rgn,&bbb);で描こうとしたら
まったく描いてくれん orz
dc.FillRect(&rect,&bbb);だと描かれるのに
ワケワカメ

827 :デフォルトの名無しさん: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;

828 :デフォルトの名無しさん:05/02/05 22:45:01
>>825
ちゃんとヒープにメモリ確保してからCreateしてる?

829 :デフォルトの名無しさん:05/02/06 07:51:02
LButtonClickだけを無視させる(回避)方法ってあるか?

830 :デフォルトの名無しさん:05/02/06 08:54:17
はぁ?


831 :デフォルトの名無しさん:05/02/06 09:26:46
EnableWindowにFALSEを指定するとWM_LBUTTONDOWNは来なくなるよな

832 :デフォルトの名無しさん:05/02/06 09:36:54
EnableWindowだと全てのマウスイベントが来なくなるが、それでいいのか?>>829

833 :デフォルトの名無しさん:05/02/06 09:38:09
>>829
オーバーライドして中で無かった事にすればおk

834 :デフォルトの名無しさん:05/02/06 09:44:44
何となくだけど、クリックしてもアクティベートされなくしたいんじゃないか?

835 :デフォルトの名無しさん:05/02/06 09:46:13
OnLButtonDownはVirtualでなかったような…調べてみまつ

836 :デフォルトの名無しさん:05/02/06 10:04:40
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 ↑
只のコメントキーワード

837 :デフォルトの名無しさん:05/02/06 10:06:05
>>833
C++ でオーバーライドを実現するには、オーバーライドする基本クラスのメソッドに virtual 修飾子をつけて仮想関数として定義しなければいけません。

838 :デフォルトの名無しさん:05/02/06 10:29:50
オーバーライドとオーバーロードを混同しているアフォのいるスレはここですか?

839 :デフォルトの名無しさん:05/02/06 10:35:33
>>832
SetWindowsHookExはお嫌いですか?

840 :デフォルトの名無しさん:05/02/06 12:28:25
>>839
それはMFCじゃないから・・・

841 :829:05/02/06 12:58:36
説明不足スマソ

FloatingWindow(WS_EX_TOOLWINDOW)を作ったんだが、
そのFloatingWindowをクリックすると、CFrameWndが非アクティブになってしまう。
FloatingWindowをクリックしても、CFrameWndはアクティブのまま(一切非アクティブへ切り替わらない)にしたいんだ。

842 :デフォルトの名無しさん:05/02/06 14:32:30
WM_SETFOCUSでできれば楽だが、アクティブ化殺すなんてできたかな



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

んー、コンボボックスとかってそうじゃん。それ系のカスタムコントロールを参考にしてみたら?

844 :デフォルトの名無しさん:05/02/06 17:23:59
スクリーンキーボードのように、アクティブ化させないウィンドウスタイルはある。

が、なんだったかわすれた(つ∀`テヘ
SPY++でスクリーンキーボードみればたしかでてくるのだが、今の環境にVCないのでわからん。

845 :829:05/02/06 18:19:29
オレの知識不足スマソ

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

アウトプットウィンドウ(WS_EX_TOOLWINDOW)をクリックしても、その下のウィンドウが非アクティブ化されないようにするには、どうすればいいんだい?
度々スマソ

846 :829:05/02/06 18:21:39
そのスレイプニアでは両方ともアクティブ化されてるだろ。

SPYでスタイル調べて、試したんだが、どうもうまくいかん orz

847 :デフォルトの名無しさん:05/02/06 19:04:34
普通のドッキングツールバーがそうだろ

848 :829:05/02/06 20:59:19
クリックしても、ほかのウィンドウが非アクティブにならない代表的なIMEツールバーをSPYしたんだけど、

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

この辺のカラクリが知りたい。

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

と適当に答えてみる。

850 :デフォルトの名無しさん:05/02/06 22:17:18
ソースみたら簡単に見つかるな
// clicking on floating frame when it does not have
// focus itself -- activate the toplevel frame instead.


851 :デフォルトの名無しさん:05/02/07 02:01:42
誘導されてきました。以下他スレの書き込みと同様です。

VC.NETでダイアログベースのアプリを作っています。
ダイアログを任意の数だけ表示させたかったのでポインタでCDialogを宣言して
new→create→ShowWindow(SW_SHOW)の手順で表示させているのですが
消すとき、OnOKまたはOnCancelでDestroyWindowしてPostNcDestroyで
delte thisしているのですがメモリが完全に元に戻りません。(少し残ります)
これはこういうもんなんでしょうか

852 :デフォルトの名無しさん:05/02/07 06:49:33
>>850
それが何なんだ???

853 :デフォルトの名無しさん: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時のスタイルや拡張スタイルで
指定できるのでしょうか。
それともキーボードフォーカスの関係でしょうか。
よろしくお願いします。

854 :デフォルトの名無しさん:05/02/07 09:42:16
だからMFCのソース見ろよ
MFCの中でAPI呼んでるからAPIのみでも同じ
ツールバーを切り離す
クリックでブレーク
そこのソース見る

855 :デフォルトの名無しさん:05/02/07 12:25:58
>>854
探してみる。
ファイル名はなんだい?

856 :デフォルトの名無しさん:05/02/07 13:22:59
wincore.cpp

857 :デフォルトの名無しさん:05/02/07 15:37:30
>ツールバーを切り離す
>クリックでブレーク

がどこにあるかわからんね。
莫大すぎて。
砂漠でアリ探すようだ。

858 :デフォルトの名無しさん: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()


859 :デフォルトの名無しさん:05/02/07 20:08:21
>>858
ごめんなさい。
難しすぎて。

それをどうしろと?

860 :デフォルトの名無しさん:05/02/08 00:13:19
とりあえず調べてみたか?

861 :デフォルトの名無しさん:05/02/08 00:30:44
>>851
デストラクタはvirtualになってるか?

862 :デフォルトの名無しさん:05/02/08 00:40:11
>>851
なんで OnOK で DestroyWindow するんだよ?
モードレスかと思いきやダイアログベースらしいし・・・ >EndDialog

863 :デフォルトの名無しさん:05/02/08 00:55:51
最初のMFCアプリケーションウィザードで設定した
[[最近使ったファイル] のファイル数] や
[ファイル拡張子][フィルタ名]などを
後から変更するにはどうしたらいいんでしょうか。


864 :デフォルトの名無しさん:05/02/08 01:03:34
レジストリ書き換える

865 :デフォルトの名無しさん: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
を参考にリソース編集。

866 :デフォルトの名無しさん:05/02/08 12:50:03
質問です。
VC++で、画面起動後にCEditコントロールの背景色を変更する
にはどうしたらよいのでしょうか?
画面起動時ならOnCtlColorの中で設定できるのですが・・・。
よろしくお願いします。

867 :デフォルトの名無しさん:05/02/08 15:30:12
そのやり方を変えたくなければOnCtlColorで指定する色を変更できるようにしておいて
変えたいタイミングで色を変えてInvalidateなりなんなりしてやれば良いんじゃ寝?

868 :863:05/02/08 22:39:06
>>865
おかげさまでうまくいきました。
ありがとうございます。

869 :デフォルトの名無しさん:05/02/09 08:34:34
当方Win2000+VC6環境で、SDI+複数ビューのアプリケーションを作ろうとしています。

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

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

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

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

#アプリケーションのバージョン情報ダイアログって、最初からCWinApp派生クラスに関連付けられてるような…?


870 :デフォルトの名無しさん:05/02/09 10:12:19
そのメニュー項目の機能によりまちまちだ。

871 :デフォルトの名無しさん:05/02/09 12:35:45
メインフレームが普通


872 :869:05/02/09 16:04:01
ありがとうございます。
何もウィザードや本の指示通り、CView派生クラスに関連付けなくても特に問題は無いのですね。

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

>>871
なるほど、やってみたいと思います。
でもなんでClassWizardはわざわざCViewを指定してくるんでしょうね。

873 :871:05/02/09 17:12:14
メニューリソースの追加だよね
メニューの項目(ボタン)の追加のような気もするけど

最初からあるメニューのリソース名はIDR_MAINFRAMEになってるし、
メニューの表示もメインフレームでやってるからそう思ったんだけど、
もうひとつメニューのリソースを追加すると
たしかにウイザードはviewとか言ってくるね。
その辺はよくわからん。

874 :デフォルトの名無しさん:05/02/09 18:29:38
test

875 :デフォルトの名無しさん:05/02/09 18:31:13
CEditCtrl版の
CDialogで言うOnInitDialogみたいな
メッセージってありますか?

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




876 :デフォルトの名無しさん:05/02/09 18:53:06
>>875
OnCreate

877 :デフォルトの名無しさん:05/02/09 22:01:02
>>876
呼ばれないです。

878 :デフォルトの名無しさん:05/02/09 22:10:48
メッセージもらうつもりならメッセージマップがいるだろ

879 :デフォルトの名無しさん:05/02/09 23:23:34
ぬう
ちゃんとVCで
CEditTest ってクラスを CEdit 継承して作って
WM_CREATEをマップしたOnCreateに処理を書いたが
通らないみたいなのです。
デバッガ使って調べても通ってないみたい。

Editは、WM_Createを受け取らないのかなと。

880 :デフォルトの名無しさん:05/02/09 23:30:05
>>879
サブ暮らすか

881 :デフォルトの名無しさん:05/02/09 23:51:53
ダイアログエディタ上に置いたCEditなどはOnCreateを通らなかった希ガス

882 :デフォルトの名無しさん:05/02/10 00:15:52
WM_CREATE後にCEditにアタッチされるからね。

883 :デフォルトの名無しさん:05/02/10 10:03:16
>>879
PreSubclassWindow


884 :デフォルトの名無しさん:05/02/10 13:39:01
CWndからHWND得る方法教えてください。
別な方法でもいいんでお願いします。
MFCたまにしか使わないんで、いつも
この方法に悩まされます。

885 :デフォルトの名無しさん:05/02/10 13:45:01
CWnd wnd;
HWND hwnd = wnd;

886 :デフォルトの名無しさん:05/02/10 14:02:22
CWnd::m_hWnd
CWnd::GetSafeHwnd()

887 :デフォルトの名無しさん:05/02/10 17:53:05

CWnd wnd;

(HWND)wnd

888 :デフォルトの名無しさん:05/02/10 17:53:42


CWnd wnd;

wnd.m_hwnd;

889 :デフォルトの名無しさん: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 で切り離し
}

890 :デフォルトの名無しさん: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
);

これの解説探して読め

891 :デフォルトの名無しさん:05/02/10 20:37:43
(LPVOID)sp_time

892 :デフォルトの名無しさん:05/02/10 22:39:26
>>885 >>886 >>887 >>888
Thanks!!

893 :866:05/02/11 00:07:00
>>867
その方法でうまくいきそうです。
ありがとうございました。

894 :デフォルトの名無しさん:05/02/11 05:25:51
>>858
すげー参考になった。サンクス!

CWnd::ActivateTopParent()
こんな便利な関数がなんでマニュアルにのってないんだろう。
protectedメンバなんだからさあ、隠さずに俺にも使わせろっ!って思った。

895 :デフォルトの名無しさん:05/02/11 13:01:59
MFCでタイトルバーがクリックされたことを拾うにはどうすればいい?

896 :デフォルトの名無しさん:05/02/11 13:20:45
WM_NCLBUTTONDOWN
WM_NCRBUTTONDOWN
WM_NCMBUTTONDOWN

897 :デフォルトの名無しさん:05/02/12 01:12:47
エクスプローラの右側のような感じでファイルの一覧を表示したいのですが、
このコントロールはMFCに入っているのでしょうか。
あるいはどこかにいいサンプルはありませんか?

898 :デフォルトの名無しさん:05/02/12 01:20:47
>>897
リストコントロール

899 :897:05/02/12 04:34:06
いえ、リストコントロールではなくて、
たとえばフォルダのパスを指定するとそのフォルダの中身を表示してくれるような、
つまりエクスプローラの右側そのままです。

900 :デフォルトの名無しさん:05/02/12 08:22:35
>>897
リストコントロール

901 :デフォルトの名無しさん:05/02/12 11:19:14
>>899
リストコントロールでそのような機能を自分で実装する。
どこかのメーカーがそんなActiveXコントロールを売ってるかもしれない。売ってないかもしれない。

902 :デフォルトの名無しさん:05/02/12 12:05:13
そういえばMFCのウィザードの5/6に
Windowsエクスプローラスタイルというのがあるな

903 :デフォルトの名無しさん:05/02/12 15:47:07
>>897
codeprojectかcodeguruにあるんでは?
アイコンとか右クリックメニューとかファイル変更の監視とか
細かく作りこむのは結構大変だと思うが。

手抜きしたければCHtmlViewで
file:///c:/hogehogeにNavigateすればいいよ

904 :デフォルトの名無しさん:05/02/12 16:50:19
DIB形式(モノクロ)のファイルから、データ を読み取りたいのですが、
GetDIBitsの行のコメントを外すと、下記エラーが出ます・・・
「Run-Time Check Failure #2 - Stack around the variable 'binfo' was corrupted.」
なぜ、binfoが怒られているのでしょうか?

    BITMAPINFO binfo;
    HBITMAP hbmp = (HBITMAP)LoadImage(NULL, "Test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    BITMAP bmp;
    GetObject(hbmp, sizeof(BITMAP), &bmp);
    unsigned char *pixelBuf;
    LONG xBytes = (bmp.bmWidth + 31) / 32 * 4;
    pixelBuf = (unsigned char *)malloc(bmp.bmHeight * xBytes * 1);
    binfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);    
    binfo.bmiHeader.biHeight = bmp.bmHeight;
    binfo.bmiHeader.biWidth = bmp.bmWidth;
    binfo.bmiHeader.biPlanes = 1;
    binfo.bmiHeader.biBitCount = 1;
    binfo.bmiHeader.biSizeImage = 1;
    binfo.bmiHeader.biCompression = 0;
    CDC memDC;
    memDC.CreateCompatibleDC(NULL);
// int ret = GetDIBits(memDC.GetSafeHdc(), hbmp, 0, bmp.bmHeight, pixelBuf, &binfo, DIB_RGB_COLORS);
    free(pixelBuf);

905 :デフォルトの名無しさん:05/02/12 18:57:13
>904
BITMAPINFOは不完全な構造体。
GetDIBitsは動的に確保したpacked DIBこそ

906 :904:05/02/12 23:30:04
>>905
ありがとうございます
BITMAPINFOをポインタ変数で宣言し
malllocでメモリ確保したら、エラーが出なくなりました。
free()すると、何故かエラー吐きますが・・・
がんばってみます

907 :デフォルトの名無しさん:05/02/12 23:35:28
MFCだと malloc じゃなくて new するもんじゃないの?
んで delete

908 :??:05/02/13 22:31:56
ツールバーとスティタスバーのRECTまたはCRectを
拾いたいんだけど、pls. advise。
GetClientRectやGetWindowRectは、RECT/CRectの
戻り値が??なのです。。。 Appreciate。

909 :デフォルトの名無しさん:05/02/13 22:56:51
>>908
君の日本語はmystery

910 :デフォルトの名無しさん:05/02/13 23:00:52
>906 メモリサイズ間違いだろ?bppごとに対処法が違う。
BITMAPINFO,BITMAPINFOHEADER,GetDIBitsのMSDNページとサンプルコードを下ろせ。GetDIBitsに特殊な引数を渡したり、カラーテーブル用意したり、スキャン行数を変えるとか…。
>907 &rc

911 :904:05/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

912 :デフォルトの名無しさん:05/02/14 14:57:00
一つ質問があるのですが、
CRichEditCtrlは、任意の場所に文字列を挿入するということはできないのでしょうか?

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

宜しくお願いいたします。

913 :デフォルトの名無しさん:05/02/14 15:00:52
おまえには出来ない

914 :デフォルトの名無しさん:05/02/14 15:13:17
>>912
EM_REPLACESEL

915 :デフォルトの名無しさん:05/02/14 15:14:03
>>912
http://pc5.2ch.net/test/read.cgi/tech/1108199304/50に聞け。

916 :デフォルトの名無しさん:05/02/14 16:21:44
MFCでイベントループを使うことはできますか?

917 :デフォルトの名無しさん:05/02/14 16:48:30
>>916
どぞ つOnWndMsg

918 :916:05/02/14 16:58:13
>>917
THX

919 :デフォルトの名無しさん:05/02/17 19:11:30
CRichEditの表示倍率って変えられないのかな。
或いは任意の解像度のDC作成する方法とか。
あったら教えてくださいおながいします。


920 :デフォルトの名無しさん:05/02/17 19:15:00
無い

921 :デフォルトの名無しさん:05/02/18 15:22:39
AL-Mail32 (www.almail.com) というメーラがあり、その公開仕様(Cの
コールバック関数群)に沿ってpluginを開発してます。
既に多数のpluginが公開されていて、自分でも作ってみましたが意図した
ように動かず困っています。

スレ違いでしょうか?

コンパイルエラーや実行時エラーはなく、とあるメニュー項目をグレイアウト
したいのに変わらない、といった内容です。

922 :デフォルトの名無しさん:05/02/18 15:32:41
うん、スレ違い

923 :921:05/02/18 16:39:14
>>922
どこか適当なスレはあるでしょうか

924 :デフォルトの名無しさん:05/02/18 16:56:04
開発停止してるのかな?
そういうスレは見あたらないね

925 :921:05/02/18 17:04:57
そうですか。
もう少し自分でデバッグしてみることにします。
ありがとうございました。

926 :デフォルトの名無しさん:05/02/19 20:10:59
メニュー項目ってダイアログに付けたメニュー?
それともフレームに付けるメニュー?


927 :デフォルトの名無しさん:05/02/19 20:22:19
スレ立ててみるか? しばらく >>1 の努めがあるけど、開発中いろいろ話せるって考え方ができるなら・・・

928 :デフォルトの名無しさん:05/02/19 21:04:40
ソフト板にスレないの?
あるなら他のプラグイン作者もいるかもしれないから
そこで情報交換できるかも。

929 :デフォルトの名無しさん:05/02/19 21:12:07
ソフト板はユーザ
ム板はデベロッパ

てな棲み分けはあったほうがいいと思うか? それともないほうがいいと思う?
俺は・・・うーん、どっちとも言えん・・・

930 :デフォルトの名無しさん:05/02/19 21:46:37
作者がねらーの場合は開発も含めてソフト板にでやってる場合もあるけど
そうじゃない場合は作者のサイト、ユーザーグループ、メーリングリストとかが
どこかに存在するはず。


931 :アホな質問かもしれんが:05/02/20 01:09:53
GetDlgItemの戻り値はホントに
aButton = (CButton*)etDlgItem(IDD_HOGE);
こんな感じでキャストしても大丈夫なんだよな?

デバッガで見るとC戻り値の型がCTempWndだし
dynamic_castも駄目だし、DYNAMIC_DOWNCASTでも変換できないし、なぜ???

932 :デフォルトの名無しさん: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++的には良くないやり方だと思うが。

933 :デフォルトの名無しさん:05/02/20 02:25:27
教えてくだちい。
通常のexeで、UIスレッドから測定のためのワーカスレッドを
生成しています。そのワーカスレッドの作業状況をステータスバー
に表示するためにUIスレッドのメインウィンドウにユーザ定義の
メッセージ(WM_UPDATESTATUSBARみたいなの)を投げている
のですが、これをPostMessageでやるとOKなのですがSendMessage
でやると固まってしまいます。いくつか書籍も読んだのですが、
SendMessageすると呼び出しが帰ってくるまではワーカスレッドは
スリープ状態になるが固まってしまう現象は報告されていません。
ご教授お願いいたします。。。


934 :デフォルトの名無しさん:05/02/20 02:32:10
ageさせてくだちい

935 :デフォルトの名無しさん:05/02/20 02:33:31
SendMessageは投げたメッセージが処理されるまで待つ
PostMessageはキューに投げるだけ

936 :933:05/02/20 02:44:46
>>935
レスどうもありがとうございます。
そうなのですが、そのSendMessageしたメッセージのハンドラではたいした
作業はしてないのです。(ステータスバーをリフレッシュするだけ)
すぐに制御が帰ってくるはずなのでフリーズするのはおかしい
と思うのですが。。。

937 :デフォルトの名無しさん:05/02/20 04:00:29
計測スレッドからリフレッシュというのはどう実装してる?
もしUIスレッドのメソッドを呼び出してるのだとしたら
ちゃんとHWND渡してる?

938 :デフォルトの名無しさん: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


939 :933:05/02/20 14:03:07
レスありがとうございます。遅れますた

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

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

レスくださったみなさんどうもありがとうございました。。。

940 :デフォルトの名無しさん:05/02/20 15:55:12
質問です。VC++にて開発中です。
クラスウィザードでCEdtiにint型の変数を設定すると、
実行時にDoDataExchangeで以下のような警告が出力されます。
Warning: initial dialog data is out of range.
変数の範囲を1-9999にすると警告が出ます。0-9999だと出ません。
解決方法をご存知の方がいらっしゃいましたらお願いします。

941 :デフォルトの名無しさん:05/02/20 16:04:45
>>940
コンストラクタで1(つーか自分の指定した範囲内の数値)を入れて味噌。

942 :デフォルトの名無しさん:05/02/20 16:08:15
>>940
変数の初期化をしてないからでは?

943 :942:05/02/20 16:10:19
941とかぶっちゃいましたが
意図するところは同じです orz

944 :940:05/02/20 17:45:09
>>941, 942
解決しました。ありがとうございました。

945 :??:05/02/20 20:40:01
AppWizardで自動生成されるWindowsメニューでの
IDR_MAINFRAMEの、

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

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

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



946 :デフォルトの名無しさん:05/02/20 20:59:52
>>945
MFCソース内をID_VIEW_TOOLBARやID_VIEW_STATUS_BARで検索してみる気はないのかい?

947 :デフォルトの名無しさん:05/02/21 02:06:38
>>946
検索する気がないから尋ねているんです。

948 :デフォルトの名無しさん:05/02/21 02:31:18
ワロス

949 :デフォルトの名無しさん:05/02/21 22:22:14
主張としては正当だね。
回答者も答えるかどうかで自らの主張を示せばいい。

950 :945:05/02/21 22:27:29
>>947は偽物です

951 :945:05/02/21 22:49:00
>>950こそ偽物です

952 :945:05/02/21 23:07:30
>>950
>>951
やめてください・・・

953 :デフォルトの名無しさん:05/02/22 17:01:24
CWinThreadの派生クラスを作ってCreateThread(0,0)を呼び出すとRun()が
動き始めるんですが、これをワーカースレッドとして使うのは問題ないですか?

954 :デフォルトの名無しさん:05/02/22 17:36:54
>>953
多分永遠にメッセージを待つことになるのでスレッドが終わらなくなる。
InitInstanceがFALSEを返せばRunは呼ばれない。

955 :デフォルトの名無しさん:05/02/22 17:45:05
>>954
そうなんですか・・・ありがとう御座います。
続けざまの質問且つCWinThreadの理解不足で申し訳ないのですが、
CWinThread::CreateThreadというのはどういう用途で使われるのでしょうか?
AfxBeginThreadのようにスレッド関数のポインタを渡したりはしないのですよね?


956 :デフォルトの名無しさん:05/02/22 18:31:13
>>955
以下、MSDN
| 呼び出したプロセスのアドレス空間内で実行されるスレッドを作成します。
| 1 ステップでスレッドを作成し実行するには AfxBeginThread 関数を使います。
| 連続したスレッドの作成とスレッドの実行を繰り返すときに
| スレッド オブジェクトを再利用したいときは CreateThread を使います。

957 :デフォルトの名無しさん:05/02/22 18:38:25
>>956
私もそれはMSDNで読んだのですが、どうも下記の

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

この意味がよくわからなかったんですよね・・・。
CreateThreadを呼び出す事でどのスレッドが起動されるのかと言う所が
わからないと言った感じです。抽象的な物言いで申し訳ありません。

958 :デフォルトの名無しさん:05/02/22 19:38:46
MFCとちょっと離れるかもしれませんが・・・

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

テキストファイルに出力された値を読み込みたいのですが…


959 :958:05/02/22 20:07:56
strtolか・・・
失礼しました。

960 :デフォルトの名無しさん:05/02/22 20:20:07
StrToInt

961 :デフォルトの名無しさん:05/02/22 21:02:09
>>957
AfxBeginThread() って、
CWinThread 作って CreateThread 呼び出すくらいしか
やってなくて、で生成したスレッドが実行するのは

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

この _AfxThreadEntry() の中で、CWinThread の InitInstance() だの
Run() だのが呼び出されてる。

962 :デフォルトの名無しさん:05/02/22 21:36:43
>>961
成る程ですね!ありがとうございました。

963 :デフォルトの名無しさん:05/02/23 18:07:52
すいません、質問なのですがスプリットウィンドウの幅を動的に変更するにはどの様にすれば良いのでしょうか?

964 :963:05/02/23 19:11:56
自己解決しました

965 :デフォルトの名無しさん:05/02/24 15:47:07
VC++6.0を使ってます。

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

こういう場合は自分でメンバ関数を作って、CDialog::Create()、CDialog::ShowWindow()したあと
そのメンバ関数を呼び出すのがいいのでしょうか?

966 :デフォルトの名無しさん:05/02/24 15:50:24
いちいちお前の日本語モドキを解読して答えるのも嫌です。

967 :デフォルトの名無しさん:05/02/24 16:17:09
>>966の日本語の方が変に見える件について。

968 :デフォルトの名無しさん:05/02/24 16:31:06
>>965
だね。DoModalするとダイアログ側に実行権が移っちゃうんで。

969 :デフォルトの名無しさん:05/02/24 16:45:50
逐次表示を更新ならスレッド作らないとだめだな

970 :デフォルトの名無しさん: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);
}

こんな感じで擬似スレッドつくれば?

971 :デフォルトの名無しさん:05/02/24 23:22:37
そんな無茶苦茶な設計にするより、素直にスレッド使ったほうがすっきりする。

972 :デフォルトの名無しさん:05/02/24 23:30:29
クソスレ立てんなヴォケ!!

973 :デフォルトの名無しさん:05/02/24 23:54:38
ちょっとワロってしまった…

974 :デフォルトの名無しさん:05/02/25 16:09:51
これで画面に表示してある、
例えば「1」「2」「3」「4」「5」という文字をを識別して表示するみたいな事って出来るんでしょうか?

975 :デフォルトの名無しさん:05/02/25 16:11:25
できるよ

976 :デフォルトの名無しさん:05/02/25 19:37:30
意味がわからん

977 :デフォルトの名無しさん:05/02/25 23:19:43
画像処理?

978 :デフォルトの名無しさん:05/02/26 01:07:21
ワンパターンマッチング?

979 :デフォルトの名無しさん :05/02/27 15:57:03
MFCを始めたばかりの若造です。
CText(ラベルという?)に表示されている文字を画面から
はみ出たら改行されるようにしたいのですが、設定の仕
方が分かりません。

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

これを解決する良い方法はないのでしょうか?


980 :デフォルトの名無しさん:05/02/27 16:04:25
>>979
CTextなんてものはMFCには無い

981 :デフォルトの名無しさん:05/02/27 16:28:00
>979
スタティックテキストです。
スマソ

これは通常内部でいじったりはしないのですか?

982 :デフォルトの名無しさん:05/02/27 18:50:26
>>981
何べんも同じこと質問するなドアホ
http://pc5.2ch.net/test/read.cgi/tech/1107926989/274-280n


983 :デフォルトの名無しさん:05/02/27 19:00:02
MFCならプロパティに改行って項目が普通にあった気がしたが?

984 :デフォルトの名無しさん:05/02/27 19:02:29
>>983
ないから質問してるんです
知らない人は黙っててください

985 :デフォルトの名無しさん:05/02/27 19:05:37
つーか、改行使う理由が分からない。

986 :デフォルトの名無しさん:05/02/27 20:08:15
つーかデフォルトで勝手に改行されはずなんだけど。

987 :デフォルトの名無しさん:05/02/27 20:09:44
方法を変えてDrawTextで対応してみます。
MFCを行うのは初めてで、どのやり方が一番適切か
分からなかったため聞きました。
ありがとうございました。

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)