1read 100read
2012年07月プログラム98: MFC相談室 mfc22d.dll (304) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【C++】マイナーGUIツールキット (670)
Borlandにはやられた... (364)
【論理】Prolog【初心者】 (606)
TypeScript part1 (251)
【コボル】COBOL不要論【ただのDSLだよね?】 (338)
monazilla Part 6 (631)

MFC相談室 mfc22d.dll


1 :2011/09/15 〜 最終レス :2012/10/28
Microsoft Foundation Classライブラリ専用スレです。
■MFC相談室 mfc21d.dll■
http://hibari.2ch.net/test/read.cgi/tech/1250919279/l50
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(v=VS.100).aspx

2 :
MFC リファレンス(専ブラ用)
http://goo.gl/PQkAC

3 :
http://msdn.microsoft.com/ja-jp/library/d06h2x6e%28v=VS.100%29.aspx
まぁこれでもいけるんですけどね
そろそろしつこいから消えますねノシ

4 :
環境は VS2010 use MFC / Windows 7です。
DLL 側でグローバル変数をこのように定義しています
__declspec(dllexport) extern CString hoge[4];
EXE 側でその変数をこのように定義しています
__declspec(dllimport) CString hoge[4];
ビルドすると下記の警告が出てしまいます、そして実行すると、
「xxx.exe の 0x00fa807b でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xfffffff4 を読み込み中にアクセス違反が発生しました。」
経験的に、このエラーの場合アクセスバイオレーションの可能性が高いと思うのですが
グローバル変数のインポート、エクスポートの仕方は間違っていないでしょうか?
警告の内容:
warning C4273: 'hoge' : dll リンクが一貫していません。
'hoge' の前の定義を確認してください

5 :
>>4
日本語を勉強して理解できるようになったら、該当するエラーコードをドキュメントで調べる。
それができたら、該当エラーを修正する。
馬鹿はR。

6 :
VC6で作成したリソースファイルをVC10は利用できますか?

7 :
使えるけど馬鹿には無理かも

8 :
>>6
使える。
VisualStudio2010持ってないなら評価版落として試してみるといいよ。

9 :
ただし評価版はMFCが使えないんだけどな

10 :
>>9
使えないのはEEだろ、馬鹿が

11 :
Ouch!

12 :
試用期間があるだけ
MFCが使えないののはEEのほうじゃないのか

13 :
>>12
直前のレスすら読まない、おまえが一番使えない

14 :
別に使われてない

15 :
>>13
バカは黙れ

16 :
VS2005、SDIにてエクスプローラの詳細風の画面を作成中です。
ツリービューの方は表示できたのですが、リストビューが上手く表示できません。
Insertcolumnにてカラムを追加して、戻り値は正常なのですが、
追加後にgetcolumnすると戻り値がfalseになっている状態です。
解決方法んを教えていただけないでしょうか?

17 :
ソースを出さずにバグを指摘しろとエスパー募集

18 :
LVCOLUMNの中身を真面目に初期化していないとかじゃね?

19 :
16です。
ソースがなくて申し訳ないです。
下記のページ丸写しと考えて下さい。
http://www.g-ishihara.com/mfc_sd_03.htm
現状として、新しくプロジェクトを作成したときは上手くできたのですが、
分割ウインドウにしたらできませんでした。

20 :
>>19
ちまちまエラーの確認する位ならさっさと例外投げろや糞が、とか思ってしまった。
というか、GetColumnの呼び出しがそのページのどこにも無い件について。

21 :
Getcolumnに関しては、insert後にチェックとして私が追加しました。
ソースの変更はそこのみです。

22 :
で、cchTextMaxを設定しないまま、
フラグもそのままに呼び出した、と。

23 :
はい。
でも文字列を設定すれば必要ないのではないのですか?

24 :
最大文字数を負の値で指定されても対応に困るだろ?
デバッグ環境だと0xCCで埋められているだろうから、
-858993460文字にでもなってるんじゃねw

25 :
なるほど。
じゃあ新しくプロジェクトを作成して出来たのは
たまたまだったと言うことですね。

