■MFC相談室 mfc17d.dll■at TECH
■MFC相談室 mfc17d.dll■ - 暇つぶし2ch84:55
06/12/01 19:42:03
>>71
そんな感じです。というより全く同じですね。
VC6ではやむを得ないと思います。

>>65-67
URLリンク(www.codeproject.com)
URLリンク(www.codeguru.com)
スクリーンショット見た感じ、↓のが参考になるかも。
URLリンク(www.codeguru.com)
URLリンク(www.codeguru.com)
URLリンク(www.codeproject.com)

>>62&>>72
どっかのスレで参考になる文献はないかと聞かれたから
URL貼ったんだが全く読んでないんだな。
考えられる原因の一つは、delete this;して自殺するクラスがあるということ。
CFrameWndやCViewがまさにそういうクラスなのでその可能性があるんじゃない?
76も答えてくれてる通り。


85:デフォルトの名無しさん
06/12/02 16:41:12
VC++.NET2003で開発しています。

MDIから別プロジェクトの画面を子画面として表示させたいのですが、
どういう風に作ればいいのでしょうか。

86:デフォルトの名無しさん
06/12/02 17:26:41
またMDIか

87:デフォルトの名無しさん
06/12/02 17:32:47
このまえ質問してたやつはどこに消えた?

88:49
06/12/03 13:05:02
>>84
やはりこういう派生になるのですね。安心しました。
VC7でも同じ問題が発生するようで、VC2005じゃないと直ってないようです。

89:40
06/12/03 16:05:47
>CViewのメニューなりからのイベントでCFormViewを開く時は、
の続きで、Viewの差し替えは、Viewクラスでのメニューイベントハンドラーで
CWinApp* myapp=AfxGetApp();
CDocTemplate* mydoctemp=(CDocTemplate*)RUNTIME_CLASS(CDocTemplate);
POSITION myps=myapp->GetFirstDocTemplatePosition();
mydoctemp=myapp->GetNextDocTemplate(myps);//テンプレートリストの1番目を選択するイテレータ
mydoctemp=myapp->GetNextDocTemplate(myps);//テンプレートリストの2番目を選択するイテレータ
mydoctemp->OpenDocumentFile(NULL);
でドキュメントテンプレートに入れられた2番目のViewを新規子ウィンドウで表示できたよ

90:デフォルトの名無しさん
06/12/04 13:59:24
ダイアログにタブコントロールを乗せ、複数のリストビューの表示をタブで切り替える
ソフトを書いていたんですが、タブに重ねたリストビューの列サイズを操作すると
リストビューの表示が乱れる現象が出てしまいました。

URLリンク(www.uploda.org)
サンプルプロジェクトです。VC2005で作りました。
URLリンク(www.uploda.org)
1つめのリスト。こういう感じで一番右の列境界をタブの外へ右にドラッグすると
スクロールバーが現れます。通常の動作です。
URLリンク(www.uploda.org)
2つめのリスト。1つ目と同じく一番右の列境界を右へドラッグするとスクロールバー
が現れるタイミングで表示が乱れます。

どうして2つ目のリストでのみ表示が乱れるのか悩んだ結果、ダイアログのリソース
定義ファイル中の、
> CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | (以下略)
> CONTROL "",IDC_TAB1,"SysTabControl32",0x0,7,7,173,186
> CONTROL "",IDC_LIST2,"SysListView32",LVS_REPORT | (以下略)

> CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | (以下略)
> CONTROL "",IDC_LIST2,"SysListView32",LVS_REPORT | (以下略)
> CONTROL "",IDC_TAB1,"SysTabControl32",0x0,7,7,173,186
と順番を入れ替えると表示が乱れなくなりました。逆に、タブの行をリストの先頭
に持っていくと今度は両方のタブでリストの表示が乱れるようになります。

結果オーライといえばそれまでなんですが、どうしてこれで問題が解決するのか納得が
いきません。リソース中の定義順が何に影響しているのでしょうか?

91:デフォルトの名無しさん
06/12/04 14:05:47
普通はプロパティシート

92:デフォルトの名無しさん
06/12/04 14:46:26
>>90
Zオーダーの問題じゃね?

93:デフォルトの名無しさん
06/12/04 16:30:03
Zオーダーの問題

94:90
06/12/04 22:53:30
確かにZオーダの問題でした。どうもありがとうございます。

リソース定義の順番がZオーダになるというのが将来にわたって保障された
仕様なのかどうかが疑問なので、コントロールを重ねる場合のZオーダは
きちんとSetWindowPosでコード中に書いておくことにします。

95:デフォルトの名無しさん
06/12/06 06:13:15
VC6.0のMFCで作ったプログラムを実行したときにレジストリへ一切書き込まないようにしたいのですが
HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
に VS_VERSION_INFO の FileDescription の値が書き込まれてしまいます。
FileDescription を消しても実行ファイル名が変わりに書き込まれてしまいます。
どうしたら書き込まないように出来るでしょうか?

96:デフォルトの名無しさん
06/12/06 10:01:56
そのキーを書込み禁止にすると(・∀・)イイヨ!!

97:デフォルトの名無しさん
06/12/06 23:59:45
CFtpConnectionを使ってFTPクライアントを実験的に作ってみたのですが、
PASVモードを使ったときにどのポートが使われているかというのは
どうやって取得すれば良いでしょうか?

98:デフォルトの名無しさん
06/12/12 21:25:29
CListCtrl (以下、リスト)をレポート形式で使用しているのですが、
このリストの特定セルだけ背景色を変えるにはどうしたら良いですか?
ステータス値に応じてセルの色が変わるような機能を実現したいのですが……

99:デフォルトの名無しさん
06/12/12 21:26:36
ダイアログ上に複数のスタティックなコントロールを配置しています。
各コントロール毎に違う背景色を設定したいのですがどのようにすればよいのでしょうか?
OnCtlColor()メソッド内でコントロールの判定ができればよいと思うのですが・・・。
どなたかご教授の程よろしくお願い致します。

OSはWinXP SP2、開発環境はVC++ 2005です。

100:デフォルトの名無しさん
06/12/12 21:45:51
>>98
カスタムドローじゃねぇの?

>>99
普通にウィンドウハンドル比べたらどうよ?

101:98
06/12/12 21:47:33
>>100
無知で申し訳ないのですが、カスタムドローとはどのようなものですか?

102:デフォルトの名無しさん
06/12/12 21:55:03
>>101
URLリンク(www.google.co.jp)

103:98
06/12/12 21:57:44
>>102
すみません、自分で検索するべきでした
どうもありがとうございました

104:99
06/12/12 22:00:20
>>100
レスありがとうございます。

if(GetDlgItem(IDC_STATIC_COLOR1) == pWnd){
AfxMessageBox(L"一番目のコントロール");
}
//以降コントロールの数分else if

試しにこんなコードでやってみたのですが引っかかりませんでした。
比較処理が悪いのでしょうか?



105:デフォルトの名無しさん
06/12/12 22:06:07
MFCってpWnd->m_hWnd == GetDlgItem(IDC_STATIC_COLOR1)->m_hWndってやらなくてもいいんだっけ?
まあ、駄目だったら、そもそもIDC_STATIC_COLOR1が本当にそいつの直下に配置してあるコントロールなのかどうなのか
ってところがあやしいんじゃね?

106:99
06/12/12 22:22:41
>>105
OnInitDialog内で
GetDlgItem(IDC_STATIC_COLOR1)->SetWindowText("あいう");
で文字は表示されたので問題はないと思うのですが・・・。
もう少し調べてみます。


107:99
06/12/12 22:31:54
>>105
すみません、教えていただいた
pWnd->m_hWnd == GetDlgItem(IDC_STATIC_COLOR1)->m_hWnd
でできていました。(メッセージボックスが表示されていなかったのでできていないと思っていました)
どうもありがとうございます。

108:デフォルトの名無しさん
06/12/12 22:38:02
それはえがった

109:デフォルトの名無しさん
06/12/13 16:35:12
VC6を使って、MDIアプリにMDIタブを実装したい
まずは、CMainFrame に MDIタブ用の CDocBar を配置したいのだが、
どこをどうオーバーライドしたらいいんだ?

CMainFrame::recalcLayout() あたり?


110:デフォルトの名無しさん
06/12/13 17:02:48
またお前か

111:デフォルトの名無しさん
06/12/13 19:25:44
その前にMDIの作り方は間違っていないのかね?
なんだかこの間からぶち当たった問題をことごとく質問してないか?

112:デフォルトの名無しさん
06/12/13 19:32:03
相談室だから質問しています

113:デフォルトの名無しさん
06/12/13 19:34:02
>>112
相談しようぜ。
MDIの基本的な部分はOKなん?

114:デフォルトの名無しさん
06/12/13 19:52:36
ここは自分でできもしないことを相談する所か?

115:デフォルトの名無しさん
06/12/13 20:17:28
まあ、MFCスレってここしかないんだから、そう厳しいこといわんと。
MFCって結構むずいじゃん。
俺、ドキュメントビューアーキテクチャーとかいう仕組み覚えるのに何日も必要だったぞ。
まず、ドキュメントビューアーキテクチャーの構造なんて大して重要なもんだと思ってなかったし(SDIで組んでたのもあって)。
この状態でMDIプログラミング特攻すると、はっきりいってハマルじゃんw

116:デフォルトの名無しさん
06/12/13 20:57:27
プロパティシートについて質問があります。
ダイアログをいくつか作成(このときフォントをMSゴシックの12ptに変更)し、
各ダイアログ毎にクラスを作成(CPropertyPageクラスの派生クラス)して
メインメニューに[プロパティ]項目を追加、そのイベント内で
・プロパティシートのインスタンス生成
・プロパティページをプロパティページにAddPage
・DoModalで表示
しています。
このとき、表示された各ページのフォントサイズが標準のMS UI Gothicの9pt
で表示されてしまっています。なのでCPropertySheetの派生クラスを作り、
OnInitDialog内でフォントサイズの変更を行ってみたのですが変化なしでした。
なぜこのような現象が起こるのでしょうか?

117:デフォルトの名無しさん
06/12/13 21:00:50
プロパティシート使ったことないけど
タブコントロールなら、全ページフォントを設定する必要があるな。
プロパティシートにもそんなのあんじゃね?(適当w)

118:デフォルトの名無しさん
06/12/13 21:10:57
OnInitDialog内でGetPage()->SetFont();は行っているのですが
それでも変わらないんですよ。各ページのコントロールのサイズも
ちっちゃくなってますし。全ページのコントロールの位置、サイズ、フォントを
設定しないといけないんでしょうか。

119:デフォルトの名無しさん
06/12/13 21:42:18
CPropertySheet フォント で検索

120:デフォルトの名無しさん
06/12/13 21:44:25
MDIの基本的な部分はたぶんオケ

だからおいらの相談に答えてくれよー

121:デフォルトの名無しさん
06/12/13 21:46:33
>>119
あ、やっぱ、手動なんだw

122:デフォルトの名無しさん
06/12/13 21:48:25
>>120
ドキュメントビューアーキテクチャ(なげぇなw)の理解は大丈夫ということでOK?

123:デフォルトの名無しさん
06/12/13 21:57:52
>まずは、CMainFrame に MDIタブ用の CDocBar を配置したいのだが、

MFCにCDocBarなんてあったけ?

124:デフォルトの名無しさん
06/12/13 22:20:15
>>123
すまん CDockBar だった

CDockBar はアンドキュメンテッドなクラスで、CControlBar を配置するための滑走路みたいなものだよ

125:116
06/12/13 22:43:28
>>119
SendMessageToDescendants()?でフォントは変更できましたが、
サイズとかの変更の仕方が分かりませんでした。

126:デフォルトの名無しさん
06/12/13 23:09:57
MFCを理解しようとしないで自分のやりたいことだけ質問する馬鹿ばっかりだな

127:デフォルトの名無しさん
06/12/13 23:33:37
MFCのすべてを理解してるなら、すべての質問・相談にちゃっちゃ答えて神になってくれ

128:デフォルトの名無しさん
06/12/13 23:47:28
何のためにソースがついてるんだろ

129:デフォルトの名無しさん
06/12/13 23:49:05
非効率だよね。
まず、全体っちゅーか概要ぐらいは理解しないと
なにやるにも知ってる人間にお伺いを立てないと何もできなくなっちゃうぞ。

130:デフォルトの名無しさん
06/12/14 01:57:25
なんかMFC使うほうがかえって面倒くさそうだ

