2013年17プログラム139: MFC相談室 mfc22d.dll (360)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
GCCについて part10 (354)
プログラム関係の雑誌について (230)
C++相談室 part104 (889)
スレを勃てるまでもないC/C++の質問はここで 21 (654)
LLにおける関数型プログラミング (106)
HTABOXコア Part3 (703)
MFC相談室 mfc22d.dll
- 1 :2011/09/15 〜 最終レス :2013/09/12
- 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は花形ですか?
勉強する価値はありますか?
- 100 :
- >>98
CWndが仮想デストラクタになっているから問題無い。
>>99
勉強しなくて良い。
- 101 :
- >>99
さすがにぜってー意味ねぇと思うわ
C#+.netやれ
- 102 :
- >>101
先輩まじですか。
マネージで安泰ということでよろしいか?
- 103 :
- 安泰つーか、MFCが有り得ないだけだから。
- 104 :
- >>103
津波のシミュレートってテレビでよくやってるじゃないですか。
あーいうのがやりたいんですよ。
ということは、C#でも十分可能ということなんですよね?
- 105 :
- >104
まず物理に詳しくて、それをパソコンで計算する手法を知っていることかな
その辺の知識があれば関連書籍やサンプルプログラム見つかるだろうし
そこで使ってるプログラミング言語を選ぶのが楽
- 106 :
- MFCがあり得ないというのは言い過ぎだけど花形ではないは確か。
組み込み系でもない限り使う機会って少ないんじゃないかな?
ちなみに私は組み込み系。有り難く使わせてもらってる。
津波のシミュレートとかだと、計算方法とかをしっかり知ることかな。
そしてその結果を出力していくだけだろうからMFCは関係ない。
何かUIを付けていくんだったら、MFC使うなりC#使うなり
そのとき考えればいい。
- 107 :
- 組み込み系でMFCってw
それ、組み込み系って言うか、組み込みの支援ツールとかだろww
できの悪いシミュレータでも作っているんだろwww
- 108 :
- 質問です。
1つのアプリケーションの中で複数のダイアログやウィンドウの間で遷移させたくて次のような実装を考えています。
BOOL CMyApp::InitInstanse(){
〜中略〜
int nUI = 0;
while(1){
switch(nUI){
case 0:
CMyDialog dlg;
dlg.DoModal();
nUI = dlg0.m_nNextUI;
break;
case 1:
CMyFrameWnd* pwnd = new CMyFrameWnd;
if( (pwnd->LoadFrame(〜) == FALSE) || (pwnd->AddDocTemplate == FALSE) ){
delete pwnd;
nUI = -1;
}
else{
pwnd->ShowWindow(SW_SHOW);
nUI = pwnd->m_nNextUI;
}
break;
default:
return FALSE;
break;
}
}
}
でもCWnd::ShowWindowはCDialog::DoModalのようにUIが閉じられるまで待ってくれないから
このようなコードでは正常に動作しないんですよね。本来はInitInstanseをreturn TRUEで出て
メッセージポンプ開始させるのが普通ですが、InitInstanseを出ずに使う方法は無いですか?
- 109 :
- >>108
やりたいことを具体的に書いた方がいいよ。でないと、
どうしてもInitInstance()から出たくないなら、中でメッセージポンプを実装すればいいとしか。
普通に状態フラグみたいなもので作業フェーズを管理すればいいだけだと思うんだけどね。
- 110 :
- >>109
あるダイアログ上である特定のUI操作をしたら、そのダイアログが消えて別の
ダイアログ/ウィンドウが新たに表示される、というような画面遷移がいくつか
必要なアプリケーションにおいて、アプリケーション上で生きているダイアログ
やウィンドウを常に1個だけにしたい(使わないダイアログやウィンドウを隠す
のではなく使い終わったものは順次デコンストラクトしてしまいたい)、というの
がやりたいことです。
- 111 :
- >>110に追記。
自分が困っているのは、>>108のようにInitiInstanseの中からウィンドウを呼ぶ実装だと、
モーダルダイアログと違って、ウィンドウが閉じられるまでプロセスをそこで待たせるのが
難しいので、もっと簡単に>>110を満たす実装ができないだろうか、というところです。
- 112 :
- >>108
case 1:のところでは見えないダイアログをDoModalで出しておいて、
そのダイアログから別スレッドを作ってCMyFrameWndを出して、
ダイアログがタイマーで定期的にスレッドの終了を見張って、
終了していたらダイアログ自身もEndDialog
というようなやりかたならやったことがある。
- 113 :
- >>112
その方法だと、タスクバー上に、ダイアログのぶんとウィンドウのぶん、
2つのタイトルボタンが現れてしまいませんか?
- 114 :
- >>107
横レスだけど、WinCEは企業じゃ現役だと思うよ
あと、POSとか、大き目の組込みじゃ普通にXPが載ってたりする
- 115 :
- >>104
Blenderでできるよ。動画もあったはず。
- 116 :
- >>113
そこはWS_EX_TOOLWINDOWを指定するなり、
ダイアログをサイズ0ではなく非表示にするなり、
自身のアプリの動きに合った方法を探ってもらうしか。
自分の場合は、ランチャのようなものがあって、
そこからダイアログやCMyFrameWndをモーダルで出す仕組みだったので、
LoadFrameに渡す親ウィンドウを前述の見えないダイアログにして、
タスクバーに新たに出てこないようにした。
この方法だとCMyFrameWnd自体のタスクバーへの最小化ができないけど、
モーダルダイアログと同じようになればよかったので、最小化は不可にした。
- 117 :
- 108ですが解決しました。おおざっぱにですが、まずはウィンドウ側。
BOOL CMyFrameWnd::OpenAndHide(CWnd* pwndParent, BOOL* pbIsDestroyed)
{
// LoadFrameの引数の親ウィンドウへのポインタにはpwndParentを渡さずNULLにしておく
if( (pwndParent == NULL) || (LoadFrame(〜) == FALSE) || AddDocTemplate(〜) == FALSE) ) return FALSE;
// pwndParentを消す
pwndParent->ShowWindow(SW_HIDE);
LONG lExStyleOfParent = m_lExStyleOfParent = ::GetWindowLong(pwndParent->m_hWnd, GWL_EXSTYLE);
lExStyleOfParent &= (~WS_EX_APPWINDOW);
lExStyleOfParent |= WS_EX_TOOLWINDOW;
::SetWindowLong(pwndParent->m_hWnd, GWL_EXSTYLE, lExStyleOfParent);
::SetWindowPos(pwndParent->m_hWnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
::SetWindowRgn(pwndParent->m_hWnd, CreateRectRgn(0, 0, 0, 0), TRUE);
// ポインタをメンバ変数に記録
m_pwndParent = pwndParent;
if(pbIsDestroyed != NULL){
m_pbIsDestroyed = pbIsDestroyed;
(*m_pbIsDestroyed) = FALSE;
}
ShowWindow(SW_SHOW);
return TRUE;
}
void CMyFrameWnd::OnDestroy()
{
if(m_pbIsDestroyed != NULL) (*m_pbIsDestroyed) = TRUE;
else{
::SetWindowLong(m_pwndParent->m_hWnd, GWL_EXSTYLE, m_lExStyleOfParent);
::SetWindowPos(m_pwndParent->m_hWnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
::SetWindowRgn(m_pwndParent->m_hWnd, NULL, TRUE);
}
CWnd::OnDestroy();
}
- 118 :
- そしてダイアログ側。
BOOL CMyDialogForWindow::OnInitDialog()
{
if(CDialog::OnInitDialog() == FALSE) return FALSE;
CMyFrameWnd* pwnd = new CMyFrameWnd;
if(pwnd->OpenAndHide(this, m_bIsDestroyed) == FALSE){
delete pwnd;
OnCancel();
return FALSE;
}
pwnd->ShowWindow(SW_SHOW);
SetTimer(m_nTimerID, 500);
return TRUE;
}
void CMyDialogForWindow::OnTimer(UINT nIDEvent)
{
if(m_bIsDestroyed == TRUE){
KillTimer(m_nTimerID);
OnOK();
}
CDialog::OnTimer(nIDEvent);
}
これで、>>108のcase 1:の中で、CMyDialogForWindowのインスタンスを作ってDoModal()すれば
(CMyDialogForWindowが自動的に隠れ)CMyFrameWndだけを開いているような状態になるはずです。
>>116さんのようにランチャ的なダイアログから開きたい場合には、上のダイアログ側コードを削除して
void CMyDialogForWindow::OnButtonOpenWindow()
{
CMyFrameWnd* pwnd = new CMyFrameWnd;
if(pwnd->OpenAndHide(this, NULL) == FALSE) delete pwnd;
else pwnd->ShowWindow(SW_SHOW);
}
を加えれば、うまく動作するはずです。
- 119 :
- 大事な部分が抜けてました。
CMyFrameWnd::OpenAndHideおよびCMyFrameWnd::OnDestroyの中において、
CWinApp::m_pMainWndを移譲する処理を書いておく必要があります。
CMyFrameWnd::OpenAndHideでは
m_pwndOld = AfxGetApp()->m_pMainWnd;
AfxGetApp()->m_pMainWnd = this;
を
CMyFrameWnd::OnDestroyでは
AfxGetApp()->m_pMainWnd = m_pwndOld;
を
それぞれ適当な場所に書いてください。
いろいろとご助言ありがとうございました。
- 120 :
- >>117
CMyFrameWndを別スレッドにしなくても大丈夫だった?
昔>>112を作ったときは、
MFCのフレームウィンドウのコマンドUI処理やドッキング処理は
InitInstanceを抜けた後のアイドル時に行うような前提で、
ダイアログベースのアプリケーションのメインスレッドからだと
CMyFrameWndでそのあたりがうまく動かなかったので、
わざわざ別スレッドを経由するするようにしたんだけど。
- 121 :
- CDatabaseやCRecordsetを使ってODBCでOracleデータベースにアクセスしています。
しかし、このクラスにはメモリリークのバグがあるみたいなので
別の方法(CDatabaseを使わない)でOracleにアクセスしたいのですが
そんな方法があるんでしょうか?教えてください。
- 122 :
- >>121
ADOかなー。
バージョンによってはoo4oのほうがいいかな
- 123 :
- ありがとうございます
ADOでやってみます
oo4oは64bitで使えないらしく残念です
- 124 :
- >>121
SQLを書いたファイルをsqlplusに食わせて、それをファイルにリダイレクトするバッチファイルを作る。
で、"cmd /c バッチファイル"をsystem関数で実行する。
というダサいプログラムを見たことがある。
- 125 :
- ダサいけど、存外安定するんだな。
- 126 :
- 安貞するの?
安貞しちゃっていいの?
しちゃうよ?
本当にいいの?
- 127 :
- 滅茶滅茶にして…///
- 128 :
- MFC初心者です
質問があります
計測データをグラフ表示したい場合
どのような方法が考えられますか?
なんでもいいのでおしえてください
- 129 :
- ・市販のグラフコントロールを買う
買ったコントロールのヘルプを読めばいい
・自分で全部描く
ViewのOnDraw又はOnPaint
CDCクラス
CPenクラス
CBrushクラス
あたりを調べて勉強する
理解出来たらオーナー描画を勉強する
- 130 :
- >>128
市販のグラフコントロール買うのが一番良いよ。
ただ、それが10万とかすると「高いから自分でコード書け」とかいう馬鹿上司がいたりするんだよなぁ。
- 131 :
- まぁ仮に、人月単価40万円の奴が担当したとする。
一週間グラフを作るのに費やしたらそれだけで10万円だよな。
とは言え、我が社ではgnuplotでやっているが。
- 132 :
- >>131
それ、メンテナンス工数が入ってないよ。
- 133 :
- もう少し大局的に物事を考えられるようになろうぜ
- 134 :
- 高機能なコントロール=使い易いコントロール
とは限らないのが難しい所だけどな。
MFC使い慣れてるオッサンに仕事を押し付けるのが手っ取り早い。
……MFC以外を検討するのが最善策な気もするけどw
- 135 :
- 企業として使用する場合MFC以外でGUIライブラリってなにがあるんだ?
シェアウェアとして個人でwwwに公開する場合ならいろいろあるけど。
- 136 :
- MFCで組み合わせを計算するアプリ作成しています
いざ計算すると止まってしまい困っています
どうやらユーザ定義関数の階乗を計算する関数が
動作していないことが原因みたいです
C++の要領でメイン関数の上に置いたのはマズかった
のでしょうか?アドバイスおねがいします
- 137 :
- ユーザ定義関数を直せばいいんじゃないかな
- 138 :
- >>137
どのように直せばいいですか?
方法が分からず困っています
- 139 :
- 正しく動くように直せばいいんじゃないかな。
- 140 :
- >>136
宿題は自分でやれよ、馬鹿が
それとも、聞ける友達すらいないのか
- 141 :
- >>140
すみません
たしかに友達が少ないのは事実ですが
なんとかなりそうです
激励ありがとうございます!
- 142 :
- >>131
人月単価40万円なんてありえない
それって、個人の給料と勘違いしていない?
工数は8000〜10000円/1H位で見積もるよ
- 143 :
- 底辺下請けを舐めんなよ。個人でやってるソフトハウスなんてそんなもんだ。
ちなみに、独立系のソフトハウスで80-120万、大手SIerで120-200万円だ。
- 144 :
- ソフトウェア業界で飯を食っていこうと考えると
MFCと.NETだと、どちらをマスターしたほうがいいですか?
- 145 :
- その2択ならMFCだろうな
.netなんて適当な本読んで、2,3日もすれば完全にマスターできる。
必要になったときにやればいい。
- 146 :
- >>144 はスレタイを読んでいる
>>145 は空気を読んでいる
そして死神が漏れを呼んでいる
- 147 :
- もう 2ch にはまともなひといないお
- 148 :
- 質問があります
追加したダイアログのメニューバーを無効(灰色表記)にするのはどうすればいいですか?
- 149 :
- >>148
http://support.microsoft.com/kb/242577/ja
- 150 :
- 吹き出しっぽいものを作ってそこに文字を入力してもらおうと考えています
そこでまずttp://www.yoshibaworks.com/ayacy/inasoft/wpt/ulw.htmlを参考に
UpdateLayeredWindowを使って吹き出し型のウィンドウを作るところまでは出来ました。
しかしそれに対してエディットボックスを貼り付けてみたところ見事に表示されませんでした。
レイヤードウィンドウにコントロールを貼り付けることはできないのでしょうか
- 151 :
- 出来ますよ
- 152 :
- >>151
おお、ホントですか。
何かサンプルになるようなものはありませんか
- 153 :
- ウィンドウをダイアログにする
- 154 :
- えーとすいません
CDialogを継承したものをUpdateLayeredWindowで消すってことでしょうか
今すでにその状態なんですけど
- 155 :
- 頑張れMFC
- 156 :
- >>154
ソース貼れ
- 157 :
- 取り込んだデータで山なりの曲線作りたいんですが、どうやってグラフにするのかおしえてください
- 158 :
- 了解
- 159 :
- C#やVBはポトペタできるのに
VC+++MFCは未だにポトペタできないのはなんで?
- 160 :
- ttp://www.wilsonc.demon.co.uk/d10resourceeditor.htm
- 161 :
- ↑
それだと、ショボイコントロールしかポトペタできないじゃん
- 162 :
- 馬鹿には無理
- 163 :
- >>157
Excelを使え。
- 164 :
- 遅ればせながら、vs2010を使ってみた
MFC、超進化してんじゃん
MFC新規作成から、完了ボタン一発ですげーGUIできた。
C#が生産性が高いなんて過去の話か???
- 165 :
- >>163
ExcelだとC+が使えないので…
- 166 :
- 大半の人は、実は釣り質問。
単に馬鹿な回答者がいればそれでいい。
- 167 :
- >>166
ではヒントだけでいいので
- 168 :
- クラス名を変更したいですが、どうするのが正確にできますか?
CXxxxView ファイル名 XxxxView.h , XxxxView.cpp
を
CYyyyView ファイル名 YyyyView.h , YyyyView.cpp
としたいのです。
- 169 :
- s/Xxxx/Yyyy/g
- 170 :
- bakabakkadana
- 171 :
- 若かろうがオッサンだろうが、
「これ出来ないとお金払いませんよ、
あなたの生活がどうなろうと私には関係有りませんし。」
と言うとみんなちゃんと新しい技術をマスターしてくる。
努力しないってっことは努力する必要が無いからなんだと思う。
追い詰められていないんだろうね。
幸せなんじゃないか?
どうでもいいけど。
- 172 :
- >>171
答えられないくせにどうでもいい長文書くなよw
- 173 :
- 「会議」がアイデアを潰す
若手や中堅がイノベーションを生み出す新しいアイデアを出す時
立ちはだかるのがジジイどもの支配する「会議」という壁だ
・ジジイどもに理解できる企画でなくてはならない
・ジジイどもの好みに合う企画でなければならない
・既に成功した事例がなくてはならない
・ジジイどもに気に入られている人物が提案者でなくてはならない
・ジジイどもに気に入れられていない人物が関わっていてはならない
・ジジイどもの支援が不要な企画でなくてはならない
・にもかかわらずジジイどもにも活躍の場を与えねばならない
・ジジイどもの気まぐれな口出しにいつでも応じなければならない
・失敗してもジジイどもが責任をとらなくてよい企画でなくてはならない
・成功したらジジイどもの業績になる企画でなくてはならない
若い頃は前世代のおかげで繁栄したくせに、自分らの時代には経済を衰退させ
そのツケを後世代に回す団塊ジジイ、バブルジジイどもが日本の病巣
- 174 :
- 通報した方がいいのかね、これ。
- 175 :
- 今更MFCを学ぶのは無駄なんですか?
- 176 :
- Don't think, feeeeeeeeeel.
- 177 :
- >>175
Windowsの仕組み、Win32API、C++の言語仕様を熟知していればMFCは3日で覚えられる。
- 178 :
- >>177
Windowsの仕組み、Win32API、C++の言語仕様を熟知するのにどれくらいかかりますか?
- 179 :
- >>178
基本的なOSの仕組み、Cの言語仕様を熟知していれば一週間くらい。
- 180 :
- 一週間で熟知出来るのか〜
ってどんだけ浅い理解だよ
- 181 :
- >>179
無理だな。
最低でも一ヶ月はかかる。
- 182 :
- >>178
APIについては最低でも、猫でもわかるくらいの知識が必要。
- 183 :
- Windowsの仕組みが1ヶ月と嘘だろ?
15、16年程度Windowsでドライバやアプリケーションを書いてきたが
AdvancedWindows,やInside Windowsを読むのは相当キツイぞ
未だに全部頭に入ってるわけではない
- 184 :
- 何年やったって全てを熟知するなんて無理
一週間とか一ヶ月とか言ってる奴はネタで言ってるか
単なる馬鹿のどっちか
- 185 :
- ソースが入手できないから当たり前
linuxなんかは、ソース読めば全体がくまなくわかるがな
- 186 :
- >>185
じゃあソースがあれば一週間で熟知出来るの?
お前天才だろ
- 187 :
- まあ、熟知っていうのをどのレベルに想定するかで違ってくるしな。
仕事に支障ないレベルまで習得できた状態までなら、一ヶ月でなんとか行くと思うよ。
(実例は俺)
ただし、その前にOSの仕組みやらC++やらは理解しておく必要があるが。
- 188 :
- 「仕事で必要な部分」と「全部」は違うだろ
- 189 :
- >>188
ああ、違うよ。
悪かったな。
- 190 :
- ふふん
まあ兎に角、取り敢えずは、一週間だな
それでで大体はワカルもんだ
- 191 :
- 子ダイアログに親ダイアログのメンバ変数に格納された数値を移したいのですが、
何故か値が消えて0になってしまいます
解決策をおしえてください
- 192 :
- Petzoldを参照せよ!
- 193 :
- >>192
さっそくみてみます!
- 194 :
- 質問です。
リストビュー内のリストコントロールで各行ごとに異なる背景色を与えるとき、
LVS_EX_CHECKBOXESで表示させたチェックボックスの背景はどうやれば
変更できますか?
- 195 :
- 質問です。WinXP, Visual Studio 2008 ProのMFCダイアログベースアプリで、
フォーム上にコンボボックス(IDC_COMBO1)を配置して、
コンボボックスのプロパティを次のように設定しました。
Data: アメリカ;ドイツ;日本;インド
Sort: False
Type: ドロップダウン リスト
これをビルド・実行して、[▼]ボタンを押すと(1)のようになり、(2)のようにずらーっと選択肢が出ません。
(2)のようにするには、どうすればいいでしょうか?
よろしくお願いします。
-----------
| |▼|
-----------
↓ 右の[▼]ボタンを押すと
(1)リストのうち、要素が1個でるだけで、右端のアップダウンボタン[〓]を押して1個ずつ切り換え
-----------
| |▼|
-----------
|アメリカ |〓|
-----------
(2)
-----------
| |▼|
-----------
|アメリカ |
|ドイツ |
|日本 |
|インド |
---------
- 196 :
- (1)エディタ上で[▼]の部分をクリックして、
ドロップダウンする部分のサイズをリサイズする。
(2)XPのビジュアルスタイルを指定している場合は、
プロパティのNo Integral HeightをTrueにする。
- 197 :
- >>196
教えて頂いた方法で、解決しました。
ありがとうございました。
- 198 :
- コントロールがフォーカスを持っているときに
枠線が描かれますが、この枠線を 赤の太線にほしいとの客先要望
どのコントロールにフォーカスがあるかをわかりやすくするためだと・・・
できますか?
できませんとお答えしたら、「いやいや、できなってことはないでしょ?」
の一点張り・・・
なにか良いアイデアはありませんか>¥?
- 199 :
- >>198
フォーカス時にMoveTo,LineToで線引いてやるとか?
莫大なコード書いて実現しても
「やっぱりできるんじゃん!サボろうとして安易にできないとか言うなよ」
とか言われたりして
まあ入力欄だったら背景色を変えるとかで手打ちしてもらったほうが
- 200 :
- おまえら正規版買えよ
- 201 :
- コンソールにHello Worldって出力するだけのソフトしかつくれないのに
何万も出すかよ
- 202 :
- おまいらに朗報
http://sourceforge.net/projects/owlnext/
- 203 :
- そんな屑ライブラリなんて使えるかよ
ライブラリは質より、どこが提供しているかが一番大事なんだぞ
MFCは糞だが、MSっての最強の強み
- 204 :
- 心配ご無用、新機能満載、非互換版作成中、近々公開
- 205 :
- >>198
最前面拡張スタイルの独立したポップアップウィンドウをSetWindowRgnでくりぬく。
フォーカスを監視してフォーカスのあるコントロールに位置とサイズを合わせる。
- 206 :
- MSDN正規版を買いましょう
- 207 :
- MSDNは買うと言うよりもエントリーするとか登録するとかそういう感覚
- 208 :
- すいません、教えてください。
2つのOnTimer( CWnd1::OnTimer と CWnd2::OnTimer)から
同一の関数( func )を呼び出す制御をしていた場合、
関数( func )が2重に呼び出される事はあるのでしょうか?
※以下処理で g_ctr が 2になる可能性はありますでしょうか?
----------------------------------------------
CWnd1::OnTimer( UINT_PTR nIDEvent ) // 10ms間隔のタイマー
{
func();
}
CWnd2::OnTimer( UINT_PTR nIDEvent ) // 20ms間隔のタイマー
{
func();
}
int g_ctr = 0;
void func()
{
g_ctr ++;
// 色々な処理
g_ctr --;
}
----------------------------------------------
- 209 :
- >>208
是非とも、実際にやってみて結果を報告して欲しい。
通常は、「ある」ものとして設計するけどな。
- 210 :
- メニューの折りたたみをなくしたいだけど
どうすればいいのかしらん?
- 211 :
- >>208
OnTimer(=WM_TIMER)はメッセージベースなので、
GetMessage/DispatchMessageとか内部で呼び出さなければOK。
逆にMessageBoxとか出すと、再入するのが確認できるよ。
これらはタイマが一つだろうと二つ以上だろうと当てはまる。
- 212 :
- レスありがとうございます。
2つ(CWnd1 , CWnd2)は異なるウィンドウですが、同じメッセージループを回っているのでしょうか?
- 213 :
- んなわけねーじゃん
しねよ
- 214 :
- ですよね・・。
だって >>211 がおかしな事言うから・・。
しねよ は>>211に言ってよ
- 215 :
- もうWinのデスクトップではネイティブアプリって必要なくなっていくんですかね?
- 216 :
- >>212
同じUIスレッドのウィンドウなら同じ。
AfxBeginThreadとかで作った、別のUIスレッドのウィンドウとかなら別だけど。
- 217 :
- mfcの生産性の低さについて
マイクロソフトは何か対策を練ったりしてないの?
過去の遺産に先進機能を盛った所で相変わらず繁雑なままという印象なのだけれど
- 218 :
- 今は一部社員の趣味で開発しているだけの予感。
MFCが使われなくても特に困らないんじゃないか?
他に生産性の高いライブラリがあるなら、どうぞそちらをお使いください、
ってスタンスかと。
- 219 :
- >過去の遺産に先進機能を盛った所
具体的にどのへんが先進機能?
- 220 :
- MFC Feature Packとか
外部には無いでしょ?
- 221 :
- mfcってそんなに生産性低いか?
ウィザードに従っていけば、デフォルトですごいカッコいいGUIが出来あるがるぞ
まさかVC++6とかつかってないか?
2008以降はGUIだけならC#より生産性は高い
- 222 :
- だがしかし 2008 Express には MFC が付いていない
- 223 :
- 認識が全然違うのか
ウィザードで大抵の機能が完結するならいいけど
機能を追加する場合にも実際には色々と手作業でしかも複数箇所に渡って変更部分を追記する以外ないわけで
間違いなく生産性の面で言えば現代のプログラミング技術から数歩遅れた所に居ると思う
- 224 :
- 人が嫌がるものだからこそ金になるんだろ。
- 225 :
- 嫌がるからどうこうじゃなくて
整備しなかったマイクロソフトの怠慢じゃないの
- 226 :
- QtやらMacやらAndroidやらが現れている現在
本来ならここは改善されるべき所
- 227 :
- しかし、ネイティブアプリを作成するには、これが一番情報が多いし
使い方も簡単
- 228 :
- mfcはジャンク
組み合わせられれば最強だが
全体的に見るとあまりよろしくない
- 229 :
- >>222
Qt とか wxWidgets とかおすすめ
- 230 :
- MFCでラジオボタンを3つ作ってボタンを押すとそれぞれ3つとも違う処理をしています
ある時に自動で1つめのボタンを押す動作をプログラムで起こしたいのですが
CButtonのSetCheck(1)とするとボタンはへこむのですが
ボタンを押した時のハンドラは呼ばれません
これを呼ばれるようにするにはSetCheckじゃなく何を呼べばいいんでしょうか?
VC2003を使っています。OSはXP
- 231 :
- >>230
「ボタンを押した時のハンドラ」
- 232 :
- それをやろうとするとプログラムで判定が必要になって不格好です
if(button1.GetCheck()==1)
button1のハンドラ();
if(button2.GetCheck()==1)
button2のハンドラ();
if(button3.GetCheck()==1)
button3のハンドラ();
button1.SetCheck(1)に対して自動でハンドラを呼ばせたいのですが無理ですか?
- 233 :
- >それをやろうとするとプログラムで判定が必要になって不格好です
なんで? >230にはGetCheck()の結果でハンドラを呼びたいなんて書いてなかったのに後出し?
つーか、動作のシミュレーションをしたいのならボタンの座標を使ってメッセージ送ればいいじゃん。
- 234 :
- 馬鹿には無理
- 235 :
- CMenuでおしえてください
左クリックでメニューだしてますが以下の構造でポップアップのMeasuredItem処理が分かりません
メニュートップ
−メニュー1(ポップアップ)
−サブメニュー(文字列)
−サブメニュー(文字列)
−メニュー2(ポップアップ)
−サブメニュー(文字列)
−サブメニュー(文字列)
−メニュー3(文字列)
ポップアップになってるとこはCMenuの派生クラスでMeasuredItemが呼ばれないので
親WindowでOnMeasuredItemを呼ばせてその中でMeasuredItemを読んでます
つづく
- 236 :
- OnMeasuredItemでは以下の2つのハンドルが帰ってきますが
−メニュー1(ポップアップ)
−メニュー2(ポップアップ)
このハンドルから親であるメニュートップのハンドルが欲しいのですが
取得する方法わかりますか?
CMenuには親メニューを取ってくるメンバ関数はなさそうです
なぜ取得したいかというと親が持ってるメニューの幅と高さ情報が知りたいからです
その情報を使ってMeasuredItemを処理したいのですが
OnMeasuredItemでは親ではなく子のハンドルが帰ってきて困ってます
- 237 :
- APIレベルでその機能が無いからなあ。
予めSetMenuItemInfoでdwItemDataに親ハンドルをセットしておくとか、
せこい方法しか思いつかないw
- 238 :
- MFCってやたらモッサリしてるんですが、C#でWPFかwinformで書いたほうがいいですかね?
- 239 :
- MFCでモッサリならC#で書こうものなら使い物にならんだろ
- 240 :
- >>239
釣りだろ。
- 241 :
- vs2012では、mfcがなくなったの?
- 242 :
- どうしてそう思ったの?
- 243 :
- 使えなかったから
- 244 :
- ExpressEditionには入ってなかった、ってオチだろうな。
Professional入れてるけど普通に使えるし。
- 245 :
- CTabCtrlでタブコントロールを使ってますが
InsertItemでタブを複数追加して実行中に
マウスでタブの順番をドラッグで入れ替えたりする機能は
標準でないんでしょうか?IEのタブ表示だと普通にできますけど
CTabCtrlでは無理なんでしょうか?方法があったら教えてください
VCは2005を使用しています
- 246 :
- ちなみにVS2010にCMFCTabCtrlというのがあって
コレを使えば実現できるのは知ってます。
問題はVS2005にてこれをやりたいと思っています。
未来Verの機能を使う方法があれば簡単なんでしょうけど
たぶん無理ですよね…
- 247 :
- >246
画像素材作るのが面倒だけど、
CButtonあたりを継承して自分で組んでしまえば?
- 248 :
- それやるくらいなら、CTabCtrlのイベント処理を自分でやればいいだけのような。
- 249 :
- やはり自前しかないですか
CTabCtrlをオーナードローして作ることにしました
- 250 :
- 質問があります
AfxGetMainWnd()->SetMenu(NULL); でメニューを削除したあと
もう一度メニューを表示させることはできますか?
いっかいダイアログを閉じないとメニューをみれないので困っています
- 251 :
- オーナードローって
オーナーがドローするんですか?
それとも
オーナーをドローするんですか?
いまいちわからない。
カスタムドローってのもあるし・・・
- 252 :
- >>251
オーナーがドローする。
カスタムドローはオーナードローの進化版。
ただ、MFCではDrawItemのオーバーライドやNM_CUSTOMDRAWの
メッセージリフレクションを利用して実装するので、
実際にはコントロールの派生クラス自身が描画するような感じになるけど。
- 253 :
- VC++6.0のMFCで作ったActiveXコントロールが
64bit版WindowsのIE上でも動くのはなぜでしょうか?
- 254 :
- 64bit版WindowsのIEには32bit版と64bit版がある。
- 255 :
- マジっすか
- 256 :
- むしろ64bit版の方がオマケ扱い。
- 257 :
- やはり64bitのIEだと32bitのocxは動かないんですね
- 258 :
- >>250 GetMenuで保管しておき、後でまたSetMenuする。
- 259 :
- MFC標準機能でダイアログアプリを作って起動させます
これを別アプリで終了させたいんですけど可能ですか?
タスクマネージャでの終了みたいに強制終了じゃなくて
あたかも終了ボタンがおされEndDialog(IDOK)が呼ばれたかのように
安全に終了させたいと思っています
出来ればダイアログアプリに外部から終了させるための特別な処理は入れたくありません。
あくまで外部から正常終了させる物を作りたいのです
よろしくお願いします
- 260 :
- どちらかと言えば
可能です
- 261 :
- もちろん可能ですよ。
- 262 :
- 具体的にどうやるんですか?
教えてください
- 263 :
- 馬鹿には無理
- 264 :
- ここで聞いても無駄
小学生にもわかるレベルのことは即応えるけど
技術必要なものははぐらかすだけだから
つまり素人の暇つぶしスレ
- 265 :
- >>259
SendMessage
- 266 :
- 漏れでも出来そう
- 267 :
- プロが小学生に質問するスレはここですか?
- 268 :
- Spyでメッセージ調べて、そのメッセージをSendMessage()で投げるだけの簡単なお仕事。
- 269 :
- x 馬鹿には無理
o おまえには無理
- 270 :
- ウィンドウのハンドル取得って制限なかったっけ
- 271 :
- ↑
あほや!!
発作か〜!!
- 272 :
- Monday Football Common!!!
- 273 :
- mfcって.netより遅いの?
- 274 :
- 遅いとか意味がよく分からない
レジストリを勝手に使ってやり取りしてたりするから
その分起動に時間は掛かるけど
.Net Frameworkを起動する程じゃない
それ以上の話はWindowsAPIと大して変わらない
- 275 :
- PCが高性能になるとそうとも言えない
APIよりCPUに最適化された中間言語の方が高速になる
もうそうなってきてるよ
- 276 :
- 中間言語が早くなっても、Windows.Forms系の処理はAPIを経由してるんだから
そこは変わらないって
- 277 :
- 中間言語のほうが速いなんてありえない
- 278 :
- レースゲーでオートマよりマニュアル車の方が
最高速度が速いのと同じような感じじゃないかなあ。
下手な書き方すると、MFCの方が速度落ちそうだし。
- 279 :
- 文字列連結するのに1文字ずつ領域解放→再確保やっちゃうとか?
- 280 :
- std::vector ですねわかります
- 281 :
- MFCでwininetを使ってhttpでwebページの取得をしています。
以前まではできていたのですが、先日急にデータが欠落するようになりました。
具体的には、22kBほどのwebページを取得するのに、
2kBくらいでぶつっと切れてしまっています。
CHttpFile::Readの戻り値(取得したデータ長)は切れた部分まで(2k程度)になっています。
QueryInfoStatusCodeでは200が返ってきていますが、
firefoxでアクセスしてパケットのやり取りを見てみると、
最初は302が返ってきて、2〜3度転送されているみたいでした。
SendRequestからReadまでの間にSleep(1000)を入れると取得できるデータ長が
10k以上に増えましたが、やはり途中で切れてしまいます。
Sleepの数値を2000にしたら、すべて受信できるようになりました。
GetQueryInfoで、HTTP_QUERY_CONTENT_LENGTHを取得しようとしたら、
ヘッダが存在しないとエラーが出ました。(errcode:12150 ERROR_HTTP_HEADER_NOT_FOUND)
以前はこんなことは起きなかったのですが、何故だかわかる方はいるでしょうか?
Sleepで改善したということは、SendRequestの後に完了待ちをする必要があるのでしょうか?
- 282 :
- >>281
その時点で受信できていた分だけを返してるような気がする。
確か0で戻ってきたら完了じゃなかったっけ?
- 283 :
- 自分もそう思い、Readで0が返ってくるまで繰り返すようにしてみたのですが
2回目のReadでは確実に0が返ってくるようで、ダメでした。
googleなどで色々と調べてみたのですが、Readの戻り値としては
「指定したbyte数【以下の値が】返ってきたら完了」という記事が一般的なようで、
先ほどの試験結果とも一致するので、そもそも少ない値が返ってくる時点でNGだと認識しました。
それにしては、Sleepで全部読み込めるようになったり、不可思議な点が多いのですが…
- 284 :
- select
- 285 :
- Sleep()で返る時間が変わるということは、単に経由している回線が細い
とか、Webサイト側でページを動的に生成に時間が掛かっていたり、ボット
対策でリファラーを見ていたりや、ブラウザの種類で何か細工しているん
でないの?
短く途切れる時の取得データと、「Webブラウザのリンク先を保存」などで
取得した正常データの先頭の中身は一致しているか確認した?
- 286 :
- どこのリソース取得かを聞かないのは
この板のやさしさかな
- 287 :
- >>285
返事が遅くなってしまい、すいませんでした。
先頭というより、切れている部分までは完全に一致しています。
リファラーとUAは、ブラウザで見る場合と同じ値に設定しています。
Web側でページを動的に生成しているとは思います。(更新ごとに内容が変わるので)
ただ、「Webサイト側で生成するのに時間がかかる」としても、
CHttpFile::Readで読み出す場合は問題ないと思っていたのですが…
(ページ内容を全て取得してからロードする、という関数ですよね?)
もしそうでないならば、以下の関数の実装が必要な気がします。
・途中まで読み込んだ後、再度実行することで、残りを読み出せる必要がある。
(完了した場合は、戻り値、もしくは完了判別関数で、完了したかを判別する)
・Readする前に、「Webページ側の準備完了まで待つ」もしくは「完了を通知する」機能
色々と調べてみたのですが、どちらも見つからないのですよね…。
- 288 :
- MFCのソースを見てみる事をお勧めする。
APIのレベルで色々試せば何か見えてくるかもしれないし。
- 289 :
- 既にやってるかもしれないけど
CInternetSessionのOnStatusCallback()を実装して
もう少しstatusを細かくチェックしてみては。
ネットで検索してもほとんど出てこないけど
中身はWinInetのInternetSetStatusCallback()だから
そっちで検索するといいよ
- 290 :
- >>288-289
ありがとうございます。ちょっとそのあたりを確認して色々と試してみます!
- 291 :
- もう、MFCは必要なくなった。これからは全部手作りで自由にハックできる。
- 292 :
- win7にmfc71.dll入れる場合って何を入れれば入るんだ?
ぐぐっても出てこんわ。
- 293 :
- 馬鹿には無理
- 294 :
- >>292
Visual C++ .NET 2003 に含まれるやつだな。
残念ながら、公式の再頒布パッケージは存在しないので、
ベクター辺りから拾ってくるしかない。
「VC++ .NET ランタイムインストーラー」に入っているのは確認した。
- 295 :
- GUIでアプリケーションを作成する場合、MFCを使うべきですか?CLRフォームアプリケーションから作成するべきですか?
MFCは重い古いとか言われますが、、、CLRとMFCを同類としてしまってもいいのかもわかりませんが、、、Visual Studioを利用している限り、
この2つが並ぶので…
- 296 :
- >>295
WTLで
- 297 :
- MFCでスレッド作る時AfxBeginThread()使ってるんだけど、第一引数で指定するスレッド本体の関数はstaticじゃないとダメっぽい。
となるとstatic関数(スレッド本体)からは、そのクラスのstatic変数にしかアクセスできないから、そのクラスに定義されている変数を全てstaticに
変更したいのだが、一個ずつstaticを付けていくしかない?変数が大量なんどす、、、。
- 298 :
- 元のソースは非MFCだったから(スレッド作成時のスレッド本体が静的でなくてもいいから)this->でいけたんだが、MFC用に改良する状況になっちゃいまして、、、
そもそもMFCのスレッド本体が静的じゃないとあかん理由もよくわかってませんが…
長文すみません。。。
- 299 :
- >>297-298
pParamにインスタンスのポインタを渡して、
スレッド本体からそのインスタンスのメソッドを呼ぶ形にすれば良いんじゃないか?
- 300 :
- >>299
現状だと、メインダイアログへのハンドル(文字列表示のためにPostMessage()するため)がpParamに入ってるんです。
構造体かなんかにしてインスタンスのポインタも同時に渡せますかね。
- 301 :
- >>297
>static関数(スレッド本体)からは、そのクラスのstatic変数にしかアクセスできないから、
これ都市伝説だから。
- 302 :
- えぇっ!?
- 303 :
- >>301
え?
- 304 :
- >>300
そもそも、そんな質問をしてるような奴にマルチスレッドは無理。
- 305 :
- マルチスレッドなんていまどき保育園児だってしてるわハゲ
- 306 :
- MFCで作ったソフトをブラウザ上で実行するには、どうすれば良い?
OfficeやAdobe Readerの様に動かしたいです。
- 307 :
- activex
- 308 :
- cfilefindで、指定フォルダ内の全フォルダの情報を読み出すプログラムを作成しているのですが、
フォルダのプロパティで出た数と、プログラムで読み出した数とで異なるフォルダがあります。
フォルダの階層もちゃんと再帰的に読み出しています。
試しに色々なファイルをフォルダに階層的に入れて数えましたが、
ファイル数303とかちゃんと合っているフォルダもあれば、
実際に確認したいファイル数10136 フォルダ数1654のフォルダでは、
合計11522と、少なく出ます。
FindNextFileのエラー情報も出しましたが、すべて18でした。
なにが原因なんでしょうか?
- 309 :
- 隠しファイル、システムファイル
- 310 :
- ソースも貼らずに何を言っておるのかね
- 311 :
- >>310 そーですよね。
なにか既知の問題とかないかと思ったもので。
原因わかりました。
Cfilefindは問題ありませんでした。
ファイル名に、HTMLの半角文字「 」が使われていて、
ワイド文字からマルチバイト文字に変換するときに、nullに変換されていました。
すれよごしすまんです。
- 312 :
- 通常使用するプリンタの印刷設定で用紙サイズがありますよね?
例えばB5とA4の切り替えをVCプログラムでやりたいのです
やりたいのは用紙サイズ切り替えだけで印刷はしません
印刷はExcel等の印刷ボタンで行います
プリンタの印刷設定の用紙サイズの変更方法(使用するクラス?)など
又は例が載ってるサイトなどがありましたらお教え下さい
よろしくお願いします。
- 313 :
- GetProfileString,strtok,OpenPrinter,DocumentProperties,DEVMODE
- 314 :
- ありがとう
教えてもらったワードで検索してSDKサンプル見つけました
やりたいことができそうです
- 315 :
- >>314
基本的に片山は嘘をつくから相手にしないほうがいい
それに片山の相手をしていると他の回答者に無視されるよ
- 316 :
- >>315
またお前か
- 317 :
- 片山さんは真実を教えてくれたよ?
今度から信じるよ?
- 318 :
- 過疎
- 319 :
- 質問です。
CTimeSpan::GetTotalSeconds()は閏秒を含んでいますか?
例えば
CTime BirthDay(nYear, nMonth, nDay, nHour, nMin, nSec);
CTime Today(__time64_t(NULL));
CTimeSpan Age = Today - BirthDay;
としたときに、Age.GetTotalSeconds()の戻り値は
2つのCTimeインスタンスの間の期間に挿入された
閏秒を加算した秒数になりますか?
- 320 :
- >>319
なるよ。
BirthDayもTodayも__time64_t型の時間を持ってるだけだし。
- 321 :
- ならないでしょ
うるう秒がいつ起こったかなんてライブラリは知らないだろうし、
OSもそもそもサポートしてないから知る手段ないのでは
http://support.microsoft.com/kb/2722715/ja
- 322 :
- >>321
確かにOSが知らないのであればMFCにも反映されて無さそうですね。
CTimeの派生クラスを作って、operation - や + の際に閏秒の判定と
加減をするよう定義することにします。
ありがとうございました。
- 323 :
- まあ過去のうるう秒のあった時刻をまたいで実験してみればいいだけだね
やってみようとおもったが手元にMFCの環境が無いわ、、、
- 324 :
- 対応は無いよ
- 325 :
- CStdioFileのReadStringのfgetsが+1してる件
- 326 :
- VS2012付属のソース見る限りは、
最大長+1=バッファ長という意味合いで使っているんじゃないか?
CString::GetBufferは指定文字数+NULL文字のバッファを返すし。
- 327 :
- フローチャートかくつーるを作りたい。手始めに四角図形をドラッグ出来るようになりたいけど、ドラッグイベントはないし、どうすればいいの?
- 328 :
- >>327
WM_LBUTTONDOWNが来たらPtInRectで四角の中か判定、SetCaptureしてフラグを立てる。
WM_MOUSEMOVEが来たらフラグを確認、移動後の位置を計算、再描画で四角を動かす。
WM_LBUTTONUPが来たらフラグを下ろしReleaseCaptureして移動後の位置を計算、再描画で四角を動かす。
- 329 :
- ドラッグとりあえず出来ました。ありがとう。
ただドラッグ前の図形が表示削除できていないや。楽に消すとコツあります?
- 330 :
- >>329
InvalidateRect
WM_PAINT
WM_ERASEBKGND
ダブルバッファリング
- 331 :
- DrawClient サンプルを見た方が良い
フラグを使うなら WM_CAPTURECHANGED も処理する必要がある
- 332 :
- もと図形の削除もできた、drowclientはまだ見てない。
図形の左下をクリックして動かすと左下を掴んだまま図形を動かすのは難しい?
四角図形の座標とマウス座標の相対座標も計算するのかな
- 333 :
- WinFormsやWPFがあるのにわざわざMFCで作る理由ってなに?
- 334 :
- >>332
GetCursorPos、ClientToScreen、ScreenToClientを使って座標系を統一して
ホットスポット(図形からマウスへの相対位置)を計算。
マウスの位置からホットスポットを引けば図形の新しい位置が求まる。
- 335 :
- >>334
ありがとう出来ました。
あとはドラッグ中に画面更新して画面がちらつくのが気になるだけですね。
グリッドを表示させてみたんですがボタンや線がチラチラしすぎ。
メモリーデバイスコンテキスト検討しようかな
- 336 :
- wixformsやwfpがそもそも何かわからないです。それだとフローチャートを書くツールを作りやすいんですか?
- 337 :
- >>336
そういうのに特にwpfはめっちゃ向いてる
- 338 :
- DrawClient見りゃ質問した内容は全部書いてあるのに…
そもそもそのツールを作る理由って何?
プログラムの勉強をしたいのかと思ってたけど、ツールが欲しいだけの
ような気がしてきた…
- 339 :
- 質問した理由は、umlのような図形プログラムを作りたかったからです。
かなり用途を限定したRPGツクールのプログラム版のようなものでしょうか
だから自作実装しておきたい。
- 340 :
- >>335
ちらつきをなくすならWM_ERASEBKGNDとメモリDCですね。
- 341 :
- >>340
書き込み規制で遅くなったけど メモリーdcは少し面倒だったので、WM_ ERASEBKGND で対応しました。
当初の目標は達成できましたが、 フローチャートを描くツールとしては 図形クラス設計しておいて、 表示や当たり判 定、図形の中に文字を書くなどなどですね
- 342 :
- WPFのベクタグラフィックス最高だぞ
- 343 :
- このスレは生きているのかな?
BOOL Cmessage_winDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
// Framework は、この設定を自動的に行います。
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
SetWindowPos(&Cmessage_winDlg::wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}
ダイアログウインドウを出すだけのプログラムですけど、
普通に起動すると常に最前面に出せるのに、
タスクマネージャーにより起動させると、常に最前面になりません。
なんで?
- 344 :
- WS_EX_TOPMOST
- 345 :
- thanks
- 346 :
- ドキュメント/ビューの基本的なところで教えてください。
SDIではCDocumentとCViewが使いまわされますが、あるドキュメントで作業した後に
別のドキュメントを開いた際、それまで使用していたCViewの後始末はどこで行えば
いいんでしょうか?
CView::OnInitialUpdateの冒頭で初期化に先立って行うのが普通なんでしょうか?
- 347 :
- SDIならそうするしかないんじゃないの
- 348 :
- なるほど、ありがとうございます。
そうすると、CView::OnInitialUpdateはCDocument::DeleteContentと違って
終了時に呼ばれないですから、同じ後始末処理をOnDestroyかどっかと
両方に書かなきゃならないんですかね。
- 349 :
- >>346
何なのかわからないけど、その後始末の必要な物をCDocument側に置けないの?
- 350 :
- MFC+SDIなら綺麗な設計にはならんw
- 351 :
- >>349
具体的には、ドキュメントの内容に応じて動的に作成するコントロールなどです。
- 352 :
- CDockablePaneとかのMFCの比較的新しい機能を解説した書籍ってないもんかな。
- 353 :
- VS2008のMFCで、CMDIFrameWndEx::ShowFullScreenを使って全画面表示をしようとしています。
ただ、そのままだと完全な全画面にはならずタブと枠が残ってしまいますが、完全な全画面に
するにはどうすればいいでしょうか?
ちなみにCFullScreenImpl::EnableTabsAreaで制御できるのかなと思いましたが、アクセスする
方法がわかりませんでした。
- 354 :
- MFCの共有DLLを読み込んだDLL同士でスレッド情報を共有させ、CWndの仮想関数を
機能させるには、それぞれのDLLのエクスポート関数の先頭にマクロを書けば良いのですか?
- 355 :
- telnetネゴシエーションがよくわからない。mfcのソースコピーできるとこない?
- 356 :
- エスパーさん ━キョロ━(゚∀゚≡゚∀゚)━キョロ━マダ━?
- 357 :
- タブ形式のMDIでクローズボックスを表示させない方法ってありますか?
検索するとhttp://support.microsoft.com/kb/201553/jaのような方法は
見つかるのですが、どうもタブ形式では効かないようで。
- 358 :
- .NET 2003なんですけど、プロジェクトを作成した時点で
例えば#include "LeftView.h"ってソースにインクルードされてるのに、
いつのまにか自動的に#include ".\leftview.h"
とかってソースに追加でインクルードされるのを抑制することは出来ますか?
VS6とか、以前のバージョンではこんな余計な機能無かったのに。
うざくてしょうがない。
- 359 :
- >>358
VisualStudioスレへどうぞ。
- 360 :2013/09/12
- VS2010のVC++でCListCtrlのCreateDragImageでドラッグアンドドロップを実装しています。
開発、動作とも32ビット環境で、Unicodeでコンパイルしています。
XPとWin7で作成される画像が違うのですが、仕様が変わったのでしょうか?
リストコントロールはFULLROWSELECTにされていて、XPでは存在する全ての列のイメージが作成されますが
Win7だと一番左のセル1個の画像だけ作られて、他の列は作られません。
全く同じバイナリを動作してXPと7で差があるのですが、それに関する文献はありませんか?
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
Metroスタイルアプリ開発について語れ (952)
Git 6 (556)
float 使うヤツはドシロートかおぢさん (156)
Subversion r14 (694)
【実験台】 Python 3.0 のお勉強 Part 1 【非互換】 (571)
CoffeeScript (266)
--log9.info------------------
昔のDTM事情教えてくれ【懐古】【苦労話】【昔話】 (147)
とにかく自分の音源を金に換えようぜ (470)
みんなでラップミュージックをつくろう pt.5 (836)
【ファミコン】FINAL RIMIX!【レトロゲー】Stage12 (756)
電源■ケーブル■ (461)
【フリー】LMMS【DAW】 (375)
リボンマイク (254)
結局ピアノを弾けないと中田ヤスタカになれない 2 (423)
知ってる限り最高音質のCDを挙げるスレッド (864)
【隔離】たくえむG【統失】 (788)
【EDM全般】ミックスダウンテクニック2【リミックスOK】 (130)
■オリコンデイリーランキング3位が693枚という時代 (494)
何を書いても構いませんのでinDTM板 (534)
【激震】無料でも音楽は聴かない層が増大! (442)
DTMに最適なヘッドホン(ヘッドフォン)第31章 (168)
究極初心者でも簡単に作曲できる方法教えてくれ 11 (328)
--log55.com------------------
【育成失敗】ノアの何がダメだったのか語るスレ164【スモールパッケージが出来ない】
新日総合スレッド2486
【あーやめてもらいたいこれは!】昭和の全日本プロレス72【アイドルがやられます!】
【いま尚】ジャンボ鶴田83【実力世界一】
東京女子プロレスPart24
馬場の評価が高かったレスラー低かったレスラー
【TAKAみちのくの】JUST TAP OUT 【新団体】
KENTAはなぜノアから逃げたのか