■MFC相談室 mfc20d.d ..
[2ch|▼Menu]
97:デフォルトの名無しさん
09/01/05 13:55:33
>削除したらDeleteする
漏れにはここが理解できん。

98:デフォルトの名無しさん
09/01/05 13:56:34
MFCに触る以前にC++をまったく理解してないって様子がアリアリだな。

99:デフォルトの名無しさん
09/01/05 13:57:24
>>97
範囲を切り取ったよ!
でも、この範囲の情報をいらなくなったからユーザが削除したよ!
そうしたら、プログラム的にdeleteするべき?ってきいてるんだろ。
deleteと削除を区別して考えてるというか、ユーザ側とプログラムで別って事を自覚してるから正しい。


100:デフォルトの名無しさん
09/01/05 14:01:22
>>98
顔真っ赤だけど大丈夫?

C++からMFC来るとクラス削除しなくっても勝手に処理してくれたりで戸惑うのは当たり前だと思うのは俺だけか

101:デフォルトの名無しさん
09/01/05 14:06:32
>>100
顔真っ赤なのは、鏡に映ってる自分のことかぃ?(w

自分のコードで明示的にnewして作ったものを、MFCが内部で勝手に削除
するMFCの標準クラスって、具体的にどのクラスのことなのか1つでいい
から挙げてみてよ。


102:デフォルトの名無しさん
09/01/05 14:07:06
説明が下手なだけだな。

103:デフォルトの名無しさん
09/01/05 14:10:49
MFCにもCreateとかReleaseとかいうメンバ関数があんなにいっぱいあるというのにw

104:デフォルトの名無しさん
09/01/05 14:16:55
>>102
いわゆる、真性のコミュニケーション能力不足ってやつですね。

なんか理系全体のレベルが下がるとともに、年々新人プログラマの質も
下がっているような気がするのは、気のせいか?

>>103
メンバ関数のCreateやReleaseは、麻生読みするとnew/deleteになると
でも言うのかぃ?

予約語以外の関数名なんてコンパイラにとっちゃ、関数を個別に識別する
ための単なる記号でしかないのは、C++どころかCやアセンブラ、BASICでも
変わらん。C++から来たとか騙るな。

105:デフォルトの名無しさん
09/01/05 14:20:17
>>104
お前は何の話をしてるんだw

106:デフォルトの名無しさん
09/01/05 14:23:15
自分の世界に浸っているのでしょう。

つまりなにか? このスレは説明もろくにできない質問者と、
自分の世界に浸って周りを見ようともしない回答者と、
一部の傍観者によって構成されているのか?
# まぁそんなもんか。

107:デフォルトの名無しさん
09/01/05 14:24:51
>>101
CFrameWnd

108:名無し募集中。。。
09/01/05 14:35:34
CFrameWndというかCMultiDocTemplateあたり?

説明が下手な人は自分の考えを言葉に表現できないという事だと思うけど
コーディングってプログラム言語でプログラムしたい内容を表現するという事だから
(上司の、スレ住人の、CPUの、OSの、言語の)理解できる的確な表現をする事は重要な事だぜ

109:デフォルトの名無しさん
09/01/05 14:36:41
惜しい、そこは「言語」ではなく「コンパイラ」とすべきかと。

110:デフォルトの名無しさん
09/01/05 16:11:58
>>101はCFrameWndやCDocTemplateを知らなかったのか?

111:デフォルトの名無しさん
09/01/05 16:22:20
なぁ、>>101は図星だったからこんなに必死なん?

112:デフォルトの名無しさん
09/01/05 16:31:16
new/deleteや、クラスの生成/消滅でがたがた言ってるヴァカは、ただの屑。
それだけは真実。

113:デフォルトの名無しさん
09/01/05 17:07:53
MFCと関係ない質問はスルーが基本

114:デフォルトの名無しさん
09/01/05 17:23:26
親ウィンドウのクライアントエリアにある子ウィンドウがクリックされた時に
親ウィンドウでも処理をしたいんですが、どうしたらいいんでしょう?

フォーカスを無理やり親に渡してしまうと子ウィンドウ側での処理ができなくなってしまいますし。。。

と、APIの方に誤爆ってしまいましたがどなたかお知恵をお貸しくださいな

115:名無し募集中。。。
09/01/05 17:42:02
親ウィンドウってCMDIFrameWnd?子ウィンドウってCMDIChildWnd?
フォーカスを渡さないといけない処理ってどんな処理?

>>109
インタプリタもあるじゃない?と思ったけどMFCならコンパイラ限定か(チッ

116:デフォルトの名無しさん
09/01/05 17:53:59
>>115
子ウィンドウの移動をさせたいんですが、親ウィンドウはViewクラスで子ウィンドウはCEditになってます。


117:デフォルトの名無しさん
09/01/05 18:59:10
何でフォーカスが関係してくるのか理解不能

118:デフォルトの名無しさん
09/01/05 19:05:22
とどのつまり親(Viewとか)のPreTranslateMessageで解決する

119:デフォルトの名無しさん
09/01/05 19:31:59
>>117
キー入力がそっちに行っちゃってCtrl+Vとかも使えなくなったのでフォーカスかなぁと。



120:デフォルトの名無しさん
09/01/05 21:21:22
MFCのソース見てないけど
EditViewでツールバーやメニュー触ったあともフォーカスはeditに残ってるから
フォーカス戻す処理が入ってる気がする
仮にそうだったらEditViewじゃない普通のviewの場合はviewへフォーカスが戻るだろうね

121:デフォルトの名無しさん
09/01/05 21:39:14
リストコントロールで追加したアイテムが常に画面に見えるようにしたいのですが
これはどこが問題あるんでしょうか?スクロールバーは常に一番下になるんですが、画面が変わりません

m_List.InsertItem(m_List.GetItemCount(), mes);
SCROLLINFO si;
m_List.GetScrollInfo(SB_VERT, &si, SIF_ALL);
si.nPos = si.nMax;
m_List.SetScrollInfo(SB_VERT, &si);
m_List.RedrawWindow();

122:デフォルトの名無しさん
09/01/05 21:50:52
SetscrollInfo()ではなく、EnsureVisible()を使うのではないだろうか。

123:デフォルトの名無しさん
09/01/05 22:04:49
表示されるようになりました。1行で書けてしまいました。ありがとうです!

124:デフォルトの名無しさん
09/01/06 21:28:48
自前のウィンドウに影(ウィンドウの右と下が黒くなるやつ)を付ける方法を
教えて下され。

CWndクラスの中で下のように書くとタイトルバーもない四角いウィンドウがでるのですが、
これに影を付けたいのです。

CreateEx(
WS_EX_TOOLWINDOW,
lpszClassName,
NULL,
WS_POPUP | WS_VSCROLL,
0, 0, 100, 100,
NULL, NULL, NULL);


125:デフォルトの名無しさん
09/01/06 21:44:36
デスクトップに対する相対座標を取得して、そこからデスクトップに対してGDIを使って、ウインドウサイズに合わせて矩形を描画すればいいんじゃね?

126:デフォルトの名無しさん
09/01/06 22:05:23
フチに自分で色塗るだけ

127:デフォルトの名無しさん
09/01/06 22:18:51
>>124
GDIを使って描いてもいいけれど、もっと安直にウィンドウを重ねてもできるよ。

128:デフォルトの名無しさん
09/01/06 22:38:25
もしかしてCS_DROPSHADOWの事か?

129:デフォルトの名無しさん
09/01/07 00:00:29
MFC Feature Packでアプリ組むと、タイトルバーのフォントが、標準のものより
ちょっと小さくて読みにくいんだけど、これって、どこで修正できるん?
どこかのタイミングでフォントを設定すれば修正できるような気がするんだけど、
上手くいかない・・・orz
どなたか、わかる方、教えてplz

130:デフォルトの名無しさん
09/01/07 00:49:39
まだそんな名前だっけ
普通にSP1って呼んでるわ

131:デフォルトの名無しさん
09/01/07 13:22:30
>>128
すんません。いろいろ調べてはいたのですが
灯台下暗しでした。。。
CS_DROPSHADOWでやりたいことができました。

132:デフォルトの名無しさん
09/01/07 13:47:27
MFC(VS2005)からVBAの関数を呼び出す方法を知っている人いませんか?
ググってもなかなかみつからないので。。。
よろしくお願いします。

133:名無し募集中。。。
09/01/07 14:09:49
VS2008からDDEを使ってExcelに値を放り込んだり多少の操作をした事はあるけど
VBAの関数を呼ぶ方法はわからないな
VBAのどんな関数を呼びたいんだ? (または任意のマクロかな)

134:デフォルトの名無しさん
09/01/07 15:05:13
>>133
ExcelのVBEditorで作ったVBAの関数を呼びたいと思っています。
Excelに貼り付けたボタンを押すとその関数が呼び出されるんですが、
これをMFCで処理させたいと思っています。

なかなか難しいですかね?

135:デフォルトの名無しさん
09/01/07 15:15:24
こういうやつ?

追加し、MFC からオートメーションを使用した VBA マクロを実行する方法
URLリンク(support.microsoft.com)

136:デフォルトの名無しさん
09/01/07 15:22:52
>>135
日本語が。。。

でも、オートメーション使うとなにかできそうですね。

137:デフォルトの名無しさん
09/01/07 17:58:11
>>129
タイトルバーのフォントが変わるの? XPじゃ変わらんけど。

ちなみに、メニューバーのフォントは変わるのでシステムの設定を
チェックしてそれに合わせているんだが。

138:デフォルトの名無しさん
09/01/07 18:01:14
CDHTMLDialogのOnInitDialogでCreateExで動的生成したコントロールが、
スクロールバー等をクリックしても無反応です。

CDHTMLDialogで動的に生成したコントロールを有効にする方法は無いでしょうか?

139:デフォルトの名無しさん
09/01/07 19:06:25
CEditを本体から呼び出してエディットボックスを作成しているのですが、これの色を変更する場合って
CEditのHDCを取得して、SetTextColorではだめなんでしょうか?

140:デフォルトの名無しさん
09/01/07 20:19:18
つオンコントロールカラー

141:デフォルトの名無しさん
09/01/08 00:17:30
古いアプリのメンテのために昨日から初めてMFCに触れることになった者です。

ある比較的シンプルなWindowsアプリで、なぜかCPU使用率が異常に高いので
いろいろ試行錯誤しなかがら試してみると、どうもOnPaintのオーバライドで
ベースクラスのOnPaint(CframeWnd::OnPaint)を呼んでないことが原因らしいことが
わかったのですが(つまりオーバーライドの中でCframeWnd::OnPaintを呼んでやれば
CPU使用率の異常な上昇は起こらない)これって普通なんでしょうか?

なんかググってもオーバーライドの中でCframeWnd::OnPaint読んでるようなコードって
見かけないような気がするんですが……。


142:デフォルトの名無しさん
09/01/08 00:19:42
OnPaint で GetDC とかしてないか?
OnPaint では CPaintDC でデバイスコンテキストを作る必要がある。

あるいは、OnPaint で何もしていないか・・・。
何もしなくても CPaintDC を作る必要がある。

143:デフォルトの名無しさん
09/01/08 00:50:27
OnPaint() ではベースクラスの OnPaint() は呼ばない。
ベースクラスでは、Default()、つまりDefWindowProc() を呼んでいるだけだから。

144:デフォルトの名無しさん
09/01/08 00:52:34
DefWindowProc で
BeginPaint と EndPaint をしてるから
OnPaint で何もしていないなら
自前で CPaintDC 作るか
さもなくばベースクラスの OnPaint を呼ばなければいけない。

145:デフォルトの名無しさん
09/01/08 01:06:27
CPaintDC(BeginPaintとEndPaint)しないと無効領域がクリアされず
延々とWM_PAINTが生成されるんだっけか

146:デフォルトの名無しさん
09/01/08 01:36:29
無効領域がある限り永遠にWM_PAINT送り続けるからな。
一応メッセージの優先順位が低いから、それでもそれなりにアプリは動作するけど。

147:デフォルトの名無しさん
09/01/08 05:09:44
つまり、元のアプリは相当酷い代物ってことだな。

148:デフォルトの名無しさん
09/01/08 19:26:24
>>142-147
ありがとう。
ソースは会社なんで明日確認してみます。

>元のアプリは相当酷い代物ってことだな。
名前から意味がまったく読み取れない変数名やメソッド名とか、
一つのメソッドが平気で200行とかそれはもうw

149:デフォルトの名無しさん
09/01/08 21:41:46
子ウィンドウの座標(CPoint)を親ウィンドウの座標(CPoint)に変換したいんですが関数などはあるのでしょうか?

150:デフォルトの名無しさん
09/01/08 21:43:43
どういう意味だ?
デスクトップからの相対座標を、親ウィンドウの相対座標に変換するってことか?

151:デフォルトの名無しさん
09/01/08 21:44:50
Viewクラス内に派生クラスで作成したCEditクラスがいるんですが
このCEdit内をクリックされた時に親ウィンドウ側に座標を渡したいんです

152:デフォルトの名無しさん
09/01/08 22:10:12
GetCursorPosで取得したならスクリーン座標なので親でScreenToClient

153:デフォルトの名無しさん
09/01/08 22:20:47
GetCursorPosを行ったのではなく、CEditクラスに来たWM_LBUTTONDOWNのメッセージを処理したいんですよ。


154:デフォルトの名無しさん
09/01/08 22:23:01
応用力のない奴だな

155:デフォルトの名無しさん
09/01/08 22:27:07
つ MapWindowPoints

156:デフォルトの名無しさん
09/01/08 22:55:15
応用力があったらこんなところに来ません。

157:デフォルトの名無しさん
09/01/09 08:02:43
photoshopとかwordみたいにdrawの一部を拡大縮小したくて、SetViewportOrgとか使ってみたのですが
どうもキレイに行かなくて困ってます。
イイ解決法ってありますか?

158:デフォルトの名無しさん
09/01/09 10:12:41
MFCと関係ない質問はスルーの方向で

159:デフォルトの名無しさん
09/01/10 11:55:15
スクリーン座標をクライアント座標に変換した所、正しく変換された物から右下側に座標がずれてしまうのですが
これは、使い方がおかしいのでしょうか?

160:デフォルトの名無しさん
09/01/10 12:02:21
エスパーさーん

161:デフォルトの名無しさん
09/01/10 12:09:41
ScreenToClientでスクリーン座標をクライアント座標にしたらずれてるって話だろ?
別に意味がわからなくはないとおもうが・・・。

まぁ、俺には解決策はわからんけどね

162:デフォルトの名無しさん
09/01/10 14:04:57
・変換元座標がスクリーン座標でない。
・実はAPIのScreenToClientを使用しており、渡すHWNDが間違っている。
・"正しく変換された物"のほうがずれている。


163:デフォルトの名無しさん
09/01/10 15:33:57
非クライアント領域が計算に入ってないんだろうな

164:デフォルトの名無しさん
09/01/13 23:01:13
GetCurrentDirectoryより簡単な関数はありますか?

165:デフォルトの名無しさん
09/01/13 23:18:29
>>164
「簡単」の基準は?

166:デフォルトの名無しさん
09/01/13 23:24:58
MFCを使い ダイアログベースのプログラムを作成しています。
例えばダイアログ上にボタンを配置し 毎フレーム位置を変更させるような
プログラムを作成したいと考えています。
毎フレーム処理を行うようなコードはどのように実装すればよいのでしょうか?

167:デフォルトの名無しさん
09/01/13 23:28:08
そもそもフレームってどういう意味で言っているのか分からない
紙芝居でもダイアログ上に表示するのか?

168:デフォルトの名無しさん
09/01/13 23:38:06
>>167
返答ありがとうございます。
>紙芝居でもダイアログ上に表示するのか?
イメージに近いです1フレーム毎に処理を行えればと思っています。



169:デフォルトの名無しさん
09/01/13 23:43:46
フレームの定義が時間単位とかだと、タイマーイベントでも作ってダイアログのDC上に絵を描画とかか?
関係ない話だけど、今Windows7のペイントいじってみた
なんとなくリボンの良さ分かった木はするけど、絵心がないから個人であれ作るのは面倒だな

170:デフォルトの名無しさん
09/01/13 23:52:29
>>169
Timerを使わず
win32でいうところのメッセージループみたいな
所で独自のイベントを受け取って処理を行いたいんだけど
いまいちわからん。。。

リボンUIは確かに見た目は良いね

171:デフォルトの名無しさん
09/01/14 00:26:54
GDIにはフレームという概念は無いはず。
タイマーかなんかで一定時間毎に処理するしかないね。

172:デフォルトの名無しさん
09/01/14 01:39:59
やっぱりフレームがどういうものを想像しているのか分からないな
描画が必要なタイミングの単位と言うならOnDrawとかになるんだろうけど
一定周期じゃないもんな(アクティブになったときとか、リサイズされたときとか色々。。。)

173:デフォルトの名無しさん
09/01/14 10:09:35
MFCならOnIdleの出番か?

174:デフォルトの名無しさん
09/01/14 10:42:44
ティアリングの無い綺麗なアニメーションしたければWPF使えってんだ

175:デフォルトの名無しさん
09/01/14 18:16:00
CRectTrackerを使って画像内にドラッグで大きさ、位置が
変更可能な矩形を描画しようとしてるんですが、
矩形内の色が白になってしまって画像が上書きされた形になります。
枠だけ描画というのはどうやったらできるんでしょうか。

画像はrawで、OpenGLで描画されています。


176:デフォルトの名無しさん
09/01/14 18:24:56
>>175
コンストラクタでCRectTracker::hatchInsideを指定するとどうなる?
# OpenGLで描画したものってDCの範疇じゃないのかな?

177:175
09/01/14 18:55:08
>>176
斜線が入るだけで、白く塗りつぶされたままです。

178:デフォルトの名無しさん
09/01/14 19:52:53
エディットボックスでキー入力の入力方法を英語から日本語入力に自動的に切り替える方法を教えてください。


179:178
09/01/14 19:53:28
↑winXP+VC2005です。すいません


180:デフォルトの名無しさん
09/01/14 21:15:39
MFCにあったかな?
なければスレ違い

181:デフォルトの名無しさん
09/01/14 22:07:07
>>175
そもそもなんでOpenGLで描画したところにトラッキングしたいのか判らんが、
MFC側の問題じゃなくてOpenGL側の問題っぽいからOpenGLスレで聞いて味噌。

182:デフォルトの名無しさん
09/01/14 23:26:05
質問させてください。
今MFC VC2005を使いプログラムを組んでいるのですが、あるメソッド内でint型配列array[21]の中身をsetwindowtextでタイトルに表示させたいと思っています。
setwindow(_T(""))で、array[i]をどのように記述すれば表示できるようになるでしょうか。下らないかもしれませんがお願いします。

183:デフォルトの名無しさん
09/01/14 23:28:17
CString hoge;
hoge.format(_T("%d"), array[i]);
wnd.SetWindowText(hoge);

こんな感じかな

184:182
09/01/15 02:24:13
>>183さん
そういう書き方をするんですね、、無事上手くいきました。ありがとうございました!

185:175
09/01/15 02:48:28
>>181
今使ってるプログラムはもともと1年半くらい前の演習の時に先生から頂いたrawビューアで、
研究に使えそうだってことでその時のプログラムを改造しようとしてるんですが、
OpenGLは全く扱ったことがなくて(演習の時も処理部分しか触ってない)、
時間もないんで、OpenGLを勉強するより1から作り直した方が早いような気がしてきたんですが、
raw画像(320×320の輝度値のみのデータ)をMFCを使って表示させるには
ビットマップに変換するしかないのでしょうか。

186:名無し募集中。。。
09/01/15 03:19:54
輝度データをDIBに変換すれば良い
BMPはLoadImageでDIBのハンドルを得られるが
自分で変換する場合はBITMAPINFOにサイズなどをセットしてCreateDIBSectionを使って
ハンドルと輝度データを入れる領域を得る(ここまでMFCなし

187:175
09/01/15 11:33:23
>>186
アドバイスありがとうございます。
それで作ってみたいと思います。

188:デフォルトの名無しさん
09/01/16 17:33:57
MFC6.0の参考書見ながらこつこつやってるんだけど別に支障はない?
1999〜2001年に出版されたものなんだが

189:デフォルトの名無しさん
09/01/16 19:37:56
int iLength = m_Edit.LineLength(i)+1;
TCHAR *ptBuf = new TCHAR[iLength];
m_Edit.GetLine(i,ptBuf,iLength);
ptBuf[iLength]=0;
ar.WriteString(str);
delete[] ptBuf;
一行一行ファイルの保存させたいのでCEditの内容を取得して保存させるのに
上記の様なソースを書いたところdelete[]の所でエラーをはくのですがなぜでしょうか?

190:デフォルトの名無しさん
09/01/16 19:47:37
>>189
ptBuf[iLength]=0;

ptBuf[iLength-1]=0;

191:デフォルトの名無しさん
09/01/16 19:57:10
CWnd::GetWindowTextでCStringに纏めて取って、
CString::Tokenizeで分解したほうが手っ取り早くね?

192:デフォルトの名無しさん
09/01/16 20:45:37

  int  i, nLineCount;
  CString strText;
  CStringArray bufArray;

  nLineCount=m_Edit.GetLineCount();
  for (i=0;i < nLineCount;i++)
  {
    int len = m_Edit.LineLength(m_Edit.LineIndex(i));
    m_Edit.GetLine(i, strText.GetBuffer(len), len);
    strText.ReleaseBuffer(len);
    bufArray.Add(strText);
  }

  CStdioFile file;

  if(file.Open(..略..))
  {
    for (i=0;i <bufArray.GetSize();i++)
    {
      file.WriteString(bufArray.GetAt(i));
      file.WriteString(_T("\r\n"));
    }
    file.Close();
  }

とかでよくね?

193:デフォルトの名無しさん
09/01/16 21:25:28
CEdit::GetLine
戻り値
実際にコピーされたバイト数

戻り値使わないの?

194:デフォルトの名無しさん
09/01/17 00:00:50
MFCでデバイスコンテキストで使われているフォントの高さを取得する方法ってありますか?

195:デフォルトの名無しさん
09/01/17 00:05:43
GetTextExtent

196:デフォルトの名無しさん
09/01/17 03:07:01
>>193
ここの使用例をテキトーに書き直しただけだから、

URLリンク(msdn.microsoft.com)(VS.80).aspx

細かい事気にすんな。 ハゲるぞ。(もうハゲてるかもしれんけど)

197:デフォルトの名無しさん
09/01/17 04:18:10
GetLineの戻り値、、使わないなあ。 使いどころない。
>>193は、>>192でどう戻り値使うのだろうか?

198:デフォルトの名無しさん
09/01/17 09:07:51
>>194
GetTextMetrics

199:デフォルトの名無しさん
09/01/17 17:51:17
lineText..GetLine(iLine, strText.GetBuffer(iLength));
っていう風に関数を実行するとstrTextにその行が入る時と入らない時があるんですがなぜなんでしょうか?

200:デフォルトの名無しさん
09/01/17 17:57:30
ReleaseBuffer してるか?

201:デフォルトの名無しさん
09/01/17 18:01:19
行ってますし、デバッガでとめて一個一個通すと何故か全部入っていくんです。

202:デフォルトの名無しさん
09/01/17 18:08:02
>lineText..GetLine(iLine, strText.GetBuffer(iLength));
こんなコード、有り得ないだろ。

203:デフォルトの名無しさん
09/01/17 19:07:15
CEdit::GetLine(int nIndex, LPTSTR lpszBuffer)
だろ?EM_GETLINEのベタ実装なんだよな、これ。
昔から思っていたんだが、わざわざメソッドとして用意しておく必要性あるんだろうか。
普通バッファ長を指定できる方しか使わないと思うのだが。
わざわざこっちでバッファの先頭ワードにバッファ長代入とか暇人過ぎだろ。

204:デフォルトの名無しさん
09/01/17 21:11:51
2つあるうちの一見楽そうに見える方が実は大変ということか

205:デフォルトの名無しさん
09/01/18 15:22:20
>>199
>>203 が書いているように、引数が2つしかない CEdit::GetLine()を使う
時は、呼び出す前に、第二引数で渡すバッファの先頭に、バッファ長を
書いておく必要があるのに、それをやっていないからだろ?

  LPTSTR pBuf;

  pBuf=strText.GetBuffer(iLength);
  *((LPWORD)pBuf)=iLength;       // バッファ長をセット
  m_wndEditCtrl.GetLine(iLine,pBuf);
  strText.ReleaseBuffer(iLength);

自分でバッファ先頭にバッファ長をセットするのが面倒なら、引数が3つ
あるCEdit::GetLine()を使うことだ。

206:デフォルトの名無しさん
09/01/18 16:01:41
日付や時間を取得したいけどエラーがでてしまうんです・・・
内容は
Run-Time Check Failure #3 - The variable 'newtime' is being used without being initialized.

afx_msg void CMainWin::OnTime()
{
char str[80];
CTime Curtime = CTime::GetCurrentTime();
struct tm *newtime;

newtime = Curtime.GetLocalTm(newtime); //ここが問題
wsprintf(str,asctime(newtime));
str[strlen(str) - 1] = '\0';
MessageBox(str,"Time and Date");
}

URLリンク(msdn.microsoft.com)(VS.80).aspx
ここ見る限りじゃ間違いないと思うんだけどなあ・・・
指摘と改善お願いします。。。

207:デフォルトの名無しさん
09/01/18 16:57:35
>>206
突っ込みどころが大杉。釣りか?

C++やMFC以前に、ポインタも理解していないなら、C言語の基礎からやった
方がいいと思う。

MFCのサンプルは間違っているな。

  struct tm newtime;
  Curtime.GetLocalTm(&newtime);

でうまくいくだろう。

また、ワイド文字版のwsprintf()を使うなら「char str[80]」ではなく
「wchar_t str[80]」とすべき。MessageBoxもワイド版を使う。

> str[strlen(str) - 1] = '\0';

これもprintf()/wprintf()によって文字列末尾にNUL文字('\0')は付与され
ているから意味がないし、ワイド文字なら、strlen()ではなくwcslen()を
使うべき。

str[wcslen(str)-1] = L'\0';

第一、str[]がNUL文字で終端されていないと、strlen()/wcslen()は
文字列長さを判定できない。

208:デフォルトの名無しさん
09/01/18 17:08:05
>>207
MSのサンプル間違ってるとか悲しいわな

これ、一応参考書のサンプルなんですけど捨てたほうがいいでしょうか
まあ2001年に出版されたものなんですけどね

209:デフォルトの名無しさん
09/01/18 17:14:24
サンプルは間違っているとは言い切れないよ。
宣言と利用の間に、メモリ確保が隠されているかもしれないw

とは言え、2008用のページの方は訂正されているんだからそっちを見ればいい訳で。
URLリンク(msdn.microsoft.com)

210:デフォルトの名無しさん
09/01/18 17:22:43
CTime Curtime = CTime::GetCurrentTime();
tm newtime;
Curtime.GetLocalTm(&newtime);
wsprintf(str,asctime(&newtime));

でできました!
参考書って年代で仕様も変わるけど図書館にはこれしかなくて・・・^^;
なんか疑いにくいんですよね、参考書って
どうもありがとうございました

211:デフォルトの名無しさん
09/01/18 17:28:49
本に誤字脱字があるのは珍しいことじゃない

212:デフォルトの名無しさん
09/01/18 17:33:05
おかしいと思ったら複数調べるのがいい。

213:デフォルトの名無しさん
09/01/18 17:33:41
>>210
その参考書が何か知らんが、MSDNのサンプルをコピペしただけの悪書なんじゃないか?
いみじくも参考書を名乗るのなら、ちゃんと検証されたコードを載せるべきだと思うのだが。

214:デフォルトの名無しさん
09/01/18 17:37:35
>>213
えっと・・・
ハーバート・シルト/フランク・クロケット著 「標準講座 MFC6.0」だそうです
結構分厚いからコピペではないと思います
ver間での使用の違いを疑わなかった自分のミスです

215:デフォルトの名無しさん
09/01/18 17:40:25
いやこれ仕様の違いじゃなくてもともと間違ってるよ。
でもその本見る限り、コピペじゃなくて同じソースってことみたいね

216:デフォルトの名無しさん
09/01/18 17:44:41
ってサンプルソースがダウンロードできるから見てみたけど、

struct tm *newtime;
newtime = curtime.GetLocalTm();

これなら旧仕様で合法だな。


217:デフォルトの名無しさん
09/01/18 17:48:03
>>216を2008でコンパイルするとGetLocalTm()に引数がないことからエラーがでました
昔はよかった

218:デフォルトの名無しさん
09/01/18 17:50:03
まあそれはMSDNのほうでも、_SECURE_ATLを未定義にすればいいみたいだけどね。

219:デフォルトの名無しさん
09/01/18 17:50:40
>いいみたい
→いいと書いてるみたい

220:デフォルトの名無しさん
09/01/18 17:56:33
昔は引数にNULL(省略化)を渡すことで、オブジェクト内部のstruct tmの
ポインタを返す仕様だったけど、NULLポインタを渡すのを許可しなくなった
ってことでは?

オブジェクト内部のstruct tmのポインタを取得できると、直接データを
書き換えて隠蔽化の意味がなくなるから。

221:デフォルトの名無しさん
09/01/18 18:56:56
元のサンプルと全然違ってるし

222:デフォルトの名無しさん
09/01/18 19:33:49
サンプルコードなんて使い方の雰囲気を感じ取るだけのもんで
コピペするもんじゃねぇ。
自分のプログラムに組み込むときは、引数・戻り値の意味と動作を理解し
自分の頭でコードを書くべき。

223:デフォルトの名無しさん
09/01/18 20:41:17
サンプルコードをいじくりながら学ぶもんなんじゃねえの?
いじくる前に1回コピペするだろ

224:デフォルトの名無しさん
09/01/18 21:26:46
いじくるのは勝手だけど、自分が間違ったのを本のせいにしない。

225:デフォルトの名無しさん
09/01/18 22:59:29
>>207
wsprintf()ってワイド文字ではなくTCHARだけど。

226:デフォルトの名無しさん
09/01/18 23:02:26
TCHARは_tsprintfみたいな名前だろ?
wprintfはwcharのはず
プリプロセッサで切り替わるだけだし

227:デフォルトの名無しさん
09/01/18 23:05:43
wsprintfはWindowsのAPI
wprintfはprintfのワイド文字版

228:デフォルトの名無しさん
09/01/19 00:15:16
>>210
手元の2004年初版第6刷発行では>>216のコードになってるな

>>225-227
wsprintf()は環境によってマルチバイトかUNICODEだよね。
>>206のコードだとマルチバイト環境のコードならばcharは間違えというわけではない。

それと
str[strlen(str) - 1] = '\0';
ってのはasctime()が改行文字を付加するからそいつを取っ払うため。

まぁ、あんまりよろしくないコードとは思うけどね。

229:デフォルトの名無しさん
09/01/19 00:41:37
wsprintfとwprintfとswprintfは紛らわしすぎる

230:デフォルトの名無しさん
09/01/19 05:48:07
処理をCPU使用率30%を上限に制限して実行させるにはどうすればいいんでしょうか?
そんなことは可能なんですか?

231:デフォルトの名無しさん
09/01/19 08:47:51
なんでそんなことする必要があるのか疑問。
他のアプリの邪魔をしたくなければ、スレッドの優先順位を低くしとけばいいだけ。

232:デフォルトの名無しさん
09/01/19 08:53:15
>>230
25%上限でよければ、簡単だよw

233:デフォルトの名無しさん
09/01/19 09:23:00
>>232
Core2Duoですが簡単ですか?

234:デフォルトの名無しさん
09/01/19 09:25:08
惜しいな、Core2Duo単体なら上限は50%だ。

235:デフォルトの名無しさん
09/01/19 09:31:19
Core2Duo限定のソフトか!

236:デフォルトの名無しさん
09/01/19 10:31:14
いえ、Qのほうで

237:デフォルトの名無しさん
09/01/19 12:33:52
MFCと関係あるか?

238:デフォルトの名無しさん
09/01/19 14:54:00
誰ですか。勝手に話を進めないでくださいw
アプリに重い処理を乗せたくて起動者全員CPU30%とか10%づつシェアするプログラムを組み込みたいんです
制限かけないとずっと自分が使ってなくてもずっと100%で熱暴走が心配なのでCPU10%を提供に制限したいんです。
どうすればいいと思いますか?

239:デフォルトの名無しさん
09/01/19 15:36:17
MFCにそういうライブラリが存在しなければスレ違い

240:デフォルトの名無しさん
09/01/19 17:17:46
>>238
熱暴走が心配ってどんな環境だよ。
「起動者全員」とか「シェアする」とかサーバーアプリなの?
どうしても心配ならユーザー数に応じてSleepでもさせたら?

241:デフォルトの名無しさん
09/01/19 19:23:57
CPU使用率を求める処理でCPUを食うから無意味

242:デフォルトの名無しさん
09/01/19 20:09:19
>>241
えっ?

243:デフォルトの名無しさん
09/01/19 20:29:40
お前ら >>237 も >>239 も見えないフリか。

244:デフォルトの名無しさん
09/01/19 20:50:46
熱暴走については、昔の焼き鳥こさえてたAthlonの時代ならともかく、
今のCPUは温度が上がりすぎると勝手にクロックとか落とすので、特に問題ないな。
CPU利用率については、WindowsServerならプロセスがどれだけフル回転していようと、
一定時間毎に容赦なく他のプロセスに明け渡すから、無難なレスポンスが確保できそうかな、と。

245:デフォルトの名無しさん
09/01/20 06:57:04
優先度でいつでも明け渡せるとしても、気分的に窮屈な感じしませんか?
自分の作ったプログラムはいつも全力で走るんですが、CPU見てると常に20%ぐらいでなんかまわってたりするんですが
、タスクマネージャで確認してるだけなんですが、この%って一定時間内のCPU100%使用率ってことなんですか?
そうでないとしたら%制限の方法を教えてください!

246:デフォルトの名無しさん
09/01/20 07:08:05
>>240
thx!
今ってCPUというかハードの性能がすごくてほとんどの処理がすぐ終わって待機時間がすごくもったいない気がしたので
そういう部分だけの汎用的なCOMとかで自由に独自のソフトに組み込めたらよくないですか?
10%シェアでも100人いればパソコン10台分ですよね。フリーでそういうのあれば教えてください。
Sleepでどうやるかじっくり考えます。
どうもです

247:デフォルトの名無しさん
09/01/20 07:56:11
無駄。つーか、スレ違いだと。
そもそも>234辺りの理屈は判っているのだろうか。

248:デフォルトの名無しさん
09/01/20 10:08:04
スレ違いだと何度指摘されても話を続ける奴って何なの?
知的障害者なの?死ぬの?

249:デフォルトの名無しさん
09/01/20 18:56:45
ム板は初心者にとってスレチが紛らわしいと思うけどこれはわかるだろ、な?

250:デフォルトの名無しさん
09/01/21 08:26:16
どこで聞けばいいんでしょうか?
どうやって実現するかわからないのでターゲットのスレもわからないです。

251:デフォルトの名無しさん
09/01/21 09:10:06
>>250
>この板はプログラムを作る人のための板です。
>あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。


252:デフォルトの名無しさん
09/01/21 09:38:27
thx

253:デフォルトの名無しさん
09/01/22 08:41:42
MDIで一つのDocに複数のViewというのはなんとか判る。今回、
そのViewが一つ1枚とその他10枚が別のViewになる構成ってどうやるのがいいのだろう。
CMultiDocTemplateを11個AddDocTemplateすることになるのだろうか。
その場合、クラスを派生して10個にしておかないと10枚の区別がつかない気がするのだが。

ってことで、これから移動するからレスは夜になるが、誰かヒント頼む。

254:デフォルトの名無しさん
09/01/22 09:50:02
Viewクラスだけ異なるDocTemplate作ればよいのではないか?
たしか複数のAddDocTemplateをすると新規作成時にテンプレ選択ダイアログが出るようになるな

255:デフォルトの名無しさん
09/01/22 14:10:59
ドキュメントテンプレートはアイコン、メニュー、ツールバーみたいなリソース関係で
ドキュメントごとじゃなくてドキュメントタイプごとに違うリソース使えるようにする

256:253
09/01/23 00:42:41
今(帰って)きた。レスTHX。つーか、>253は出掛けとは言え酷いなぁw
結局、一つの必ず必要なViewだけドキュメントテンプレートにして、
他の10枚分は全部そのViewから必要に応じて開くようにしてしまった。
考えてみたら、新規作成ならテンプレート選択ダイアログが開くけど
ファイルオープンだとどうせ最初のテンプレートでしか開かないしね。
それとも選択する手段があるのかな?
# うーむ、今更真面目にMFCの勉強し直すのも面倒だなぁ……

257:デフォルトの名無しさん
09/01/23 10:35:20
同時に開く1個+10個が、常に同じファイル数でセットなのか、10個は
中身は異なるが同じクラスのオブジェクトなのか、そこらへんで全く
違ってくると思う。

開くファイルとビュー(ウィンドウ)を全てMDIのDoc-View構造に登録して
管理しなければならないかといえば、決してそうではない。

SDIだけど、ペイントブラシのように、開くのは1個の画像ファイルで、
一部を拡大表示するウィンドウを複数同時に表示できるなどというインター
フェースだって作れる。

例えばMDIベースでVisual Studio相当のアプリケーションを作成すると
して、独立した1個がプロジェクトファイル、残りのN個がプロジェクト
を構成するソース/ヘッダファイルだったとして、ソース/ヘッダファイル
はプロジェクトの一部としてだけでなく単独でも開ける。

プロジェクトの一部として開いたソース/ヘッダファイルは、プロジェクト
に相当するドキュメントクラスで管理することになると思う。ソース/ヘッダ
ファイルを単独で開いた場合、インターフェースに統一性を持たせるため、
一時的に無名のプロジェクトを作成し、それに管理させているような形に
なるのでは?

258:デフォルトの名無しさん
09/01/23 11:33:53
CHtmlViewをMDIで使いたいんですが、
このビューを単独でプロジェクトに追加して開くにはどうすればいいですか?
ドキュメントテンプレートでAddにすると、使わないのに.Docも作らなければいけないとおもうんですが。

259:デフォルトの名無しさん
09/01/23 13:07:32
>>258
クラスの追加もできない馬鹿は、MFCの参考書でも読んで勉強し直せ

260:デフォルトの名無しさん
09/01/23 13:28:44
もとからあるMDIViewにCHtmlViewを張り付けられなくないですか?
ビューを切り替えるだけのときオープンドキュしなきゃいけないので.Docもセットなのが嫌なんですが


261:デフォルトの名無しさん
09/01/23 13:50:47
>>260
Viewクラスの使い方ぐらい調べろ、阿呆が

262:名無し募集中。。。
09/01/23 14:25:44
使わないDocがあってもいいじゃない
m_pDocTemplate->OpenDocumentFile(NULL) が楽なんじゃないかなぁ

263:デフォルトの名無しさん
09/01/23 15:35:09
そんな書き方ができるんですね!ありがとうございます。
>>261
死ね

264:デフォルトの名無しさん
09/01/24 10:50:59
viewじゃないコントロールもあるよ

265:デフォルトの名無しさん
09/01/24 10:53:01
CDCクラスからウィンドウハンドル(hWnd)って取得できますかね?

266:デフォルトの名無しさん
09/01/24 11:33:18
つ CDC::GetWindow

267:デフォルトの名無しさん
09/01/24 11:34:22
AfxGetMainWnd()->GetSafeHwnd();

268:デフォルトの名無しさん
09/01/28 16:11:14
Visual Studio 2008 SP1にてMFCアプリケーションを作るんだけど、
ダイアログにも"視覚スタイルと色"を反映させたいのですが、
無理でしょうか?

"視覚スタイルと色"を反映させたSDIでも、
ダイアログ(CAboutDlg)だけが浮いたデザインの気がするので、
知ってる方が居られればご教授願いたいです。



269:デフォルトの名無しさん
09/01/31 00:02:52
MFCって今後衰退して、.NETがデファクトスタンダードになるんですか?
今更、MFCをやれなんて上長から言われたんだけど、MFCでガリガリ
かけるようになった頃にはVSから姿を消してたら淋しいな

270:デフォルトの名無しさん
09/01/31 00:05:27
少なくともMSは、数年前まではそのつもりだったんだろうな

271:デフォルトの名無しさん
09/01/31 02:02:34
MFCが消える頃に、やっとガリガリかける程度なら、
消えて当然のプログラマ。

272:デフォルトの名無しさん
09/01/31 02:49:03
>>269
触ってみたけど変わんない
俺、ツリーのドラッグアンドドロップが簡単にできるとか
リストの更新関連がうまくできるようになってるとかそういうの期待したけど
結局、全然改善されてないところがアフォだと思った

今ならノウハウや情報がそろってるMFCのがいいよ
.NETは糞面倒臭い上に情報少ない

んでMFCやってから.NET入っても同じところに気を配らないといけないのは
まったく同じなので情報が豊富なMFCから入ったほうがいいと思う

273:デフォルトの名無しさん
09/01/31 05:42:34
.NETの方が情報は豊富

274:デフォルトの名無しさん
09/01/31 08:47:27
MFCでやってたらいざとなったら素APIに逃げるからな
って.NETでもP/Invokeに逃げたりするか

275:デフォルトの名無しさん
09/01/31 16:12:58
時代はVB

276:デフォルトの名無しさん
09/01/31 16:18:59
工エエェェ(´д`)ェェエエ工工



277:デフォルトの名無しさん
09/02/01 03:21:56
というかC++/CLIで.NETは書きにくい
凄く汚くなる
C++/CLI単体は悪くないと思ってるけど

278:デフォルトの名無しさん
09/02/01 03:27:28
.NETを使わないならC++/CLIを使う必要があるのか?

279:デフォルトの名無しさん
09/02/01 16:47:36
CWinAppをCWinAppExに変えただけで、400KBから1800KBにexeファイルのサイズが大きくなった
MFCでかくなりすぎワロタ

280:デフォルトの名無しさん
09/02/01 17:11:55
さらにリソース追加で3Mバ・イ・ト!

281:デフォルトの名無しさん
09/02/01 21:00:50
スタティックリンクしてんのか?
ダイナミックリンクに直せよ

282:デフォルトの名無しさん
09/02/01 21:19:17
やだよばか

283:デフォルトの名無しさん
09/02/01 21:21:56
別にサイズなんかどうだっていいような気がするけどね
でかいとなんかヤバイの?

284:デフォルトの名無しさん
09/02/01 22:22:36
>>283
デカくてなにかいいの?

285:デフォルトの名無しさん
09/02/01 22:27:35
>>284
いや、勝手にでかくなるからさ

286:デフォルトの名無しさん
09/02/02 07:24:22
>>272
ツリーの(略)とかはWPFではできるよ
ただ、C++/CLIじゃWPF使えないからC++のコードはバッサリ捨てなきゃならないけどね…

287:デフォルトの名無しさん
09/02/02 20:33:41
はじめまして。
MFCのコレクションクラスにて質問があります。

MFCのコレクションクラスにCListとCByteArrayってのがあります。
これを使って、たとえば通信電文の様に可変長データをリストに置きたい場合

CList<CByteArray, &CByteArray>と書けば良いのでしょうか?
error C2955: 'CArray' : クラス テンプレート を使用するには テンプレート 引数リストが必要です
ってのが出て、どうしていいかわからないです。

有効な宣言の仕方があれば、教えていただきたいですが・・・・



288:デフォルトの名無しさん
09/02/02 21:12:11
>>287
そもそも&の位置が前後逆だな。
直したところでCByteArrayはoperator=の実装が無いからやっぱり駄目だけど。
MFC的には、CList<CByteArray*>って感じにポインタで持つしかないと思う。
これ以上はSTLの出番か?全然詳しくないから答えられないけど。

289:デフォルトの名無しさん
09/02/02 22:56:09
C++で扱いやすい新しいフレームワークを作って欲しいのが本音だな
.NETと住み分けて

290:デフォルトの名無しさん
09/02/02 23:11:43
WTLはそれなりに使いやすいだろメッセージハンドラもIDE上で追加できるし。
EEでは古いATLになっちゃうのが難だけどMFCじゃ使えないし。
eGUI++は使ったことないから判らないがstd::stringてのが嫌だな。

291:デフォルトの名無しさん
09/02/03 08:17:48
>>288
やっぱりSTLで組むしかないのですか・・・
がんばってみたいと思います。

ありがとうございます。

292:デフォルトの名無しさん
09/02/03 10:26:48
>>291
CByteArrayの派生クラスを定義して、そいつでoperator =を実装した上で、
CList<CMyByteArray, const &CMyByteArray>とすればいけると思う。


293:デフォルトの名無しさん
09/02/03 10:37:34
つーか、STL のコンテナではなく
MFC のコレクションを使うメリットって何だろう。

294:デフォルトの名無しさん
09/02/03 16:56:07
STLをリンクしなくて済む

295:デフォルトの名無しさん
09/02/03 17:52:53
CObject からの派生していること


296:デフォルトの名無しさん
09/02/03 21:35:34
MFCベースならMFCに統一したいっていうのはあるな

297:デフォルトの名無しさん
09/02/03 23:03:50
CListCtrlのアイコンモードで
ラベルを複数行表示させる方法教えてください

298:デフォルトの名無しさん
09/02/03 23:39:33
エクスプローラと同じだろ

299:デフォルトの名無しさん
09/02/03 23:52:35
>>298
ってことは2行までしか表示できないって事?
省略されずに複数行を表示はだめか・・・

300:デフォルトの名無しさん
09/02/04 03:09:18
>>293
デバッグ実行時にアサート出してくれる、とかMFC例外クラスのスローとか
ただ統一しないとめっちゃ不便

301:デフォルトの名無しさん
09/02/04 09:21:26
>>297
ラベルってヘッダコントロールのテキストのこと?

302:デフォルトの名無しさん
09/02/04 09:26:35
アイコンモードにヘッダコントロールはない!

303:デフォルトの名無しさん
09/02/04 13:27:48
アイコンラベルのワードラップかな?

304:デフォルトの名無しさん
09/02/04 20:35:39
今までEXEで作ってたのを、DLL化しようとしたけど
プロジェクト作り直すのに凄い苦労する。
なんかいい方法あるかね?

305:デフォルトの名無しさん
09/02/04 21:38:23
aaa

306:デフォルトの名無しさん
09/02/04 22:24:36
>>304
数個なら手で
たくさんあるならPowerShellスクリプトで設定を置換

307:デフォルトの名無しさん
09/02/04 23:26:08
>>301
>>303
エクスプローラで言うとファイル名が表示されている部分です
そこに複数行の文字を表示したいと思っています
char sz[] = "AAAAAAAAAAA\nBBBBBBBBBBB\nCCCCCC\nDDDD\nEEEEE"
みたいな感じ、実際表示されるのは
AAAAAAAAAAA
BBBBBBBBBBBCCCCCC...
と表示されてしまっています
アイコンを選択するとちゃんと意図した改行位置で表示されるけど
選択していない状態でも全部ちゃんと表示したいです

308:名無し募集中。。。
09/02/05 00:15:42
\nじゃなくて\015\012にして試してみて
と思ったけど、エクスプローラーでもファイル名が省略される場合があるから
自分で実装するしかないんじゃないかな

309:デフォルトの名無しさん
09/02/05 08:16:03
>>307
アイコン間隔を変える事である程度は回避できるかもしれないが、複数行で
無制限に表示すると、左右両側のアイコンのラベルや、下側のアイコンに
テキストがかぶる。

しかも、自動改行せず、1行の文字数(ラベル領域の横幅)や行数(ラベル領域
の高さ)を無制限にすると、ラベル領域が重なるのは隣接するアイコンだけ
では済まなくなる。

表示上はそれでも済むけど、常にそういう状態で表示すると、任意のアイ
コンやラベルをマウスでクリックできなくなるから、非選択時は省略表示
するというユーザインターフェースになっているんだと思う。

CViewやCScrollViewなりから、仕様を満足する派生クラスを自分で作る
しかないね。

310:デフォルトの名無しさん
09/02/05 18:49:10
2008のSP1入れてる人居たら教えてください。
SP1で初めてプログラム始めたのでSP1関係ないかもしれませんが、
テンプレートで作ったドッキングウィンドウの中にあるツールバーのボタンをコンボボックスに変えた後その中のエディット部分の文字列を
取り出すにはどうすればいいんでしょうか?

.h
CMFCToolBarComboBoxButton* m_ComboButton;

.cpp
// OnCreate
m_ComboButton = new CMFCToolBarComboBoxButton(ID_EDIT, GetCmdMgr()->GetCmdImage(ID_EDIT), CBS_DROPDOWN);
m_ToolBar.ReplaceButton(ID_BTN, *m_ComboButton);

// OnButtonClick
CString a;
a = m_ComboButton->GetText();

ヘルプにある手順と、サンプルも見て書きました。ボタンは置き換わるんですが、aが空なんです。GetEditからGetWindowなどもいろいろやりました
どうしても文字列を取得できません。お願いします!

311:デフォルトの名無しさん
09/02/05 19:10:33
>>310
サンプルのだけど
CMFCToolBarComboBoxButton* pSrcCombo = NULL;
CObList listButtons;
if (CMFCToolBar::GetCommandButtons(ID_DUMMY_SELECT_ACTIVE_CONFIGURATION, listButtons) > 0)
{
for (POSITION posCombo = listButtons.GetHeadPosition(); pSrcCombo == NULL && posCombo != NULL;)
{
CMFCToolBarComboBoxButton* pCombo = DYNAMIC_DOWNCAST(CMFCToolBarComboBoxButton, listButtons.GetNext(posCombo));

if (pCombo != NULL && CMFCToolBar::IsLastCommandFromButton(pCombo))
{
pSrcCombo = pCombo;
}
}
}
if (pSrcCombo != NULL)
{
ASSERT_VALID(pSrcCombo);

LPCTSTR lpszSelItem = pSrcCombo->GetItem();
CString strSelItem = (lpszSelItem == NULL) ? _T("") : lpszSelItem;
AfxMessageBox(strSelItem);
}
else
{
AfxMessageBox(_T("Show \"Set Active Configuration\" dialog...."));
}
}

312:デフォルトの名無しさん
09/02/05 21:14:49
調べてくれてありがとう。
一度LPCTSTRで取得してからCStringにしてみましたがだめでした。
コンボボックスのポインタのとり方もサンプルのように取得しましたが、だめでした。
CMFCToolBarComboBoxButtonのヘルプでGetTextは編集用のエディットのテキストを返すとあるのに
これで返ってこないのがつらいです。
MFCの常識から考えて何か根本的なところのアドバイスをお願いします!
他にツールバーに並んでるボタンはボタンのメンバで無効とかにできるので、ツールバー上のアイテムの取得は出来てると思うんです。


313:デフォルトの名無しさん
09/02/05 21:27:43
>>312
アドバイスでいいのか。
ちゃんとドキュメントを読んで勉強しろ。
理解力があれば解決できるだろ。


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

5400日前に更新/106 KB
担当:undef