26 :
質問です。
VS2005で作ったダイアログベースのプログラムなんですが、
プログラム起動時に表示されるダイアログから新しい別の
ダイアログをDoModal()で表示させる際に、元のダイアログを
ShowWindow(SW_HIDE)で非表示にしています。
しかしこのプログラムをWindows7上で実行した場合、たとえ
ShowWindow(SW_HIDE)でいったんは非表示にできたとしても、
タスクバー上のプログラム名をクリックしたりした場合などに、
非表示にしたはずのダイアログが表示されてしまいます。
これを防いで非表示のままにする方法について、、あるいは、
システムがこのようにダイアログを勝手に表示させようとする
時にプログラム側で呼び出されているハンドらか何かについて、
お教えいただけないでしょうか。

27 :
>>26
7での動作は知らないけれど、
親を隠した状態で子をモーダルで出したいということであれば、
自分はよくSetWindowRgn()を使ってる。
SetWindowRgn(CreateRectRgn(0, 0, 0, 0), TRUE);
別のダイアログ.DoModal();
SetWindowRgn(NULL, TRUE);

28 :
>>27
その方法でできました。Windows7でも問題なく非表示を維持
できるようです。ありがとうございました。
関連して新しい質問なのですが、現在のダイアログから別の
ダイアログをDoModal()で表示したとき、その拡張スタイルに
WS_EX_APPWINDOWが指定されていれば、タスクバー上に
新しいダイアログのボタンが表示されるので、それを押して
最小化することができますが、しかし同時にタスクバー上の
ボタンが元ダイアログと新ダイアログとで別々に2つ表示されて
しまいます。
逆に、新ダイアログについてWS_EX_APPWINDOWの指定が
外れていれば、タスクバー上のボタンは元ダイアログのもの
1つだけしか表示されませんが、そのボタンを押しても最小化
することができなくなります。
タスクバー上のボタンを1つだけ表示させて、かつそのボタンを
押すことで新しいダイアログを最小化できる方法は無いでしょうか?
ModifyStyleExで元のダイアログのほうからWS_EX_APPWINDOWを
取り除くことも試してみましたが、うまく機能しませんでした。

29 :
CFrameWndExにドッキングしたCPaneDialog派生のウィンドウ
サイズを固定にすることってできますか?
CFrameWndExに固定サイズのダイアログバーが付けれれば他の
方法でも良いのですが。

30 :
アプリケーションを最小化して元に戻すときのイベントって何があるんでしょうか?
最小化したときにタスクバーをクリックしても
元のサイズに戻らなくなってしまう不具合が出てしまって
現在対処中です
元のサイズに戻すイベントがどれかわからずまったく修正のしようがない状態です

31 :
Googleで調べてみたところ
// 元のサイズに戻す
AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND, SC_RESTORE);
こんなコードがヒットしたので「RESTORE」でプロジェクトを検索したところ何もヒットしませんでした。

32 :
自分で追加しないとプロジェクトには何もないでしょう

33 :
>>30
WM_SIZEのwParam見れ

34 :
CStringに書式指定(%-04dとか%sとか)を含む文字列が含まれている場合、
その書式指定の部分だけを抽出した部分文字列を得る良い方法ってありますか?
自分でも、'%'が出てこないかFindして出てきた位置の次に最初に'd'や's'が出てくる位置を
それぞれ見つけてきて、その位置の間の長さが最も短くなる部分文字列を取ればいい、
というアルゴリズムは思いつきますが、書式指定子('d'や's')をきちんと網羅できてないと
バグの原因になるのではないかと思い、もしかすると同じコードを今後も流用する可能性が
あることを考えると、より安全確実に実施できる方法が関数として既に用意されているなら
それを利用したいと考えています。
何か良い方法があればご教授ください。

35 :
書式指定の部分はprintfなんかと同じ方法でいいと思うけど
何が問題なのか意味不明

36 :
えーと'%-04d'とかを、(引数が代入されないままの)そのままその部分だけ取得したい、ということです。