131:デフォルトの名無しさん
06/12/14 03:22:11
馬鹿じゃねぇの

132:デフォルトの名無しさん
06/12/14 07:02:17
>>130
そういうときもある。

133:デフォルトの名無しさん
06/12/14 09:06:58
コントロールのサイズと位置はピクセル単位じゃなくてダイアログベース単位で、
ダイアログベース単位はフォントの幅が元になってる。
だからダイアログのフォントを変えると
コントロールのサイズと位置もフォントに比例して変わる。

このフォントサイズはダイアログを作る時に指定した
ダイアログボックステンプレートに定義されている。
ダイアログを作った後でフォントを変えても
コントロールは既に作成されてしまっているから
コントロールのサイズと位置は後で指定したフォントには影響されない。

以上ここまでMFCに限らずWin32でも同様

プロパティシートがリソースで定義されたダイアログのフォントを無視しているということは
たぶんメモリ上に読み込んだダイアログボックステンプレートのフォントを書き換えてから
その変更を加えたダイアログボックステンプレートでダイアログを作っているのではないか
と推測されるけど、あとはCPropertyPageのソース等を読めばわかることだから省略

134:デフォルトの名無しさん
06/12/14 10:51:38
  ☆ チン

        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)<  MDIタブ実装方法 まだー?
             \_/⊂ ⊂_)_ \_______
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
        |           .|/

135:デフォルトの名無しさん
06/12/14 11:22:30
ソースを読めばわかることだから省略

136:デフォルトの名無しさん
06/12/14 11:43:33
MDIタブのこと書こうか迷ってたんだけど、AAみて踏ん切りがついたよ。

137:デフォルトの名無しさん
06/12/14 13:05:50
MDIタブの何を書こうかと迷ってたんだ?

138:デフォルトの名無しさん
06/12/16 17:26:02
Button(OKやCancelや適用など)をDisableにしたいのですが、どの関数を使うのですか?
SetCheck()かと思ったのですが違うようでした。。

139:デフォルトの名無しさん
06/12/16 17:46:32
>>138
基本クラスのメンバEnableWindowで

140:デフォルトの名無しさん
06/12/16 18:12:46
なるほど…
やってみます。ありがとうございました。

141:デフォルトの名無しさん
06/12/17 19:17:51
リストコントロール(CListCtrl)をリードオンリにするにはどうすれば良いですか?

142:デフォルトの名無しさん
06/12/17 19:21:10
2つ目の質問です

ツリーリストコントロールって標準で存在しませんか?
存在しない場合はどうすれば使えますか?
MFCで作ったフリーソフトでツリーリストが使われていたので、
何らかの方法でできるのではないかと考えているのですが・・・

ちなみに、今の自分の技術力では自作は無理です

143:デフォルトの名無しさん
06/12/17 19:25:35
3つ目の質問です

MDI子ウィンドウのビュー(フォームビュー)でリストコントロール(CListCtrl)を使っているのですが、
他の子ウィンドウがリスト部分の前に重なった後、リスト部分をクリックしてリストがある子ウィンドウを
アクティブにすると重なっていたリスト部分だけが再描画されません
原因はまったく不明です
どのようにすれば子ウィンドウがアクティブになった時に正常に再描画されるようにできますか?

144:デフォルトの名無しさん
06/12/17 19:29:21
最後の質問です

MDI子ウィンドウのビューでリストコントロールを使っているのですが、
子ウィンドウのサイズ変更にあわせてリストのサイズを動的に変更するには
どのようにすれば良いですか?

VC#ではプロパティ画面で簡単に設定できたのですが、
VC++にはないのでとても困っています・・・





以上4つ質問させて頂きました
何かご存知の方は、ご回答をよろしくお願いしますm(_ _)m

145:デフォルトの名無しさん
06/12/17 19:37:53
最後のやつの答えは
子ウィンドウのサイズ変更にあわせてリストのサイズを動的に変更する

146:デフォルトの名無しさん
06/12/17 19:45:00
MDI野郎の質問は意味不明

147:デフォルトの名無しさん
06/12/17 19:51:36
具体的にはOnSizeとかOnSizingとかOnExitSizeMoveとか用途に合わせて使うと吉。

148:デフォルトの名無しさん
06/12/17 19:53:22
>>141
普通リードオンリーでできんじゃねぇっけ?
リソースファイルの方の設定に編集できるとかできないとかそういうプロパティあった希ガス。

149:デフォルトの名無しさん
06/12/17 20:00:56
>>142
昔、俺がみたのは自力で描画してたのしかみたことないな。
今、どうなってるのかはよくわからん。

150:デフォルトの名無しさん
06/12/17 21:27:01
>141-144
勉強してないの丸わかりなんだけど
よくリストコントロール表示できたね
どっかからソースぱくってきた?

151:デフォルトの名無しさん
06/12/17 21:43:34
たしかにこうなんもかんもわからんようだとどうしようもないなw

152:デフォルトの名無しさん
06/12/18 01:37:33
いつも質問しっぱなしで消えて行く人と文体がそっくりだな

153:デフォルトの名無しさん
06/12/18 16:59:07
お願いします。MFCを使い大量の点を打って画像を描画するプログラムを作っています。
点の数は数千を越えていると思うのですが かなり処理に時間がかかります。

自分なりに色々調べたところ SetPixelは遅い ということがわかりました
同時に BitBlt とか 裏画面 などと 高速化に関するワードも出てきましたが
全く分かりませんでした
この言葉で全て解決しようとするのが悪いのですが 初心者です。
しかし、時間が本当に無いので時間をかけて勉強して… ができません。

ちなみに 点は一色です。 SetPixelの遅さを解決する方法で
まだ分かり易いだろう と思う方法を教えていただけませんか?

154:デフォルトの名無しさん
06/12/18 17:15:42
かなり遅いって具体的に何秒?たった数千なら一瞬のはずだけど...

155:デフォルトの名無しさん
06/12/18 17:27:01
えっ・・・ そうなんですか?
具体的にはループ回数が3万でそのうちの一部の点を
描画しているので、最大でも3万ですね
1万は越えているかも知れませんが…

時間は3分から5分程度でした。

156:デフォルトの名無しさん
06/12/18 17:31:20
うちのPCは最新鋭からは程遠いセレロンだけど10万個の点をSetPixelで
描いても0.1秒ぐらいだったよ。(裏画面とか未使用)
描画以外の部分に時間かかってるんじゃないかな。

157:デフォルトの名無しさん
06/12/18 17:35:59
配列に直接描画すればいいんじゃない?

158:デフォルトの名無しさん
06/12/18 17:39:17
そうでしたか… スペック的には確実問題になるほどではありません。
ループ回数を増やすと比例関数的に時間も延びたので
てっきりそこが問題だと思っていました。

そうなるとどこに時間がかかっているのか全く分かりませんね…
ランダムウォークさせているのんですが そこか
1024*768もの配列を作って その中身全てを参照(検索)するという作業を
何度かしているのも原因かもしれませんね。
mallocなんかも全く使っていませんし…

ループ回数をこれ以上にするとエラーになり途中で動作が止まってしまうのも
同じ原因から来ているのかも…

しかし ここまでくるとここで相談させてもらう内容ではなくなってしまいますね。

159:デフォルトの名無しさん
06/12/18 17:42:35
1024*768*30000=230億強
それは遅いだろ...

160:デフォルトの名無しさん
06/12/18 17:57:38
>BitBlt とか 裏画面 などと 高速化に関するワードも出てきましたが全く分かりませんでした
>初心者です
>時間が本当に無いので時間をかけて勉強して… ができません。

結論: 無理

161:デフォルトの名無しさん
06/12/18 17:57:46
最後に一回だけ描画すればいいのに
いちいちSetPixel使うからだよ。

162:デフォルトの名無しさん
06/12/18 18:01:51
えっと 最後に一回だけ描画してます。

まぁ特に考えてたわけではなく、むしろ本当は描画の
様子が分かるように1回1回点を打ちたかったのですが
それができなくて 最後にだけ描画してます。
(点を打つ配列に目印をいれて最後にその部分だけ描画)

結論を言うと そのループ及び巨大な配列の中身を参照するのに
時間がかかってるというわけなんですね・・・

>>160 ってことでFAですかね。

検索の仕方や配列の使用法などを再考してみますね。
こんなくだ質に付き合ってくださってありがとうございました。


163:デフォルトの名無しさん
06/12/18 18:13:41
SetPixelをループに入れてる時点で一回だけじゃないじゃん。

164:デフォルトの名無しさん
06/12/18 18:17:04
GDIにじゃなくてメモリに対して書くようにすればいいんじゃないの?

165:デフォルトの名無しさん
06/12/18 18:20:29
たった一色ならcharで1024*768の配列をnewして
0か1を直接書き込めばいいじゃない。

その後BMPに変換すれば?

166:デフォルトの名無しさん
06/12/18 18:54:30
正直MFCと全然関係ない

167:デフォルトの名無しさん
06/12/18 19:57:42
1280*1024の画面全体の約130万ピクセルでも数秒だね
遅いというのは一瞬じゃないということ
自分で試さずに質問するのはやめてほしい。

168:デフォルトの名無しさん
06/12/19 00:26:28
>>162
そういう時は、SetPixelだけをコメントアウトしてみる。
そうすれば、それが犯人かどうか分かる。

169:デフォルトの名無しさん
06/12/19 00:53:12
質問者じゃないけど試しにBitmapBits弄ってみたら
130万pixelなんて問題にならないぐらい強烈に早いね。
今後使う機会があるかは微妙だけど勉強になったよ。

>>170 スレ違い房乙

170:153です
06/12/19 00:55:54
さらにレスしていただいたんですね。
>>163
確かにループには入ってますね
でもループもしないで1回だけ なんて できるんですか
>>164
そのような方法がある事は調べていたときにわかったんですが
なかなか理解できなかったんですよね
>>165
今は理解できないんで ちょっと考えて見ます^^;
ありがとうございます。
>>166
ですね。 158で自分でも言ってますが。 すみませんでした。
>>167
そうなんですか。 >遅いというのは一瞬じゃない そうですね
自分で試さずに とは 何のことでしょう?
確かに SetPixelに時間がかかっていたかどうかは
自分で画面全体にSetPixelで塗りつぶしてみれば分かったんですね…
そうだ と思い込んでしまったので思いつきませんでした ごめんなさい。

171:デフォルトの名無しさん
06/12/19 01:15:49
>>168さんもありがとうございます。
そんな方法もありますね 次回から参考にします!
>>169
スレ汚しすみませんでした。

172:デフォルトの名無しさん
06/12/19 02:51:30
>>171
つーか、普通にSetPixelとGetPixelが遅い。

GDI+を使っているならこれで速くなるっぽいことが書いてある。
URLリンク(junki.lix.jp)

173:デフォルトの名無しさん
06/12/19 08:21:41
> 描画しているので、最大でも3万ですね
> 1万は越えているかも知れませんが…
>
> 時間は3分から5分程度でした。


描画しているのは最大でも3万で時間は3分から5分

174:デフォルトの名無しさん
06/12/19 14:48:18
とりあえず、ビットマップ作ってメモリDCで選択して
そこに描画してBitBltするという、昔ながらのやり方を
試すのが今後のためにいいと思うが。

175:153
06/12/19 14:54:29
>>172
VC++ のMFCです。
>>174
そうですよね。
いい機会ですし勉強して使えるようにしたいと思います。

176:デフォルトの名無しさん
06/12/19 16:20:57
ほとんどMFCと関係ない

177:デフォルトの名無しさん
06/12/19 23:24:44
では MDIタブの実装方法についてお話してください
よろしくおながいします

178:デフォルトの名無しさん
06/12/19 23:36:11
mfcにMDIタブなんてものは存在しない

179:デフォルトの名無しさん
06/12/19 23:58:47
イヤです

180:デフォルトの名無しさん
06/12/20 10:36:29
>>178
存在しないから作るんですよ

181:デフォルトの名無しさん
06/12/20 10:49:58
じゃあmfc関係無いのでは

182:デフォルトの名無しさん
06/12/20 11:18:15
>>141 LVN_ITEMCHANGING
>>142 LVITEM::iIndent'
>>143 WS_CLIPSIBLINGS

183:デフォルトの名無しさん
06/12/20 12:37:11
MFCのMDIを拡張して作るんだから関係あるし、難易度が高い
MFCを使わず、まったくゼロから MDIタブを作るのならそれほど難しくはない

