■MFC相談室 mfc20d.dll■ at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
08/12/26 00:43:36
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc19d.dll■
スレリンク(tech板)

2:デフォルトの名無しさん
08/12/26 01:09:30
逃げ

3:デフォルトの名無しさん
08/12/26 05:21:39
乙!!!

ウィンドウに張り付けたコントロールをスクロールさせてるんですが、
ウィンドウ内のどこへでも行って他の描画を上書きしてしまいます。
このコントロールをウィンドウ領域を制限して移動させるにはどうすればいいんでしょうか?
コントロールの一部が見えている状態もあり得るので領域の制限がいいです。

CRgn rgn;
rgn.CleageRgn(表示領域);
CPaintDC dc(this);
dc.SelectObject(&rgn);

こうじゃないかと思ったんですが、
コントロールのポジション設定の前に書いても
ウィンドウのOnPaintの最初にも書いたのですが、だめでした。お願いします!

4:デフォルトの名無しさん
08/12/26 08:41:35
コミュニケーション能力不足って、本来こういう時に使うといいのかな?


5:デフォルトの名無しさん
08/12/26 09:10:40
>>3
何がやりたいのかさっぱりわかんない

6:デフォルトの名無しさん
08/12/26 10:40:19
ボタンコントロールをスクロールバーで位置をスクロールさせて使っている時に
ウィンドウ内でボタンコントロールを表示させたくない領域か、表示される領域を分けて作りたいんです。

7:デフォルトの名無しさん
08/12/26 12:03:02
ウィンドウの中に子ウィンドウを作成して、子ウィンドウの中にボタンを配置すればいい。
で、子ウィンドウそのものをスクロールさせる。
ボタンは子ウィンドウの中に存在するから、親ウィンドウの領域を侵すことはない。

8:7
08/12/26 12:13:54
>で、子ウィンドウそのものをスクロールさせる。
子ウィンドウの中でボタンをスクロールさせる の間違い。

9:デフォルトの名無しさん
08/12/26 23:01:00
なるほど、スタティックコントロールなどを張り付けてその中に置けばいいんですね。
きづかなかった・・・・・
お知恵を頂きありがとう!


10:デフォルトの名無しさん
08/12/27 00:31:41
>スタティックコントロールなどを張り付けて
ちゃんと>>7を読んだ?
スタティックコントロールの上にボタンを置いても、親から見ればどちらも子供だからボタンを動かすと親の領域を侵すぞ。
親の中に子ウィンドウを作って、さらにその中にボタンを置くんだよ。つまり、親から見ればボタンは孫。

「子ウィンドウの中にボタンを配置」とわざわざ書いたのは、そういうことなんだがな。

11:デフォルトの名無しさん
08/12/27 00:33:34
すごいな
俺は>>6の文章で何を言ってるのか意味がわかんねーよ

12:デフォルトの名無しさん
08/12/27 03:12:14
いえ、CStaticがCWnd派生になっているので、
CStaticの上ではなくて派生CStaticの中でボタンをCreateです。
わかってます大丈夫です。ありがとうございます。
まだコンパイルまで行きませんが、はみ出したらCWnd派生を置いてやります。どうもです。

13:デフォルトの名無しさん
08/12/27 08:35:47
ウィンドウのZオーダーとか親子関係とか、根本的なことを理解していなさ
そう。

たぶん次は、『スクロールさせるボタン以外、貼り付けたスタテイック
コントロールに重なっているダイアログ内のコントロールが上書きされ
たり、欠けてしまう』などと質問してくるに違いない。

14:デフォルトの名無しさん
08/12/27 09:02:32
すげえ理解力だな、その何言ってるのかわからない質問を予想するとは。

15:デフォルトの名無しさん
08/12/27 09:26:30
すごいです。なんでわかったんですか
スタティックコントロールをWS_VSCROLLで張り付けたんですが、スクロールバー操作が全くできません。
SS_NOTIFYを付けたんですがだめです。クリックDownは届いてるんです。
スタティックコントロールではなくリストコントロールを代わりに張り付けたら、リストコントロールは全部操作できるんです。
どういうことですか?