37 :
>>34
なんでそこだけを抽出したいの?
全ての書式指定子を網羅的に扱いたいならprintf()(の下請け)がやっている筈の構文解析をやるしかなくなるけど。
例えば、"%2$*1$lld"みたいなものも扱うのかって問題もあるし。

38 :
>>37
書式指定を含む文字列に引数を代入する場合、単に代入するだけじゃなくて
変換もかかるので、その引数が代入された後にどういう部分文字列になる
のかを見たい、というのが目的で、具体的には、書式指定を含む任意の
文字列とそこに代入されるべき可変個数引数が与えられた時に各引数の
代入された後の姿(部分文字列)をCStringArrayに格納したい、というのが
直接的にやりたいことです。そのために元の文字列の書式四手が現れる
位置(とその個数)を予め知っておきたい、ということです。

39 :
VC持ってるならCRTのソースが入ってるでしょ
解析すればよろし

40 :
>>38
なんだかよく判らんが、変換前と変換後を比較すればいいんじゃないのか?

41 :
それはそれで大変でしょ
変換前と変換後が一緒だったら検出出来ないし
"%s"が"%s"に置き換わったら無理

42 :
>>39
見てみたところ crt/src/output.c と crt/src/input.c に記述されている
_output と _input という関数が、それぞれprintf系とscanf系の実体の
ようで、いずれも愚直に1文字ずつポインタをずらし値をチェックしていき
書式指定を抽出しようとする泥臭い処理になってました。
ここのチェックの処理が関数として独立してくれていればそれを利用して
コードを書くこともできるんですが、現時点では残念ながらこれらの処理を
まるまるコピペして使うしかなさそうです。

43 :
VC2008でXPを使用しています。
MFCアプリでOnPaintで描画をしている以下の2つのケースで
ケースAの方だけ描画がされなくなります。
処理はちゃんと走っているのに
最初はちゃんとひょうじされているのに
回数を重ねるとまったく表示されなくなります。
いったいなぜなんでしょうか?同じプログラムに見えるのに。。。
ケースA
for(i = 0;i < 30;i++)
{
pFont = (CFont *)dc.SelectObject(&font);
dc.DrawText(...略);
dc.SelectObject(pFont);
}

ケースB
pFont = (CFont *)dc.SelectObject(&font);
for(i = 0;i < 30;i++)
{
dc.DrawText(...略);
}
dc.SelectObject(pFont);

44 :
再現する最小コードを貼るべき

45 :
>>28 モードレスダイアログ

46 :
>>43
フォントオブジェクトの寿命。

47 :
>最初はちゃんとひょうじされているのに
>回数を重ねるとまったく表示されなくなります。
GDIオブジェクトのリークが怪しい

48 :
>>43
なんか、そこだけじゃなくて、その外側に問題がありそうな希ガス。

49 :
VC2005のバグじゃないかと思うんだけど、OnBnSetfocusButtonに入ってこない。
再現させるプロジェクトの作成は簡単。
1.MFCアプリをダイアログベースで新規作成。
2.ダイアログにButton1を載せる。
3.そのButton1を右クリックで、「イベントハンドラの追加」→BN_SETFOCUSを選んで、「追加して編集」。
4.OnBnSetfocusButton1()ができるので、そこにMessageBoxでも書いておく。
これで実行するとダイアログ上には、OK、キャンセル、Button1の3つのボタンがあり、
タブキーでフォーカスを移動していってButton1がフォーカスされても、OnBnSetfocusButton1()の中の処理が実行されない。
これは明らかなバグだよね?
このバグはCButtonだけで、CEditの場合はうまくいくんだ。

50 :
>>49 BS_NOTIFYスタイルが必要。

51 :
>>50
おお!
感謝します!

52 :
>>51 リファレンスに記載済み。今度質問するときは確認しな。

53 :
BS_NOTIFY つけてる?

54 :
質問です。
ロケールを動的に変更する方法ってありますか?
例えばAfxMessageBox("・・・", MB_YESNO)を実行した際のダイアログ上の
ボタン表示を「Yes/No」だったり「はい/いいえ」だったりと変更したいのですが。