と混じれ酢してみる

184:デフォルトの名無しさん
06/12/20 13:08:57
決まった作り方が存在しないから好きなように勝手に作れ

185:デフォルトの名無しさん
06/12/20 13:18:05
好きなように作りたいんだけど、作り方がわからないんだよぉ~

186:デフォルトの名無しさん
06/12/21 01:17:54
ダメです

187:デフォルトの名無しさん
06/12/21 10:24:22
MDIタブを作るには、フレームウィンドウの上部(or左or右or下)にMDIタブのための領域を確保する必要がある
そのためには void CMainFrame::RecalcLayout(BOOL bNotify) をオーバライドすればいいぞ
どうオーバライドするかは自分で調べろ

188:デフォルトの名無しさん
06/12/23 01:28:04
イヤです

189:デフォルトの名無しさん
06/12/23 14:47:20
VC++6.0 WinXPProで開発を行っております。
XPログオン時のユーザ名とパスワードが正しいかどうかを、開発したプログラム上で
確認したいと思っているのですが、どのようにすればよろしいでしょうか。

190:デフォルトの名無しさん
06/12/23 14:51:25
誤爆?
ここはライブラリの専用スレですよ

191:デフォルトの名無しさん
06/12/23 14:55:43
>>190
スイマセン、他スレで聞いてきます。

192:デフォルトの名無しさん
06/12/23 15:26:31
ウィンドウにスクロールバーがあるかどうかを調べたいのですが、
どうすれば取得できるでしょうか?

193:デフォルトの名無しさん
06/12/23 15:35:00
WS_HSCROLLやWS_VSCROLLスタイルが付いてるか調べればいいんじゃないかな

194:デフォルトの名無しさん
06/12/23 15:42:35
GetWindowLongで取得すればいいのでしょうか?
色々調べてみたのですが、GetWindowLongの使い方がいまいちよく分からないです。。
具体的にどう使えばいいか、ご教授願えますでしょうか(><

195:デフォルトの名無しさん
06/12/23 15:49:27
MSDN見ろよ

196:デフォルトの名無しさん
06/12/23 15:56:33
MSDN見てます。
LONG lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
で取れると思うんですけど、そこからどうすればいいか分からないんです。
どこを見れば分かりますか?

197:デフォルトの名無しさん
06/12/23 16:04:12
ビット演算も知らんのか?

198:デフォルトの名無しさん
06/12/23 16:07:05
MFCの質問じゃない

199:デフォルトの名無しさん
06/12/23 16:20:22
ビットで入ってるんですね。
MFC以前の問題ですか・・・
もっとよく調べてきます。

200:デフォルトの名無しさん
06/12/23 23:28:32
MFCとは関係ないね>>199

201:デフォルトの名無しさん
06/12/24 22:58:19
質問があります。
現在、ダイアログAのボタンを押すと、ダイアログAを隠して
ダイアログBをモードレス表示し、
表示されたダイアログBのボタンを押すと、ダイアログBを隠して、
ダイアログAをモードレス表示するツールを作成しております。

そこで、ダイアログAのボタンを押すと、ダイアログAを隠して
ダイアログBをモードレスで表示することは出来たのですが
モードレスで開いたダイアログBのボタンを押すと、
ダイアログAをモードレスで開く方法がわかりません。
教えてください。
よろしくお願いします。

202:デフォルトの名無しさん
06/12/24 23:20:22
ダイアログAがやったのと同じ事をダイアログBでやればいいだけじゃん

203:デフォルトの名無しさん
06/12/25 05:05:35
>>202
エスパー値が低いのに初心者の質問に答えるな。話がややこしくなる。
要は循環参照になっちまってコンパイルできねぇんだろ?

つまり、
メインウィンドウ→ダイアログA→ダイアログB→ダイアログA→ダイアログB
って構造だとダイアログAとダイアログBが循環してしまって駄目なわけだ。
なので

メインウィンドウ→ダイアログA
          →ダイアログB

としてメインの方でダイアログAのボタンX、ダイアログBのボタンXの
内容を処理するようなもんを作る必要があるとそういうことだろ?
この処理をやるにはダイアログAとBのインスタンスはメインの方にもったほうがいい。
そんでメインの方で
1.ダイアログAがあったら消して、ダイアログBを出す処理
2.ダイアログBがあったら消して、ダイアログAを出す処理
を実装する。
んで、ダイアログAのボタンXでは1を発動させるような処理(親にSendMessageで独自のメッセージ飛ばすのがいいかな?)
んで、ダイアログBのボタンXでは2を発動させるような処理
を組めば完成とそういうことだ。多分w

204:デフォルトの名無しさん
06/12/25 08:32:31
Windowsの電卓の10進と16進の切り替えがそんな感じだな
あれは表に出ない親ウインドウがあってそこから2つのダイアログを切り替えてる
しまった、ここまで書いて全然MFCと関係ないのに気がついた

205:デフォルトの名無しさん
06/12/25 14:39:50
>203は別に独自のメッセージである必要もないね。
MFCなら仮想親ダイアログにメンバでABダイアログがぶら下がっているだろうから
ダイアログからは親のメンバを呼ぶだけでいい。

>>204
ほ~らMFCらしくなったでしょw

206:デフォルトの名無しさん
06/12/25 20:24:54
なんですぐMFCと関係無い方向に行くんだ?


207:デフォルトの名無しさん
06/12/25 20:25:25
はっ
おまいらちゃんとMFCがわかっているのか?

208:デフォルトの名無しさん
06/12/25 21:03:39
>>206
行くっつぅか元々>192からしてMFCと・・・

209:デフォルトの名無しさん
06/12/25 21:27:26
APIでウィンドウも出せないくせにMFC使うな
と誰かが言ってた。

210:デフォルトの名無しさん
06/12/25 21:50:49
VS2005 MFCを使用しています。
プロパティシートでSendMessageToDescendants()を使用し、
各ページのフォントサイズを変更しているのですが
なぜかリストコントロール内のフォントサイズだけ変更されません。
(ヘッダーは変更されていました。)
SendMessageToDescendants()を使用せず、リストコントロール
のSetFont()を使用すれば変更できるのですが、リストコントロール
に合わせてすべてのページですべてのコントロールにSetFontをするのは
避けたいです。なにかいい方法はありませんでしょうか?

211:デフォルトの名無しさん
06/12/25 22:06:20
>>210
この前の質問どうなったっけ?

212:デフォルトの名無しさん
06/12/25 22:23:31
>>211
今までリストコントロールを利用していないシートの
コーディングを行っていたのでてっきりうまく変更されていた
ものとばかり思っていたのですが、リストにデータを挿入して
表示したところリスト内のサイズだけ小さかったので
再度質問させていただきました。


213:デフォルトの名無しさん
06/12/26 01:30:22
1. 専門用語を知らないMFC初心者が質問
2. 知ってる人が専門用語をあまり使わずに解説
3. 理解できない別の知ったか初心者が 「MFCと関係ない」
4. 質問者が3にむかついて失踪

最近この流れが多い。3の人は1年ぐらいROMって欲しい。

214:デフォルトの名無しさん
06/12/26 08:50:07
すいません教えてください。
C/C++を一通り勉強して、mfcでビュッフォンの針のシミュレーションプログラムを
作ろうと思ってるんですが、ダイアログベースで、ピクチャボックスに描画しようとして
も上手くいきません。CClient の矩形をCRectで取り
bottomとrightを数値で覚えさして、シミュレーション用の横棒を引くため
bottomを横棒の数で割り、movetoとlinetoでそれぞれの位置に線を引いたのですが
(用は、数値が1ならクライアント領域が二等分されるようになり
数値が2ならクライアント領域が三等分されるような形)
上手く等分されません。
なにか良い方法か、サンプルのあるページがあれば教えてください。

215:デフォルトの名無しさん
06/12/26 08:57:16
描画に使った数値が合ってるかどうかぐらい調べてから質問しろよ

216:デフォルトの名無しさん
06/12/26 08:59:08
シミュレーションの前に、簡単な線でも描けるようになってから質問しろよ。

217:デフォルトの名無しさん
06/12/26 09:35:12
日本語でかかず、プログラムを示せや

218:デフォルトの名無しさん
06/12/26 09:58:29
デバッグメッセージで、moveto、linetoに渡す数字表示させて並べてみな

219:デフォルトの名無しさん
06/12/26 18:47:19
VC6でMDIアプリを開発しています。
子フレームを最大化した状態でドキュメントを切り替えると、最大化されない子フレームウィンドウ枠が
一瞬描画されてしまいます。
これを防ぐにはどうしたらいいのでしょうか?

220:デフォルトの名無しさん
06/12/26 19:35:30
普通に作ればいい

221:デフォルトの名無しさん
06/12/26 19:57:59
普通に作ったら 子フレームウィンドウ枠が一瞬描画 されるんだけど
これは いったい誰がだしているの?

222:デフォルトの名無しさん
06/12/26 21:20:18
お前が作ったプログラム

223:デフォルトの名無しさん
06/12/27 17:33:42
CFormViewの中に設置したレポート型のリストビューで
アイテムを右クリックしたときにポップアップメニューを
表示させてそのアイテムにのみ処理をしたいのですが

どうすればいいのでしょうか

224:デフォルトの名無しさん
06/12/27 18:50:12
簡単にできそうな気がして何が問題かよくわからん
ここで質問しなきゃわからないような何か特殊な問題あったか?

225:デフォルトの名無しさん
06/12/27 18:56:59
OnRButtonDownの追加により
リストビューで右クリックのイベントをとるまでいけたんですが
メニューの表示や選ばれたアイテムの取得方法がわかりません
簡単なら教えてくださいお願いします

226:225
06/12/27 18:57:47
今はOnContextMenuに変えています

227:デフォルトの名無しさん
06/12/27 19:06:13
特に難しい問題はないはずだから調べればわかると思う。

228:デフォルトの名無しさん
06/12/27 19:20:28
リストビューで項目の右クリックをとるのはNotify使うんじゃなかったかな
あまりにも懐かしすぎて、過去のソース見ないと思いだせんがNM_RCLICKとかあったと思う

229:219
06/12/27 19:21:19
void CMDIFrameWnd::MDIActivate( CWnd* pWndActivate )
を使って、子フレームを切り替えているのだが、このメソッドをコールすると
一瞬現在アクティブなウィンドウに WM_MDIACTIVATE が送られ、
その前後に子フレームが再描画されるとこまでわかった

どうしたら子フレームの再描画をとめられるんだ?
誰か助けて。おねがい


230:デフォルトの名無しさん
06/12/27 19:37:15
調べろカス

231:デフォルトの名無しさん
06/12/27 19:42:24
普通のMDIでもそうなるならそういう仕様
普通のMDIではそうならないなら普通のMDIと同じにすればいい

232:225
06/12/28 10:44:01
>>228
NM_RCLICKで右クリックのイベントは取れました
右クリックしたときのアイテムの取得はどうすればいいのでしょうか?

233:デフォルトの名無しさん
06/12/28 11:20:58
>>232
URLリンク(msdn2.microsoft.com)

234:225
06/12/28 11:25:06
返答ありがとうございます
調べてみたら
CListCtrl::GetFirstSelectedItemPosition
で取れるようです

235:225
06/12/28 12:24:51
次は右クリックを押したときにメニューを表示させたいんですが
表示はできましたが最初のメニューだけすごく小さいのです
サブメニューは普通に表示されます以下ソースです

CMenu menu;
CPoint posMouse;

VERIFY(menu.LoadMenu(IDR_MENU1));
::GetCursorPos(&posMouse);
menu.TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, posMouse.x, posMouse.y, this);

236:225
06/12/28 12:32:21
自己解決しました
CMenu* pPopup = menu.GetSubMenu(0);
pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, posMouse.x, posMouse.y, this);

237:デフォルトの名無しさん
06/12/28 12:45:14
ここはおまえの日記帳じゃねえ。
1週間くらい悩むような問題を質問しろよ。

238:225
06/12/28 15:30:47
ニートじゃないのに1週間も悩んでられるかよ
文句しか言えない無知は黙ってろ

239:デフォルトの名無しさん
06/12/28 16:43:49
配列で作ったマルチスレッドの破棄をメインスレッド側からするには
どうすればいいのでしょうか?調べたんですがflagを立てるやり方しか見つかりません