16:デフォルトの名無しさん
08/12/27 10:52:06
もうわからないのでスクロールバーは孫ではなく子にしました
お世話になりました。

17:デフォルトの名無しさん
08/12/27 11:04:00
>スクロールバーは孫ではなく子にしました
・・・・・・孫にしてどーする。^^;

18:デフォルトの名無しさん
08/12/27 11:51:13
ソフトバンク社長を馬鹿にするな。

19:デフォルトの名無しさん
08/12/27 11:53:57
次の質問は、スタティックを親にしてCreateしたボタンのクリックイベ
ント通知がダイアログに送られてこないかな?

20:デフォルトの名無しさん
08/12/27 12:21:55
俺が正義だ!

21:デフォルトの名無しさん
08/12/27 13:18:25
>ボタンのクリックイベント通知がダイアログに送られてこないかな?
そういうコードを子供に書くんだよ。孫から親には通知されないが、子から親には通知されるだろ?
孫から子、子から親に通知すれば、ちゃんと親元に届くじゃないか。(笑)

22:デフォルトの名無しさん
08/12/27 16:36:43
>>21
そういうメッセージの流れを承知していれば、

> もうわからないのでスクロールバーは孫ではなく子にしました

なんて話も出てこないのでは?

23:デフォルトの名無しさん
08/12/27 19:18:27
孫を意識しなきゃいけない設計って、結構問題あると思うぞ

24:デフォルトの名無しさん
08/12/27 20:16:07
MDIを終了するときに、子ウィンドウが終了する前にC〜Appで終了する処理をしたいのですが
ExitInstanceとかやデコンストラクタでは読み込めないっぽいんです。
どの関数を使ったらいいですか?


25:デフォルトの名無しさん
08/12/27 21:00:34
>>24
もう少しまともな質問の仕方ができるように、MFCを勉強してこい

26:デフォルトの名無しさん
08/12/27 21:29:48
>>24
デストラクタくらいはちゃんと覚えようぜ。 会話にならないから。

27:デフォルトの名無しさん
08/12/27 21:35:57
>MDIを終了するときに、子ウィンドウが終了する前にC〜Appで終了する処理をしたい
どんな「処理」をしたいのか、まったく想像できんのだが・・・。

28:デフォルトの名無しさん
08/12/27 21:57:16
初心者のくせにやりたいことをぼかすからだろ
具体的にこれがしたいって言えよな

29:デフォルトの名無しさん
08/12/28 08:38:34
COLORREF に 明るさのdouble値をかけるにどうすればいいんですか?
どう変化していくのか数値を眺めていたんですが3色同じ割合で変化してないのでどう書けばいいのかわからないです。


30:デフォルトの名無しさん
08/12/28 08:46:47
面倒臭がるな、でFA

31:デフォルトの名無しさん
08/12/28 08:48:33
UINT nBrightness; // 0〜255
COLORREF rgbRGB(255,0,0);

nBrightness=UINT(dblPercent*255.0/100.0);
  rgb=RGB(GetRValue(rgb)*nBrightness/255, \
      ,GetGValue(rgb)*nBrightness/255, \
      ,GetBValue(rgb)*nBrightness/255);

とか。

32:デフォルトの名無しさん
08/12/28 09:37:09
color = RGB(GetRValue(rgb) + (((255.0-(double)GetRValue(rgb))/255.0)*(bufLum/255.0)),
        GetGValue(rgb) + (((255.0-(double)GetGValue(rgb))/255.0)*(bufLum/255.0)),
        GetBValue(rgb) + (((255.0-(double)GetBValue(rgb))/255.0)*(bufLum/255.0)));

まったくうまくいきません
dblPercentはなんですか?

33:デフォルトの名無しさん
08/12/28 10:30:52
変に悩むくらいなら、shlwapiのColorAdjustLumaでも使っとけ。

34:デフォルトの名無しさん
08/12/28 11:53:56
あーわかったパーセント、double値を100倍したパーセントを各色に掛けてるのかthx