55 :
モードレスダイアログの場合、コンストラクタの「CWnd* pParent」って意味あります?
Createでも指定させるなら、このコンストラクタは無意味ですよね?

56 :
突然失礼します。
下記のコードを記述し、WindowsXP及びWindows7で同様のファイルを指定したところ
XPでは正常に動作しますが、7ではファイルを開くことができません。
どなたか原因が分かる方いらっしゃいましたらご教授お願いします。
If(!file.open(fn, CFile::modeRead|CFile::typeBinary)) return FALSE

57 :
とりあえずCFileExceptionを受け取るようにしてみたら?

58 :
>>55
モードレスダイアログの場合は、
引数無しのコンストラクタを使う決まりになっている。

59 :
>>57
ご返信ありがとうございます。
CFileExceptionの値は2になっており、どうやらファイルが存在しないというエラーのようです。
具体的には、フォルダダイアログからファイルを選択しているにも関わらず、m_strFileNameのフォルダ名部分が書き変わらないようなのです。
当該現象はXPでは発生しておりません。
なぜWindows7でのみ発生するのでしょうか。
使用環境は両OS共にVisual Studio2008です。
何か心当たりがある方、宜しくお願いします。


60 :
>>59
m_strFileNameって何?
ファイル名はCFileDialog::GetPathName()で取得したの?

61 :
>>58
ということは、ダイアログクラスを新規に作った際に勝手に用意される
「CWnd* pParent = NULL」のコンストラクタは、
モードレスダイアログとして使うクラスのときには、
消してしまって構わないということですよね。

62 :
CDialogを継承したCHogeDialogクラスがあります。
これは、リソースのID(IDD_HOGE)が指定されています。
ダイアログリソースの中には、IDOK IDCANCEL IDC_HOGELIST(List Control) の3つがあります
変数の追加にて、IDC_HOGELISTに関しては m_listCtrl を指定しました。
CHogeDialog dialog(this);
// この辺りに、 dialog.m_listCtrl.InsertItem のようなことをしたいのですが、
// これだと Debug Assertion Failed! と言われてしまいます。
dialog.DoModal();
ダイアログを表示する前にIDC_HOGELISTにアクセスしたり内容を追加するにはどうすればいいでしょうか?
よろしくお願いします。

63 :
>>62
モーダルダイアログとして使う以上、コントロールが作られるのはDoModalのタイミング。
アクセサ経由等でメンバ変数に予め内容を入れておいて、
WM_INITDIALOGのタイミングで生成されたコントロールにセットするのが一般的かと。

64 :
>>63
動かない理由、納得しました。
クラスに独自の変数を持たせて、
クラスの内部からWM_INITDIALOG時にそのデータを反映させることで対応しようと思います。
適切な助言、どうもありがとうございました。

65 :
ウィザード生成したMFCアプリケーションについてです。
他はいじらずにCMainFrameにて、OnCreateの末端辺りにDragAcceptFiles();を追加して、
デバッグ時にファイルをアプリケーションにドラッグ&ドロップした時に
Debug Assertion Failed!と表示されて落ちてしまいます。
その時には、下のような記述があります。
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\appui.cpp Line:88
ドラッグドロップに対応したいのに、エラーで落ちてしまっています。
このエラーの対処法ご存じでしたら教えてください。

66 :
>>65
Document-Viewを使わないで生成するとそうなるみたいだな。
既定の流れだとDocument-Viewありきな作りみたいだから、
自前のWM_DROPFILESハンドラを書くのが一番手っ取り早い。
今回は偶々直ぐ判ったけど、VSのバージョンやウィザードでの設定で
生成されるコードが大分変わるから、次からは質問時に一緒に書いておいた方が良いよ。

67 :
>>66
現状での不具合のようなものなのですね。
OnDropFiles(HDROP hDropInfo)にて、
CFrameWndEx::OnDropFiles(hDropInfo); を呼ぶ代わりに
DragFinish(hDropInfo); を呼ぶことで対処したいと思います。
それと、次回から環境を書くようにします。
どうもありがとうございました。

68 :
>>65
落ちているのではなく、アサートに引っかかっているのだから、
画面に書かれているように「再試行」を押せば一発で原因がわかるよ。

69 :
出席管理のプログラム作ったんですが何か使いにくい・・・
研究室で使うように作ったのですが他に足した方が良い所とかありますか?
あと、年間を通して1つのCVCデータで管理したいのですが、どうやったらいいですか?
VC2005でXPを使用しています。
"shine90271.zip [施錠中] よろしく"って書いてあるのです。
DLKey:0309
URL:http://up.shinetworks.net/cgi-bin/snup/upload.html
個人情報とか大学名とかはスルーして貰えると嬉しいです。

70 :
CSVです。スイマセン

71 :
>>69
一画面に色々機能を詰め込みすぎだ。入退出と管理の画面を分けよう。
名簿リストとか入退室記録は、起動・終了時に決まったファイルに読み書きすれば十分じゃないか?
本当の所はコードを一から書き直したい、というか.NETに移植してしまいたい位だけどw

72 :
ファイルとかCFileとかで読めますが
Excelファイルとかどうやったら読めますか?
シートの中のデータ読みたいんですがむりですか?
MFCは2008を使ってます

73 :
COM使えば

74 :
COMって何ですか?
MFCでできますか?

75 :
かなりの初心者質問なのですが、
MFCのボタンにBitmapを貼り付けるにはどうすれば
いいのでしょうか?Iconはうまく行ったのですがBitmapだとうまく行きませんでした。
したいこと。リソースからBitmapをボタンの中央に張りつける。
できなかったコード:
[ヘッダ]
public:
 HBITMAP m_hBmp;
[cpp]

m_hBmp = (HBITMAP)::LoadBitmap( AfxGetApp()->m_hInstance,
MAKEINTRESOURCE(IDB_BITMAP1) );
cBtnRec.SetBitmap(m_hBmp);

76 :
すでにMFCにクラスが用意されてるはずだから
それ使うかソース見ればいい

77 :
>>72
http://msdn.microsoft.com/ja-jp/library/fe06teee(v=VS.90).aspx
ここら辺を参考にすれば良いよ。
「Excel MFC」で検索した方が手っ取り早いとは思うけど。

78 :
CMainFrame::OnCreate()内で、
ModifyStyle(WS_CAPTION,0);を呼んでタイトルバーを削除してるんですが。
この状態でウィンドウを最大化すると、
全画面表示のような状態になってしまいます
(タスクバーの領域までウィンドウが拡大される)。
通常の最大化状態にするポイントなどご存知でしたら教えてください。
よろしくお願いします。

79 :
>>78
OnGetMinMaxInfo()で出来ないかな?

80 :
>>79
早速の返信ありがとうございます。
WM_GETMINMAXINFOというメッセージがあったんですね。
Mから始まるメッセージで探してたので盲点でした。
ちょっと試行錯誤してみます。

81 :
プライマリモニタだけならこんな感じで動きました。
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
CRect workArea;
::SystemParametersInfo( SPI_GETWORKAREA, 0, &workArea, 0 );
const int BORDER_WIDTH = 3;//境界線の幅
lpMMI->ptMaxSize.x = workArea.Width() + BORDER_WIDTH*2;
lpMMI->ptMaxSize.y = workArea.Height() + BORDER_WIDTH*2;
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
でもセカンダリモニタだとうまくいかないんですよね。
そもそもセカンダリモニタだとlpMMI->ptMaxSizeの設定が効いてこないんですよね。。。
lpMMI->ptMaxSize.x = 100;とか直接値を指定すると効くみたいなんですけど。