その方法ではユーザーインターフェーススレッドのような複雑な処理をしているときになると
通じないと思いますぜひ知恵をお貸しください

240:デフォルトの名無しさん
06/12/28 16:46:34
MFCと関係ない

241:デフォルトの名無しさん
06/12/28 16:49:19
MFCで開発してますがVC++のほうで聞いたほうがよかったですか?

242:デフォルトの名無しさん
06/12/28 16:54:48
普通にMFCクラスから派生して作ったのでMFCだと思うんですが
なにがどう関係ないのかの説明をいただきたい

243:デフォルトの名無しさん
06/12/28 16:55:13
UIスレッドはPostQuitでいいじゃん

244:デフォルトの名無しさん
06/12/28 17:00:28
PostQuit?

245:デフォルトの名無しさん
06/12/28 17:06:24
PostQuitとはトレードクラスのメンバ関数ですか?
そのようなものは無いと思うんですが

246:デフォルトの名無しさん
06/12/28 17:14:10
PostQuitMessageだろう

247:デフォルトの名無しさん
06/12/28 17:15:53
PostQuitMessageだとスレッドどころかアプリケーション終了しますよ

248:デフォルトの名無しさん
06/12/28 17:34:50
UIスレッドなら

スレッド側に、メッセージ受けると終了するような仕組みを作る。
メインスレッドからスレッドにPostMessage or PostThreadMessage。
必要に応じて、メインスレッドはスレッドが終了するまで待機。

249:デフォルトの名無しさん
06/12/28 17:37:02
なるほど
ありがとうございますやってみます

250:デフォルトの名無しさん
06/12/28 22:05:29
VC6 で組んだプロジェクトが VC7 でコンパイル出来なくて困ってます。
ユーザー定義メッセージのとこなんですが。

メッセージマップで
ON_MESSAGE(WM_USER_ENDTHREAD, OnUserEndthread)
ヘッダで
afx_msg void OnUserEndthread(UINT wParam, LONG lParam);
実体部で
void CPg1::OnUserEndthread(UINT wParam, LONG lParam)
{
;
}

としているのですが、コンパイル時に
pg1.cpp(130): error C2440: 'static_cast' : 'void (__thiscall CPg1::* )(UINT,LONG)' から 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)' に変換できません。
とでます。

VC6 では問題ないのですが・・・。 ご教授下されば有難く思います。

251:デフォルトの名無しさん
06/12/28 22:17:09
エラーメッセージそのまんまじゃん

252:250
06/12/28 22:30:23
>251

void を LRESULT にしろってことですかね?
ユーザ定義メッセージハンドラの仕様が変わったというだけのことですか。

253:デフォルトの名無しさん
06/12/28 22:44:34
相当古いよそれ

254:デフォルトの名無しさん
06/12/29 02:14:54
俺はGetWindowLongでとった値をどうキャストかけても警告だったかエラーだったか消えなくて悩んだ覚えがあるな。
結局、どうしたっけな・・・。

255:239
06/12/29 12:15:18
PostThreadMessageでメイン側からWM_QUITメッセージを飛ばし終了させようとしたのですが
Instanceでの処理は止まらないので終了することができません

WM_QUITの代わりのメッセージを作ったとしても終了処理をどうすればいいのでしょうか
Instance→Run→ExitInstanceの流れを通らないとスレッドの破棄は難しいのでしょうか?

>>248さんの終了処理するような処理をどうすれば実装できるか困っています


256:デフォルトの名無しさん
06/12/29 12:36:41
>>255
文字通り、サブスレッド側でメッセージを受け取れば宜しい。
逆に言えば、サブスレッド側をそのように作らないといけない。
詳細は、サブスレッドの作りが判らないしスレ違いになるので割愛。

257:デフォルトの名無しさん
06/12/30 01:57:47
質問です。
タブ上にリストコントロールを表示する為、メンバ変数作って
OnInitDialog関数内でリストをCreateしています。
(タブはリソースエディタで貼り付けています)
表示はできたんですけどなぜかリスト内の項目が選択できません。
なんででしょう?とりあえずこんな感じで作ってます。

m_Tab.GetClientRect(&rcRect);
ClientToScreen(&rcRect);
rcRect.left -= 21;
rcRect.right -= 5;
rcRect.top += 44;
rcRect.bottom += 52;
m_ListCtrl.Create(LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_NOCOLUMNHEADER|LVS_REPORT|LVS_SHOWSELALWAYS,
rcRect, GetParent(), IDC_JOURNALSHOWSET_LIST_KP);


258:デフォルトの名無しさん
06/12/30 02:20:50
>表示はできたんですけど

本当に?
GetParent()はダイアログの親ウィンドウを返してると思うんだけど。

259:デフォルトの名無しさん
06/12/30 09:25:15
こいつ思い出した
結果オーライ

> 90 名前:デフォルトの名無しさん[] 投稿日:2006/12/04(月) 13:59:24
> ダイアログにタブコントロールを乗せ、複数のリストビューの表示をタブで切り替える
> ソフトを書いていたんですが、タブに重ねたリストビューの列サイズを操作すると
> リストビューの表示が乱れる現象が出てしまいました。
>
> (中略)
>
> 結果オーライといえばそれまでなんですが、どうしてこれで問題が解決するのか納得が
> いきません。リソース中の定義順が何に影響しているのでしょうか?

260:デフォルトの名無しさん
06/12/30 15:35:51
MDIタブ age

261:デフォルトの名無しさん
06/12/30 15:57:27
メニュー項目を選択すると CSliderCtrl を WS_POPUP で作って表示させる処理を
ダイアログに追加していたんですが、ダイアログを終了する時にビープが一発鳴る
ようになってしまいました。

どこで鳴ってるのかデバッガで追ってみたところ、InitInstance の最終行、return FALSE;
で出て行ったあとのようです。この先も追いたいんですが、F11ではこれ以上追えません
でした。どういう風にデバッグすればいいでしょうか?

262:デフォルトの名無しさん
06/12/30 16:50:16
ダイアログを終了する時にInitInstanceなのか?

263:デフォルトの名無しさん
06/12/30 17:21:32
ダイアログベースのMFCアプリケーションなので、ダイアログの終了=アプリ
の終了という構図です。Wizardが作ったコードそのままですけど、下記のような
雰囲気です。
BOOL MyDialogApp::InitInstance()
{
  いろいろ初期化

  CMyDialogDlg dlg;
  m_pMainWnd = &dlg;
  INT_PTR nResponse = dlg.DoModal();
  if (nResponse == IDOK)
    ;

  else if (nResponse == IDCANCEL)
    ;

  return FALSE;
}

264:デフォルトの名無しさん
07/01/01 19:01:01
>>260
ヒント:
void CMainFrame::RecalcLayout(BOOL bNotify)
CWnd::RepositionBars()

265:デフォルトの名無しさん
07/01/03 11:56:09
先月からMFCを勉強し始めた者です。
以下のようにCFileDialogを使用して、ファイルの読み込み処理をつくりました。
これを、ビューの領域に表示するにはどうすればいいのでしょうか?
「void CFOpenView::OnDraw(CDC* pDC)」に処理を書けばいいと思うのですが、全然わかりません。
どなたか、教えてください。

void CFOpenDoc::OnFileRead()
{
CFileDialog CFDlg(TRUE, _T("txt"), NULL, OFN_HIDEREADONLY, _T("TEXTファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*||"));
CString String, FilePath;
CStdioFile StdFile;

if( CFDlg.DoModal() == IDOK){
FilePath = CFDlg.GetPathName();
if(StdFile.Open(FilePath,CFile::modeRead)){
StdFile.ReadString(String);
StdFile.Close();
} else {
AfxMessageBox(_T("ファイルが開けない"));
}
}
}

266:デフォルトの名無しさん
07/01/03 12:09:43
Hello, Worldと同じ
文字列を表示するだけ

267:265
07/01/03 12:39:21
>>266
レスありがとうございます。
試してみます。

268:デフォルトの名無しさん
07/01/03 17:20:42
ダイアログベースのプログラムを作成しています。
フォームにボタンを配置して、そのボタンのCaptionを動的に変更したいのですが、方法が分かりません。
CButtonクラスメンバの中にもそれっぽい関数が見付からず途方に暮れてます。
方法があれば教えてください。お願いします。

269:デフォルトの名無しさん
07/01/03 18:40:16
CButtonの基底クラスのメンバ関数

270:268
07/01/03 19:06:07
>>269
ありがとうございます。
普通にSetWindowTextで変更できたのですね。
助かりました。

271:デフォルトの名無しさん
07/01/03 20:22:26
VC++2005上でVBMP3.dllというライブラリを使用し、MP3を再生するプログラムを作成しています。
MP3ファイルをオープンするために呼び出す関数 vbmp3_openはヘッダ中に以下のように宣言されています。

BOOL APIENTRY vbmp3_open(const char* pszName, InputInfo* pInfo);

で、プログラム中で

vbmp3_open(FileName, &pInfo); // FileNameはCString型

としたところ、Debugでのコンパイルは成功するのですがReleaseのコンパイルが以下のエラーとともに失敗します。

error C2664: 'vbmp3_open' : 1 番目の引数を 'CString' から 'const char *' に変換できません。
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。

といった状態です。解決方法はありませんでしょうか。