35:デフォルトの名無しさん
08/12/28 13:23:10
キーボードの入力でOnKeyDownを入れたんですが、Aを押した時はどう書けばいいんですか?
調べてもVK_Aとしか出てこないんですが、シンボルが無いといわれるんです

36:デフォルトの名無しさん
08/12/28 13:47:15
>>35
ただ単に 'A' と書けばいい。VK_Aを定義したいなら、 #define VK_A 'A' もしくは #define VK_A 0x41


37:デフォルトの名無しさん
08/12/28 13:47:25
もう馬鹿にかまうな。
こいつに素養なんか、かけらもない。

38:デフォルトの名無しさん
08/12/28 14:15:49
俺も最初見たときは迷った口。
昔からそこら辺の説明はまともに書いてないんだよなあ。

39:デフォルトの名無しさん
08/12/28 15:17:50
ありがとうございます。
VK_Aの情報多すぎますよね。なんでなくなったんだろ
トレースで出てきた値入れようか悩んだんですが、あまりにも原始的で・・・Aで良かったんですね。どうもです。
コントロールと同時押しも情報がなさすぎて困ってたんですがすごいのを思いつきました!今日は冴えてます。

BOOL ctrl_A = 0;
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){
 if( ctrl_A == 1 ){
  if( (nChar == 'A') || (nChar ==VK_CONTROL) ){
  }
 }
 if( (nChar == 'A') || (nChar ==VK_CONTROL) ){
  ctrl_A = 1;
 }
}

void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags){
 if( (nChar == 'A') || (nChar ==VK_CONTROL) ){
  ctrl_A = 0;
 }
}

40:デフォルトの名無しさん
08/12/28 15:40:39
「GetKeyState」を調べると幸せになれるかも

41:デフォルトの名無しさん
08/12/28 15:47:14
感動しました。1行で書けますねwありがとう^^

42:デフォルトの名無しさん
08/12/28 18:06:16
>>39
どーでもいいことだが、ハンガリアン記法を憶えると、あとからソース見直す時にラクになるぞ。
つうか、こっちがそれに慣れてるからそうじゃないコードを見ると読みにくくてかなわん。(笑)

>BOOL ctrl_A = 0;
BOOL は TRUE か FALSE だろ? みたいな、よ。

>if( ctrl_A == 1 ){
は、if ( ctrl_A ){ でいい。あくまで == を書きたいなら、if ( 1 == ctrl_A){ としたほうがいい。
理由はわかるだろ?

って、ここは C の初心者教室かよ・・・・。

43:デフォルトの名無しさん
08/12/28 18:10:39
>BOOL は TRUE か FALSE だろ? みたいな、よ。
今更何を……

>は、if ( ctrl_A ){ でいい。あくまで == を書きたいなら、if ( 1 == ctrl_A){ としたほうがいい。
勘弁してくれ。

ここはいつから三田某シンパのロートルが巣食うようになったんだ?

44:デフォルトの名無しさん
08/12/28 18:15:27
実にどうでもいい

45:デフォルトの名無しさん
08/12/28 18:52:05
BOOLは1と0と-1
TRUEとFALSEだけではない

46:デフォルトの名無しさん
08/12/28 18:54:55
C の初心者教室に帰って存分に熱い思いを語れ

47:24
08/12/28 20:20:46
えっと、MDI終了時に起動しているファイルパスを全て取得したいんですが


48:名無し募集中。。。
08/12/28 20:28:10
ファイルパス情報はDocが持っているんじゃないかな

49:デフォルトの名無しさん
08/12/28 21:10:10
メニューの最近使ったファイルリストのところを参考にすればよさそうな気がする

50:デフォルトの名無しさん
08/12/28 21:26:02
終了時に保存するか聞いてくるから
終了時に開いてるやつが編集されたか全部チェックしてるだろ

51:デフォルトの名無しさん
08/12/29 00:41:49
AfxGetApp()等でアプリケーション派生クラスのポインタを得るか、アプリケーション
派生クラスのメンバ関数内から、

(1) まず、CWinApp::GetFirstDocTemplatePosition()を呼んだ後で、
(2) CWinApp::GetNextDocTemplate()を呼んで、CDocTemplateクラスのポインタを得る。


(3) (2)で取得したCDocTemplateクラスのポインタに対して、まず
  CDocTemplate::GetFirstDocPosition()を呼んだ後、
(4) CDocTemplate::GetNextDocを呼んで、CDocumentのポインタを得る。

同じテンプレートでオープンされているか複数ドキュメントを全て取得
するには、(4)をNULLが返るまで繰り返す。

という流れ。

アプリケーションに複数のドキュメントテンプレートが存在する場合、(2)が
NULLを返すまで、それぞれのテンプレートのポインタに対して(3)〜(4)を繰り
返す。

この方法ならSDI/MDI関係ない。

各ドキュメントのパスは、CDocument::GetPathName()で取得。
ドキュメントが更新されているかどうかは、CDocument::IsModified()で取得。

52:デフォルトの名無しさん
08/12/30 04:18:01
GetAsyncKeyState のMFC版ってありますかね?

53:デフォルトの名無しさん
08/12/30 05:41:42
CRectで指定した領域を塗りつぶしではなくカラー補正のようなことをするにはどうすればいいんでしょうか
BitBltでパターンを使う2段階描画じゃなくて、直接変更するにはどうすればいいんでしょうか

54:デフォルトの名無しさん
08/12/30 06:30:44
すいません。マージコピーが用意されてました

55:47
08/12/30 19:18:07
>51
ありがとうございます!
えっと、仕組みは分かったのですが、終了するときExitInstanceやデストラクタでは
すでに子ウィンドウが閉じていて取得できません。どこに書けば取得できますでしょうか?

56:デフォルトの名無しさん
08/12/30 23:47:58
MFCはLinuxで使えないから糞ですね。
wxWidgetを使うことにします。

57:デフォルトの名無しさん
08/12/31 08:26:19
switchの中でswitchを書いたり、ifのtrueとelseで同じcase値をもったswitchを区別させるにはどうすればいいんですか?
ずっとバグと闘ってたんですが、どうも同じcase値があるのがいけないような気がするんです。この辺どうなんでしょうか

58:デフォルトの名無しさん
08/12/31 08:39:59
別の関数にわけたほうがいいと思うが……

59:デフォルトの名無しさん
08/12/31 09:07:19
ですよね・・・そうします。

60:デフォルトの名無しさん
08/12/31 10:36:30
誤爆?
ここMFCスレですよ

61:51
08/12/31 13:24:41
WM_CLOSE メッセージハンドラ = CMainFrame::OnClose() あたりで
よいのでわ?

62:デフォルトの名無しさん
08/12/31 15:00:45
でわ?

63:デフォルトの名無しさん
08/12/31 20:54:58
誰か教えてください
VS2008 SP1 で CFormView から派生の SDI の新規プロジェクトを作り、
何も変えずにビルドしたらいきなり CMainFrame::OnCreate が見つからないというエラーに遭遇しました
それで、MainFrame.h に CMainFrame::OnCreate の定義を追加したところ、ビルドはできたのですが、
その CMainFrame::OnCreate が呼ばれていないらしくて、ツールバーやドッキングウィンドウ等がまったく表示されません
SDI の CFormView でツールバーやドッキングウィンドウはどうやって表示すればいいですか?
むしろ VS2008 SP1 を使うのやめといたほうがいいですかね???

64:デフォルトの名無しさん
08/12/31 21:14:44
>>63
1.アプリケーションの種類でシングルドキュメントを選択
2.生成されたクラスで基本クラスにCFormViewを選択
3.完了ボタンを押す
4.印刷サポートが無いとの警告で「はい」を押す
5.F5でビルド-デバッグ実行

以上の操作で問題なく実行された。

65:デフォルトの名無しさん
08/12/31 21:21:02
>>64
レスありがとうございます
んー、使っているのが VS2008 Pro の評価版でこいつにSP1あてたせいでしょうかね?
製品版のVS2008 SP1だとこの問題が出ないのでしょうかね
とりあえず、Createのイベントを追加してOnCreateのコードをごっそり移動させたら動きました

66:デフォルトの名無しさん
09/01/01 10:18:59
>CFormView から派生の SDI の新規プロジェクト

これWizard内だけで完結させたのかな?
もしそうなら、そんなエラー出ることないと思うけどなあ。

67:デフォルトの名無しさん
09/01/02 05:11:13
>>63の件ですが、どうもMFCアプリケーションウィザードの5枚目で
初期ステータスバーのチェックを外すと発生するみたいです
(初期ステータスバーのチェックを外す以外は何も変更しなくても起きました)

68:デフォルトの名無しさん
09/01/03 01:08:51
>>67
検証してみたが、製品版のVS2008SP1(SE)でも発生した。
【対処法】は以下のとおり。

・MainFrm.cppのメッセージマップに、
    ON_WM_CREATE()
 の一行を追加する。
・MainFrm.h のメッセージハンドラ関数を宣言しているあたりに、
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 の一行を追加する。

これでビルドは可能になる。うーん、AppWizerd のバグかな。

69:デフォルトの名無しさん
09/01/03 02:43:18
どなたか教えてください。


VC2005のMFC、SDIを使いラジオボタンを配置しているのですが、選択ができず、チェックがいれられないでいます。

ラジオボタン自体はradiobutton.Create()で引数指定して貼り付けています。
ググってCwnd;;CheckRadioButton等を見つけたのですが、手をつけられず困っています。
もしよろしければどなたか助言の方お願いします。

70:デフォルトの名無しさん
09/01/03 03:02:14
ID を連続させる必要がある。
あと、「グループ」プロパティのチェックは
一連のラジオボタンの先頭のみにチェックを入れるんだったはず。

71:デフォルトの名無しさん
09/01/03 03:14:08
radiobutton.SetCheck( int nCheck);
詳細は CButton::SetCheck のヘルプ読めばわかる。

72:デフォルトの名無しさん
09/01/03 03:35:38
動的に作成したラジオボタンにプロパティなんぞない。
IDを連続させて、ON_CONTROL_RANGE() マクロで処理するんだよ。

73:デフォルトの名無しさん
09/01/03 11:19:24
ダイアログで右クリックでポップアップメニューを表示するようにしたのですが、
ON_UPDATE_COMMAND_UIを実装してもコールされず、メニューの有効無効やチェックなどが更新されません
ダイアログでON_UPDATE_COMMAND_UIの関数でメニューを更新する方法はありますか?


74:69
09/01/03 12:58:11
>>70-72様

アドバイスありがとうございます。

IDを連続など調べて頑張ってみます。

75:デフォルトの名無しさん
09/01/03 13:50:02
>>68
Microsoft Visual Studio 9.0\VC\VCWizards\AppWiz\MFC\Application\templates\1041にある
frame.h内の177行目と、frame.cppの内の47行目の
[!if DOCKING_TOOLBAR || TOOLBAR_STYLE_REBAR || RIBBON_TOOLBAR || STATUS_BAR]

[!if DOCKING_TOOLBAR || TOOLBAR_STYLE_REBAR || MENUBAR_TOOLBAR || RIBBON_TOOLBAR || STATUS_BAR]
にしておくと、次からうまくいくようになる。

ついでに、frame.cppの内の935行目の
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);

return [!output MAIN_FRAME_BASE_CLASS]::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
にしておくとドキュメントのないSDIのときに、ドッキングウインドウ関係のバグがなくなる。


76:デフォルトの名無しさん
09/01/03 14:44:38
複数の画像を表示させてドラッグで移動させるプログラムを書いていたのですが
複数選択をさせる時等はどうしたらいいんでしょう?


77:デフォルトの名無しさん
09/01/03 14:48:18
エクスプローラでも参考にしろ

78:デフォルトの名無しさん
09/01/03 15:15:53
出来るだけWindowsに近い直感的なUIを提供するのは基本だしな

79:デフォルトの名無しさん
09/01/03 16:32:54
Docが持ってる変数のみで何らかの処理を行いたい場合って
Doc側に関数を実装すればいいんですかね?

80:デフォルトの名無しさん
09/01/03 17:10:39
OK

81:デフォルトの名無しさん
09/01/03 17:16:43
>>73
俺は、WM_KICKIDLEが届いたら、
ツールバーにWM_IDLEUPDATECMDUIを送るようにした。

82:デフォルトの名無しさん
09/01/03 19:55:47
質問失礼します。

LoadImage関数を使いビットマップをマイピクチャから読み込もうとしているのですが、例外が出てしまい上手くいきません。
マイピクチャにあるビットマップを読み込もうとしており、フルパスで指定してみたいと思ったのですがフルパス指定の方法がいまいちわかりません。

どなたかアドバイスお願いします。

83:名無し募集中。。。
09/01/03 19:59:15
あけおめことよろ>all

>>82
どんな例外? ファイルが無くても例外は出ないんじゃないかと。
フルパス指定ができない? \を\\にしていないとかじゃない?

84:デフォルトの名無しさん
09/01/03 20:28:20
>>82
LoadImageはイメージリソースをロードする関数だろ。
フォルダにあるBMPを読むには、CreateFileなり、fopenなり、CImage::Load なりを使わなきゃ。

85:名無し募集中。。。
09/01/03 20:49:00
> LoadImageはイメージリソースをロードする関数だろ。
そうでもない
URLリンク(msdn.microsoft.com)
例えばこんな感じ(fnがフルパスのファイル名)
m_hBmp = (HBITMAP)LoadImage( NULL, fn, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR|LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_VGACOLOR )) ;


86:デフォルトの名無しさん
09/01/03 21:11:00
ほお、第2引数でパス名を指定できるんだ。ありがと。勉強になったよ。

87:デフォルトの名無しさん
09/01/03 23:07:54
>>81
ありがとうございます
できないかと思っていましたが、おかげさまで実装できました

88:82
09/01/04 19:22:05
>>83-85様

エスケープシーケンスも間違いでしたが、ちょこちょこ手直ししていたらなんとかなりました。
本当に助かりました。ありがとうございます!

89:デフォルトの名無しさん
09/01/05 09:26:20
何故この流れでいきなり「エスケープシーケンス」が?

90:デフォルトの名無しさん
09/01/05 11:04:46
newして作ったクラスを切り取りや削除した場合ってdeleteってやったほうがいいんですかね?


91:名無し募集中。。。
09/01/05 11:34:29
切り取りってなんぞ?
特に理由がない限りnewしたものはdeleteと相場が決まっている

92:デフォルトの名無しさん
09/01/05 12:04:04
MFCの中には、使用者にnewで作らせておいて、
delete thisで自殺するクラスもあるけどね。

93:デフォルトの名無しさん
09/01/05 12:51:52
>>91
クラス一つ一つに画像がついていて
画像を切り取る時にCRect構造体を用いてるんですよ。
で、このCRect構造体はnewで作っていて切り取りの情報を削除したらDeleteするべきなのかな。とおもいまして

94:デフォルトの名無しさん
09/01/05 13:28:58
>>93
すまん、何を言っているのか理解できないからソースを出してくれ。

95:名無し募集中。。。
09/01/05 13:31:51
>>93
newで作ったらdeleteしないといけない
でもnew-deleteを使わなくても良い別の方法があるような気がする(ローカル変数を使うとか

96:デフォルトの名無しさん
09/01/05 13:51:12
>>94
理解できないなら理解しなければいいんじゃね?

ようするに、画像の範囲を切り取る時にCRectでサイズと範囲を指定してるっていう話だろ?
newで作ったならDeleteするのはお約束。
戻り値ある関数でなら戻り値作らなきゃいけないのと一緒。


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
いやこれ仕様の違いじゃなくてもともと間違ってるよ。
でもその本見る限り、コピペじゃなくて同じソースってことみたいね


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

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