82 :
#include <MultiMon.h>
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
CRect windowRect;
GetWindowRect( windowRect );
HMONITOR h = ::MonitorFromPoint( windowRect.TopLeft(), MONITOR_DEFAULTTONEAREST );
MONITORINFO info;
info.cbSize = sizeof( MONITORINFO );
::GetMonitorInfo( h, &info );
CRect workArea = info.rcWork;
const int BORDER_WIDTH = 3;//境界線の幅
lpMMI->ptMaxSize.x = workArea.Width() + BORDER_WIDTH*2;
lpMMI->ptMaxSize.y = workArea.Height() + BORDER_WIDTH*2;
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
セカンダリモニタのワークエリアを取得して設定もしてみたんですけど、
lpMMI->ptMaxSizeの設定がそもそも効いてこないんですよね。
何か気づいた点がありましたらご指摘いただきたいと思います。

83 :
lpMMI->ptMaxSizeではなくlpMMI->ptMaxTrackSizeの方に値を設定したらそれらしく動作しました。
lpMMI->ptMaxTrackSize.x = workArea.Width() + BORDER_WIDTH*2;
lpMMI->ptMaxTrackSize.y = workArea.Height() + BORDER_WIDTH*2;
気持ち的には、ptMaxSizeの方に設定して動いてほしいんですけど、
とりあえずゴリゴリ書いてけば動きそうです。
やりたいことに対して処理が若干複雑な気もしますが、こんなもんですかね〜w

84 :
ちょっと気になったんで、ご意見伺いたいんですけど。
CRect::PtInRect()って右辺上と下辺上の点は内部とみなされないんですけど、どうしてこういう仕様なんですかね?
自分的には右辺上も下辺上も内部とみなしてくれた方が使い易いんですけど。
何か合理的な理由ってありそうですか?

85 :
>>84
RECTは基本的に右端と下端を含まない範囲を表しているから。
辺の差がそのまま幅や高さになるから、案外こっちの方が便利。

86 :
うーむ
CRect r( 0, 0, 100, 100 );だと実際は101ピクセルずつですけど
r.Size();するとサイズは100ずつですもんね。。。
配列のサイズと、有効インデックスと同じような考え方かなぁ?
でも、実際にFrameRect();とかすると右端と下端も描画されるしなぁ
(実はここが引っ掛かりポイントかな。実際に描画されてるのに内部と判定されない。)
やっぱり、それなりに理由は有りそうですけど、まだすっきり理解できてこないなぁ

87 :
いや、ちゃんと確かめないで書き込んでしまった
FrameRect();は右端と下端を描画していないようです
これで全部辻褄が合ってるのかなぁ?
もうちょっと自分で考えを整理してみます。

88 :
>>85
一人で書き込んでばかりですみませんがw
問題点というか、混乱してた原因が、
CRect::PtInRect()ではなくてCRect::BottomRight()で
混乱してたことが分かりました。
RECTの仕様としては、右端・下端を含まないのが正しそうですね。
それで、
CRect::TopLeft()は、RECT内の有効な点として使えるのに、
CRect::BottomRight()は、RECT内に含まれない右下の点を返すので、
これを使ってちょっと色々やってたので混乱してしまったようです。
お騒がせしました。
でも、RECTの仕様もすっきり分かってきたので良かったです。
ありがとうございました。

89 :
Windows1の頃からの仕様だな。

90 :
left, top, width, heightの方が分かりやすいよな
POINT二つ分とかにはできなくなるが、そもそもそれがおかしいわけで

91 :
CFileFindについてですが、
MSDNではIsDirectoryなどの属性を調べるメンバはすべて
FindNextFileを少なくとも1回は呼んでから使えと書いてあるんですが、
これって一番目のファイル(FindFirstFileで検索したファイル)は属性を調べられないってことでしょうか?
実際に試すとそんなことも無いような気がしておりまして、
とても気になっております。

92 :
>>91
CFileFind.FindFileは、内部的には一番目のファイル情報を取得しているけど、
実は、次のCFileFind.FindNextFileを呼び出した時に、その情報が参照できるように細工してある。
詳しくはMFCのソースを見たほうが早いかと。

93 :
>>92
ソース見てみました。難しくてなんとなく分かった程度ですが
なんでこんな仕様になってるんだろう?と思いましたが、
ひとつ解決してすっきりしました。ありがとうございました。

94 :
VS2010 MFC / Windows 7/32bit です。
MSDN 方法 : リソースを追加または削除する
http://msdn.microsoft.com/ja-jp/library/3bka19x4.aspx
参考にリソースのインポートを行うのですができません。
リソースビュー→Toolbar→右クリック→リソースの追加→インポート→予めエクスポートしておいたbmp ファイルを選択
Bitmap ファイルが表示されます。
その後、当該bmpファイルとIDを関連付けて、リソースビューのToolbarタブの配下に登録したいのですが、どうすればいいのでしょうか?
また、やり方が間違っているならば、正しいリソースのインポート方法を教えて下さい。

95 :
環境:VS10 MFC MDI
MDI にダイアログをモードレスダイアログを追加しました
ドキュメントクラスのデータをダイアログで使いたいのですが、
CxxxDoc* pDoc = dynamic_cast<CxxxDoc*>(((CFrameWnd* )AfxGetMainWnd())->GetActiveDocument());
これだと、pDocがNULL で取得できません、どうしたらいいでしょうか。

96 :
☓MDI にダイアログをモードレスダイアログを追加しました
○MDI にモードレスダイアログを追加しました

97 :
>>95-96
もう見ていないかもしれんが、呼ぶ場所による。
メインのフレームウィンドウが生成されていな時点で、AfxGetMainWnd()
を呼ぶとNULLが返されるし、SDIと違ってMDIの場合は何もドキュメントを
開いていなければやっぱりNULLが返される。
前者は、例えばモーダレスダイアログ(CMyDialog)のインスタンスが、アプリ
ケーションクラス(CMyApp)のメンバとして定義して、CMyDialogのコンスト
ラクタ内では、まだドキュメントは開かれていないので、ポインタは取得
できない。(NULLが返される)
あと、MDIだと、AfxGetMainWnd()のキャストは(CFrameWnd *)ではなく、
(CMDIFrameWnd *)でなければならない。

98 :
CEditのオブジェクトをCWndのポインタでdeleteしても問題ない(=メモリリークなどは発生しない)のでしょうか?
教えてください。
------------------------------------
// エディットボックス構築
CWnd* pEdit = new CEdit();
pEdit->Create(ES_LEFT| WS_VISIBLE | WS_BORDER, rect, this, IDC_EDIT5);
// エディットボックス削除
delete pEdit;
------------------------------------


99 :
今でもMFCは花形ですか?
勉強する価値はありますか?

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
電卓作る (223)
【bzr】Bazaarでバージョン管理 Rev 3 (958)
【QBASIC互換!?】FreeBasic【GPL】 (512)
C++11/C++1y 16 (225)
だめです! HSP厨は絶対に犯罪です。 (946)
【入門】Common Lisp その9【質問よろず】 (630)
--log9.info------------------
Windowsストア 1店目 (493)
ここだけ1995年11月23日 OSR2 (692)
WindowsXPを使い続けるよ Part2 (618)
【マジレス】超初心者の質問に答えるスレ139【エスパー】 (827)
Windows 8 不具合スレ (690)
Windows 7/8 Enterprise Part5 (837)
Outlook.com総合スレ (369)
Sleipnir Part271 (301)
■□ Windows Vista 169 □■ (881)
Jane スキン晒しスレ Part15【萌専用】 (398)
圏外男 無知ライター西川和久 (708)
窓遣いは Mac OS Xをどう見るか【第87ラウンド】 (821)
Windows 8 動作報告スレ (384)
【質問】DELL版のWindowsXPのOSのCDについて 2 (921)
【IE10】Windows Internet Explorer 10 Part1 (689)
WindowsRTについて「それはできない」で答えるスレ (538)
--log55.com------------------
フィリピンで撞いたときの体験談を語れ
【知識だけ】上達しねえよ!第3打【一人前】
【あんまり】ビリヤードのハンデ【意味ねぇ】
■■ 超辺境、超渋台のビリヤード場 ■■
ビリヤード漫画を語るスレ
○●そんなことよりビリヤードしよーぜ●○
【9ボール】最高いくつ入った?【ブレイク】
【周】激しく応援するスレ【萌萌】