272:デフォルトの名無しさん
07/01/03 21:16:14
Unicodeネタいい加減飽きた('A`)

273:デフォルトの名無しさん
07/01/04 09:35:43
簡単な質問だと答えがすぐに返ってくるねぇ
MDIタブの実装方法は難しくてここの住人に答えるのは無理ってことかぁ

274:デフォルトの名無しさん
07/01/04 09:55:03
MFCにMDIタブがあればすぐ教えてやるけど
ないものは教えられない

275:デフォルトの名無しさん
07/01/04 10:05:09
用意された機能は使えるけど
自分でMFCを拡張してタブを実装する技術はないってことだな>274

276:デフォルトの名無しさん
07/01/04 10:05:35
MFCの設計に含まれていない以上、
Office2007のリボンの実装方法聞いてるのと同じようなものだからなあ。
頑張れば出来るんじゃね?としか言いようが無い。

277:デフォルトの名無しさん
07/01/04 10:07:56
275は仲間を見つけて喜んでいるようだ

278:デフォルトの名無しさん
07/01/04 13:46:54
MFCにMDIタブを実装した経験のある おいらが来ましたよ
んで何が聞きたいんだ?


279:デフォルトの名無しさん
07/01/04 21:35:19
奥さんが欲しいです

280:デフォルトの名無しさん
07/01/05 02:58:20
>>279
以下のように2行コメントにしてみて

 for(int i=0; i<FEMALE_MAX; i++){
  if(female[i].IsMarried()==TRUE)
   continue;
  if(female[i].GetAge()<16)
   continue;
// if(female[i].CheckQuality()==FALSE)
//  continue;
  propose(female[i]);
 }

281:デフォルトの名無しさん
07/01/05 13:58:48
先生!なぜかループが一回も回りません!

282:デフォルトの名無しさん
07/01/06 09:18:47
>>281
femaleが空なんじゃないか?
つーか、FEMALE_MAXが0なのか。

283:デフォルトの名無しさん
07/01/06 09:43:43
//if(female[i].GetAge()<16)
//   continue;

こういう余計な制限もとっちゃおうぜ。

284:デフォルトの名無しさん
07/01/06 09:44:44
//if(female[i].IsMarried()==TRUE)
//   continue;

よく考えたらこれだって別に大した制限じゃねぇな。

285:デフォルトの名無しさん
07/01/06 09:46:04
if(female[i].GetAge()>35)
   continue;

さすがに遠慮したいから入れておこうな。

286:デフォルトの名無しさん
07/01/06 09:47:49
>>281
しょうがない、female -> maleに置き換えるんだ。

287:デフォルトの名無しさん
07/01/06 10:06:14
MFC使ってるやつ少ないのかと思ってたけど
くだらない話になると書き込みが増えるな
ROMってるやつ多いのか?

288:デフォルトの名無しさん
07/01/06 12:06:22
VisualC++ .net Standard使用
CImageのLoadFromResourceに関して質問です
BITMAPリソースは読み込むことができるのですが、jpgファイルをバイナリリソースとして格納した場合に、こいつを読み取ってくれません
LoadResourceを使ってtmpファイルでも書き込んでからCImage::Loadなんて馬鹿馬鹿しいですし
何とか簡単にリソースに埋め込んだバイナリデータのjpgを読み込ませる方法はないでしょうか?
ちなみに、こんな感じでやってます

CImage image;
image.LoadFromResource(GetModuleHandle(NULL),ResourceID);

289:デフォルトの名無しさん
07/01/06 12:20:49
あまりにもバグって気持ち悪くなってきた

290:デフォルトの名無しさん
07/01/06 13:06:39
VC6にはCImageないんだよな

291:デフォルトの名無しさん
07/01/06 13:19:40
DIB程度ならCreateDIBSectionをCBitmapにAttachとかで済むから、あまり困らなかったな。

>>288
::CreateStreamOnHGlobalとCImage::Load(IStream *)を使えば、ファイル無しでできる。
効率から言うと、バイナリリソースアクセス用のIStream実装を書いた方が良いけど('A`)マンドクセ

292:デフォルトの名無しさん
07/01/07 01:51:10
初期状態でドッキングされていないツールバー(フローティングツールバー?)の作り方を教えてください
普通のツールバー(ドッキングされているツールバー)はスケルトン作成(SDI or MDI)したソースを見れば
分かりそうな感じですが、それとスタイルが違うツールバーはどのように作れば良いですか?
グーグルで調べているのですが、思ったような情報に行き当たらず困っております

293:デフォルトの名無しさん
07/01/07 02:56:21
MDI野郎の文体だね

294:デフォルトの名無しさん
07/01/07 03:26:52
>>291
サンクス
CreateStreamOnHGlobalでいけました
というか、IPictureをかまさないとストリームにならないのでかましたわけですが
これを使うとCImageの意味がまったくをもってないですね(笑)

295:デフォルトの名無しさん
07/01/07 10:14:35
MFCのフローティングツールバーはMFCが自力でやってるから
具体的な方法はMFCのソース読めばわかるよ
確かバーの上に張り付いてるやつを別ウインドウ開いて丸ごと引っ越すだけだったと思う。

296:デフォルトの名無しさん
07/01/08 17:20:10
>>295
レスありがとうございます

ど素人(入社1年目)なので、それだけですとやり方が分かりません・・・

297:デフォルトの名無しさん
07/01/08 17:27:33
追加で質問をさせてください

ツールバー上のアイテム(ボタン?)をドラッグした時に
点線の四角形またはそのアイテムのアイコン(半透明)を
ドラッグ中のマウスポインタの横に表示させるにはどうすれば良いですか?
イメージとしては、VC++でダイアログリソース編集時にコントロールアイコンを
ツールバーからドラッグした時のような感じで

298:デフォルトの名無しさん
07/01/08 18:01:41
>>296
自力で調べて判らないようなら上司なり先輩なりに聞け。
それでも判らないようならあんたには不適当な要求仕様なのだからそう上司(なり指示した人間)に言え。

299:デフォルトの名無しさん
07/01/08 18:30:36
>>298
スレタイを2万5千回ぐらい嫁。

300:デフォルトの名無しさん
07/01/08 18:36:21
>>299
6時間も7時間もやってらんない。

301:デフォルトの名無しさん
07/01/08 18:47:17
>>299
相談室だから>>298のようなアドバイスもアリじゃないか

302:デフォルトの名無しさん
07/01/08 18:52:35
>>298は的確だと思ったな

あと2ちゃんで仕事をにおわせると答えてもらいにくくなるよ
タダで教えてその内容で相手は金を得るわけだし

303:デフォルトの名無しさん
07/01/08 18:52:59
>>301
要求仕様のさばき方相談室じゃないんだよー

304:デフォルトの名無しさん
07/01/08 19:37:22
会社だったら違う人に仕事まわすだけだろ
できない仕事をかかえこまないように

305:デフォルトの名無しさん
07/01/08 22:18:54
>>296でわからないっつーのはもうアレだ。
なんつーか色々と色んなことが困難だw

306:デフォルトの名無しさん
07/01/08 22:19:30
いや、>>295な。

307:デフォルトの名無しさん
07/01/08 23:27:04
>>292,296
質問の意味が2通りに取れるんだが
MFC標準のCToolBarをフローティング状態で表示したいってこと?
それとも独自にフローティングツールバーを実装したいってこと?

おそらく前者の意味で聞いてるんだと思うけど、
それならCFrameWnd::FloatControlBar()でフローティング状態にできるよ。
後者なら、MFCのソースを参考に自分で書けとしか言えません。

308:デフォルトの名無しさん
07/01/09 11:46:02
ダイアログバーにIDC_STATICのスタティックテキストを貼り付けると、
そのテキスト上でのマウスドラッグはバーのドラッグ処理になりますが、
これってどのような仕組みなのでしょうか。
ダイアログバー内に貼り付けた自作ウィンドウクラスにも
このような動作を組み込みたいんです。

OnNcHitTestでHTTRANSPARENTやHTCAPTIONを返してみても
まったく動かなかったり、コントロールだけが動いたり、
ダイアログバー内でダイアログ自身が動いてしまったりと、
仕組みがわからずに苦戦しています。

同じスタティックテクストでも
IDC_STATIC以外の名前を付けるとドラッグにならないようなので、
コントロールバークラスがIDC_STATICに対して
なにか特別なことでもやっているのでしょうか。

309:デフォルトの名無しさん
07/01/09 12:48:24
初心者はIDC_STATICではまる

310:デフォルトの名無しさん
07/01/09 12:51:33
初心者 IDC_STATIC の検索結果 約 211 件中 1 - 10 件目 (0.25 秒)

311:デフォルトの名無しさん
07/01/13 23:36:22
ドキュメントビューアーキテクチャという概念がよく分かりません

ドキュメント: プログラム内で共有するデータを扱う, メンバ変数がたくさんある, ファイル入出力
ビュー: ユーザとのインタフェースを扱う, 描画を取り仕切る, コントロール管理

の認識でOKですか?

312:デフォルトの名無しさん
07/01/13 23:58:14
いや

313:デフォルトの名無しさん
07/01/14 00:00:08
>>311
概ねOKじゃね?
どっちかっていうとその役割よりドキュメントとビューがセットで1つになってること(ドキュメントテンプレートってのなかった?)
新規作成でできるもんがドキュメント+ビューを型にしたインスタンスであることって方が重要のような気がするがわかっているならOK。

そうすると自然にMDIのアプリは

1.メインフレーム(メニューとかくっついてる)
2.(ドキュメント+ビュー)X新規作成で生成された数分
3.その他のツールウィンドウやダイアログ

で構成されることになる。
VCだと

・メインフレーム(メニューとかくっついてる)
・ソースコードエディターとかリソースエディター等など(新規作成からできる奴)
・ソリューションエクスプローラーとかアウトプットウィンドウとか・・・

にあたる。
強引に「こうやって作れよ!」っていう型なんで設計からしてこうやってなってないと駄目っちゃ駄目だなw

314:311
07/01/14 00:12:54
ありがとうございます

315:スイ
07/01/14 00:22:26 BE:311467872-2BP(0)
えっと、すいません、↓で討論?みたいなのをしているんですけど、
URLリンク(jbbs.livedoor.jp)
私は、真珠さんって少し変わった趣味を持った人だなー、とかは思いますけど、それだけで叩いたりするのってひどいと思いませんか?
私はあまりネットには詳しくないのでよくわからないんですが、なんかほなみんさんが2chとか言ってたので調べてみると見つかったので書き込んでみました。
このままだと真珠さんがかわいそうなんで、誰か真珠さん側についてほなみんさんを叩き返してくれませんか?私じゃ勝てそうにないので。

316:デフォルトの名無しさん
07/01/14 00:46:00
↓ハイ、次の方どうぞ。

317:デフォルトの名無しさん
07/01/14 01:44:25
えっと、これ本番ですか?


318:デフォルトの名無しさん
07/01/14 06:58:08
>>313
なんで初心者に向かって何の前置きも無しに、あまりお目にかからないMDIのさらにレアな
複数のドキュメントタイプを持つアプリの解説を始めるのか、理解に苦しむよ。
VS2005でMFCアプリのデフォルトプロジェクトがMDIになったのは大失敗な気がする。

>>311
URLリンク(msdn2.microsoft.com)(VS.80).aspx
この解説が分かりやすいよ。

319:デフォルトの名無しさん
07/01/14 08:06:10
>>318
ええ!?
>>313のどこをどう読めばが複数ドキュメントの解説がメインになってるの?
とんだ濡れ衣だ!勘違いなら謝ってよ!

320:デフォルトの名無しさん
07/01/14 08:06:57
X複数ドキュメント
○複数ドキュメントタイプ

321:デフォルトの名無しさん
07/01/14 09:00:21
>新規作成でできるもんがドキュメント+ビューを型にしたインスタンスであることって方が
>重要のような気がするがわかっているならOK。

SDIでは100%成り立たないし、単一のドキュメントタイプをもつMDIなら自明で重要性は感じられない。
これが重要な意味を持つのは複数のドキュメントタイプをもつMDIしかないように思った。
確信犯だと思ったんだが、気に障ったのなら謝るよ。漏れの知らない世界があるんだろうね。

322:デフォルトの名無しさん
07/01/14 10:00:53
>>321
え?じゃあ、君の勝手な妄想で俺につっかかってきたの?
それとあきらかにその文章で複数ドキュメントタイプの説明なんて書いてないのにその態度はなんなの。
しかも、確信犯の使い方も間違ってるし。
こんなの業務でやったら大変だぜ。改めろよ。

323:デフォルトの名無しさん
07/01/14 10:23:18
いや、改めなくていいから一切社会活動を行なわないでください。

324:デフォルトの名無しさん
07/01/14 10:27:37
>VS2005でMFCアプリのデフォルトプロジェクトがMDIになったのは大失敗な気がする。
これ昔からだろ、2005ではじめて触ったのか

325:デフォルトの名無しさん
07/01/14 11:07:34
SDI MDI
MFC以前からある

ドキュメント/ビュー
MFC2.0で追加された

326:デフォルトの名無しさん
07/01/14 12:59:31
CFrameWndの派生クラスをドキュメントテンプレートから閉じるにはどうしたらいいでしょうか。
つまり class CHogeDocTemplate : public C[Single/Multi]DocTemplate
の OpenDocumentFile で特定のフレームを閉じる様にしたいのですが、
閉じる時に CFrameWnd::DestroyWindow や OnCloseDocument を使うと
OnClose が呼びだされないがこれで大丈夫なのか、
だめだとしたら正しい閉じ方はどうなのかを教えていただきたいのです。
よろしくお願いします。

327:デフォルトの名無しさん
07/01/14 13:14:37
普通に閉じればいいじゃん

328:デフォルトの名無しさん
07/01/14 13:34:04
CFrameWnd::OnCloseからDestroyWindow呼んでるから
OnClose が呼びだされないのは当たり前

329:デフォルトの名無しさん
07/01/14 13:39:10
>>327
普通にとはどのようにでしょうか?

>>328
その通りです。OnClose から閉じる方がドキュメントを閉じる等の処理も
正しく行われるように読めたので出来ればそうしたく質問しております。

330:デフォルトの名無しさん
07/01/14 13:47:01
OnCloseからOnCloseDocument呼んでるから
OnCloseDocumentからOnClose が呼びだされないのは当たり前

331:デフォルトの名無しさん
07/01/15 21:50:20
OnCloseはウィンドウを閉じる時
OnDocumentCloseはドキュメントを閉じる時
と考えれば何も問題ないべ

332:デフォルトの名無しさん
07/01/16 04:24:49
CPUやメモリをあまり気にせずにプログラム書いてたら
起動しただけでCPU使用率50%という異常な状態になっていました。
このプログラム自体、起動と同時に行う処理はほとんどなく、
SDIのスケルトンと同じようなもののはずなんですが。。

処理がないのにCPU使用率が高いまま下がらないのは
原因としてどのようなことが考えられますか?
もしくは原因を調べる方法とかってありますか?

333:win32apiスレ17
07/01/16 04:36:15
スレリンク(tech板:17番)
に最初書き込みましたが、こちらのが適切かなと思って移動してきました。

Acrobatのページサムネール表示、あるいはPowerPointのスライド一覧表示のように、
イメージのリストを表示し、かつ、その順番をマウスのドラッグで調整したいと思ってます。
ドラッグ中、イメージが挿入される場所にカーソルの様な縦線が出てきて欲しいなと思ってます。

こういうコントロールの既存の実装やコードのサンプルなど御存知でしたら御教示頂けないでしょうか?
codeguru、codeprojectは廻ってみたものの、どうにもサムネールの表示どまりでして・・・


334:デフォルトの名無しさん
07/01/16 05:27:51
>>332
情報少なすぎでどうespしろと?


335:デフォルトの名無しさん
07/01/16 05:36:21
>>333
自分でエディタとか作ったことない?


336:デフォルトの名無しさん
07/01/16 08:03:52
>>332
プロファイルで

337:デフォルトの名無しさん
07/01/16 09:03:52
ある場所から突然malloc(255)がNULLになります。直前のmallocは必ず成功で、場所は一定
HEAP、スタックを2000000(2M)や20000000(20M)で試しましたが、タイミングや場所は変わらないようです
お手上げです。解決策をお知りの方おりませんか?

338:デフォルトの名無しさん
07/01/16 09:15:52
直前のmallocまでのすべての戻り値をここにさらしてごらん

339:デフォルトの名無しさん
07/01/16 09:42:17
直前のmallocの戻り値でいいですか?

malloc(255);//必ず成功。 戻り値:0x00b72e68
WideCharToMultiByte
MultiByteToWideChar
malloc(255);//必ず失敗

こんな感じです

340:デフォルトの名無しさん
07/01/16 09:59:04
ヒープ壊してんじゃねえの

341:デフォルトの名無しさん
07/01/16 10:05:25
解決しました!
MultiByteToWideCharを2度使いmallocのサイズを指定していたのですが、wchar単位でNULLが含まれていないため少なくなっていました
成功するほうをmalloc((len+1)*sizeof(wchar_t));で動きました。
ありがとうございました。

342:デフォルトの名無しさん
07/01/16 12:49:33
CStringWじゃ駄目なのか?

343:デフォルトの名無しさん
07/01/16 17:35:59
>>332です。

>>336
ありがとうございます。
プロファイルで調べたところOnIdle()のreturnが原因だったようです。

そのreturnのことで質問なのですが、
OnIdle内でのレンダリングによってCGアニメーションを表示するプログラムを書いているのですが、
return TRUE;だと前述のようにCPU使用率が高くなるのですが、
アニメーションは正常に表示されます。
return CWinApp::OnIdle(lCount);だとCPU使用率の問題は解消されるのですが
OnIdle()が呼ばれる間隔が長くなるためか、アニメーションが滑らかに表示できません。

この2つを同時にクリアできる良い方法はありませんか?
よろしくお願いします。

344:デフォルトの名無しさん
07/01/16 19:02:17
んー、、、目的の fps が取れてるなら Sleep(0)を呼ぶとかどうだろう、Sleep(1)でもいいが

345:デフォルトの名無しさん
07/01/16 19:27:01
ほっといてやれ

346:デフォルトの名無しさん
07/01/16 21:57:57
>>344
ありがとうございます!!
どうやらすごく基本的なことのようですね。。

347:デフォルトの名無しさん
07/01/18 21:52:58
マルチラインエディットボックスで
水平方向のスクロールバーの位置から
列の何文字目から表示している知りたいのですが
どうすればいいのでしょうか?

やりたいことはエディットボックスの中身を編集して
かきかえても書き換える前と同じ位置を表示したいのです。
LineScrollを使用すれば垂直はうまくいくのですが、水平がうまくできません。

また、SetScrollPosを使用してもエディットボックス内が更新されないのでこまっています。

348:デフォルトの名無しさん
07/01/18 23:52:25
>>347
「書き換えても書き換える前と同じ位置」というのもよくわからないんだけど、
わざわざスクロールバーを使っているのはなぜ?
単純にGetSelでカーソル位置を取得しておいてSetSelで戻すだけじゃダメ?
あと、エディットボックスの更新するにはUpdateData(FALSE)とUpdateWindow()
じゃない?
質問がよくわかってないのではずしてるかも知れんけど。

349:347
07/01/19 14:44:11
>>348 さん
レスありがとうございます。

自己解決しました

350:デフォルトの名無しさん
07/01/19 16:13:48
CWnd* CWnd::GetDlgItem(int nID); で得られるCWndのインスタンスの解放は
誰に責任があるんでしょうか?ソースコードを少し追ってみると、独自のアロケータ
でごにょごにょやってるような感じなんですが。

351:350
07/01/19 16:23:11
自己解決しました。こういう一時的に作ったオブジェクトはMFCが勝手に
CWinApp::OnIdle() → CWnd::DeleteTempMap() あたりで解放するんですね。



352:デフォルトの名無しさん
07/01/19 16:23:37
ソース追うのもいいけど、ヘルプもみよう

353:デフォルトの名無しさん
07/01/19 16:34:29
いや、だってヘルプには「返されるポインタは、一時的なポインタです。後で使用するために保存しておくことはできません。
」としか書いてないから、誰がどこでいつ解放するか気になるじゃん?

354:デフォルトの名無しさん
07/01/19 16:39:54
一時的なポインタを解放するのか?

355:デフォルトの名無しさん
07/01/19 17:09:59
そりゃ解放するでしょ。問題は誰がいつどこで開放するかであって、それに
よって「一時的なポインタ」とやらの有効範囲が決まってくるわけだから。

356:デフォルトの名無しさん
07/01/19 17:21:08
クラスがなんだかわかってないのでは?

357:デフォルトの名無しさん
07/01/19 18:22:15
あれ、FromHandle()あたりからDeleteTempMap()をたどって知ったんだったかな、、、
ヘルプだけで一時的なCWnd*がいつ消されるかも読んだ気がしたが・・・

358:デフォルトの名無しさん
07/01/19 18:27:04
>>357
それがヘルプに書いてあれば悩む必要がないのにね。

359:デフォルトの名無しさん
07/01/22 18:39:22
すいません。
自作でエクスプローラ風アプリケーションを作りたいのですが、
それ風なサンプルを説明しているサイトとか知りませんか?

全く、それ系のインターフェイス名も知らないんで、
ググれなく困っています。

360:デフォルトの名無しさん
07/01/22 19:00:58
せっかく教えても無駄になりそうだからやめておこう

361:デフォルトの名無しさん
07/01/22 20:54:50
>>359
えー!!
そんな殺生なぁ

362:361
07/01/22 20:56:48
>>360
おねがいっす!!

363:デフォルトの名無しさん
07/01/23 11:03:34
質問なんですけど
AppクラスからDocumentクラスのポインタの取得方法を教えてください
よろしくお願いします。

364:デフォルトの名無しさん
07/01/23 11:12:52
自分で持ってそうな気がするけど

365:デフォルトの名無しさん
07/01/23 11:13:20
Viewが一つだけなら
GetFirstDocTemplatePosition()、GetNextDocTemplate()、GetFirstDocPosition()、GetNextDoc()
あたりで。

366:363
07/01/23 11:19:24
>365
GetFirstDocPosition()、GetNextDoc()で取得できました。
ありがとうございます。

367:デフォルトの名無しさん
07/01/25 16:20:26
スライダについて質問です

slider.SetRange(0, 100, true);
slider.SetTicFreq(10);
slider.SetPos(0);

このようなスライダを作り、スライダで設定した値をEditBoxに表示しています。
このとき、スライダのつまみをドラッグした場合には正しい値が得られますが
クリックで設定しようとした場合が上手くいきません

例えば、70を設定しようと思って該当する目盛りのあたりをクリックすると、
70の位置には来ず、マウスボタンが押されるたびに60と80で切り替ってしまいます。
クリックでも値を設定できるようにするには、何か特殊な処理が必要なのでしょうか?




368:デフォルトの名無しさん
07/01/25 18:32:40
スライダの現在位置が0の時に70の位置をクリックしたら
0+GetPageSize()で得られる位置に移動するのがスライダ
コントロールの仕様だと思うんですが。

仕様が気に入らないのであれば、自分で必要なイベントを拾ってSetPos()すれば良い。

369:デフォルトの名無しさん
07/01/26 01:06:48
CEdit::SetFoces()に関する質問です。

任意のテキストフィールドをフォーカスさせたい場合は
CEdit::SetFocus()を行うと実現できますが、
このとき、フォーカス対象のテキストフィールドに文字列が
入力されているとき、文字列全体を範囲選択した状態で
フォーカス移動させるにはどのような手法があるでしょうか?

イメージとしてはタブでフォーカス移動させたときのような感じです。

よろしくお願い致します。

370:369
07/01/26 01:14:49
ごめんなさい。自己解決しました。

CEdit::SetFocus();
CEdit::SetSel(0,-1);
で実現できるようでした。

371:デフォルトの名無しさん
07/01/27 01:54:56
ダイヤログベースのアプリです。
英語化について教えてほしいです。

タイトルアイコンをクリックした時のシステムメニューや、
AfxMessageBoxを表示させたときのキャンセルの表示など
あらかじめ用意されている部分に日本語が表示されますが、
すべて、一切がっさいを英語にしたいと考えています。

どのような方法で英語かすることができるでしょうか?

372:デフォルトの名無しさん
07/01/27 02:56:08
>371

アプリケーションを実行するとき、デフォルトのコードページを英語に変更する。
でも、システムのバグをたたくこともあるからお勧めしない。


373:デフォルトの名無しさん
07/01/27 06:21:45
英語環境でビルドしてあるやつでもそうなるから
OSの問題だろ

374:デフォルトの名無しさん
07/01/27 13:08:41
だから実行時指定

375:デフォルトの名無しさん
07/01/27 15:15:32
>>371
日本語関連を全くインストールしていない、設定も悉く日本にしていない端末で、実行する。

376:デフォルトの名無しさん
07/01/27 15:21:43
MFCは全くの初心者なのですが、MFCにもバージョンはあると思うのですが
Visuall C++(VC6)に付属のMFCのバージョンはいくらになりますか?


377:デフォルトの名無しさん
07/01/27 15:31:00
6.0

378:デフォルトの名無しさん
07/01/27 17:48:04
WikipediaのMFCの項目、批判の所見てワロタ。
どこの知障だよ、書いたの。

379:デフォルトの名無しさん
07/01/27 18:41:44
>378
DelphiやJavaはライブラリらしい。しかも、C++はコンパイル時間が長いらしい。

380:372
07/01/27 19:01:12
>371

あと、afxMessageBoxにはユーザ拡張用の前呼び出し処理があるから、
それを横取りして自作のメッセージボックスを表示する。

とかかな。


381:デフォルトの名無しさん
07/01/27 19:01:26
コンパイル時間は長いとは思うけど、他のオブジェクト指向言語と
比べてどうなのかはわからんな。

ただ、「C++だから」ってより「色々インクルードするから」長いんだけど。


382:デフォルトの名無しさん
07/01/27 19:06:08
実行時コンパイルの方が好感もたれるのか

383:デフォルトの名無しさん
07/01/27 19:52:07
すみませんMFCど素人です
ANSIの
unsigned char foo[64]
MFCではどの様に書いたらいいのでしょうか?
コンパイラはVC6です

384:デフォルトの名無しさん
07/01/27 20:20:34
unsigned char foo[64]

385:デフォルトの名無しさん
07/01/27 20:47:58
ガベコレがないのが致命的欠点であるかどうかは検証不可能だから
これはもちろんWikipediaに書いてはいけない。

Delphiの方にもしょうもない書き込みしてるが、
群を抜いているのなら特定のソフトウェアをあげつらう必要はなかろうに。
「中立的な観点」を欠いてしまっているのが分らないのかね。

386:デフォルトの名無しさん
07/01/27 23:24:57
何で C# って使われてないの?
VC++ ネイティブのより多少計算とか遅いかもしれないけどさ、
開発が VB 並にめっちゃ楽だし、
文法は Java そっくりで習得も移行も容易だし、
全体的にスマートな印象を受けるじゃん
いい加減 VC++ 信仰は止めて欲しいんだよね
一々 Windows と UNIX(Linux) 版を作りたくねーんだよ
もうさ、時代は中間言語の時代だと思うね
頼むから、ネイティブ信仰は止めようぜ


387:デフォルトの名無しさん
07/01/27 23:34:26
>>386
TPOで使い分けるでFAだろ。
まあその手の議論は実りがないから他でやったほうがいいな。

388:デフォルトの名無しさん
07/01/28 08:18:59
InitDialog中で、必要なファイルがあるかのチェックをして
なければSendMessage(WM_CLOSE);として終了するようにしているのですが
一瞬Windowが表示されてしまいます。。。
Windowを表示させずにそのまま終了する方法はないでしょうか?

389:デフォルトの名無しさん
07/01/28 08:37:30
ダイアログ出す前に調べる

390:デフォルトの名無しさん
07/01/28 10:07:30
>>388
モーダルならEndDialog、モードレスならDestroyWindow。

391:デフォルトの名無しさん
07/01/28 11:06:29
ほほぉ、それからそれから?

392:デフォルトの名無しさん
07/01/28 12:29:47
VC8のMFCではダイアログボックスに貼り付けるボタンやテキストボックスのサイズや
表示位置をそれぞれのプロパティから数値で詳細に設定できるのですが、VC6のMFCでは
そのようなプロパティに項目が見当たりません、VC6で皆さんは位置決めやサイズを
何処で設定されているのでしょうか?

393:デフォルトの名無しさん
07/01/28 13:03:17
テキストエディタ

394:デフォルトの名無しさん
07/01/28 13:16:13
>>389、390
ありがとうございました!

395:デフォルトの名無しさん
07/01/28 16:34:24
ダイアログベースのアプリです。
ウインドウサイズをマウスで自由に変更できるようにするには
どのような設定、または処理を作れば良いでしょうか?
SDI/MDIベースでないとできないですか?

396:デフォルトの名無しさん
07/01/28 16:48:03
いいえ。

397:デフォルトの名無しさん
07/01/28 17:04:26
サイズ可変のスタイル付ければダイアログ自体のサイズは変えられるようになるが
中のコントロールもそれにあわせて調整したければ、自分で書くしかない。

398:デフォルトの名無しさん
07/01/28 17:17:53
>>397さん
お返事ありがとうございます。
サイズ可変のスタイルのつけ方は、具体的なコードイメージを教えていただけないでしょうか。
ダイアログ内部に設置したCEditのコントロールもあわせて変更するように実装します。

399:396
07/01/28 17:44:13
スルーされたから要点だけ突っ込み。
>サイズ可変のスタイルのつけ方は、具体的なコードイメージを教えていただけないでしょうか。
MSDN嫁。リソースで定義したダイアログならリソースエディタのプロパティの該当項目をチェックするだけ。

>ダイアログ内部に設置したCEditのコントロールもあわせて変更するように実装します。
サイズ変更のメッセージハンドラを書く必要がある(勿論そこでCEditのサイズを調整する)ので、
初心者向けの解説サイトでも探して解説を読め。

400:デフォルトの名無しさん
07/01/28 18:57:22
すいません。でも方法教えていただきありがとうございました。
これからはMSDNみてから質問します。
CEditのほうもありがとうございました。

401:デフォルトの名無しさん
07/01/28 21:19:27
>>392ですが、どうしたらいい?


402:デフォルトの名無しさん
07/01/28 21:38:35
>>401
VC6の場合画面の右下のステータスバーに座標とサイズが表示されてるから
それを見ながら、マウスかキーボードで配置する。
[↑↓←→]で位置の変更、[Shift]+[↑↓←→]でサイズ変更。
もしくはリソーススクリプトを直接編集する。

403:デフォルトの名無しさん
07/01/29 05:11:45
ダイアログ上にコントロールを大量に貼り付けて等間隔に位置を合わせるtips。

1.テキストエディタで.rcファイルを開く。
2.DIALOG内のCONTROL行をcsvファイルとして保存する。
3.以下省略。

404:デフォルトの名無しさん
07/01/29 05:36:57
すごい大量のとき役立ちそうだなw

405:デフォルトの名無しさん
07/01/29 06:20:10
ダイアログエディタに位置そろえる機能ついてるけど

406:デフォルトの名無しさん
07/01/29 15:36:03
>>403の3.の部分はストリングテーブルを書くときに便利だな。
defineと日本語/英語の文字列が一気に書ける。同時に仕様書も作れて一挙両得。
defineの数値はドラッグすれば1づつ増やせるからバグもでない。

407:デフォルトの名無しさん
07/01/30 23:29:19
フレームウィンドウとかの OnDestroy について質問です
通常 OnDestroy の中では親クラスの OnDestroy を呼んでいますが、
その親の OnDestroy の直前の部分でメモリ開放処理を行うのは良くないですか?
リストに登録されているアイテムを開放したいのですが・・・

408:デフォルトの名無しさん
07/01/30 23:50:16
>>407
良くないと思う理由は?
リストってリストボックスやリストビューコントロールのこと?

409:デフォルトの名無しさん
07/01/31 00:00:58
>>408
CListCtrl のことです
これに new で生成したオブジェクトを登録?しています
そのまま終了するとメモリリークが発生してしまうので、
ウィンドウが破棄される直前に開放しようと思いました
それで OnDestroy に追加することにしました

良くないと思った理由は、親クラスの OnDestroy を
呼んでいるところの下にデフォルトで「ここに追加」
的なコメントが入っているからです

410:デフォルトの名無しさん
07/01/31 00:10:13
CListCtrlが消えるのいつなん?
プログラムが生成→消滅→生成→消滅→・・・ってやってるか
生成→表示→非表示→表示→非表示→・・・消滅ってやってるかでタイミング違ってくるじゃん。
生成したインスタンスを消したいタイミングはいつよ?
最終的に(それがいつだかはアプリにもよるが)インスタンスを確実に消滅さしときゃ問題ねーんだしよ。

411:デフォルトの名無しさん
07/01/31 00:29:46
リストは起動時から終了時までずっと表示です
終了時に一覧情報を保存して破棄することにしています

できるだけ綺麗な(オブジェクト指向的な)ソースコードを
書きたいので、親の OnDestroy の前が正解か後ろが正解か
が気になります

412:デフォルトの名無しさん
07/01/31 00:49:58
>>411
WM_DESTROYを処理してる間は、子ウィンドウは存在している。
URLリンク(msdn2.microsoft.com)

リストビューアイテムに設定しているデータを削除するのは、LVN_DELETEITEM, LVN_DELETEALLITEMSでやるといい。

413:デフォルトの名無しさん
07/01/31 00:51:06
>>412
ありがとうございます!
やってみます!

414:デフォルトの名無しさん
07/01/31 00:52:14
>>411
だったらOnDestroyは関係ないんじゃない?
つか、親のOnDestroy後にCListCtrlにアクセスされたら(するのか?)死ぬじゃない。
親のデストラクタでdeleteしとけばいいんじゃね?やってみ、やってみ。やってみたら結果報告ヨロ

415:デフォルトの名無しさん
07/01/31 00:53:07
CMainFrame::OnDestroy()の前後どっちか2択と言われたら後に1票。

個人的には、Documentで扱っているデータなら
CHogeDocument::OnCloseDocument() or OnSaveDocument()
ViewのみでやってるならCHogeView::PostNcDestroy()でやると思う。
CMainFrameにCListCtrlのデータ持たせるとViewからデータへの
アクセスが面倒じゃない?

416:デフォルトの名無しさん
07/01/31 01:08:09
>>414-415
ありがとうございます!
いろいろと試してみます!

417:デフォルトの名無しさん
07/01/31 08:40:38
親ウインドウと関係あるのはopenからcloseまで
closeしたらウインドウ関係ないから心配いらん

>綺麗な(オブジェクト指向的な)ソースコード

普通はデストラクタで解放

418:デフォルトの名無しさん
07/02/01 00:21:49
CListCtrl コントロールのイベント処理ですが
クリック時とダブルクリック時とで処理を分けたいと思っています
しかし、ダブルクリック時には先に必ずクリックイベントが
発生してしまってうまくいきません
NM_DBLCLK の直前に NM_CLICK が発生するのを
防ぐことはできませんか?

419:デフォルトの名無しさん
07/02/01 00:53:14
仮にNM_CLICKが発生しないようにしたらシングルクリック時の処理が出来ない。
コントロールの身になって考えれば、ユーザーのクリックがシングルなのかダブルの1発目
なのかの判断はできない。

シングルクリック時の処理開始をしばらく待ってみる以外手はないと思う。

420:デフォルトの名無しさん
07/02/01 01:11:47
>>419
レスありがとうございます
つまり、NM_DBLCLK 前には NM_CLICK が
絶対に発生してしまうということですね
何か良い手はないですかね・・・

421:デフォルトの名無しさん
07/02/01 01:20:02
だからシングルクリックのイベント後、しばらく待ってみてダブルクリックが来ないようなら
シングルの処理。来たらダブルの処理するだけ。

VBのサンプルではタイマー使ってるみたい。
URLリンク(support.microsoft.com)

422:デフォルトの名無しさん
07/02/01 09:45:30
本来はダブルクリックってーのは、シングルクリック→メニュー等選択
のショートカットだから、シングルクリックのあとにダブルクリックがきても
何も困らないんだけどな。
ダブルクリックを変なことに使おうとするからこうなる

423:デフォルトの名無しさん
07/02/03 19:33:32
これからMFCの勉強を始めたいのですが
書籍の「標準講座MFC」って今でも役に立つでしょうか?

MFC6.0ってちょっと古いみたいですが、最新のバージョン(MFC8.0?)と
大きく違うところってあるのでしょうか

424:デフォルトの名無しさん
07/02/03 20:20:00
仕事でどうしても必要なのか?
でなければ止めとけ。

425:デフォルトの名無しさん
07/02/03 20:42:57
>>423
新しいUI関連のクラスがいくつか無いだけで、基本はそんなに変わってないと思うけど。

426:デフォルトの名無しさん
07/02/03 21:18:50
URLリンク(www.shoeisha.com)
ソースは公開されてる

427:デフォルトの名無しさん
07/02/03 21:57:59
お前ら教えてください。
ツールバーのボタンに文字列のみ表示したいのですが、
TBBUTTON::iBitmapにNULLを指定しただけでは
イメージ(アイコン?)のスペースの分のスペースが空き、
そこから先から文字列が描画されてしまいます。
どうすればいんでしょうか?

428:デフォルトの名無しさん
07/02/03 22:40:06
CToolBarでできそうな気がするけど

429:427
07/02/03 22:47:49
>>428
なるほど!
CToolBar::SetSizes()の中にやり方が書いてありました。
助かったよ!ありがとう!

430:デフォルトの名無しさん
07/02/04 09:09:06
今、Visual C++ 6.0 を使ってるのだが、開発環境をバージョンアップしようとしたら
どれを導入すればいいのだろう?

無料で配布されている Visual C++ 2005 Express は MFC は入ってないんですよね?

それとも、あと少し待って次のバージョンが出たときのほうがいいんでしょうかね。

431:デフォルトの名無しさん
07/02/04 09:26:03
>>430
そりゃおめ、vista上で動くモン買えや。
いま、XPでなにやら揃えるのは無駄でしょ?

432:デフォルトの名無しさん
07/02/04 11:30:15
IEのメニューの用に画面に収まりきらないメニューがある場合は
「>>」を表示し、「>>」を押せば残りのメニューが表示されるようにしたいのですが、
そういったコントロールがあるのでしょうか?
どなたかヒントだけでもわかる方おられましたら教えてやって下さい。

433:デフォルトの名無しさん
07/02/04 11:39:00
軍人や警官の袖に付いている山形の袖章のことをいうのだそうです(多分)。

434:デフォルトの名無しさん
07/02/04 12:05:06
USECHEVRONあたりで探せば?


435:432
07/02/04 12:31:54
>>434
「>>」はChevronって言うんですか用語自体知りませんでした。
Chevronでぐぐればすぐにでてきました。
教えていただかなければ数日ははまるとこでした、
ありがとうございます。

436:デフォルトの名無しさん
07/02/04 14:14:26
フランス車に詳しければ直ぐに判るんだがな。

437:デフォルトの名無しさん
07/02/04 22:58:24
CFont::CreateFontとかCFont::CreateFontIndirectって
CFont オブジェクトを使い終わったら、最初にデバイス コンテキストからフォントを選択して、それから、CFont オブジェクトを削除します。
ってあるけどデストラクタで解放してくれないの?

解放しないままアプリ終了したらリソースリークするのかな?

438:デフォルトの名無しさん
07/02/04 23:01:29
CClientDC::SelectObject
よばなきゃ問題ないのか???
よくわからん

439:デフォルトの名無しさん
07/02/04 23:06:49
エディットボックス内のフォントを変更すのみで
DCで直接使用しない場合は問題ないのか???

MSさんさっぱりわかりませんorz

440:デフォルトの名無しさん
07/02/04 23:19:29
SetFontで

441:デフォルトの名無しさん
07/02/05 00:11:26
>>437
デバイスコンテキストに選択されたままだと解放されないと思った。

442:デフォルトの名無しさん
07/02/05 17:27:27
CHtmlViewについてお聞きしたいのですが
URLリンク(www.microsoft.com)
ここを参考にしてタブではないブラウザを作成したのですがこの通りに記述しても
JAVAスクリプトで行っているブラウザのリサイズが正常に動きません。

テスト用に適当に選んだサイトですが
URLリンク(www3.ocn.ne.jp)
ここのsmall windowを押してもフレームのサイズが変更されません。
RecalcLayout等してもダメでした。メインフレームが正しくリサイズされる
方法をどなかた教えて頂けないでしょうか。

環境
VC6.0 WindowsXp SP2

443:デフォルトの名無しさん
07/02/05 20:47:25
|あいう |^|
|えおか| | |
| | |
| | |
5| | |
| | |
| リッチエディット   | |
| | |
| | |
10| | |
| | |
| | |
| | |
| | |
15|--------------------------|↓|

スクロールバー

こんな感じの画面を作ることになったのですが
右のスクロールバーと左の行数のコントロール?(何でもいい)で
同期をとりたいのですがどのようにしたらよいのでしょうか?
なにかヒントでもありましたらご教授をお願いいたします。
環境:VC++2005 MFC

444:デフォルトの名無しさん
07/02/06 01:38:15
すみません。CFileFind について、みなさんのお知恵を貸してください。
エディットボックスに入力したパスを CFileDialog で開く、という処理を作ってまして、
入力したパスの存在チェックを CFileFind で行っています。

ですが、C:\ や、\\hoge\ 等、ドライブのルートを指定した場合に存在を検出できず、
前回開いたフォルダがFileDialog で開かれてしまい、困っています。

どなたか良い方法をご存知でしたら、ご教授ください。
よろしくお願い致します。

445:デフォルトの名無しさん
07/02/06 02:55:00
単独で現れる\記号の数をカウントすればいいんじゃないかい
"\\"はReplaceで別の記号に置き換えるとかして、
その後で"\"が1個だけならルート

446:デフォルトの名無しさん
07/02/06 04:19:44
つか、そのまえになんでCFileFindってそんな厨仕様なの?
なんか意味あんじゃね?

447:デフォルトの名無しさん
07/02/06 06:07:07
試してないけどCFileDialogで存在しないパスは指定できないような気がするけど

448:デフォルトの名無しさん
07/02/06 06:14:37
ああそうか指定したパスをCFileDialogで開きたいのか

449:デフォルトの名無しさん
07/02/06 06:39:44
>>444
ルートディレクトリが検出されないのは、内部で呼び出しているAPI側(FindFirstFile)の仕様。
CFileFindの仕様としては書かれてないかも。

FindFirstFileの説明にはルートディレクトリの属性を取得するにはGetFileAttributesを使えと書いてある。

450:デフォルトの名無しさん
07/02/06 06:42:23
ところでみんなフルコントロールの拒否とかってどうやって判断してる?

451:デフォルトの名無しさん
07/02/08 17:40:42
メニューをoffice風にするため調べたら
”ツールボックスからメニューをペタペタ”をすればいいらしい
しかし、MFCを使わなければならないことが判明

win32アプリにツールボックスからメニューをペタペタはできない
Wwindowsフォームで作るとできる
しかしForm.h、Form.resxとか変なファイルが中身見ると分けわかんなくなってるしWinmainがないぞ
C++とMFCは別物なのか!!


2005express

452:デフォルトの名無しさん
07/02/08 18:10:06
>>451
それは.NET frameworkじゃね

453:デフォルトの名無しさん
07/02/08 18:12:30
知らないうちにC++/CLIを使っている。いかんこれはゲイツの罠だ。

454:デフォルトの名無しさん
07/02/12 00:31:01
初めて任されたツールが遂に完成シマスタ^^
予定では後一週間あるので連休明けはブラックボックステストと
ロゴの作成にかかりたいのですが、VC6 MFCのリソースエディータって
しょぼいですね(^^;フリーでお勧めのリソース編集ソフト知ってたら
教えてくださいオナガイシマス

455:デフォルトの名無しさん
07/02/12 03:21:06
>>454
ロゴの作成にリソースエディタってお前馬鹿じゃないのか?

456:デフォルトの名無しさん
07/02/12 08:22:50
いるんだよ、ソースコードもロゴ画像もIDEで編集しないと気がすまない馬鹿って奴が。

457:松井康明
07/02/12 10:05:18
>>456
バカバカ言ってないで教えてやれよ

458:デフォルトの名無しさん
07/02/12 10:22:31
ロゴの作成をMFCスレで質問するのは脳に異常があるんだろうな
進行が進まないうちに早めに治療を受けたほうがいいよ

459:デフォルトの名無しさん
07/02/12 11:40:34
>>457
教えるも何も、「画像を作る」って聞いたら藻前様は何を使うと仰るのですか?
#ふつー、画像編集ソフトを使うと思うのだが。

460:デフォルトの名無しさん
07/02/12 21:25:22
別にいいんじゃね、リソースエディタでも。センスがあれば。

461:デフォルトの名無しさん
07/02/13 05:43:02
>リソースエディタでロゴ作成業務 8H
やべぇw脳勃起してきたw

462:デフォルトの名無しさん
07/02/15 10:25:44
印刷プレビューをダイアログベースのプログラム(VC6.0)で実現するにはどうすればよいのでしょうか?
検索するとSDI/MDIのプログラムばかりで途方に暮れています。


463:デフォルトの名無しさん
07/02/15 11:57:02
MFCのソース見れ

464:デフォルトの名無しさん
07/02/15 12:47:54
印刷プレビューのアーキテクチャ
URLリンク(msdn2.microsoft.com)(VS.80).aspx

465:デフォルトの名無しさん
07/02/19 13:44:30
りえ子、結婚してくれ

466:465
07/02/19 14:17:23
自己解決しました


467:デフォルトの名無しさん
07/02/19 14:54:28
おめでとう

468:デフォルトの名無しさん
07/02/19 20:27:55
いや、うまくいったら、自己解決とは言わない気が…。


469:デフォルトの名無しさん
07/02/19 22:17:09
自己解決 = 脳内解決
だな

470:デフォルトの名無しさん
07/02/22 14:48:31
誰か、知っている方、教えてもらえませんか。
リストの表示で、拡張スタイルにLVS_EX_HEADERDRAGDROPを指定し
仮想リストビューでアイテムの表示を行っております。
そして、カラムのドラッグ&ドロップで順番を入れ替える事が出来るのですが、
順番を入れ替えると、カラムのアイテム表示が、新しい表示と古い表示の両方が
出てしまいます。なぜでしょう?
------------------------
Colum1 | Colum2 | Colum3
------------------------
1 | 2 | 3
1 | 2 | 3

カラムの順番を入れ替えて、幅を広げると
古い表示が出てくる。
------------------------
Colum1 | Colum3 | Colum2
------------------------
1 | 3 2 | 2
1 | 3 2 | 2


VS.2005でMFCをスタティックでリンクに設定しております。



471:デフォルトの名無しさん
07/02/22 15:02:59
123→132は判った。
123→312ではどうなる?

472:470
07/02/22 15:20:09
>>471
312ではColum3の表示が"3 1 2"となりました。


473:470
07/02/22 15:21:42
>>471
あ、言葉が足りませんでした。
Colum3のアイテム表示が"3 1 2"です。

474:デフォルトの名無しさん
07/02/22 15:53:06
なんとなく、メモリ管理が失敗している悪寒。

475:470
07/02/22 16:19:39
原因が判りました。
スタイルにLVS_OWNERDRAWFIXEDが指定されていました。
MFCのROWLIST サンプルを元に、変更を加えていったのですが、
CListViewExで、LVS_OWNERDRAWFIXEDが指定されておりました。
レスをしてくれた方がには、お礼申し上げます。

476:デフォルトの名無しさん
07/02/22 20:26:53
MFCを使って、できるだけ簡単にHTMLメールを
ダイアログベースで表示したいのですが、
どんな方法があるでしょうか?



477:デフォルトの名無しさん
07/02/22 21:13:27
もうちょっと仕様検討してから来てください

478:デフォルトの名無しさん
07/02/22 22:17:26
>>477
できるだけ簡単にできる方法に合わせて仕様を決めようかと思って。


479:デフォルトの名無しさん
07/02/22 22:51:31
メールを表示するソフトなんて聞いたことがない

480:デフォルトの名無しさん
07/02/23 10:17:31
HTMLを表示(レンダリング)するコントロールを探せ

481:デフォルトの名無しさん
07/02/23 10:19:12
よくあるペイントソフトのような複数の画像表示ウィンドウに
共通のパレットダイアログを持つようなプログラムを作ろうと考えています。
MDIで生成すると、例えばファイル→開くを選択すると
ドキュメント以外にビューも生成されて、ビューが持っているパレットダイアログ(モードレス)
までが複数生成されてしまいますが、これを阻止するにはどのようにすればよいのでしょうか?

482:デフォルトの名無しさん
07/02/23 10:26:24
パレットをビューに持たせてるのが間違い。

483:デフォルトの名無しさん
07/02/23 10:33:26
>>482
確かにおっしゃるとおりです。
ウィンドウを切り替えたときにパレットの内容をアクティブなウィンドウの
情報に変えたいので、そのあたりの情報などを管理できる部分にまとめようと思うのですが
この場合、パレットを持たせるのはMainFrameでしょうか?

484:デフォルトの名無しさん
07/02/23 21:47:33
すいません教えてください。
VC++6.0です。
ツールバーのボタンに対してプロパティからプロンプトという項目を設定すると実行時にボタンの説明文が出せますよね。
あれをダイアログのボタンやエディットボックスにも出したいのですがどうすればいいでしょうか。


485:デフォルトの名無しさん
07/02/23 21:54:39
つ CToolTipCtrl

486:484
07/02/23 22:23:14
即レスありがとうございます。
調べてみます。

487:デフォルトの名無しさん
07/02/26 13:49:06 BE:87345195-2BP(222)
>>483
CDialogBar

488:デフォルトの名無しさん
07/02/26 18:13:00
自分自身のProductVersion の読み出し方法は?

色々探したのですが、どうも自分自身のProductVersionを
読み出す方法が見つかりません。

自身の実行ファイルのフルパスを探し出し.... という方法は
見つけましたが、何だかなぁという感じで。

CString::LoadString のような感じで読み出す方法はないのでしょうか?


489:デフォルトの名無しさん
07/02/26 18:53:34
ストリングテーブルになかったか?

490:デフォルトの名無しさん
07/02/26 18:54:56
なんだ質問者が答えてるじゃないか
キチガイの独り言はやめほしいな

491:デフォルトの名無しさん
07/02/26 19:18:29
>>489
> ストリングテーブルになかったか?

ストリングテーブルには登録されてないよ。


492:デフォルトの名無しさん
07/02/26 19:19:07
>>490
> なんだ質問者が答えてるじゃないか
> キチガイの独り言はやめほしいな

CString::LoadString で読み出せるのか?
IDは、何を設定するの?


493:デフォルトの名無しさん
07/02/26 19:43:48
何だかなぁ

494:デフォルトの名無しさん
07/02/26 19:53:29
わざわざ教えてやっても何だかなぁと言われたら馬鹿だし

495:デフォルトの名無しさん
07/02/26 20:02:23
>>488
URLリンク(tgws.fromc.jp)

496:デフォルトの名無しさん
07/02/26 20:04:24
FindResourceから始めれば出来なくは無いな。

497:483
07/02/26 21:52:54
>>487
CDialogBarを利用してみました。ソースは以下の通りです。

(MainFrm.cpp)
if (!m_wndDlgBar.Create(this, IDD_DIALOG_HOGE,
CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR)){
TRACE0("ダイアログバーの作成に失敗しました。\n");
return -1;
}

しかし、ダイアログを移動するとダイアログのあった場所が再描画されません。
CBRS_ALIGN_TOPを指定しているせいでしょうか?
また、サイズがリソースで作成したものと変わっていたり(横いっぱいに広がっている。ALIGN_TOPの影響?)
しています。

URLリンク(www.alpha-net.ne.jp)
このようなドッキングされた状態の作成方法はいろいろ紹介されているのを確認しましたが、
通常のモーダレスダイアログのような振る舞いをさせる方法が分かりません。(任意の座標に表示させるとか)
どういった方法をそればいいのでしょうか?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch