■MFC相談室 mfc14d.dll■
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/07/13(水) 05:28:44■MFC相談室 mfc13d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1110179996/
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc5.2ch.net/test/read.cgi/tech/1062098350/
■ VisualC++(MFC限定)相談室 MFC8.dll■ (スレタイ壊れているけど前スレ)
http://pc5.2ch.net/test/read.cgi/tech/1056584836/
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc5.2ch.net/test/read.cgi/tech/1047949606/l50
■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc5.2ch.net/test/read.cgi/tech/1039607377/
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/tech/kako/1028/10285/1028553308.html
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/tech/kako/1021/10216/1021620974.html
■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/tech/kako/1014/10140/1014057520.html
■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/tech/kako/1008/10080/1008031675.html
■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/tech/kako/989/989902845.html
0002デフォルトの名無しさん
2005/07/13(水) 10:42:13CParentDialog::OnShowWindow(BOOL bShow, UINT nStatus)
{
ChildDialog.Create(IDD_CHILD, this);
ChildDialog.ShowWindow(true);
}
として動作していました。
が、ChildDialogに値を渡したいので、
ChildDialog.Create処理だけをParentDialog.DoModal()の前に移動して、
ChildDialogのプロパティを参照するようにしました。
そうしたところ、ChildDialog.ShowWindow(true)でエラーになりました。
回避方法教えて下さいでつ。
00032
2005/07/13(水) 10:47:26処理変えなきゃ良いんでつね。
>ChildDialog.Create(IDD_CHILD, this);
これがnewだと勘違いしてます他。
0004デフォルトの名無しさん
2005/07/13(水) 15:15:44非表示では動作しませんか?
0005デフォルトの名無しさん
2005/07/13(水) 15:27:39非表示でも動きます。
UpdateData(TRUE);
UpdateData(FALSE);
が実行されれば。
00064
2005/07/13(水) 15:59:26ただ、CWnd::UpdateDataの中の1行目「ASSERT(::IsWindow(m_hWnd));」でコケまつ。
0007デフォルトの名無しさん
2005/07/13(水) 16:19:00アプリがどういう作りかわからんが、
ウィンドウが作られる前にUpdateData動かしてるからだろ。たぶん。
ダイアログのコンストラクタでUpdateData呼び出したら、
同じエラーになるぞ。
00084
2005/07/13(水) 16:38:19Dlg.DestroyWindow();
Dlg.Create(IDD_DLG, this);
でウィンドウ作るようにしてみましたが、
今度は、
CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
の出だしの、
「ASSERT(HIWORD(lpszTemplateName) == 0 || AfxIsValidString(lpszTemplateName));」
でこけてまつ。
変な記述してるわけじゃないんだけどな...
00094
2005/07/13(水) 16:45:08>CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
先頭の引数は数値なのにLPCTSTRに入ってる時点で不思議。
なんか明示的に書いてやる必要があるのかな?
00104
2005/07/13(水) 16:47:270011デフォルトの名無しさん
2005/07/13(水) 16:52:12つか、いったい何がしたいのか?
00124
2005/07/13(水) 16:56:23>Dlg.m_Control.SetCaption("データ"); //////←これをやりたい!
Dlg.DoModal();
コントロールに文字列を設定したい。
なぜかというと、Dlgの中のメソッドの人に、
コントロールの文字列を使って動作する処理が入ってるから。
それを直すのも怖いし。
0013デフォルトの名無しさん
2005/07/13(水) 17:01:20環境書いてくれい
VC6.0++とかか?
あと、Dlg.DestroyWindow();で
ダイアログを破棄してからセットするのか?ていうかできないんじゃ・・・
00144
2005/07/13(水) 17:04:42>あと、Dlg.DestroyWindow();でダイアログを破棄してからセットするのか?ていうかできないんじゃ・・・
え”〜困ります。
既に出来てるDlgがグローバル変数になってて、一旦初期化しないと...
00154
2005/07/13(水) 17:12:22Dlg.UpdateData(FALSE);
>Dlg.m_Control.SetCaption("データ"); //////←これをやりたい!
Dlg.DoModal();
でも、UpdataDataでエラーですね。。。
UpdateDataを外してもデータのセット時にエラーだし。
0016デフォルトの名無しさん
2005/07/13(水) 17:14:26CDialog::OnInitDialogの中で
UpdateData(TRUE)
001716
2005/07/13(水) 17:15:50UpdateData(TRUE)じゃなくてUpdateDate(FALSE)です
00184
2005/07/13(水) 17:20:18っていつコールされるんでしたっけ???
0019デフォルトの名無しさん
2005/07/13(水) 17:21:02dlg.DestroyWindow(); //破棄する
dlg.Create(IDD_DIALOG1, NULL); //も一回作る
dlg.m_ctltext="aiueo";//ダイアログのメンバにセット
dlg.UpdateData(FALSE);//変数からコントロールに更新
dlg.ShowWindow(SW_SHOW);//表示
これなら動いたぞ
0020デフォルトの名無しさん
2005/07/13(水) 17:25:49dlg->m_ctltext="aiueo";
dlg->DoModal();
dlgはCNewDlg*型
これならUpdateDataいらんな
002116
2005/07/13(水) 17:31:53>っていつコールされるんでしたっけ???
CreateまたはDoModalしたとき。
そのCDialog::OnInitDialogの中で
自動でUpdateData(FALSE)が呼ばれるようになってる
MFCのソース見てごらん。
19の書いてくれてるのは
dlg.m_ctltext="aiueo";//ダイアログのメンバにセット
dlg.Create(IDD_DIALOG1, NULL); //も一回作る
dlg.ShowWindow(SW_SHOW);//表示
としてもOKだと思うよ。
中でUpdateDataしてくれるはず。
00224
2005/07/13(水) 17:34:33>>19
ですよね?
自分もそれに近いコールで動いてる箇所もあるような気がするし、
今のフォームはASSERTにひっかかるし、キョドってる。
MFCのCDialogのASSERTってトラップっていうか邪魔。
002319
2005/07/13(水) 17:37:42あ〜ほんとだ、動くね。
00244
2005/07/13(水) 17:48:25>dlg.DestroyWindow(); //破棄する
>dlg.Create(IDD_DIALOG1, NULL); //も一回作る
19路線でやってみたいと思いましたが、
Createの中の、
BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate,
CWnd* pParentWnd, HINSTANCE hInst)
の中の、
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);
この行でエラーダイアログが出ます。
00254
2005/07/13(水) 18:00:19>dlg.DestroyWindow(); //破棄する
>dlg.Create(IDD_DIALOG1, NULL); //も一回作る
ごめんなさい、ここまでOKでした。
間違いは、2回目のCreateのID間違いでした。
が、この後のDoModal()でエラー。
DoModal前にCreateは禁止だったかなぁ?????
00264
2005/07/13(水) 18:03:04BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
{
ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal?
の出だしのASSERTで爆発。
もっと自由にコールできるメソッドにして欲しぃ。
002719
2005/07/13(水) 18:06:49Createの後でDoModalは俺もエラー
だからとりあえずShowWindowにした。
DoModalでなきゃヤダとか言うなら>>20の方法なら
問題なくDoModal出来る。
表示されるダイアログがクラス化されていればの話だが・・・
他に方法あったっけ?
00294
2005/07/13(水) 18:11:03>DoModalでなきゃヤダとか言うなら>>20の方法なら
>表示されるダイアログがクラス化されていればの話だが・・・
Dlgがグローバル変数で、かつ、実体宣言されてるので、
こうするためには激しい書換えが発生しまつ。
一部のメンテなんで激しい書換えは予定外でつ。厳しい...
0030デフォルトの名無しさん
2005/07/13(水) 18:14:23そういうMFCでのモーダルとモードレスの制限が知りたいんじゃなく回避方法が必要なんでわ?
003128
2005/07/13(水) 18:19:35そういう問題じゃない。
Createの後で何でDoModalするんだよ。
モードレスダイアログなら19の書いてくれてるように
CreateしてShowWindowでいいの!
>>30
何を回避?
4がモーダルとモードレスを混同しているとしか思えないが。
0032デフォルトの名無しさん
2005/07/13(水) 18:34:26アタマワリー
別のライブラリなら、
TCustomForm *Form = new TForm(NULL);
Form->PropA = "aaa"; //値をセット
Form->ShowModal(); //モーダル
Form->Show(); //モードレス
という感じで自由にコールできるぞ。
003331
2005/07/13(水) 18:46:01意味不明。
このスレはMFCの話だろ。
Createするってことはモードレスを意図してるんだろ。
その後でDoModalする必要性は如何に?
003419
2005/07/13(水) 18:54:14表示ダイアログの書き換えムリなら、
ShowWindowでモードレス表示して、
親ダイアログは制御を取らないように・・・って
なんか面倒なような気が・・・
俺なら問答無用に表示ダイアログ作り直すw
0035デフォルトの名無しさん
2005/07/13(水) 18:54:17これが読み間違いだろ。
このクリエイトの目的は値をセットするためであってモードレス意図じゃないだろ。
00364
2005/07/13(水) 18:56:55やっぱ難しいんですね。
MFCのDoModalとそれ以前のコントロールの設定の組み合わせは。
ダイアログ直して、コントロールに依存しないようにしてみまつ。
003719
2005/07/13(水) 19:00:31仕様が変。
DoModalしたきゃ、表示ダイアログクラス化して、
パブリックなメンバ変数にアクセスして設定するとかしなきゃダメ。
そうすりゃ何でもあり。自由自在!!
00384
2005/07/13(水) 19:02:27変なものをメンテしてるんだから、そんなこと言われても...
やっぱ、MFCのCDialogがもう少し使いやすくなるべきでわ。
ライブラリが色々強要してくると面倒。
003933
2005/07/13(水) 19:04:50値をセットしたいなら
[モーダル]
dlg.m_hoge="abcde";
dlg.DoModal(); ※
[モードレス]
dlg.m_hoge="abcde";
dlg.Create(); ※
dlg.ShowWindow();
でいいだろ。(引数は省略)
UpdateData(FALSE)はそれぞれの※の後で、
CDialog::OnInitDialog()の中で自動で呼ばれる。
CreateとDoModalを一緒に呼び出す意図が分からないのだが。
00404
2005/07/13(水) 19:09:28あるグローバルのダイアログが色んな用途に使われてて(←ここが破綻の元。せめて、1リソースに複数クラスにしといてくれたら何とかなったかも)、
モーダル/モードレスで開いたり閉じたりします。
で、
dlg.DestroyWindow(); //破棄する
が必要なんです。
で、破棄後に、
[モーダル]
dlg.m_hoge="abcde";
するとエラーになる。
004119
2005/07/13(水) 19:18:36ねぇ、そのグローバルのダイアログってクラス化されてないの?
dlg.DestroyWindow();のdlgってあくまでCDialogなのか?
宣言部教えて
00424
2005/07/13(水) 19:24:34何を言いたいのか分かっているというか、
ダイアログのコントロールに直接入出力するのがおかしいことくらい誰でも知っている。
とりあえず、自分は19を必要としてない。
00434
2005/07/13(水) 19:32:2819さんは色々教えて下さった方でした。
「モーダルとモードレスと知らないのか?」と煽った人と勘違いしました。
004419
2005/07/13(水) 19:36:46うぇ〜あぶねぇ・・・
ムカついて煽りの一文書くとこだったw
004519
2005/07/13(水) 19:40:59どんな使い方してる?
DoModalで表示?それともShowWindowで表示?
必ずCreateしないと使えないの?
00464
2005/07/13(水) 20:01:03今までずっとShowWindowでモードレスされてたウィンドウですが、
今回の修正でモーダルが必要になったんでdlg.DestroyWindow()しました。
ダイアログを別インスタンスにしようと思ったら、
グローバルなダイアログ同士が参照しあってて、
正直ガクブル
004733
2005/07/13(水) 20:02:28俺に対して言ってるんだろうなぁ。
16以降の俺の全レス読んで欲しい。それでも煽りと捉えられてしまうなら残念。
簡単なコードで試してみたが動いたことだけ報告しておくよ。
(ダイアログ作成と廃棄のタイミングまで細かく見てないので、これでは問題あるかも。
あと、それぞれの関数はボタンのコマンドハンドラでdlgはCDialog派生です)
void CTestApp::OnModal()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
dlg.DestroyWindow();
dlg.m_str = "Modal";
dlg.DoModal();
}
void CTestApp::OnModeless()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
dlg.DestroyWindow();
dlg.m_str = "Moeless";
dlg.Create(IDD_HOGE, NULL);
dlg.ShowWindow(SW_SHOW);
}
00484
2005/07/13(水) 20:06:24煽りに対して憤ってるんじゃありません。
前スレで感じたんだけど、MFCスレは上手く会話を流さないとやヴぁい流れになるんで。
dlg.DestroyWindow();
dlg.m_str = "Modal";
dlg.DoModal();
この「m_str」はCStringだと思いますが、これをコントロールにするとエラーします。
でもまぁこれはMFCの制限と捕らえました。
0049デフォルトの名無しさん
2005/07/13(水) 20:10:040050デフォルトの名無しさん
2005/07/13(水) 20:10:54A,BをそれぞれDDEサーバーかつDDEクライアントにして
プログラムを書いたら、どうにか動いたのですが、それをLinuxに
移植したいと考えています(できればWindowsでも動かしたいです)。
DDEの代わりになるお勧めの方法はありますか?
交換するデータ量は、たとえばAのプログラムでボタンをクリックした
ときに、数バイト程度の文字列をBに送るとか、その逆です。
よろしく。
005147
2005/07/13(水) 20:13:28dlg.m_ctrl.
dlg.Create(...)
こうすると確かにエラー
Createの段階ではコントロールウィンドウが作成されてないためでしょう
dlg.Create(...)
dlg.m_ctrl.
ならOKでしたよ。
0052デフォルトの名無しさん
2005/07/13(水) 20:15:35MFC の window = CWnd は、
Windows の window HWND のラッパ。
CWnd は C++ 的 object。そのまんまの lifetime。
HWND は Cretate から Destroy までの lifetime。
もしくは DoModal() の開始から終了までの lifetime。
dialog 上の control (dialog から見て child control) は HWND 的には
dialog (control から見て parent window) と lifetime を共にする。
005319
2005/07/13(水) 20:26:26ちょーとまて
>この「m_str」はCStringだと思いますが、これをコントロールにするとエラーします。
って事は実はクラス化されているのか?DoDataExchangeも使ってるし・・・
dlg.DestroyWindow(); のdlgって
CDialogの派生でCXxxxDlgなのかな?
dlg.DestroyWindow(); //今までの削除
CXxxxDlg dlg2;//新しく宣言
dlg2.DoModal(); //表示
まずこれで動くか?
0054デフォルトの名無しさん
2005/07/13(水) 20:27:27ご愁傷様。そこで回避案。
class IInitDialogHandler
{
public:
0055デフォルトの名無しさん
2005/07/13(水) 20:30:25>今までずっとShowWindowでモードレスされてたウィンドウですが、
>今回の修正でモーダルが必要になったんでdlg.DestroyWindow()しました。
AfxGetMainWnd()->EnableWindow(FALSE); してから dlg.ShowWindow() すると
おおむねモーダル風になるよ。
0056デフォルトの名無しさん
2005/07/13(水) 20:40:52class IInitDialogHandler
{
virtual void Do() = 0;
};
class 問題のDialog
{
IInitDialogHandler* m_initDialogHandler;
void OnInitDialog()
{
if (m_initDialogHandler) {
m_initDialogHandler->Do();
}
}
};
問題のDialog dlg;
class 問題のDialogのClient : public IInitDialogHandler
{
virtual void Do()
{
dlg.m_control.SetWindowText("modal");
}
void OnModal()
{
dlg.DestroyWindow();
dlg.DoModal();
dlg.CreateWindow(...);
}
}
005747&51
2005/07/13(水) 22:30:54[モーダル]の場合
dlg.m_ctrl.・・・
dlg.DoModal();
とすると、DoModal前はコントロールのウィンドウが作成されておらず、HWNDが無効なため
m_ctrlにアクセスしようとするとエラーになる。(51のCreate前と同様の現象)
>>12を読む限り文字列さえ設定できれば良いようなので
新たにCString型のDDX変数を追加して>>47みたいにすればOK。
SetCaptionというのには標準のDDX_Textを使えないので
自前でDDX_,DDV_を実装すればよい。
関数を書いてもいいし、CHogeDialog::DoDataExchangeの中に書くのでもいい。
http://www.microsoft.com/japan/developer/library/vcmfc/_mfcnotes_tn026.htm
0058デフォルトの名無しさん
2005/07/13(水) 22:52:44CWnd : : Detach()でも使えないかね…
DestroyWindow()はなんか大げさな希ガス。
0059デフォルトの名無しさん
2005/07/14(木) 08:29:5800604
2005/07/14(木) 08:42:33あ、DoDataExchangeってそういう使い方するんですか。
コントロール生成の前に値を変数に入れとくわけですね。
って超基本を誤解してた悪寒。
>>51-59
各種破棄メソッドとlifetimeの関係、
このあたり、ずっと知りたいとこでした。¢(ーー;メモシトク・・・
0061デフォルトの名無しさん
2005/07/14(木) 13:58:17dcWork に描画された内容を 指定したRGB値を透明色にして 全体を半透明に dcScrren にBitBltしたいのですが、
このようなことはできるのでしょうか?(自前でアルファブレンドや透明色のコードを書かないで)
CDC::AlphaBlendとCDC::TransparentBltの2つの機能をあわせたような処理を実現したいのです。
自前でピクセルを全て操作するような処理を実装すると、すこぶる遅くなるので、MFC(API)に任せたいのです。
(DirectXとかOpenGLとかは使いたくないです。)
賢者の方よろしくご教授下さい。お願いします。
0062デフォルトの名無しさん
2005/07/14(木) 14:14:19006361
2005/07/14(木) 14:22:23他にこのAPIが使えそうとか、こういう風な実装をすれば、高速に処理できるとかヒントや参考になるリンクでも
知っている人がいましたら、ぜひお教え下さい。お願いします。
GDI+とかでもできなさそうでしょうか?Graphicsクラス?
0064デフォルトの名無しさん
2005/07/14(木) 14:58:030065デフォルトの名無しさん
2005/07/14(木) 15:09:530066デフォルトの名無しさん
2005/07/14(木) 15:22:55006716ほか
2005/07/14(木) 19:19:35今ごろになって何言ってんの?
まともにデバッガ使ってないだろ。
ついでに、俺の全レスは>>16>>21>>28>>31>>33>>39>>47>>51>>57。
それでも42-43のような発言をした挙句に撤回もせずに
すっとぼけて出てくる気が知れん。
-----------------------------------------------------
あまりにも目に余るので一言言わせてもらいました。
他の回答者&質問者の方々、スレ汚しになり申し訳ありません。
0068デフォルトの名無しさん
2005/07/14(木) 19:21:13リストのアイテムを選択した際の描画をフックするためにOnCustomDrawの中で
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
switch( lplvcd->nmcd.dwDrawStage )
{
case CDDS_PREPAINT:
*pResult = (CDRF_NOTIFYSUBITEMDRAW | CDRF_NOTIFYITEMDRAW | CDRF_NOTIFYPOSTPAINT);
break;
case CDDS_ITEMPREPAINT:
*pResult = (CDRF_NOTIFYSUBITEMDRAW | CDRF_NOTIFYPOSTPAINT);
break;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
*pResult = (CDRF_NOTIFYSUBITEMDRAW | CDRF_NOTIFYPOSTPAINT);
break;
case CDDS_POSTPAINT:
break;
case CDDS_ITEMPOSTPAINT | CDDS_SUBITEM:
case CDDS_ITEMPOSTPAINT:
if ( (lplvcd->nmcd.uItemState & CDIS_FOCUS) != 0 )
{
// ... (*)
}
break;
default:
*pResult = CDRF_DODEFAULT;
break;
}
としていまして、アイテムをマウスでピックした際には(*)に来るのですが、
プログラムの中から以下のようにアイテムを選択状態にしても来ません。
SetItemState( iIndexInVisible, CDIS_SELECTED | CDIS_FOCUS, CDIS_SELECTED | CDIS_FOCUS );
何が問題かわかりますでしょうか。。。
006968
2005/07/14(木) 19:24:27マウスでアイテムをピックした場合にはうまくいくものの、プログラム内の他の関数から
SetItemStateを読んでアイテムを選択状態にしても(*)の場所に処理が来ずに描画ができないという状況です。
0070デフォルトの名無しさん
2005/07/14(木) 19:30:32Listコントロール自体がフォーカスを持っていないからでは?
0071デフォルトの名無しさん
2005/07/14(木) 19:33:16選択状態のアイテムの強調表示を常に行いたいのなら、ListViewのスタイルに
LVS_SHOWSELALWAYS を追加して、uItemState & CDIS_SELECTED を見るのが
正しげに思える。
0072デフォルトの名無しさん
2005/07/14(木) 19:38:48フォーカスと選択に関する例です。解っているなら無視してください。
例えば List Control の代表的な例としてエクスプローラでファイルがいくつか入った
フォルダを開いて、アイテムをクリックすると、リストコントロールとアイテムが選択され、
かつそのアイテムにフォーカスが移動する。
ここでCtrl+矢印でフォーカスだけ移動させてみると、フォーカスを示す点線の矩形が
ファイル名を囲むように表示される。他のウィンドウをクリックするなどして、リストコント
ロールがフォーカスを失うと、アイテムのフォーカスを示す矩形は非表示になる。
0073デフォルトの名無しさん
2005/07/14(木) 19:55:46SetItemStateの引数に渡すのはCDIS_じゃなくてLVIS_の方だと思う。
それぞれ以下のようにdefineされてるので、確認。
CommCtrl.h
#define LVIS_FOCUSED 0x0001
#define LVIS_SELECTED 0x0002
#define CDIS_SELECTED 0x0001
#define CDIS_FOCUS 0x0010
0074デフォルトの名無しさん
2005/07/15(金) 00:05:26そしてWM_USER_ADD_STRINGというメッセージを受けるとメッセージハンドらで
CXXXDlg::OnAddString(WPARAM wParam, LPARAM lParam)
{
m_Edit += (LPCTSTR)lParam;
UpdateData(FALSE);
}
とやってm_Editに文字列を追加していきます。
そしてたくさん追加するとスクロールバーが出てくるのですがこいつを一番したに自動で行かせたいのです。
つまり最後に追加した奴を見るのにいちいち人手でスクロールさせるのは面倒くさいので自動にしたいわけです。
いい方法はありませんか?
0075デフォルトの名無しさん
2005/07/15(金) 00:14:310076デフォルトの名無しさん
2005/07/15(金) 01:15:04MSDNのCEditクラスメンバー辺りを矯めつ眇めつする。
0077デフォルトの名無しさん
2005/07/15(金) 01:42:18UpdateDataの次の行から
CEdit * pWnd = (CEdit *)GetDlgItem(IDC_EDIT);
int lines = pWnd->GetLineCount();
int pos = pWnd->LineIndex(lines - 1);
pWnd->SetSel(pos, pos, FALSE);
とかやってみるとそれっぽく動いたのですが、どうも落とし穴がありそうな気が。
さらにIDC_EDIT2を追加してこちらも同様にWM_USER_ADD_STRING2で
テキストを追加、行を最後に移動と言う処理をさせると
IDC_EDITとIDC_EDIT2のどちらかしかスクロールバーが最後に来てくれないのです。
なぜでしょうか?
0078デフォルトの名無しさん
2005/07/15(金) 01:56:24SetSel()は表示されることを保証しないからねぇ。
ちなみに私が使っている最終行を表示させる関数はこう。
void showLastLine(CEdit & edit)
{
edit.SetRedraw(false);
edit.LineScroll(edit.GetLineCount());
edit.LineScroll(-1);
edit.SetRedraw();
}
0079デフォルトの名無しさん
2005/07/15(金) 02:07:15ありがとうございます!!!
明日早速試してみます。
本当に夜分遅くありがとうございました!
0081デフォルトの名無しさん
2005/07/15(金) 13:40:58ViewのOnCreateでダイアログを作成してモードレスで表示しています。
ソフトが立ち上がったときにこのダイアログのエディットコントロールに
すでに入力フォーカスがあるようにしたいのですが、
OnInitDialogでSetFocusをやったけれどうまくいきませんでした。
どこでSetFocusをすればいいのでしょうか?
0082デフォルトの名無しさん
2005/07/15(金) 13:43:07ViewのOnCreateでダイアログを作成してモードレスで表示しています。
ソフトが立ち上がったときにこのダイアログのエディットコントロールに
すでに入力フォーカスがあるようにしたいのですが、
OnInitDialogで
GetDlgItem(ID)->SetFocus()
をやったけれどうまくいきませんでした。
どこでSetFocusをすればいいのでしょうか?
0083デフォルトの名無しさん
2005/07/15(金) 13:44:210084デフォルトの名無しさん
2005/07/15(金) 14:57:53OnInitDialog()のテンプレートにはコメントがついていると思うのだが、
そこには何と書いてあるかな?
0085デフォルトの名無しさん
2005/07/15(金) 16:04:25>84さんのやり方のほうが簡単だとおもって
戻り値をFALSEに代えてみたけどちょっと動作が不安定なのです・・・
入力フォーカスが行ったり行かなかったりします。(大概いかない)
もしよければ詳しく教えてもらえませんか?
OnInitDialogで
GetDlgItem(ID)->SetFocus();
return FALSE;
とやると、一旦はフォーカスが行くようですが、
そのあとKillFocusが呼ばれ、フォーカスは目的の場所には行っていません。
当然SetFocusをやらなければKillFocusも呼ばれないのですが。
0086デフォルトの名無しさん
2005/07/15(金) 17:40:26ダイアログからフォーカス奪うからだめでしょう。
そのタイミングでダイアログをアクティブにするため
PostMessageすればよろし。
0087デフォルトの名無しさん
2005/07/15(金) 19:44:30MFCで、リソースからダイアログを生成したのですが、
再描画がうまくされない不具合があります。
なぜなのでしょうか?
ちなみに、再描画されないリソースダイアログは、親のダイアログの子としてCreate生成しております。
0088デフォルトの名無しさん
2005/07/15(金) 20:21:30008987
2005/07/15(金) 20:26:31009087
2005/07/15(金) 20:28:37具体的には、親のダイアログの子としてCreateすると、
子ダイアログの後ろにある、親の背景が透けて見えるという
感じです。コンパイルは成功するのですが、描画だけおかしくて。
問題点を教えてもらえればありがたいです。
0091デフォルトの名無しさん
2005/07/15(金) 20:29:55せいだろう。チェックを外してみるが良し。
009387
2005/07/15(金) 20:58:520094デフォルトの名無しさん
2005/07/15(金) 21:09:23当たり前だろ
0095デフォルトの名無しさん
2005/07/15(金) 22:03:440096デフォルトの名無しさん
2005/07/16(土) 01:04:36RedrawWindow()なりやってみる。
009774
2005/07/16(土) 01:24:20結論から言うと>>77でも>>78さんのやり方でもできましたが、>>77で書いた問題はどちらもありました。
で、その問題はなぜ起きるかと言うと、UpdateDataの契機でIDC_EDITもIDC_EDIT2も
最初の行にスクロールして戻ってしまうからでした。
よって
CXXXDlg::OnAddString()
CXXXDlg::OnAddString2()
のいずれのハンドラでもIDC_EDIT、IDC_EDIT2の両方に対し、最後の行に移動する処理を書く必要があったみたいです。
もっとうまい方法がある気がしますが、自分はこの辺でやめときます。
(キャレットを最後に移動させておくとかするとUpdateDataで最初の行に戻らないのかも??)
009878
2005/07/16(土) 01:47:39あー、そりゃDDXで全てやろうとするからだ。
私の場合は処理速度の問題もあったからReplaceSel()で追加しているんで
UpdateData()までは気付かなかったよ。
0099デフォルトの名無しさん
2005/07/16(土) 08:51:57子ウィンドウをクリップにチェック
010182
2005/07/16(土) 11:54:45そうか。PostMessageもありましたね。
自分の解決策は、Appのイニシャライズで無理矢理SetFocusをする方法でした。
なぜフォーカスを奪われてしまうところの解決策はなさそうですね。
とりあえず解決しております。分からないこともありますが・・・
ありがとうございました。
010278
2005/07/16(土) 14:05:56それじゃ折角だから追加するロジックも貼っておこう。
--
int pos = edit.LineIndex(edit.GetLineCount() - 1);
edit.SetSel(pos, pos);
edit.ReplaceSel("foo\r\n");
0103デフォルトの名無しさん
2005/07/18(月) 00:14:10mfcを使ってWinXPで動作するアプリケーションを組もうと思っています。
開発にはVC++ 2003を使います。
アプリの内容は、インターネット上のサーバーから、値段の情報が10くらい
一度に送られてきて(送られてくる頻度は10値段/3秒くらい)、
それをリアルタイムに折線グラフを画面上に表示するものです。
リアルタイムの株価グラフアプリを思い浮かべて頂くとよいです。
質問の内容は、「上記アプリで「グラフを描画する」際に、最も適当な手段はなにか」を教えて頂きたいのです。
例えば、
mfcの機能のみでゴリゴリ書く
グラフライブラリを使う ←そもそもあるのか?
グラフクラス集を使う ←そもそもあるのか? とかです。
私がググったところ、それっぽいのは発見できませんでした。
将来的にはOpenGLとかを使ったグラフの3次元化も考えています。
エロイ人おながいしまつ。
0104デフォルトの名無しさん
2005/07/18(月) 01:16:010105デフォルトの名無しさん
2005/07/18(月) 10:36:22つ[諦める]
世の中にはグラフのためのライブラリなんて山ほどあるのにそれを見つけられないようなら、ね。
私は3Dグラフも必要だったからTrueWinChartを使ったけど、そんなに高くなくても
追記型のグラフ作成に向いたのがいくつもあるよ。
0106103
2005/07/19(火) 00:11:46レスありがとうございます。
>世の中にはグラフのためのライブラリなんて山ほどあるのにそれを見つけられないようなら、ね。
以前ググったときの検索ワードがよくなかったみたいです。
教えて頂いたTrueWinChartのHPのいくつかのワードでググりましたら、下記他がHitしました。
MSChart、Chart Builder 5.0J、UltraWinChart for .NET、@GKitOCX Chart V2、@GKitOCX Graph V2、SCIENCE VIEW V1.0
中でも、Rogue Wave Stingray Studio 2004 の Objective Chartは
C++で書かれた100%MFC コンパチブルなコンポーネントで、
カスタマイズ可能(ソースで提供)なので今回の用途には一番適していました。
もし、このObjective Chart以外にも、こういうソフトもあるよ、とか、検索ワードにはxxがあるよ、
とかありましたら、お教え下さい。
0107デフォルトの名無しさん
2005/07/19(火) 00:40:430108デフォルトの名無しさん
2005/07/19(火) 15:26:29分かりやすいサンプルコードはないですか?
0109デフォルトの名無しさん
2005/07/19(火) 15:26:510110デフォルトの名無しさん
2005/07/19(火) 16:45:05ウィザードに作らせれば、MFCの持つその機能の使い方はわかる。
0111デフォルトの名無しさん
2005/07/19(火) 18:51:59ゴチャゴチャしてて面倒くさそうなので、process.hの_biginthreadを使用し
ています。
_biginthreadに対するにAfxBeginThreadのメリットって、簡単に言うとどう
いうことでしょうか?
0112デフォルトの名無しさん
2005/07/19(火) 18:53:41結構はずかしい。
0113デフォルトの名無しさん
2005/07/19(火) 18:56:5501141/2
2005/07/19(火) 19:42:53SDIアプリケーションで、新しくウインドウを開きたくて、「マニュアルが教えないMFC」
に書いてあった方法で、MainFrm.cppに
#include "GraphFrame.h" //CFrameWndから派生したクラス
static CGraphFrame* pframe2 = NULL;
void CMainFrame::OnGraph() //メニューのコマンドハンドラ
{
// TODO : ここにコマンド ハンドラ コードを追加します。
if (pframe2 == NULL) {
CTEAnalyzerDoc* pDoc = (CTEAnalyzerDoc*)GetActiveDocument();
//-----F1:新しいFrameの生成 --------------
pframe2 = new CGraphFrame;
pframe2->Create(NULL, "Graph");
//-----F2:新しいViewを生成してFrame/Documentと結びつける ------
CRuntimeClass* pNewViewClass;
pNewViewClass = RUNTIME_CLASS(CGraph);
CCreateContext context;
context.m_pNewViewClass = pNewViewClass;
context.m_pCurrentDoc = pDoc;
CView* pNewView = STATIC_DOWNCAST(CView, pframe2->CreateView(&context));
//-----F3:新しいViewの初期化 --------
pNewView->OnInitialUpdate();
//-----F4:新しいFrameの初期化 -------
pframe2->ShowWindow(SW_SHOW);
pframe2->RecalcLayout();
}
}
と追加したところ、新しい窓が表示されました。
01152/2
2005/07/19(火) 19:43:28m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndToolBar.LoadToolBar(IDR_MAINFRAME);
m_wndStatusBar.Create(this);
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
これでツールバーとステータスバーが出ましたが、メニューは表示されません
(当たり前といえばそうですが)
これから自作のリソースを使って新しいウィンドウにメニューを出すにはどうしたらいいでしょうか。
CMenu m_wndMenuを定義して
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
m_wndMenu.Attach( hmnu );
m_wndMenu.LoadMenu(IDR_MAINFRAME2);
とやってもデバッグアサーションになりました。
0116デフォルトの名無しさん
2005/07/19(火) 20:04:24assertion failed in file <name> in line <num>
Abort Retry Ignore
<name> にはソース ファイルの名前、<num> にはエラーが発生したソース ファイルの行番号が入ります。
[中止] をクリックすると、プログラムの実行が停止します。
[無視] をクリックすると、プログラムの実行が再開されます。
[再試行] をクリックすると、ASSERT の後でも、デバッガに移行できます。
0117デフォルトの名無しさん
2005/07/19(火) 21:17:08なんでAttachした後にLoadMenu()するんだ?
0118デフォルトの名無しさん
2005/07/19(火) 21:37:50OnCreate()のタイミングではどうやっても無理。
CHogeApp::InitInstance()で
CSingleDocTemplate( IDR_・・・
とするか
CMainFrame::PreCreateWindowで
cs.hMenu = LoadMenu(NULL, MAKEINTRESOUCE(IDR_・・・
とする。
0119デフォルトの名無しさん
2005/07/19(火) 22:43:30AfxBeginThreadではMFCの初期化処理が行われている。
つまりスレッドでMFCを使うのならAfxBeginThreadを使わないといけない。
0120デフォルトの名無しさん
2005/07/19(火) 23:38:18AfxBeginThreadなんて使ってないよ。なぜ使ってないかは
ソース見れば分かるが。
0121115
2005/07/20(水) 19:16:36うまくいきました。愛してる。
0122デフォルトの名無しさん
2005/07/20(水) 19:36:46> なぜ使ってないかは
分かったぞ、ゴチャゴチャしてて面倒くさそうだからだ。
0123デフォルトの名無しさん
2005/07/20(水) 19:47:500124103
2005/07/20(水) 20:17:16MFC上で使うには、どのように指定すればいいですか?
OpenGLとか使わなければできないのでしょうか?
0125デフォルトの名無しさん
2005/07/20(水) 21:31:45んなことない
0126デフォルトの名無しさん
2005/07/20(水) 22:12:000127103
2005/07/21(木) 06:11:41小一時間調べました。DirectXや .NET Frameworkを使えば出来そうです。
が、MFC以外の仕組み(Direct〜やOpenGLやその他のライブラリ様のものや .NET Framework)は出来れば使いたくなく、
アンチエイリアスとアルファブレンドのアルゴリズム等も実装せずに使いたいのです。
どのようにすれば出来ますか?
0128デフォルトの名無しさん
2005/07/21(木) 07:01:08たかがリアルタイムトレンドみたいなものにしては要求仕様が無駄に高いな。
TrueWinChart(orTrueWebChart)のようなそういう目的で作られたようなライブラリでさえ
そこまでしてなかったような気がするんだが。
にも関わらず、それらを使わずアルゴリズムも実装しないって、何舐めてんの?
手間をかけずに無から有が得られるわけないじゃない。
営業といっしょにクライアントに頭下げに行ってきたら?
0129デフォルトの名無しさん
2005/07/21(木) 13:09:07GDI+ 程度で十分過ぎると思うけど・・・
0130デフォルトの名無しさん
2005/07/21(木) 13:11:41ほっとけよ。
0131デフォルトの名無しさん
2005/07/21(木) 16:55:23初期状態で、代入できる文字列の長さの制限はありますか?
なぜか、デバッグで調べたところ、文字が途中で切れているみたいなのですが。
0132デフォルトの名無しさん
2005/07/21(木) 17:01:23どのコンストラクタも指定されたデータで新しい CString オブジェクトを初期化します。
各コンストラクタは入力データを新しく確保した領域にコピーします。したがって、メモリ不足の例外に注意する必要があります。
0133デフォルトの名無しさん
2005/07/21(木) 17:05:120134103
2005/07/21(木) 17:11:59情報ありがとうございます。
GDI+について、小二時間くらい調べました。
.NET Frameworkに組み込まれているGDI+は、
VC++のマネージコードから呼び出すように作られていると思います。
VC++マネージコードで書かれた、GDI+を使ったクラスを、
MFCを使ったVC++ネイティブコードから呼び出すことは出来ますか?
また、出来るとしたら、どのようにすれば出来るか、
その方法を知ってる方、回答お願いします。
0135デフォルトの名無しさん
2005/07/21(木) 17:14:01GDI+はマネージなしの単独でも使える。
http://www.kumei.ne.jp/c_lang/sdk4/sdk_335.htm
0136名前は開発中のものです。
2005/07/21(木) 17:43:32俺のとこMeなんだけど。
0137103
2005/07/21(木) 17:56:48的確な情報ありがとうございます。
本当に助かりました。
0138デフォルトの名無しさん
2005/07/21(木) 18:00:29gdiplus.dll をアプリケーションと供に配布すればOK。
ただし、セキュリティの問題で1度改版されているので、
SDK に入ってる奴とかを安易にコピーしないで最新のを
配布する必要があります。
0139デフォルトの名無しさん
2005/07/21(木) 20:28:100140デフォルトの名無しさん
2005/07/21(木) 20:42:1264KByteだと記憶していたが、その記載が見当たらんな。
CEditと勘違いしたかな・・・
0141デフォルトの名無しさん
2005/07/21(木) 21:44:160142デフォルトの名無しさん
2005/07/21(木) 22:06:49LVITEMのヘルプ
0143デフォルトの名無しさん
2005/07/22(金) 19:59:02上書きされてしまいます。
追加で書き込む方法はありませんか?
0144デフォルトの名無しさん
2005/07/22(金) 20:11:580145デフォルトの名無しさん
2005/07/22(金) 20:32:10>最後まで移動してから書け。
これだと途中に追加できないでしょ。
解決策は、書き込む部分以降の文字列を
\nも考慮してバッファに一時退避して、
あとからWriteStringで一発。
0146デフォルトの名無しさん
2005/07/22(金) 20:43:430147143
2005/07/22(金) 21:39:29教えてくれたのにえらそうにしてすみませんでした
0148デフォルトの名無しさん
2005/07/22(金) 22:13:14後、システムのtmpフォルダのpathを得る方法は、どのようにすればいいでしょうか?
0149デフォルトの名無しさん
2005/07/22(金) 22:31:13GetTempPath
0150デフォルトの名無しさん
2005/07/22(金) 22:32:04それぞれGetModulePathName,GetTempPathかな
0151150
2005/07/22(金) 22:35:01149のが正しい。
ちゃんと調べてから答えねば・・・
0152148
2005/07/22(金) 22:36:460153デフォルトの名無しさん
2005/07/22(金) 23:07:42ユーザーの良識に任せられてるから気をつけませう
0154デフォルトの名無しさん
2005/07/22(金) 23:12:090155デフォルトの名無しさん
2005/07/23(土) 00:10:560156デフォルトの名無しさん
2005/07/23(土) 00:16:590157デフォルトの名無しさん
2005/07/23(土) 00:25:18MFCの一番嫌なのは慣れてないことしようとすると調べる時間が大半を占めるところだと思う。
それといちいちドキュメント見なきゃ引数を渡せないのも痛いと思う。
0158デフォルトの名無しさん
2005/07/23(土) 00:29:05基本的なことをするのには簡単なのはわかるが、応用が利かない。
ちょっとでも変形すると、言うこと聞かなくなる。
0159デフォルトの名無しさん
2005/07/23(土) 01:18:44なんだってそうだと思うが。
0160デフォルトの名無しさん
2005/07/25(月) 11:10:01が切り替わります)、このwindowを最小化、またはMFCとは全く別のwindow、
たとえばIEのブラウザのwindowや全く別のソフトのwindowなどで、
この画面を覆ってから再度元のMFCのwindowを表示させるとBMPが別の画像に
変わってしまいます。
このような再度画面を表示させたときに呼び出されるイベントハンドラがあれば
その中で適切に処理して、問題解消できるのですが、そのイベントがわかりません。
試した中でそれっぽい物はOnInitDialogやSetActiveなんですが、
どちらも反応しませんでした。
現状を説明するのが難しくてわかりにくい質問になってしまうのですが、
ご理解できる方で何かアドバイスがあればよろしくご指導お願します。
0161デフォルトの名無しさん
2005/07/25(月) 11:31:04画面に描画するのはいつもOnPaint。
でもほかに原因がありそう。
0162デフォルトの名無しさん
2005/07/25(月) 12:28:58そして、この後ダイアログのOnPaintを作ったけどどーにもならんという相談が続く。
0163デフォルトの名無しさん
2005/07/25(月) 14:23:320164デフォルトの名無しさん
2005/07/25(月) 14:53:370165デフォルトの名無しさん
2005/07/25(月) 16:11:52FindFileの引数に入れる検索する文字列の中に、たとえば
「"C:\news.2ch.net\*.*"」というようなかんじでいれていますが、
検索フォルダ名に"."が入っていると
FindFile() = 0 が返ってきてその下層のフォルダの列挙ができません。
もちろんnews.2ch.netフォルダもありますし、その下にはフォルダがまだあります。
"."を手動で消して試してみたらできました。
これの原因、対処方法など知っている方がいましたら教えてください。
0166デフォルトの名無しさん
2005/07/25(月) 16:17:000167デフォルトの名無しさん
2005/07/25(月) 16:36:48を作っているのですが、ドライブのアクセス方法がわからなくてのっけからつまずいています。
どなたかご存知の方いましたらご教授お願いします。
環境はXP、VC++6.0、MFCダイアログベースです。
0168デフォルトの名無しさん
2005/07/25(月) 16:41:130169165
2005/07/25(月) 16:44:10それも確認済みです。
今もう一度確認しましたが、大丈夫です。
ワイルドカードを"*.*"→"*"に変えてみましたがだめでした。
GetLastErrでは「指定されたパスがみつかりません」と出ました。
もうちょっといろいろやって試してみますが・・・
原因知っている方いませんか〜
0170デフォルトの名無しさん
2005/07/25(月) 16:51:270171165
2005/07/25(月) 16:54:34CFindFile::GetFileTitle()から取得したフォルダ名をつかって
さらにその下のフォルダを取ろうとしていたので、
GetFileTitle() = "news.2ch" となっており、
".net"部分が拡張子とみなされたのか、入っていませんでした。
すみません。ありがとうございました。確認って大切ですね・・・
0172デフォルトの名無しさん
2005/07/25(月) 17:21:54read CreateFile() page in MSDN.
0173デフォルトの名無しさん
2005/07/25(月) 18:49:57ダイアログだと特定のイベント受け取らないとか、
(メニュー反応しないとか、そういうやつ)
あの意味不明な仕様は一体なんなんでしょうね。
MFCの謎仕様に振り回されて気が狂いそうです。
0174デフォルトの名無しさん
2005/07/25(月) 19:16:010175デフォルトの名無しさん
2005/07/26(火) 02:59:05AppWizardの設定で通常にしていたのですが、途中で起動時に最大化にしたくなりまして・・・
0176デフォルトの名無しさん
2005/07/26(火) 10:27:020177デフォルトの名無しさん
2005/07/26(火) 11:23:330178こん
2005/07/26(火) 11:52:44アプリケーションの起動時に消す方法は、PreCreateWindowっやつの中で
CREATESTRUCTをいじくればいいってことはわかったんですが、いったん
表示してしまった後で変更する方法(たとえばメニューから操作して)が
わかりません。
どういう方法をとればいいかご存知の方、教えてくださいませ。
0179デフォルトの名無しさん
2005/07/26(火) 12:02:56>>177
0180こん
2005/07/26(火) 13:18:04そこまでは大体予想がつくんですが、どのメソッドをどういじくるのか
もしご存知なら、もう少し具体的に教えてください。
MFCプログラミングをはじめてまだ1週間なんで、MFC流儀の法則性のような
ものが良くわからないんです。
普段なら「これは好機」と何時間(何日?)もかけて片っ端から
試しまくるところですが、今回は少し急いでいるんです。
どうか、あなたのお時間をお分けください。
0181こん
2005/07/26(火) 13:24:07アーキテクチャで進めています。
0182デフォルトの名無しさん
2005/07/26(火) 13:24:23タイトルやフレームの無いスタイル(style)に修正(modify)する。
0183こん
2005/07/26(火) 14:21:00かなりの時間をカットできました。ありがとうございます!
途中でCWnd::SetWindowPosで試してみたり、ビュークラスに付けてみたりして
で時間がかかりましたが、メインフレームクラスに付けて何とかできました。
最後にもう一つ、甘えさせてください!
これを即時反映するには、どうすればよいのでしょうか、教えてください。
InvalidateRect()とかUpdateData()みたいな感じのものがあるのでしょうか?
0184デフォルトの名無しさん
2005/07/26(火) 15:05:12MFCで最初から提供されている印刷機能で印刷するとすっごく縮小されたものが印刷されてしまうのですがどうしたらいいですか?
0185デフォルトの名無しさん
2005/07/26(火) 15:19:44MSDNを100回嫁
0186デフォルトの名無しさん
2005/07/26(火) 15:28:45その関数名と動的で検索
0187こん
2005/07/26(火) 15:34:47180に書いてある通り、今回はその時間がないからお願いしてるんですよ。
(それでもかれこれ、列挙できなくらい色々な方法を試しましたが。)
どうもあせっていると説明を読んでも上滑り・誤解しがちなので(特に英語)、
実は正解だった方法をスルーしてしまっているのかもしれません。
誰かご存知の方おられましたらよろしくお願いします。
0188こん
2005/07/26(火) 16:26:35ありがとうございます(レスいただいているのにしばらく気づきませんでした)。
SetWindowPos と ShowWindowでそれらしい動作を得ることができました!
動作が微妙な部分もありますが、それはおそらくフラグの整合性(ほかの部分でも
いじってるし)の問題だと思います。
結果的には、この小さな機能を実装するだけで3時間も食ってしまいましたが、
皆さん(お1人?)のお時間をいただけなければもっとかかるところでした。
ありがとうございました。
0190デフォルトの名無しさん
2005/07/26(火) 19:02:390191デフォルトの名無しさん
2005/07/26(火) 19:08:42人生設計見直してみたら?
0192デフォルトの名無しさん
2005/07/26(火) 19:17:34気にするな。俺もウインドの中のウインドの位置をプログラムから
自動調整したり親ウインドをそれにあわせて広げたり縮めたりするだけで子一時間悩む。
0193デフォルトの名無しさん
2005/07/26(火) 19:41:43>>191
0194デフォルトの名無しさん
2005/07/26(火) 19:56:17質問です
リストビューのタイトルバーに、
2行の文字を入れたい場合,、リストビューに
どのように記述すればいいでしょうか?
1 山田 田中
太郎 一郎
のように、第2、3カラム目を2行表示にしたいのですが。
0195こん
2005/07/26(火) 20:20:53AppWizard使ったのは今日が初めてだったんっす。
したら、なんかそっくりなコードがいっぱい作られて大変だったんす。
マジで今日はMFCの仕様に面食らいました。
ちなみに、僕はプログラマではないので、それが唯一の救いです。
0196デフォルトの名無しさん
2005/07/26(火) 20:37:06うぜーから消えてくれ
0197デフォルトの名無しさん
2005/07/26(火) 20:48:24明らかに違うだろw
0198デフォルトの名無しさん
2005/07/26(火) 21:44:020199デフォルトの名無しさん
2005/07/26(火) 21:46:480200デフォルトの名無しさん
2005/07/27(水) 06:54:430201デフォルトの名無しさん
2005/07/28(木) 13:56:16デスクトップ全体はGetDesktopWindow()を使えばいいのはわかったんだけど
他のアプリケーションの領域だけ取得するにはどうすればいいんでしょうか?
0202デフォルトの名無しさん
2005/07/28(木) 14:07:02GetDesktopWindow()を、対象アプリのウィンドウハンドルを得るコードに置き換える。
0203デフォルトの名無しさん
2005/07/29(金) 00:26:09印刷ダイアログで変更した用紙サイズ/用紙方向を出力に反映させるにはどうやったらいいの?
0204デフォルトの名無しさん
2005/07/29(金) 00:29:22用紙サイズ/用紙方向の情報を元に
自前で出力
0205デフォルトの名無しさん
2005/07/29(金) 01:21:48うちにある解凍ソフトでは解凍できませんでした。
何で解凍できますか?教えて下さい。
0206デフォルトの名無しさん
2005/07/29(金) 01:28:250207デフォルトの名無しさん
2005/07/29(金) 10:06:03印刷ダイアログで設定しプロパティを拾うにはどうしたらいいんでしょうか?
0208デフォルトの名無しさん
2005/07/29(金) 11:03:470209デフォルトの名無しさん
2005/07/29(金) 15:01:300210デフォルトの名無しさん
2005/07/29(金) 15:08:34MFC なら WinApp の派生クラスのメンバ変数にでもして、
((CMyApp*) AfxGetApp())->hoge とかする程度でいいんじゃない?
0211デフォルトの名無しさん
2005/07/29(金) 15:19:45thx!
0212デフォルトの名無しさん
2005/07/30(土) 18:52:42どうすればよろしいでしょうか?
よろしくお願いします。
0213デフォルトの名無しさん
2005/07/30(土) 19:57:040214デフォルトの名無しさん
2005/07/30(土) 20:10:55別スレッド作ってそっちを無限ループさせてもいい?
0215デフォルトの名無しさん
2005/07/30(土) 21:15:41グローバルにすればいい
>>212
EnableWindow()
>>214
いいよ
0216デフォルトの名無しさん
2005/07/30(土) 21:35:10ありがとうございます。
ただ、プロパティシートのボタンの場合、自動的に付加されるものなので、
どうやってウィンドウクラスポインタを取得すればいいのかがわかりません。
その辺、おしえていただけないでしょうか。
0218デフォルトの名無しさん
2005/07/30(土) 23:12:31GetDlgItem(IDOK)
0219デフォルトの名無しさん
2005/07/31(日) 17:38:14Debug Assertion Faild!
Program: 実行ファイルのアドレス
File: f:\...\afxwin1.inl(俺のパソコンにFドライブなんぞ無い)
Line: 548
ってダイアログが出る
デバッガで追うと、winfrm.cppの
BOOL CFrameWnd::Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
LPCTSTR lpszMenuName,
DWORD dwExStyle,
CCreateContext* pContext)
の中の
if (!CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle,
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
pParentWnd->GetSafeHwnd(), hMenu, (LPVOID)pContext))
の判定文で上のダイアログが3回出る
検索したけど同じような症状は見つからなかった
どうしたらいい?
0220デフォルトの名無しさん
2005/07/31(日) 18:22:24情報少な杉
0221デフォルトの名無しさん
2005/07/31(日) 18:35:15なぜか起動直後のCFrameWnd::Createの時点でエラーが出る
それまでは普通に表示出来てた
何がきっかけでエラーが出るようになったかはわからない
今の所エラーが出たり出なかったりしながら原因になる部分探し中
0222デフォルトの名無しさん
2005/07/31(日) 18:48:11関数が実行される順番を勘違いしてたから
dcとbmpを初期化してから使うはずなのに
初期化する前に使おうとしてた
0223デフォルトの名無しさん
2005/08/01(月) 16:26:51最初 MFC dll でプロジェクトを作り,
MFC は使わないつもりだったので
stdafx.h から MFC の関係の記述を削除してしまいました
ところが MFC を使う必要が出たため
stdafx.h の記述を元に戻して
開発環境から
[プロジェクト]-[クラスの追加]
より MFC クラスを選択すると
> MFC クラスは MFC プロジェクトにのみ追加できます。
とメッセージが出て MFC クラスを追加できなくなってしまいました
手書きで追加することもできるのですが
たとえば CDialog のように,
リソースを使うものだと
辻褄があわなくなって
うまく動かなくなります
[クラスの追加]でウィザードがちゃんと動くように
するにはどうしたらいいのでしょうか?
0224デフォルトの名無しさん
2005/08/01(月) 21:40:530225デフォルトの名無しさん
2005/08/01(月) 23:36:20例えばCEdit内で右クリックを無効にしたいとします。
この時、CEditを継承した新クラス作って、右クリックイベントのハンドラを
何もしない関数に置き換え、このクラスでエディットボックス作るだけで問題解決
な気がするのですが、違うのでしょうか?
実際、ダイアログにそのコントロールをSubclassDlgItemせずに貼り付けても
うまく右クリックで沈黙してくれているようでした。
というわけで、クラスの継承に加え、CWnd::SubclassXXXする意義を教えて頂けないでしょうか?
0226デフォルトの名無しさん
2005/08/02(火) 00:15:07自分でcppソース上で貼り付ける分には関係ない。
リソースエディタで作った各コントロールのオブジェクトは、通常
フレームワーク側で作成されるが、そのオブジェクトをユーザソ
ース側で管理したいときにサブクラスとして指定する。
>>225の例だとリソースエディタでエディットボックスを作成し、そ
のコントロールを自分でCEditを継承して作ったクラスで管理した
い場合、オブジェクトを作成しSubclassDlgItemで関連付ける感じ。
0227デフォルトの名無しさん
2005/08/02(火) 00:18:020228225
2005/08/02(火) 11:25:02なるほど、理解できました。「前もって配置したリソースIDのあるコントロールを
メンバ変数に関連付けたい人用」メソッドなんですね。最初っからnewしてCreate
するのが好きな人はそちらをドゾ-というわけですな。
// 最初はnew/Createで試し、次はダイアログで一旦CEditのDDX変数を作って
// その後宣言部をCEditから自作クラスに差し替え、つー(邪道な)テストをしてました。
// そんで「何だ、動くじゃん。Subclass関数不要じゃん!」と・・・orz
>>227
調べてわかりました。イチからCreateWindowするのは面倒なので
ウィンドウプロシージャだけを差し替えよう、ということなんですね。
サブ「クラス」といわゆる"class"は別、つうことらしいですが、考えは継承と似てますな
お二方、ありがとうございました。ひとつ賢くなれました
0229デフォルトの名無しさん
2005/08/02(火) 11:41:33V$2005とかでMFCのバージョンがあがってそうならないんでつか?
0230デフォルトの名無しさん
2005/08/02(火) 12:23:450231デフォルトの名無しさん
2005/08/02(火) 12:24:52C++から使うとは限らないからC++の継承とは別のアプローチが採られていると思えばいい。
#実際は、逆だけど。
0232デフォルトの名無しさん
2005/08/02(火) 13:12:06OS開発からあぶれたMFCデザイナたちも最初そう思った。
MFCの継承機構自体がサブクラス化で実装されているにもかかわらず
(全てのウィンドウはこっそりサブクラス化されている!)、
Win32のサブクラス化をユーザーに提供しなかった。
しかし、人々は、左クリックを無効にしたクラスとホイールクリックを無効にしたクラスを何個も
作るにつれ、MFCの継承がガラクタだと分かり始めた。(Win32デザイナは何年も前に分かっていた。)
そこで、1997年にPaul DilasciaがMFCのためにCMsgHookというのを作った。
Win32 APIのサブクラス化を素直に利用するものだ。
http://www.microsoft.com/msj/0397/mfcp2/mfcp2.aspx
MFCを使うひとは、このライブラリが8年前に失格の烙印を押されたものであることを
心に留めて、距離を置いて開発すべきだ。
0233デフォルトの名無しさん
2005/08/02(火) 13:53:581プロジェクトに1リソースじゃなくて、
1プロジェクト内部に複数ダイアログがあって、
1ダイアログに1リソースでつよ?
0234230
2005/08/02(火) 14:45:28現にやってますが何か。
#まともに質問されているわけでもないし面倒だから解説せんが。
0235デフォルトの名無しさん
2005/08/02(火) 14:47:36自分もそうしますから。
0236デフォルトの名無しさん
2005/08/02(火) 21:53:16次期MFCに期待しようぜ。
http://msdn.microsoft.com/visualc/whidbey/mfc2005/default.aspx
0237デフォルトの名無しさん
2005/08/02(火) 22:05:03チュートリアルを充実してくれた方がありがたいんだけどなぁ。
0238デフォルトの名無しさん
2005/08/03(水) 13:11:59フレームワークを使うアプリケーションを開発しても実行できないと
説明されたのですがフレームワークと言うのは具体的に何を指すのでしょうか?
0239デフォルトの名無しさん
2005/08/03(水) 13:33:560240デフォルトの名無しさん
2005/08/03(水) 13:36:06まあどっちにしろスレ違いの予感
0241デフォルトの名無しさん
2005/08/03(水) 19:47:50CScrollViewを配置できればよいのですが、やり方がわかりません。
Google先生にお伺いはたてたのですが、聞き方が悪いのか情報を得られないままです。
差し支えなければ、方法を伝授して頂けないでしょうか?
あるいは、情報(勉強)へのポインタを示して頂けないでしょうか?
0242デフォルトの名無しさん
2005/08/03(水) 20:05:44CHTMLViewはどう?
0243241
2005/08/03(水) 20:22:29お返事ありがとうございます。
質問の仕方が悪かったようで申し訳ないです。
「ビューをダイアログ上に配置するのはどうするか?」
ということだったのです。コントロールなんかはCreateすれば
張り付いてくれますが、ビューではどうやったらいいのだろう?ということでして・・・
# テキスト+画像表示用途でCHtmlViewはほぼbestなんですが、
# 「一旦ファイルに書き出す」必要がないということで、CScrollViewを選択したのです
0244デフォルトの名無しさん
2005/08/04(木) 09:26:53CListCtrl間でリスト項目(item)をDrag&Dropしたいのですが、
どうすればいいのでしょうか。
簡潔に教えていただければ、あとはGoogleで調べます。
よろしく。
0245デフォルトの名無しさん
2005/08/04(木) 11:19:120246244
2005/08/04(木) 13:27:190247デフォルトの名無しさん
2005/08/05(金) 19:47:18MFCのダイアログベースのアプリを作りました。
なぜか急にダイアログ起動時にダイアログの一部が緑色になってしまいました。
緑の部分を他のダイアログなどで一度隠すと、元の色に戻ります。
OnInitDialog中でInvalidateRect(NULL)しましたが直りません。
もちろんOnCtlColorはチェックしました。
どう解決したらいいんでしょうか?
0248デフォルトの名無しさん
2005/08/05(金) 23:48:300249デフォルトの名無しさん
2005/08/06(土) 00:56:510250247
2005/08/06(土) 11:38:58アプリのリブートですよね?
毎回起こります。
0251デフォルトの名無しさん
2005/08/06(土) 12:42:24OSの再起動だと思われ
0252デフォルトの名無しさん
2005/08/06(土) 16:30:53このブートとは本来ブートストラップを掛けること、つまりシステム立ち上げのことなんですが。
#つーか、アプリのリブートなんて初めて聞いた。
0253デフォルトの名無しさん
2005/08/06(土) 18:57:20関数{
変数宣言
サブルーチン呼び出し
}
サブルーチン{
呼び出し元の変数使用
}
みたいに
0254デフォルトの名無しさん
2005/08/06(土) 19:37:13それはC/C++の質問なのか?
0255デフォルトの名無しさん
2005/08/06(土) 19:46:120256デフォルトの名無しさん
2005/08/06(土) 20:06:500257デフォルトの名無しさん
2005/08/06(土) 20:12:190258257
2005/08/06(土) 21:17:43もう二度とここへは来ません。
0259デフォルトの名無しさん
2005/08/06(土) 21:28:277時からずっと待ってるんだぞ
0260247
2005/08/06(土) 21:34:24>#つーか、アプリのリブートなんて初めて聞いた。
私も初めて言いました。すみません。勝手に飛躍してました。
どのみち直りません。
あまりこういう例ってないんでしょうか?
以前まで平気でしたので、更新分をチェックして自己解決目指します。
どうもでした。
0261デフォルトの名無しさん
2005/08/06(土) 22:43:22関数内関数
0262デフォルトの名無しさん
2005/08/06(土) 22:50:43thx!
検索してみる
0263デフォルトの名無しさん
2005/08/06(土) 22:53:26C/C++標準ではないから注意な
0264デフォルトの名無しさん
2005/08/06(土) 23:43:300265デフォルトの名無しさん
2005/08/07(日) 00:43:34DDXなんかも便利。
0266デフォルトの名無しさん
2005/08/07(日) 09:18:29アイテムを選択された時の処理を「WM_LBUTTONCLICK」を使って
やってるのですが、これだと「一回クリックして選択→もう一度クリックして処理」と
なってしまいます。そうではなく、例えばOEなどの「メールを選択されると、
クリックしないでもそのメール内容が表示される」という風にしたいです。
どのようにすれば宜しいでしょうか。
宜しくお願いします。
0267デフォルトの名無しさん
2005/08/07(日) 09:38:530269デフォルトの名無しさん
2005/08/07(日) 10:16:460270デフォルトの名無しさん
2005/08/10(水) 19:17:250271デフォルトの名無しさん
2005/08/10(水) 20:08:070272デフォルトの名無しさん
2005/08/11(木) 08:42:350273デフォルトの名無しさん
2005/08/11(木) 11:03:020274デフォルトの名無しさん
2005/08/11(木) 17:43:450275デフォルトの名無しさん
2005/08/11(木) 17:50:14他人に判るように質問してください。
0276デフォルトの名無しさん
2005/08/12(金) 00:27:43って操作をしたいんですけど、どうすれば?
fopenとかだと、画面上に表示させられないので。
0277デフォルトの名無しさん
2005/08/12(金) 00:39:25なぜ?
0278デフォルトの名無しさん
2005/08/12(金) 01:56:330279デフォルトの名無しさん
2005/08/12(金) 04:18:00これはまた随分とハイレベルな質問ですな・・・
0280デフォルトの名無しさん
2005/08/12(金) 04:41:53ボタンを押すと、あらかじめ指定したファイルが、あたかもダブルクリックされたように開かれたら、
ということでよろしいか。
a.txtならメモ帳が、b.htmlならIEが開く、というぐあいに。
もしそうなら、ShellExecute関数だね。
0281デフォルトの名無しさん
2005/08/12(金) 09:33:46てっきりエディタを自作してるのかと
0282デフォルトの名無しさん
2005/08/12(金) 10:22:120283デフォルトの名無しさん
2005/08/12(金) 11:27:290284デフォルトの名無しさん
2005/08/12(金) 11:37:38これはウィンドウスタイルでいう、何にあたるのでしょうか?
おそらく、下記のいづれかだとおもいますが。
WS_CLIPSIBLINGS
WS_CLIPCHILDREN
よろしゅうねがいます。
0285デフォルトの名無しさん
2005/08/12(金) 11:42:280286デフォルトの名無しさん
2005/08/12(金) 12:11:390287284
2005/08/12(金) 12:54:44http://yokohama.cool.ne.jp/chokuto/urawaza/prm/extended_window_style.html
助かりました。
またよろしゅう。
0288デフォルトの名無しさん
2005/08/13(土) 20:47:36出るようにしたいと思ってます。
ところが、WM_RBUTTONUPで処理するとアイテムが表示されていない場所では
期待の動作をするのですが、アイテムが表示されている部分では動作してくれません。
RBUTTONDOWNを使うと出来るのですが。
原因や対策など、出来ればお願いします。
0289デフォルトの名無しさん
2005/08/13(土) 23:48:54WM_CONTEXTMENU
0290デフォルトの名無しさん
2005/08/14(日) 15:45:49そのCDRom以外から起動できないようにしたいのですが、
何かこれを実現するAPIやロジック等ありますでしょうか?
0291デフォルトの名無しさん
2005/08/14(日) 15:56:07GetModuleFileNameで自exeのパスを取り
ドライブレターを切り出し
GetDriveTypeでCD-ROMドライブか調べる。
0292デフォルトの名無しさん
2005/08/14(日) 15:57:270293デフォルトの名無しさん
2005/08/14(日) 16:07:530294デフォルトの名無しさん
2005/08/14(日) 16:09:56ありがとうございます。
そのロジックで実装します。
0295デフォルトの名無しさん
2005/08/14(日) 16:17:21質問失礼します。
現在、タスクトレイプログラムを作成中です。
トレイのアイコンを右クリックして、メニューを表示するまでは出来たのですが、
右クリック時に動的に登録したメニュー項目が ID=0 以外選択不可能(グレイ表示)になってしまいます。
選択可能にし、OnCommandのLOWORD(wParam)でIDを取得する為にはどうすれば良いのでしょうか?
ソースは以下の様にして、動的にn個のメニューを登録しています。
------------------------------------------------------------------
loCnt= 0;
pclProfile= theApp.m_pclProfile;
while(pclProfile){
clName= pclProfile->GetName();
pclOpenMenu->AppendMenu(MF_STRING, loCnt, clName);
//pclOpenMenu->InsertMenu(0, MF_BYPOSITION, loCnt, clName);
//pclOpenMenu->EnableMenuItem(loCnt, MF_ENABLED | MF_BYCOMMAND);
loCnt++;
pclProfile= pclProfile->GetNext();
}
------------------------------------------------------------------
環境は、
Win2000
VC++ 6.0
です。
分かる方、よろしくお願いします。
0296デフォルトの名無しさん
2005/08/14(日) 16:27:55対応するハンドラが無いと自動的にグレイになった希ガス。
ON_COMMAND_RANGE使えば?
0297295
2005/08/14(日) 17:11:29レスありがとうございます。
ON_COMMAND_RANGEは知らなかったので、調べて試してみたら一応解決しました。
が、予め静的にIDの範囲を決めるって所が、どうしようかと悩んでいます。
「動的にn個」に対応するやり方って無いのでしょうか?
無いなら、ON_COMMAND_RANGEで行きます。
0298デフォルトの名無しさん
2005/08/16(火) 19:41:11どのコントロールを使用すればよいでしょうか?
0299デフォルトの名無しさん
2005/08/16(火) 20:13:36CListCtrl
0300デフォルトの名無しさん
2005/08/16(火) 20:20:30ありがとうございます
0301デフォルトの名無しさん
2005/08/16(火) 23:03:04初心者なのに、
CHtmlViewでシンプルなブラウザ作成に挑戦してみました。
普通に動いた(当たり前!?)んですケド
サイトのタイトルが表示されずに悪戦苦闘してます。。
CDocument::SetTitle()
って、使えばOKみたいなんだけど、
現在のサイトタイトルがドコにあるかわかりません。
って事で、教えてもらえんスか?
そいか、ブラウザ作成の講座みたいなサイトないでしょーか?
よろしくです★
0302デフォルトの名無しさん
2005/08/17(水) 08:04:57CDC::BitBltってデバイス依存しますか?
「画面のプロパティ」→「色の設定」で「32bit」に設定した環境でビルドしたものを
「24bit」に設定した環境で動作させると画面表示が乱れます。
これを解消する方法ありますか?
それともBitBltではしょうがないのでしょうか?
0303デフォルトの名無しさん
2005/08/17(水) 08:18:30以上
追伸
スレ違い
0304デフォルトの名無しさん
2005/08/17(水) 11:38:50かつ、
トグル動作はマニュアルで行える
というコントロールはありまつか?
0305デフォルトの名無しさん
2005/08/17(水) 11:58:00CListCtrl::Scrollの使い方がわかりません。
使用例とか探してるのですが見つからず。。。orz
よろしければ教えてくださいm(_ _)m
現在↓のようになってますが、
error C2227: '->Scroll' : 左側がクラス、構造体、共用体へのポインタではありません。
というエラーが出てしまい、対処できない状態です。。
void CConnLst::OnBnClickedBuTest()
{
IDC_LST_CL->Scroll(10);
}
0306デフォルトの名無しさん
2005/08/17(水) 12:18:26CSize size(x,y);
this->Scroll(size);
で行けそうな。
そしてやりたいことは多分
EnsureVisibleの方じゃないのか?
0307デフォルトの名無しさん
2005/08/17(水) 12:56:23CButtonをBS_CHECKBOXで作ったチェックボックスではどう?
>>305
コントロールに変数を割り当ててダイアログクラスのメンバにしてやるか、
GetDlgItem(IDC_LIST_CL)をCListCtrlにキャストしてやらないと呼び出すことはできない。
Scroll()よりもEnsureVisible()の方が便利だと思うのは>306に同意。
つーか、いきなりListCtrlなんかじゃなくて、入門本かなんかを見ながら
一般的なコントロールの使い方を勉強すべきかと。
0308305
2005/08/17(水) 13:01:51レスありがとうございます。
>CSize size(x,y);
>this->Scroll(size);
でやってみたのですが、
error C2039: 'Scroll' : 'CConnLst' のメンバではありません。
とでてしまいました。
私は今、リストコントロールをスクロールを使わずに
他にボタンを用意して、ボタンを押下するごとに1行ずつスクロール
するという処理を作成しています。
EnsureVisibleについて調べてみます。
0309デフォルトの名無しさん
2005/08/17(水) 13:23:54おーい、>>307読んどけ。
0310306
2005/08/17(水) 13:24:23ごめんCConnLstはCLitsCtrlの派生かと思ってた。
>307の言うとおりGetDlgItem(IDC_LIST_CL)をキャストしないと無理だね。
最初書いていたけど別に要らないかなと消しちゃった。
CLitsCtrlは高機能でバージョンによる機能の違いが多いし
MSDNだけじゃ理解しにくい部分が多いから
基本的な事の勉強ならCListBoxとかのほうが良いけどね。
データが多いときにオーナーデータとか使いこなせると便利すぎるけど。
0311デフォルトの名無しさん
2005/08/17(水) 13:24:42チェックボックスのプッシュボタンライクで良さそうで津。
0312305
2005/08/17(水) 13:44:05307さんの言うとおり、入門本などを見てコントロールの勉強をすべきですよね。
今までVBしかやったことがなく、突然CListCtrl::Scrollについて調べてといわれたもので。。。
とりあえず↓の処理でやってみました。
エラーは出なくなりましたが、動きませんでした。
void CConnLst::OnBnClickedBuTest()
{
CListCtrl* pmyListCtrl;
int nCount = pmyListCtrl->GetItemCount();
if (nCount > 0)
pmyListCtrl->EnsureVisible(nCount-1, FALSE);
}
ここからまたいろいろ調べていこうと思います^^
0313デフォルトの名無しさん
2005/08/17(水) 14:07:480314デフォルトの名無しさん
2005/08/17(水) 14:21:560315デフォルトの名無しさん
2005/08/17(水) 14:26:44おいおい、そのポインタに値がセットされていないじゃないか。
CListCtrl * pmyListCtrl = static_cast<CListCtrl *>(GetDlgItem(IDC_LIST_CL);
0316デフォルトの名無しさん
2005/08/17(水) 14:30:37CButton::DrawItem()をオーバーライドして自前で描画するか、画像を張ってしまう。
>>314
一々下らんレスすんなや。
0317デフォルトの名無しさん
2005/08/17(水) 14:34:13CButton::DrawItem()をオーバーライドして自前で描画するか
このオーバーライドってリソースエディタでベタベタ貼った後にも出来るんでしたっけ?
0319デフォルトの名無しさん
2005/08/17(水) 14:44:54基本クラスがカラー・プロパティ持っとけば良いじゃん。
0320デフォルトの名無しさん
2005/08/17(水) 15:08:120321デフォルトの名無しさん
2005/08/17(水) 15:13:51ここはMFCの仕様を云々するスレではありません。
>>320
画像に書いとけ。
0322デフォルトの名無しさん
2005/08/17(水) 16:32:16下らんレスに下らんレスすんなや
0323302
2005/08/17(水) 22:13:220324デフォルトの名無しさん
2005/08/18(木) 10:03:39ファイルを新規作成するか、既存のファイルを開くか、を選択させたいのですが、
この処理はどこに書けばよいですか?
0325デフォルトの名無しさん
2005/08/18(木) 11:29:18InitInstanceで。
適切なパラメタをCCommandLineInfoに設定して
ProcessShellCommandを呼べばよろし。
0326デフォルトの名無しさん
2005/08/18(木) 11:40:45RECT rtMove;
switch (iIndex) {
case 0:
m_R1.GetWindowRect(&rtMove);
break;
case 1:
m_R2.GetWindowRect(&rtMove);
break;
case 2:
m_R3.GetWindowRect(&rtMove);
break;
case 3:
m_R4.GetWindowRect(&rtMove);
break;
}
int iTop = rtMove.top;
m_BAR_R.GetWindowRect(&rtMove);
rtMove.top = iTop;
m_BAR_R.MoveWindow(&rtMove, false);
でも、あるコントロール(m_BAR_R)が変なとこに移動しちゃう。
何で?
0327デフォルトの名無しさん
2005/08/18(木) 11:47:29スクリーン座標・クライアント座標
0329デフォルトの名無しさん
2005/08/18(木) 11:56:270330デフォルトの名無しさん
2005/08/18(木) 11:57:46そのダイアログバーにはコンボボックスをリソースエディタで配置してあります。
このコンボボックスにフォーカスがある時に
エンターキーを押されたことを知りたいのですがどうやったらいいでしょうか?
CMainFrameにOnKeyDown関数を定義してもメッセージが飛んできません。
CDialogBarの派生クラスを無理矢理作ってもOnKeyDownは呼ばれませんでした。
0331デフォルトの名無しさん
2005/08/18(木) 13:01:410332デフォルトの名無しさん
2005/08/18(木) 13:09:53それでやってみます。ありがとうございました。
0333デフォルトの名無しさん
2005/08/18(木) 14:31:07「レポート形式」にして使っています。
で、スクロールは外部から Scroll メソッドを呼んで行うので、
スクロールバーを表示させたくないのです。
プロパティで、「スクロールをしない」を選ぶと、ヘッダーが消えてしまい、
Scroll メソッドを呼んでもスクロールしなくなってしまうし・・・
ヘッダーは表示したいので、困っています。
ShowScrollBar(SB_BOTH, false) を呼んでも駄目でした。
もしかして、なにかもの凄く基本的なところ(?)で間違っているのでしょうか?
0334デフォルトの名無しさん
2005/08/18(木) 14:40:42※同じ内容の質問を他のVC関連の掲示板にもUPしてます。
広く情報を収集したいためすみませんが勘弁してください。
質問内容:
スレッド(CWinThreadクラス)上でタイマの制御したい場合、
一般的にどのような手法で行うのでしょうか?
環境:Windows2003Server
:VC++6.0 + SP5.0
質問の意図:
現在、スレッドのInitInstance内で、自前のタイマ制御クラス*1
のインスタンスを生成しそのタイマ制御クラス経由で、
タイマイベントを受け付けるような処理を行っているのですが、
やっかいなことに、ごく稀*2にタイマ制御クラスのコンストラクタ内で行っている、
CWnd::CreateEx()の処理で、
Runtimerエラーが発生します。
(Runtimeエラーのポップアップが表示される*3)
色々調べているのですが、なかなか原因が特定出来ない状況にあります。
もしかしてスレッドでこのような方法でタイマを使用するのは
イリーガルなことなのか?等と思い質問しました。
続く
0335デフォルトの名無しさん
2005/08/18(木) 14:43:50*1:
↓タイマ制御クラスのソース
CTimerManager::CTimerManager() {
// ダミーウインドウの作成
CWnd::CreateEx(0, AfxRegisterWndClass(0), _T("TimerManager"), WS_OVERLAPPED, 0, 0, 0, 0, NULL, NULL) ;
m_bTimerFlag = false;
}
CTimerManager::~CTimerManager() {
DestroyWindow();
}
BEGIN_MESSAGE_MAP(CTimerManager, CWnd)
//{{AFX_MSG_MAP(CTimerManager)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
続く
0336デフォルトの名無しさん
2005/08/18(木) 14:45:20UINT CTimerManager::setTimer(CWinThread *hThread,UINT nIDEvent,UINT nElapse) {
m_pinThread = hThread ;
m_bTimerFlag = true;
return (CWnd::SetTimer(nIDEvent,nElapse,0)) ;
}
UINT CTimerManager::killTimer(UINT nIDEvent) {
m_bTimerFlag = false;
return(CWnd::KillTimer(nIDEvent)) ;
}
void CTimerManager::OnTimer(UINT nIDEvent) {
m_bTimerFlag = false;
m_pinThread->PostThreadMessage(TIMER_MANAGE_WMID,WM_TIMER,(long)nIDEvent) ;
CWnd::OnTimer(nIDEvent);
}
続く
0337デフォルトの名無しさん
2005/08/18(木) 14:46:43*2:
現在同じ環境(同じハード、ソフトウェア環境)で合計24台のマシンが
稼動しているのですが、10〜20回の(全台)起動で、
1回はRuntimeエラーが発生します。
(発生するマシンは固定ではなくその都度変わります)
#1台のマシンの場合でコツコツと再現テストを行ってみたのですが、
なかなか再現しない状況にあります。
*3:
Runtimeエラーポップアップの表示内容
タイトルバー部
Microsoft Visual C++ Runtime Library
メッセージ
Runtime Error!
Program:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
[OK]
以上、ポップアップの内容です。
Program:の後になにも出ていないのが気になりますが。。。
長文失礼しました。
以上、宜しくお願いします。
0338デフォルトの名無しさん
2005/08/18(木) 15:04:20それだけ長文ならアップローダ使えよ。
で、長いから面倒なんで読む気がしない。
寧ろ、プロジェクト一式(中間ファイルは除く)上げた方が検証しやすいのでは?
>>333
自前でスクロールしたい場合にもスクロールバーは必要では?
でないとスクロール可能にならない気がする。
#なるようなら御免。
どうしてもスクロールバーを見せたくないならカスタムドローか他のパーツで隠すとかで誤魔化すとか。
#でもどうせ矢印キーか何かでスクロールできてしまう罠。
そもそもなんでスクロールバーを見せたくないの?
0339333
2005/08/18(木) 15:56:12スクロール見せたくない理由なんですが、
現在2つのリストコントロール(AとBとします)を表示していて、
Aでスクロールした場合、Bも連動してスクロールするという
処理を作成しているためです。
(Bでは、自分でスクロールできないようにスクロールを隠したいだけなのです。)
説明がへたくそでスミマセン。。。(>_<;)
>どうしてもスクロールバーを見せたくないならカスタムドローか他のパーツで隠すとかで誤魔化すとか。
もしできなければ、↑の方法で、丸めこんぢゃおうと思います★
0340デフォルトの名無しさん
2005/08/18(木) 20:57:050341デフォルトの名無しさん
2005/08/18(木) 22:36:530342デフォルトの名無しさん
2005/08/19(金) 01:08:31ダイアログに画像(できればJPEGファイル)を表示させたいのですが、
どのようにすれば良いのでしょうか。
0343デフォルトの名無しさん
2005/08/19(金) 08:22:24アイコンならリソースと僅かなコードだけで張り付きますが、
jpeg画像は自前で描画する必要があります。
0344デフォルトの名無しさん
2005/08/20(土) 15:41:53クラス名とか教えてくれるのかなぁ?
Detected memory leaks!
Dumping objects ->
{4305} normal block at 0x05CAF318, 104 bytes long.
Data: <( > 28 00 00 00 80 02 00 00 E0 01 00 00 01 00 18 00
0345デフォルトの名無しさん
2005/08/20(土) 16:04:1640、640、480、1、24
ってデータが入っている構造体っぽいね。
0346デフォルトの名無しさん
2005/08/20(土) 16:11:09HeapAlloc、LocalAlloc、realloc等各種コールしてるみたいなんですが、
特定する方法無いでつか?
0347デフォルトの名無しさん
2005/08/20(土) 17:29:14そうなんですか。。。
がんばってみます。ありがとうございました。
0348デフォルトの名無しさん
2005/08/20(土) 19:49:17メモリリークはいいんですが、共同作業をしている人のせいにしないように(笑)。
0349デフォルトの名無しさん
2005/08/20(土) 22:25:31VSS使ってるなら、ダブルクリックすれば該当個所に飛んだはず
0350デフォルトの名無しさん
2005/08/20(土) 22:47:37ファイル名と行番号が入ってないと飛ばないと思ったが。
0351デフォルトの名無しさん
2005/08/20(土) 23:23:11デバッグ版のmallocやfreeがあって(C++のnewでも低レベルではmallocやfreeで実装される)
こいつらをリンクしてないとファイル名や行番号は表示されないよ。
DLLのhとlibとdllモジュールだけもらって動かしてるような場合で、そいつが犯人の場合、
場所が表示されなくて困るだろう。
0352デフォルトの名無しさん
2005/08/20(土) 23:26:040353デフォルトの名無しさん
2005/08/20(土) 23:32:11>こいつらをリンクしてないとファイル名や行番号は表示されないよ。
それだけでは駄目で、mallocを_malloc_dbgにマクロ等で置き換え
__FILE__, __LINE__を引数に渡さないと表示されない。
0354デフォルトの名無しさん
2005/08/21(日) 12:56:340355デフォルトの名無しさん
2005/08/22(月) 11:37:17ここ読んで適切なマクロ定義して、
クラスファイル中で new がメモリリーク追跡用のマクロで
きちんと定義されてるかどうかを確認するヨロシ。
0356デフォルトの名無しさん
2005/08/22(月) 12:59:28_CRTDBG_MAP_ALLOC使うと、自クラスメンバにfree関数とかあるとそれも置き換わっちゃうんだよなあ。
CRTと同じ名前使わなきゃいいんだけどな。
0357デフォルトの名無しさん
2005/08/22(月) 15:51:26コードを追加しました。実際にはCObjectから派生したデータクラスの
Serialize関数を呼ぶようにしてあります。
プログラムを動かすと、データの保存はできるようですが、
「開く」で選択すると「ドキュメントを開くことに失敗しました」という
警告ダイアログが出てそれっきりです。
ヘルプでメッセージを検索してもなにも出てきません。
まず何を調べたらよいでしょうか?
0358デフォルトの名無しさん
2005/08/22(月) 16:23:42失敗した原因
0359デフォルトの名無しさん
2005/08/22(月) 16:46:29MFC には WinMain がありませんが、
コマンドラインでの引数はどのようにして取得するのでしょうか?
お願いします。
0360359
2005/08/22(月) 16:58:50m_lpCmdLine ってのを見つけました。ありがとうございました。
0361デフォルトの名無しさん
2005/08/22(月) 17:34:080362デフォルトの名無しさん
2005/08/22(月) 22:22:270363デフォルトの名無しさん
2005/08/23(火) 08:03:16それはプロセスからイベントを発生させたいということですか。
俺も知りたい。
0364デフォルトの名無しさん
2005/08/23(火) 11:05:51MFCは使いにくいので、ハンドルを使いAPIで操作したいのですが。
0365デフォルトの名無しさん
2005/08/23(火) 11:13:03取り出せる。
0366デフォルトの名無しさん
2005/08/23(火) 13:45:52どこの設定を変えればいいのでしょうか?
プロジェクトA = プリンタ選択(コンボボックス)/印刷範囲/部数
プロジェクトB = プリンタ選択(アイコン選択)/印刷範囲/部数/タブがいっぱい
0367デフォルトの名無しさん
2005/08/23(火) 18:13:16CWnd* m_wndCtrl = m_wndCtrl.GetWindow(GW_CHILD);
このようにして得られる子ウィンドウに対して、WM_RBUTTONDOWNをマップする事は可能でしょうか?
WM_RBUTTONDOWNイベントが得られれば、WindowProcの実装でも構わないです。
アドバイスよろしくお願いします。
0368デフォルトの名無しさん
2005/08/23(火) 18:17:530369デフォルトの名無しさん
2005/08/23(火) 18:55:12ありがとうございました。
0370367
2005/08/23(火) 20:12:23下の通り作業でAttachの使い方はあっていますか?
CWndを継承したCCtrlWndクラスを作って、
CCtrlWnd::OnRButtonDownにWM_RBUTTONDOWNをマッピング。
CFormViewExクラスのCCtrlWnd m_wndCtrlメンバに対して、該当のコントロールのHWNDをAttach。
m_wndCtrl.Attach(::GetWindow(hwndCtrl,GW_CHILD));
0371デフォルトの名無しさん
2005/08/23(火) 20:33:23m_wndCtrl.GetWindow(GW_CHILD);
~~~~
とか
GetWindow(hwndCtrl
~~~~
が気になるんだが、コントロールの子ウィンドウを取りたいのか?
0372デフォルトの名無しさん
2005/08/23(火) 20:56:10右クリックがコントロールの外に伝わらない状態なのです。
作者にメールを送ったら、
現状だとWM_RBUTTONDOWNが発生しないので、
HWND hwndCtrl = ::GetWindow(hwndCtrl,GW_CHILD);
このhwndCtrl を元に、WM_RBUTTONDOWN を処理してほしい、という回答でした。
そのHWNDをMFCでどう処理するのか分からなかったので、質問した次第です。
Attachの使い方が正しいとするとDLL側の問題かもしれないので、もう一度作者に問い合わせてみます。
0373デフォルトの名無しさん
2005/08/23(火) 22:59:440374デフォルトの名無しさん
2005/08/24(水) 03:33:15大体は上手く動作していますが、特定の処理で無限ループしたり、戻り値が怪しかったり
と挙動がおかしいです。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/vclrfatlcompatibilityissues.asp
上記MSDNのサイトを見るとバイナリの互換性は無いとのことですが、
やはりMFC7でリビルドしないとダメでしょうか?
ちなみにMFC7で作ったEXEから直接呼び出すと何故かDLL経由では必ず無限ループしていた処理が正常終了しました。。。
他社の製品の為、ソースコードが手元に無いので出来れば現状のまま動かしたいです。
DLLの初期化などで回避する方法は無いのでしょうか?
詳しい方がいらしたら、教えていただけると幸いです。
以上、よろしくお願いします。
0375362
2005/08/24(水) 07:37:02もっとスマートな方法もあるかもしれませんが、とりあえず下の方法でコマンドの発生に成功しました。
AfxGetMainWnd()->SendMessage(WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), NULL);
0377デフォルトの名無しさん
2005/08/24(水) 16:18:49他人が作成したプログラムの修正中なのですが、
ダイアログを閉じる処理みたいなのは見当たらないのですが...
0378377
2005/08/24(水) 16:50:51EndDialogは知ってます。
0379377
2005/08/24(水) 17:01:49ってのがあった。これかな?
0380デフォルトの名無しさん
2005/08/24(水) 17:19:25{
(略)
EndDialog(IDOK);
}
に飛んで来たけど、これって何ぃ?
0381デフォルトの名無しさん
2005/08/24(水) 17:23:570382デフォルトの名無しさん
2005/08/24(水) 18:28:01OnOK()
0383デフォルトの名無しさん
2005/08/24(水) 20:12:50ドロップダウンリストのコンボボックスがあるダイアログを作って、それを何かしらの関数から
CMyDialog dlg;
//コンボボックスの選択項目を設定
if( dlg.DoModal() == IDOK ){
//色々
}
みたいに、AddStringとか使って動的に項目を変更したいんですけど、エラーになります。
どうすればダイアログを出す前に初期化できますか?
0384デフォルトの名無しさん
2005/08/24(水) 20:43:02「Documentクラスがデータを管理/Viewクラスが画面表示」という役割説明をよく目にするんだが、
データやりとりのラクさを考えると、
AppクラスかViewクラスにデータ保持してもいいんじゃまいか?
Docでデータ管理する利点・欠点を教えれ。
そろそろスパゲティプログラムを脱したい俺にコメントプリズorz
0385デフォルトの名無しさん
2005/08/24(水) 20:45:54>//コンボボックスの選択項目を設定
この時点ではまだダイアログは作成されてない。
そのダイアログに載ってるコンボボックスも当然作成されてないからエラーになる。
OnInitDialogで初期化汁。
0386383
2005/08/24(水) 21:00:46DDXとかで生成した変数の場合なら、ダイアログを見せる前に初期化しても大丈夫のようですが・・・
そういうしようなんですね・・・
つーことは、あらかじめダイアログクラスにデータを保持させるポインタメンバを宣言しといて、
そこに初期化データを持ったオブジェクトのポインタ放り込んでDoModal実行・・・って感じですか?
0387デフォルトの名無しさん
2005/08/24(水) 21:13:25DDXでもやってることは同じで、OnInitDialogでメンバ変数からコントロールにデータを設定
っていう事をフレームワークが自動でやってる。
0388デフォルトの名無しさん
2005/08/25(木) 14:57:340389デフォルトの名無しさん
2005/08/25(木) 15:06:38( ゚ Д゚) …
0390デフォルトの名無しさん
2005/08/25(木) 16:32:02好きにしろ。
0391384
2005/08/25(木) 19:23:23って話なんだがね…
現在グローバル変数使いまくりで実装orz
時間かかるがあれこれ試してみる。
0392デフォルトの名無しさん
2005/08/25(木) 19:51:31>ぶっちゃけMDI形式の画像エディタを作るとき、画像データはどこで保持するのがいい?
ドキュメントクラス
0393デフォルトの名無しさん
2005/08/25(木) 23:36:09プログラマに向いてない。
あきらめろ。
0394デフォルトの名無しさん
2005/08/25(木) 23:48:36391はなんとかしようと努力しているみたいだからまだ見込みがあると思うぞ。
0395デフォルトの名無しさん
2005/08/26(金) 00:00:460396デフォルトの名無しさん
2005/08/26(金) 01:03:070397デフォルトの名無しさん
2005/08/26(金) 11:05:52MVC モデルなんか知ったことか、というスタンスであれば
View に持たせればいい。
MFC のフレームワークがそれを許すかどうかは別だけど。
0398デフォルトの名無しさん
2005/08/26(金) 14:25:08InitInstance()の中でやるんでしょうか?
Run()というやつでやるんでしょうか?
それとも、messageを使わなければCWinThreadから
派生するのはムダですか?
0399デフォルトの名無しさん
2005/08/26(金) 14:36:37InitInstance
>それとも、messageを使わなければCWinThreadから派生するのはムダですか?
ケースバイケース
0400デフォルトの名無しさん
2005/08/26(金) 14:41:29ありがとうございます。InitInstance()の中でやります。
あと、AfxBeginThread()で渡した引数って、どこに格納されるんですか?
0401デフォルトの名無しさん
2005/08/26(金) 14:53:33スレッドプロシージャの引数
0402400
2005/08/26(金) 15:21:57クラスのpublicメンバに値をわたしてやってからResumeThread();することでできました。
0403384
2005/08/26(金) 18:30:59プログラム書くの好きだけど、人のプログラムに比べると明らかに中身が汚い…
自分でもプログラマに向いてないかなと思ったりorz
しかしいつかスマートなコードを書けるようガンガル
0404デフォルトの名無しさん
2005/08/26(金) 21:37:07XPビジュアルスタイルを適用してCEditを使用しています。
そこで日本語を入力して再変換を行うと文字が化けます。
・ATOCKでは発生しません。
・コンテキストメニューから再変換を選択しても発生しません。
_UNICODEを宣言しないで回避する方法ってありますか?
0405デフォルトの名無しさん
2005/08/26(金) 23:16:43APIスレへどうぞ
0406デフォルトの名無しさん
2005/08/27(土) 00:28:45CFormView クラスを使用して生成したフォームの背景色は
どうやったら変えられるんでしょうか。
0407デフォルトの名無しさん
2005/08/29(月) 22:00:09みんなやっぱ独自の勉強方法?
自分の中じゃとにかくプログラムを作るのが一番だと思っているが・・・
てかC C++ APIと勉強してきて、MFCだけやたら難しく感じるのは私だけですか。。。
いい学習方法求ム
0408デフォルトの名無しさん
2005/08/29(月) 22:01:58MFCで初期ウインドウを作って、最終的にはエクスプローラーを作りたいのですが、
左のペインにツリービューをつくるにはどういう流れになるのですか?
ツリーが自分のパソコンのフォルダを読み込むにはどうすればいいのですか?
0409デフォルトの名無しさん
2005/08/29(月) 22:08:020410デフォルトの名無しさん
2005/08/29(月) 22:11:04このスレでこんなことを言うのはアレだが、
今さらMFCを勉強する必要はないんじゃないか?
まぁ、仕事とかでどうしてもMFCを使わないといけないのなら仕方ないが。
0411デフォルトの名無しさん
2005/08/29(月) 23:04:40いやぁ仕事で使うからってことで今勉強中なんですが、
どうにも難しくて。。。
今までは自分でプログラミングしていたのを、途中まで完成されたものに
手を加えるのって、結構スキルが必要ですね。
0412デフォルトの名無しさん
2005/08/29(月) 23:14:18チュートリアル全部目を通して、クラス図とクラス一覧とユーティリティ関数類にも
ざっと目を通さないと、既にきっちり用意されている定番の処理を自前で再実装したり、
Command routing とか View の Update とか使わずにメンドクサイことしたりとか
うっとおしいことになるので気を付けた方がいいですよ。
0413デフォルトの名無しさん
2005/08/29(月) 23:36:14俺はソースを読んで理解した・・・
0414デフォルトの名無しさん
2005/08/30(火) 01:53:54でも結局細部を理解するはめになるんだよな。
0415デフォルトの名無しさん
2005/08/30(火) 19:28:20どういう風に書けばよいですか?
CTimeはCObjectを継承していないので、以下のような書き方はダメですよね?
if (ar.IsStoring())
ar << m_pTime;
else
ar >> m_pTime;
0416デフォルトの名無しさん
2005/08/30(火) 19:59:19CTime::Serialize64が用意されていました。
0417デフォルトの名無しさん
2005/08/30(火) 23:13:16class CLeftView : public CTreeViewというのができると思うのですが、
この左のペインに実際項目を挿入するにはどういう流れになりますか?
初心者ですいません。。。
0418デフォルトの名無しさん
2005/08/30(火) 23:43:12GetTreeCtrl()でツリーコントロール取って、後は好きなように。
0419デフォルトの名無しさん
2005/08/30(火) 23:58:14ありがとうございます。
そのGetTreeCtrlというのはどこに書けばいいのですか?
0420デフォルトの名無しさん
2005/08/31(水) 00:37:55項目を挿入したいところで
0421デフォルトの名無しさん
2005/08/31(水) 13:37:03ViewクラスのOnCtlColorで対応する。
0422デフォルトの名無しさん
2005/08/31(水) 13:51:530423デフォルトの名無しさん
2005/08/31(水) 13:55:490424デフォルトの名無しさん
2005/08/31(水) 21:13:16MDIActivateを使うと非クライアント領域(枠の部分)が一瞬表示されます。
MDINextで切り替えを行うとそんなことにはならないんだけど、
指定したChildFrameをアクティブにはできません。
どうすればいいのですか?
0425デフォルトの名無しさん
2005/09/01(木) 00:08:03VC7.1で、
char * p = new char[10];
strcpy(p, "foo");
CString foo = p;
delete p;
みたいなコードを書いたらCStringの代入で例外が発生した。
実際にはnewするサイズもコピーする文字列も毎回違うのだけど、
特定の組み合わせの時には必ずといっていいほど再現する。
デバッガで追おうとVisualStudioから起動すると再現しない。
なんだろ、これ。
0426デフォルトの名無しさん
2005/09/01(木) 00:18:07とかいうオチでは無いよな
0427デフォルトの名無しさん
2005/09/01(木) 00:28:130428デフォルトの名無しさん
2005/09/01(木) 00:30:51char * p = new char(10);
だった、とか
0429425
2005/09/01(木) 00:42:15>425が書き間違い。ついでに言えば、落ちるときはそこまで来ない。
>>427
それも大丈夫。
>>428
ないない。
つーか、試しに
CString foo = p;
を
CString foo = "asdfasdfasdf";
とかにしても落ちるときは落ちる。
そうそう、一旦std::stringに入れてもそこからCStringにコピーするときにやはり落ちる。
現在はとりあえず、CString foo;char * p = foo.GetBuffer(10);strcpy(p, "foo");foo.ReleaseBuffer();している。
0430デフォルトの名無しさん
2005/09/01(木) 00:52:310431デフォルトの名無しさん
2005/09/01(木) 02:28:130432デフォルトの名無しさん
2005/09/01(木) 10:59:150433425
2005/09/01(木) 11:42:06>>430
これはとりあえず、なさそうとしかいえない状態。
>>431
ないない。そんなノウハウ持ってるのは私だけ。
>>432
えーと……
今疑いが出ているのはこのコード。
// 文字列の加工(要はダイアログタイトルの一部の文字列を書き換え)
CString foo;
GetWindowText(foo);
char * str = new char[buf.GetLength()];
sscanf(foo, "%*s[^0-9]%*d", str);
foo.Format("%s %s%d", someString, str, someNumber);
delete[] str;
SetWindowText(foo);
これから再現できる条件を探すけど、どうも、newとCStringのメモリ確保がバッティングしているような悪寒が。
#「デバッグビルドでは再現しない」、「デバッガで起動すると再現しない」他には何かあるかなぁ……
0434デフォルトの名無しさん
2005/09/01(木) 11:56:18buf.GetLength()はいくつを返してるんだ?
0435デフォルトの名無しさん
2005/09/01(木) 12:00:15上のコードなら、buf.GetLength() が小さい、とか?
CString 関係で初心者にありがちなバグ
・SetAt() で 0 入れる等して長さを変えようとする
・GetBuffer せずにバッファを書き換える
・GetBuffer した後、ReleaseBuffer せずに文字列操作
0436デフォルトの名無しさん
2005/09/01(木) 12:01:560437デフォルトの名無しさん
2005/09/01(木) 12:10:370438425
2005/09/01(木) 12:23:05未調査。午後から調べる。ダイアログのタイトルだから少なからず入っているはず。
#つーか、タイトル文字列長は変わらないことになっているらしい。
>>435
SetAt()もGetBuffer()も書き換えもないよ。
昨日>429で書いた通り、GetBuffer()/ReleaseBuffer()にすれば再現しなくなるらしい。
>>436
漏れもそうは思うのだけど。
>>437
タイプミス。%*s%[^0-9]%*dだ。
#最後の%*d要らないじゃん(苦笑)。
0439デフォルトの名無しさん
2005/09/01(木) 12:27:28入力がどんな文字列かわからんけど、最初の%*sに全部食われないか?
sscanfの戻り値は?
0440デフォルトの名無しさん
2005/09/01(木) 12:30:07>>buf.GetLength()はいくつを返してるんだ?
>ダイアログのタイトルだから少なからず入っているはず。
GetWindowTextで取ってるfooの方じゃないの?
0441デフォルトの名無しさん
2005/09/01(木) 12:33:37>char * str = new char[buf.GetLength()];
は
char * str = new char[foo.GetLength()];
の間違い?
0442デフォルトの名無しさん
2005/09/01(木) 12:36:470443デフォルトの名無しさん
2005/09/01(木) 12:41:17これでstrには何が入るの?
0444425
2005/09/01(木) 12:42:46あ、>441で正解。
bufをfooに書き換えてたの忘れてたらしい。
>>439
最初の空白で切れるよ。だからこそ、Format()で組み立てるときには空白が入っている。
漏れを信用しないのは判るし、だとすればこっちのコードの粗を探したくなるのも当然だけど……
まぁいいか、午後は再現条件探しするから。
0445デフォルトの名無しさん
2005/09/01(木) 12:45:560446デフォルトの名無しさん
2005/09/01(木) 12:50:01じゃだめなの?
0447デフォルトの名無しさん
2005/09/01(木) 12:52:20ttp://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_scanf_width_specification.asp
0448デフォルトの名無しさん
2005/09/01(木) 22:34:13CStringに十分なバッファを確保してからなら大丈夫そうだが
0449デフォルトの名無しさん
2005/09/01(木) 22:46:020450425
2005/09/01(木) 23:12:05現状、原因不明というのが頭痛の種。
ダイアログタイトルの方は、タイトルの形式が違うときに誤動作した模様。
#%*sで期待した空白が2バイト文字だったとさw
なので、sscanf()の戻り値で逃げるか2バイト空白に対応するかと言う落ちに。
>>446>>449
タイトルの一部を切り抜くのが目的だから、タイトル(foo)から文字列を一個読み飛ばしたりすうちを読み飛ばすから
それだけの長さは必要ないというロジック。従って、+1する必要はない。
>>448
CStringはconst char *へのcastオペレータを持ってますから。
つーか、なんか勘違いしていない?
結論。一部ヒントになった以外は情報収集にはなりませんでしたとさ。
協力感謝。
0451デフォルトの名無しさん
2005/09/01(木) 23:18:53const char *じゃなくてLPCTSTR(つまりconst TCHAR *)じゃないか?
0452デフォルトの名無しさん
2005/09/01(木) 23:20:17char* p = new char[...];
CString s = p; // GPF!
delete [] p;
ということ?原因不明も何も・・・
0453デフォルトの名無しさん
2005/09/02(金) 00:15:15原因解明協力してた人カワイソス
0454デフォルトの名無しさん
2005/09/02(金) 00:48:52だなw コンパイルオプションも書いてねーしどでもいいがな
0455デフォルトの名無しさん
2005/09/02(金) 01:36:200456デフォルトの名無しさん
2005/09/02(金) 02:00:16忍ばせておいたほうがいいのでしょうか?友達に聞いたら財布によっては跡がつくから
気をつけるべしと言われました。
環境はXP SP2、VC++6.0、DirectX SDK9.0 Summer2004です。
0457デフォルトの名無しさん
2005/09/02(金) 09:37:41スレ違い。
Win32APIスレへ。
0458デフォルトの名無しさん
2005/09/02(金) 12:09:58VC++7.1でnewで得たポインタの0チェックをしているソースがあるのですが、
ダイアログを生成している元の関数ではbad_allocを受け取るように書かれています。
MFCでは(あるいはVCでは)ただnewと書いた場合にはどっちになるのでしょう。
0を返すならbad_allocに落ちてこないと思うのですが・・・
0459デフォルトの名無しさん
2005/09/02(金) 12:41:59MFCならどっちも間違い。
CMemoryException*が投げられる。
0460デフォルトの名無しさん
2005/09/02(金) 12:46:34―――――――――――――‐┬┘
____.____ |
| | | |
| | ∧_∧ | |
| |( ・∀・)つ ミ |
| |/ ⊃ ノ | | CMemoryException*
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ |
|
0462デフォルトの名無しさん
2005/09/03(土) 06:27:57やりたい事は一応できるのですが、解せないことについて御教示下され。
[できてる事]
呼出し元でダイアログをnewして ->Create(...)。
ダイアログをバツ(OnClose)で閉じ、PostNcDestroyでdelete thisし自殺
[わからない事]
呼出し元のメンバでダイアログのオブジェクト(実体)を保持し、.Create。
ダイアログをバツ(OnClose)で閉じる。この時、OnCloseをオーバーライド
して、CDialog::OnClose()の前にDestroyWindow()を呼んでおくとOK。
CDialog::OnClose()のみだと、再度ダイアログ開く時にDebug assertion failed。なぜ?
MSDNを見るとデフォルトのOnCloseがDestroyWindowを呼ぶとあるので、
(IDOKやIDCANCELでなく)バツで閉じる限りはオーバーライド + DestroyWindowの挿入は
不要かなと思ったのですが、なぜこの場合はあえて挿入する必要があるのでしょう?
それとも、挿入するとたまたまうまくいってるように見えてるだけなのでしょうか?
0463デフォルトの名無しさん
2005/09/03(土) 08:30:11createしたものをdestroyせずに再度createはできないってことでは。
0464デフォルトの名無しさん
2005/09/03(土) 08:47:110465デフォルトの名無しさん
2005/09/03(土) 09:42:56MSDNのCDialogの頁にOnCancelでDestroyWindowを呼べと書いてある
0466デフォルトの名無しさん
2005/09/03(土) 10:55:18[親側]
メンバ変数
CChildDlg *m_pChild=NULL;
子を呼ぶところ
if(m_pChild == NULL)
{
m_pChild = new CChildDlg;
m_pChild->Create(IDD_DIALOG);
}
[子側]
void CChildDlg::OnClose()
{
m_pChildDlg=NULL;
CDialog::OnClose();
}
void CChildDlg::PostNcDestroy()
{
// TODO : ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
CDialog::PostNcDestroy();
}
0467デフォルトの名無しさん
2005/09/03(土) 10:56:35void CChildDlg::PostNcDestroy()
{
// TODO : ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
delete this;
CDialog::PostNcDestroy();
}
とやってます。
エラーになることはないが、画面を起動するたびに領域が取られて、
アプリ終了時に一気に開放されるので、あまりいいやり方とは思っていないけど。
0468デフォルトの名無しさん
2005/09/03(土) 11:34:240469デフォルトの名無しさん
2005/09/04(日) 21:07:010470デフォルトの名無しさん
2005/09/05(月) 00:26:140471デフォルトの名無しさん
2005/09/05(月) 16:06:08tutorial で英和辞書(英々でもいいが)を引くヨロシ。
>どこにあるんですか?
ヘルプを「チュートリアル」で検索したりするとザクザク出てくるね。
0472462
2005/09/05(月) 20:38:21>>463
その通りだと思うのですが、MSDNにはデフォルトのOnCloseが
destroyするとあったので、むしろ自分では何もすべきではないのかな、と。。。
>>464
こちらにDestroyWindow()を記述する(CDialog::OnCancel()は削除)と
うまくいってるようです。確かにOnCloseから呼ばれておりました。
>>465
そちらを見たのですが、「親のいない独立ウィンドウの場合」という風に
読めませんか?まあ上記の通り、そうすると確かにうまくいくのですが。
>>466
ご丁寧にありがとうございます。web上のサンプル含め、new/deleteされる
方が多いみたいですね。私もこちらの方法だとうまくいくのですけれども。。。
0473デフォルトの名無しさん
2005/09/05(月) 21:23:24まあ意図する動作は実装できたのけど、MFCの設計の意図がよくわからんという
ことですね。DestroyWindow()をオーバーライドしてブレークポイント張って監視しても
OnClose()からはDestroyWindow()は呼ばれないことがわかります。MFCではよくある
ことですがMSDNの説明は怪しいですね。多分CDialog以外のCWndではそうだという
ことなのでしょう。結局はCWnd::Default()のようですし。
0474462=472
2005/09/06(火) 01:24:32>>473
> DestroyWindow()をオーバーライドしてブレークポイント張って監視
なるほど!まさにやりたかった操作です。OnCloseにブレークポイント
挿入してステップインでなんとかしようと思ったが、大量のアセンブラコード
に阻まれてあきらめてしまったのでした。確かにDestroyWindow()は呼ばれてないですね。
> MFCではよくある ことですがMSDNの説明は怪しいですね。
そうなんですか・・・肝に命じておきます。
お返事頂いた皆様ありがとうございました。ひとつ賢くなれました
0475デフォルトの名無しさん
2005/09/06(火) 13:37:46CFrameWndで作ったウィンドウのPreCreateWindowで
cs.style = WS_VISIBLE | WS_POPUP;
としていますが、くぼんだ境界線がでちゃいます。
cs.dwExStyle &= ~WS_EX_WINDOWEDGE;
としても消えてくれない…
消すことってできますか?
ちょうどVBのフォームでBorderStyleを0にしたようなウィンドウにしたいのです
環境はW2k、VC++6.0、MFCダイアログベースです、
よろしくおねがいします
0476デフォルトの名無しさん
2005/09/06(火) 16:11:25親ウィンドウがある時は親ウィンドウでDestroyWindowするかもしれない。
つーか、親に通知して親がDestroyWindowするようにした方が親の管理が簡単。
0477デフォルトの名無しさん
2005/09/06(火) 23:23:20CRect rect;
GetWindowRect(&rect);
と実行するとうまくいくのですが、
共通処理をするために、グローバル関数として別ファイルで同様に書くと
静的でないメンバ関数の呼び出しが正しくありません。
といわれます。
環境はWinXP、VC++2003、MDIアプリです。
識者の方、よろしくお願いします。
0478477
2005/09/06(火) 23:24:29APIと区別するためにCWndで名前解決は行ってあります。
0479デフォルトの名無しさん
2005/09/06(火) 23:26:45C/C++を勉強しなおせ。
0480デフォルトの名無しさん
2005/09/07(水) 00:23:44そのGetWindowRectはCWndのメンバなんだから、
よそから呼ぶはウィンドウを指定しないとだめだろ。
0481デフォルトの名無しさん
2005/09/07(水) 00:46:40ウィンドウを表示させる前に、表示させる予定の場所の座標をひろうことってどうやってやるのでしょうか?
表示させている状態であればGetWindowRectでひろえるのですが・・・
0482デフォルトの名無しさん
2005/09/07(水) 07:47:03ウィンドウを表示させる前ってCreateする前?
0483482
2005/09/07(水) 09:34:06もちろん、オブジェクトは生成してあります。
欲しい情報は幅と高さだけなので、それだけひろえれば十分です。
0484デフォルトの名無しさん
2005/09/07(水) 09:34:370485デフォルトの名無しさん
2005/09/07(水) 10:29:38「予定の場所の座標」は表示させようとするときにWindows側が決めるんじゃないだろうか。
「幅と高さ」はリソースから計算できそうだけど。
0486デフォルトの名無しさん
2005/09/07(水) 10:34:44Createする前じゃ、GetWindowRectで拾うのは無理だよ。
すべてのCWndのメンバ関数はCreateされた後じゃないと無効だからね。
Createしても
ShowWindowするまでは表示されないから、
その間でGetWindowRectでとる、というのではダメなわけ?
0487481
2005/09/07(水) 11:08:00>>485さんの通り、リソースから計算できれば解決なのですが・・・
やりたいことは、メニューバーからモードレスダイアログを表示、非表示の選択をできるようにしたいのです。
フォトショとかにありそうなやつの簡易版とでもいいますか。
そのまま何もしないと毎回位置がリセットされるので何とかしたいのです。
iniファイルを利用し、位置は記憶できますが、再表示の際その位置に表示するのにSetWindowPos関数を使っていますが、
この引数に幅と高さが必要なので、何かいい方法はないか、と思ってます。
0488デフォルトの名無しさん
2005/09/07(水) 11:25:40>表示するのにSetWindowPos関数を使っていますが、 この引数に幅と高さが必要なので
SWP_NOSIZE指定すりゃいいじゃん
0489481
2005/09/07(水) 11:50:34そうでした・・・完璧に忘れてましたorz
その部分は解決したのですが、今度はSetWindowPos自体が落ちます。
たぶん原因は>>486さんのいうようにCreateする前にセットしてることだと思うのですが・・・
かといってCreateした後だと一瞬(0, 0)に表示されてしまうので、これは避けたいです。
0490デフォルトの名無しさん
2005/09/07(水) 12:11:44非表示でCreateして、位置設定した後表示すりゃいいじゃない。
0491デフォルトの名無しさん
2005/09/07(水) 13:27:18OnInitDialogの中で位置を設定すれば、表示される前にその位置になるよ。
疑い深い人やOnInitDialogの中でやりたくない人は>>490。
0492481
2005/09/07(水) 16:41:22>>490さんの方法で成功しました。
続けて質問なのですが、この方法で作成すると、表示するたびにメンバ変数がクリアされてしまいます。
インスタンスの生成、消滅はビュークラスのコンストラクタ、デストラクタで行っているので、消去されいていることはないと思うのですが・・・
よろしくおねがいします。
0493デフォルトの名無しさん
2005/09/07(水) 16:47:060494デフォルトの名無しさん
2005/09/07(水) 17:15:210495デフォルトの名無しさん
2005/09/07(水) 17:59:13基本的なことではずかしいのですが・・・。
MFC を利用しています。
プロジェクト名を Hoge とします。
グローバル変数はどこでどのように定義すればいいでしょう?
というのも、CHogeApp が定義されている Hoge.h で定義したとしても、
Hoge.h を include している全てのヘッダファイルで定義されてしまい、リンクエラーになります。
extern 宣言をすると、逆に本宣言(?)がなくなり、リンク時に未解決エラーとなります。
Hoge.h のメンバとして用意し、
CHoge* pApp = (CHoge *)AfcGetApp();
pApp->〜
として呼び出すのが普通なのでしょうか。
もしくは、何か他に方法があるでしょうか。
よろしくお願いします。
0496デフォルトの名無しさん
2005/09/07(水) 18:05:33グローバル変数は関数と同じように.hファイルでexternをつけて宣言し、どこかのcppファイルで定義をする必要がある。
0497デフォルトの名無しさん
2005/09/07(水) 18:06:31お前のプロジェクト内にある「theApp」というグローバル変数がどうなってるか見てみろ
0499デフォルトの名無しさん
2005/09/08(木) 01:15:26そこでの変更をドキュメントクラスに保存したいのですが、どうやってドキュメントクラスを呼び出せばいいのでしょうか。
GetDocumentはもちろん使えないですよね。
なお、制作は.NET2003+MDI環境です。
とても初歩的な何かを忘れてるとは思うのですが思い出せません。
0500デフォルトの名無しさん
2005/09/08(木) 10:57:320501デフォルトの名無しさん
2005/09/08(木) 19:03:110502デフォルトの名無しさん
2005/09/08(木) 19:38:48// for example.
void cSomeDialog::OnCancel()
{
if (AfxMessageBox("閉じるかどうか", MB_ICONQUESTION | MB_YESNO) == IDYES) {
CDialog::OnCancel();
}
}
0503247
2005/09/08(木) 19:46:26画面が緑になる問題は、どうやら.netのバグではないか。という結論になりました。
アドバイスどおり、リブートしてからリビルドしたら直りました。
忘れた頃にまた緑になることもありますが、そのときはまたリブート、リビルドで対応してます。
またタイマで起動の1秒後にInvalidateRect(NULL)して、悪くても1秒後には解決するようにしてます。
近況報告でした!
0504デフォルトの名無しさん
2005/09/10(土) 15:32:100505デフォルトの名無しさん
2005/09/10(土) 15:43:08起動時の処理のタイミングで症状が出たり出なかったりするだけ。
0506503
2005/09/10(土) 19:52:06安易な責任転嫁は良くないですね。
じゃよければ理由を教えていただけるとありがたい。
0507名無しさん@そうだ選挙に行こう
2005/09/10(土) 20:09:04どんなダイアログかも分からんし。
0508デフォルトの名無しさん
2005/09/10(土) 20:12:11.NETのバグだと思うよ
0509名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:31:44まあそうだと思うんですが、どこが悪いのかわからないので、
晒せないんですよ。OnInitDialogだけでもかなり長いし。
でも、「どう考えても」っていうぐらいだから多少の心当たりはあるのかなと思ったので。
>508
やっぱりそうですかね。
まあ1秒後には消せるので、これでいいかなとも思います。
いろいろありがとうございます。
0510名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:38:300511名無しさん@そうだ選挙に行こう
2005/09/11(日) 11:56:560512名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:38:03タイマ使って逃げるのは糞プログラム
0513名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:52:410514名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:28:260515名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:46:560516名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:02:08HTMLViewにしてプラグイン入れればほとんどの静止画、動画が再生可能
0517名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:36:20プラグイン探しましたけど、いいのがなくて…
フリーのやつですかね?
0518名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:28:09MFCを使っていくにあたって、こうセオリーみたいなのってありますか?
プログラムによってはソースを書く場所がちがくても
同じ実行だったりするじゃないですか。
ようするに今わからないのは、どの動き方だったらどこに入れるって
いうのがいまいちわからないんです。
なので、もしそういうセオリーみたいなのをわかるサイトもしくは本でも
あれば、教えていただきたいです。
0519デフォルトの名無しさん
2005/09/12(月) 02:19:580520デフォルトの名無しさん
2005/09/12(月) 02:52:52見えるかもしれないが、MFCを使いこなせるようになって来たら
確かに心で感じるものだと実感出来るようになるだろう。
0521デフォルトの名無しさん
2005/09/12(月) 06:14:23でもMFCは基本的な作りが決まってるから
誰が作ってもだいたい同じような感じになってしまう。
でたらめに作るとビルドできないし動かないからね。
0522518
2005/09/12(月) 19:35:230526デフォルトの名無しさん
2005/09/12(月) 22:19:250527デフォルトの名無しさん
2005/09/13(火) 11:52:390528デフォルトの名無しさん
2005/09/13(火) 12:00:190529デフォルトの名無しさん
2005/09/13(火) 13:42:310530デフォルトの名無しさん
2005/09/13(火) 13:47:07void CPenDlg::DrawPen(void){
CPenp(PS_SOLID, 1, RGB(255,255,255));
CPen*oldp=dc.SelectObject(&p);
…
dc.SelectObject(oldp);
}
このoldpを保存して,最後にSelectObject(oldp)する操作は必要なのでしょうか?
このdcはこの関数終了後に破棄されるので,もとのペンに戻す必要がないように見えます
0531デフォルトの名無しさん
2005/09/13(火) 13:51:59リソースリークしてもいいのなら戻さなくていいよ。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_9v3o.asp
>An application should always replace a new object with the original, default object after it has finished drawing with the new object.
0532デフォルトの名無しさん
2005/09/13(火) 14:42:29menu.LoadMenu(IDR_〜);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
このmenuをポップしたときに、ディセイブルにするにはどうしたら良いでつか?
0533デフォルトの名無しさん
2005/09/13(火) 14:50:48現在のグラフィック オブジェクトを使い終わったら、
古いグラフィック オブジェクトをデバイス コンテキストに選択し直して、状態を復元します。
フレームに割り当てられたグラフィック オブジェクトは、スコープからはずれたときに自動的に削除されます。
0534デフォルトの名無しさん
2005/09/13(火) 15:12:58WM_INITMENUPOPUP
0535デフォルトの名無しさん
2005/09/13(火) 15:15:37menuのアイテムをディセイブルにする側のコードはどうなるんでしょう?
0536デフォルトの名無しさん
2005/09/13(火) 15:18:40マニュアル持ってないのか?
CMenuのメンバ関数調べろ
0537デフォルトの名無しさん
2005/09/13(火) 15:52:070538デフォルトの名無しさん
2005/09/13(火) 16:03:510539デフォルトの名無しさん
2005/09/13(火) 16:18:41menu.EnableMenuItem(ID_MENU_〜, MF_GRAYED | MF_BYCOMMAND);
でできますた。
0540デフォルトの名無しさん
2005/09/16(金) 17:40:42求めたいんですが、複数行の文字列のサイズを求める方法が分かりません。
各行のサイズを自前で求めるしかなかですか?
0541デフォルトの名無しさん
2005/09/16(金) 17:44:170542カラス
2005/09/16(金) 18:04:490543デフォルトの名無しさん
2005/09/16(金) 18:38:59CRect rect( 0, 0 ,1024 ,0 );
pDC->DrawText("test\nテスト\nテスト", rect, DT_CALCRECT|DT_WORDBREAK );
rect.bottomに高さが
0544デフォルトの名無しさん
2005/09/16(金) 18:52:32それでサイズがわからんとはどういうこと?
0545デフォルトの名無しさん
2005/09/16(金) 18:57:53どうもありがとうございます。
DT_CALCRECTに見覚えがあるとに、すっかり忘れとりました。ボケてきたかな。
>>544
改行を含む文字列の場合、1行に繋がった横長のサイズが求まるとです。
0546デフォルトの名無しさん
2005/09/16(金) 19:55:17ダイアログベースのMFCで出したいのですが、どのようにすれば
そのウィンドウを出せますか?
このウィンドウがどういう名前なのかがわからないので、
検索キーワードだけでもかまわないので教えていただけるとうれしいです。
0547デフォルトの名無しさん
2005/09/16(金) 20:01:510549カラス
2005/09/16(金) 20:25:000550デフォルトの名無しさん
2005/09/16(金) 21:18:01ノストラダムスの大予言ですか?
0551デフォルトの名無しさん
2005/09/16(金) 21:38:59お前は何を言いたいんだ? ポツダム宣言か?
0552デフォルトの名無しさん
2005/09/16(金) 22:36:50エスパーじゃないと答えられないような表現と言いたいんだろう
0553デフォルトの名無しさん
2005/09/17(土) 00:13:480554デフォルトの名無しさん
2005/09/18(日) 20:39:29モードレスダイアログで変更された項目をドキュメントクラスに反映させたい場合、どうしますか?
モーダルならば戻ってきたときにできますが・・・
0555デフォルトの名無しさん
2005/09/18(日) 21:21:500556デフォルトの名無しさん
2005/09/18(日) 21:40:21変更があったらダイアログからメッセージ投げれば?
0557デフォルトの名無しさん
2005/09/18(日) 21:52:250558デフォルトの名無しさん
2005/09/18(日) 22:01:22自分で更新するだけのような気がするけど
0559デフォルトの名無しさん
2005/09/19(月) 02:04:05プロパティページを入れることは可能ですか?
またそれが不可能な場合、
プロパティページの中にタブコントロールを入れることになると
思うんですが、
タブコントロールの中に子コントロールを入れるのって
リソースエディッタ等で無理やり入れるのと
ソースコードに配置情報を埋め込むのと
どっちが主流なんですか?
0560デフォルトの名無しさん
2005/09/19(月) 02:07:44CPropertyPageDialog
CPropertyPageEx
CPropertySheet
CPropertySheetEx
0561559
2005/09/19(月) 02:20:25CPropertyPageとCPropertySheetから派生したクラスを作るで良いですか?
0562デフォルトの名無しさん
2005/09/19(月) 12:07:39ボタンの外観を普通のボタンと同じようにできますか?
XP標準のLunaを適用させた場合、ボタンの周りにオレンジ色?の枠がついてしまいます。
うまくボタンと同じようにする方法はないですか?
0563デフォルトの名無しさん
2005/09/19(月) 13:23:29これ?
ttp://www.codeguru.com/Cpp/controls/propertysheet/article.php/c595/
>>562
ダイアログ全体なら.manifestファイル消せばいい
そのボタンだけってなら SetWindowTheme()
0564デフォルトの名無しさん
2005/09/19(月) 13:45:22キャーまさにそれです。
ありがとうございました!
0565デフォルトの名無しさん
2005/09/19(月) 14:56:38すいません、そうではなくて、
同じLunaでもボタン風ラジオボタンとプッシュボタンは外観が若干違うんですよ。
どうやら何もしてなくてもマウスオーバー時みたいなボタンになってしまいます。
0566デフォルトの名無しさん
2005/09/19(月) 15:03:23ここに主なメンバを表示させて、ぱっと見でデバッグできるようにしたいのですが。
0567デフォルトの名無しさん
2005/09/19(月) 15:14:15http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsdebug/html/vchowusingexpressionsindebugger.asp
0568デフォルトの名無しさん
2005/09/19(月) 15:16:40ありがとうございます。
0569デフォルトの名無しさん
2005/09/19(月) 18:05:01ググっても全然見つからないので・・・
0570デフォルトの名無しさん
2005/09/19(月) 18:21:490571デフォルトの名無しさん
2005/09/20(火) 01:05:51ダイアログはビュークラスで宣言しているのでビューにあるダイアログのポインタ経由は
ビューを完全に宣言していないのでエラーですよね?
0572デフォルトの名無しさん
2005/09/20(火) 01:17:03って何?
0573571
2005/09/20(火) 01:25:10実際にコンパイルはエラーになります。
0574デフォルトの名無しさん
2005/09/20(火) 01:46:190575デフォルトの名無しさん
2005/09/20(火) 06:00:51まずこれができないと話にならんぞ
それができたら当然これもできるだろ
ダイアログ→親→ダイアログ
0576デフォルトの名無しさん
2005/09/20(火) 07:25:430577デフォルトの名無しさん
2005/09/20(火) 12:35:530578デフォルトの名無しさん
2005/09/20(火) 13:00:24可能です
0579577
2005/09/20(火) 13:20:00要は丸いボタンの絵のところだけ反応するようにしたいのですが、やはり座標を使うのでしょうか?
0580デフォルトの名無しさん
2005/09/20(火) 13:39:08それは見た目だけかえるのではないのですね?
0581577
2005/09/20(火) 13:56:47見た目だけではなく、実際の動作も丸いビットマップのボタンのところだけでしたいのです。しかも楕円などいろんな形を作りたいのです。
ありがとうございます
0582デフォルトの名無しさん
2005/09/20(火) 14:19:010583デフォルトの名無しさん
2005/09/20(火) 18:37:09Pdh〜調べてください。
パフォーマンスモニタのカウンタから取得できます。
0584デフォルトの名無しさん
2005/09/20(火) 18:42:220585デフォルトの名無しさん
2005/09/20(火) 19:00:130586デフォルトの名無しさん
2005/09/20(火) 20:14:420587デフォルトの名無しさん
2005/09/20(火) 20:19:37お前のせいでバカが来ちゃったじゃないか
0588デフォルトの名無しさん
2005/09/21(水) 00:41:52待て
Chincoは面白いだろ!
0589デフォルトの名無しさん
2005/09/21(水) 00:54:12お前のせいでバカがまた来たじゃないか
0590デフォルトの名無しさん
2005/09/21(水) 10:14:51MicroSoftが用意しているAPIってありますか?
0591デフォルトの名無しさん
2005/09/21(水) 10:18:370592デフォルトの名無しさん
2005/09/21(水) 10:21:080593デフォルトの名無しさん
2005/09/21(水) 10:30:16ありがとうございました
0594デフォルトの名無しさん
2005/09/21(水) 13:05:21二度と来るな
0595デフォルトの名無しさん
2005/09/21(水) 13:14:11MFCに関係ない質問ってわかってそうなもんだが
わざとか?
0596デフォルトの名無しさん
2005/09/21(水) 17:02:20CFileFindでファイルの列挙を行っています。
ショートカットも列挙したいのですが、
if( !IsDots() && IsDirectory()){
// ファイルを列挙するための処理
}
とすると弾かれてしまいます。どうすればいいのでしょう。
0597596
2005/09/21(水) 17:09:28出直してきます・・・
0598デフォルトの名無しさん
2005/09/21(水) 17:17:170599カラス
2005/09/21(水) 17:32:300600デフォルトの名無しさん
2005/09/21(水) 17:36:24みんな・恋のノマノマエイってしってる?>−<
549 名前:カラス:2005/09/16(金) 20:25:00
何の話?
599 名前:カラス:2005/09/21(水) 17:32:30
ナー相談うけるんでしょ?
0601デフォルトの名無しさん
2005/09/21(水) 22:26:27で、MFCって何?
0602デフォルトの名無しさん
2005/09/21(水) 23:39:050603デフォルトの名無しさん
2005/09/22(木) 00:06:43お前のせいでバカがもっと来たじゃないか
0604デフォルトの名無しさん
2005/09/22(木) 01:06:32で、ほんとのところMFCってなに?
0605デフォルトの名無しさん
2005/09/22(木) 01:46:500606デフォルトの名無しさん
2005/09/22(木) 02:14:590607デフォルトの名無しさん
2005/09/22(木) 02:44:470608デフォルトの名無しさん
2005/09/22(木) 10:52:16VC6++
SetLayeredWindowAttributesを使うには、
何をどういう手順でインストールすれば
使えるようになりますか?
VC6++だけでは使えないということはわかったのですが、
PlatformSDKやToolkitなどを落とすみたいで、
ただmicrosoftが全部英語でわかりません。
どなたかご教授願います。。。
0609デフォルトの名無しさん
2005/09/22(木) 10:55:510610デフォルトの名無しさん
2005/09/22(木) 11:14:500611デフォルトの名無しさん
2005/09/22(木) 11:49:14まあ質問内容からすればそーいう話では無さそうだな。
0612デフォルトの名無しさん
2005/09/22(木) 18:13:28マイクロソフト化粧品学級
0613デフォルトの名無しさん
2005/09/22(木) 18:47:55MFC = 微軟基礎倉庫
http://www.google.co.jp/search?q=%E5%BE%AE%E8%BD%AF%E5%9F%BA%E7%A1%80%E7%B1%BB%E5%BA%93
0614デフォルトの名無しさん
2005/09/22(木) 23:23:160615デフォルトの名無しさん
2005/09/22(木) 23:55:070617デフォルトの名無しさん
2005/09/23(金) 02:50:38そのIDの文字表現としての文字列のセットじゃない?
するとその文字列とIDをいっぺんにコンボに持たせるというのが便利ですよね?
自分がよくやるのは
m_cbFoo.SetItemData(cbFoo.AddString("hoge"), 10);
m_cbFoo.SetItemData(cbFoo.AddString("hoge2"), 20);
とかやります。
んで、あるIDが現在選択されている場合、コンボの現在の選択は次のようにSetCurSelします。
for(int i = 0 ; i < m_cbFoo.GetCount() ; i++)
{
if(m_cbFoo.GetItemData(i) == curr_id)
{
m_cbFoo.SetCurSel(i);
break;
}
}
とか。なんかすっごい無駄なことをしている気がする今日この頃。
皆さんならどんな風にしますか?
0618デフォルトの名無しさん
2005/09/23(金) 02:57:550619デフォルトの名無しさん
2005/09/23(金) 03:00:37「自分の都合で決めたID」というのは表現が激マズでした。
正しくは何らかの事情に引っ張られて飛び飛びの値をとらざるを得ない。
と読み替えてください。
0620デフォルトの名無しさん
2005/09/23(金) 03:09:04んじゃAddStringの戻りでIndexが返ってくるから、それと自前のIDでmapでもつくりゃええがな
0621デフォルトの名無しさん
2005/09/23(金) 03:14:56普通はどんな風にやるのがいいのかなぁ。。
人気のある方法を教えてください。
0622デフォルトの名無しさん
2005/09/23(金) 03:20:360623デフォルトの名無しさん
2005/09/23(金) 05:54:07起動時にファイルから読んで
終了時にファイルへ保存
コンボボックスなら行単位
リストビューならCSV
0624デフォルトの名無しさん
2005/09/24(土) 00:04:17ArcにしろEllipseにしろ外接する四角形で指定するのはめんどくさいです。
ググってもなかなかいいものがないもので。。。
よろしくお願いします。
0625デフォルトの名無しさん
2005/09/24(土) 00:13:220626デフォルトの名無しさん
2005/09/24(土) 03:33:43君はプログラムを組むのをやめたほうがええ
0627デフォルトの名無しさん
2005/09/26(月) 09:24:310628デフォルトの名無しさん
2005/09/26(月) 10:36:21―――――――――――――‐┬┘
|
____.____ |
| | | | コンナモンイラネ
| | ∧_∧ | |
| |( ´∀`)つ ミ |
| |/ ⊃ ノ | |
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ∧_∧
(>>627 )
⊂ ⊂ )
⊂ ⊂ ,ノo
0629デフォルトの名無しさん
2005/09/28(水) 10:45:400630デフォルトの名無しさん
2005/09/28(水) 11:11:11InputBoxとは?
0631デフォルトの名無しさん
2005/09/28(水) 11:17:38エディット1つとOk・キャンセルのボタン2つのダイアログ、
でつ。
0632デフォルトの名無しさん
2005/09/28(水) 11:23:04おーなるほど。
>>629
ダイアログエディタで自分で作ってください。
0633デフォルトの名無しさん
2005/09/28(水) 12:29:480634デフォルトの名無しさん
2005/09/28(水) 12:44:200635デフォルトの名無しさん
2005/09/28(水) 17:13:240636デフォルトの名無しさん
2005/09/28(水) 17:18:330637デフォルトの名無しさん
2005/09/28(水) 21:30:40内部で使用するDLLに改造しています。
ひとまずCStringなどを使うことは出来るようになったのですが、そこから先、
リソースを追加してストリングテーブルに登録した文字列をCString::LoadString()
しようとしたら、Debug Assertion Faildしてしまいました。
#afxwin1.inl の22行目、AfxGetResourceHandle() でASSERT
コンパイルオプションなどをひねくり回してみたりしたのですが、どうにも
うまくいきません。どなたか、うまい手順についてご存じないでしょうか?
環境はVC++6.0sp5 です。
0638637
2005/09/28(水) 21:31:441行目:非 MFC DLL として作成したDLL、CStringなど(ダイアログは用いない)を
→「非 MFC DLL として作成したDLLを、CStringなど(ダイアログは用いない)を」
0639デフォルトの名無しさん
2005/09/28(水) 21:59:38グローバルオブジェクトのコンストラクタとかでCString::LoadString()してないか?
0640613
2005/09/28(水) 22:08:34いえ、普通の関数の中です。
0641デフォルトの名無しさん
2005/09/28(水) 22:13:33ウィザードでMFC拡張DLLとレギュラーDLLを作って比べた方がよかよ。
MFC拡張DLLにしかない処理のあるけんね。
AfxInitExtensionModule
AfxTermExtensionModule
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
とか。
0643640=637
2005/09/28(水) 22:24:12オートコンプリートなんてキライ……
0644637
2005/09/28(水) 22:34:11ご指摘ありがとうございます。
実はMFC拡張DLLとの比較は行っていまして、実証としてミニマムなコードを
作成して試したのですが、こちらでも同じ箇所で止まりました。
#resource.hをincludeして、export関数1個作成、中でCString::LoadString()した。
元のDLLは空のDLLプロジェクトから作っていったものなので、そもそもMFCを
用いることに無理があるのかもしれません。
指摘の点について調べてわからなければ、プロジェクト新規作成からやり直す
ことにします。
0645デフォルトの名無しさん
2005/09/28(水) 23:35:290646デフォルトの名無しさん
2005/09/29(木) 00:05:530647デフォルトの名無しさん
2005/09/29(木) 01:23:29WTLの場合、こういう書き方が可能なのですが
CComboBox cmb = wnd.GetDlgItem( IDC_COMBO_XXX );
MFCでも同様に書こうとするとMFC内部でアサーションエラーが出ます。
CComboBox cmb;
cmb.Detach();
cmb.Attach( wnd.GetDlgItem( IDC_COMBO_XXX )->GetSafeHwnd() );
MFCではコントロールを扱いたいとき、その都度
一時的なCWnd*を取得するのが正しいやり方なのですか?
void func0(){
CComboBox* pcmb = wnd.GetDlgItem( IDC_COMBO_XXX );}
void func1(){
CComboBox* pcmb = wnd.GetDlgItem( IDC_COMBO_XXX );}
0648デフォルトの名無しさん
2005/09/29(木) 01:30:17CWnd::GetDlgItem
戻り値
指定されたコントロールまたは子ウィンドウへのポインタ。パラメータ nID で指定される整数の ID を持つコントロールが存在しない場合は、NULL を返します。
返されるポインタは、一時的なポインタです。後で使用するために保存しておくことはできません。
0650デフォルトの名無しさん
2005/09/30(金) 10:00:47ディレクトリ操作関数が含まれている
MFCのクラスってございますか?
0651デフォルトの名無しさん
2005/09/30(金) 10:13:570652デフォルトの名無しさん
2005/09/30(金) 10:28:350653デフォルトの名無しさん
2005/09/30(金) 11:41:55非常に小さくなってしまうのですが、
どうすれば大きくできるのでしょうか?
0654デフォルトの名無しさん
2005/09/30(金) 11:54:07適当に探すとCStringに変換して使う例はよく見かけるんですが、実数の集計がしたいのです。
できて当たり前なはずなので無いはずはないと思ってるんですがわからない。
すいません。教えて下さい。
0655デフォルトの名無しさん
2005/09/30(金) 12:04:54COleVariantはVARIANTから継承しているからVARIANTのメンバをそのまま読み書きすればいい。
COleVariant::ChangeTypeで型を変換してから触るほうが楽だと思う。
0656デフォルトの名無しさん
2005/09/30(金) 15:44:46CImageListにSHGetFileInfo()でシステムのイメージリストのハンドルを取ってきて
CListCtrlに関連付けて表示しています。
このCListCtrlにオリジナルのアイコンも表示したいのですが、
CListCtrlにアイコンを表示させるにはCImageListしか見当たりません。
関連付けてあるのはシステムのだし、そこに追加もできないし。
なにかいい方法はありませんか。
というか、IEのアイコンがSHGetFileInfo()で取得できません。
ぐぐったらOfficeXPがはいっているととれないことがある、
ということまではわかったのですが・・・
なのでHTMLファイルをオリジナルのアイコンで表示しようかと思っているのです。
0657デフォルトの名無しさん
2005/09/30(金) 16:45:34ありがとうございます。
で、ChangeTypeを見てたんですが、型を変換するとVARIANTで参照できるようになる?
有効な(?)型を変更しているのかなとか思ったので、ChangeTypeをするメリットがよく
わからないのです。
というか、多分書いてもらった事が全然理解できてないかもですが。
0658デフォルトの名無しさん
2005/09/30(金) 17:49:17COleVariant::dblVal
を参照すればいいんだけど。
0659デフォルトの名無しさん
2005/09/30(金) 21:16:00マッピングモードを変えてください
0660デフォルトの名無しさん
2005/09/30(金) 22:47:00658のいうとおりメンバCOleVariant::dblValからはdouble型で読み取れるんだけど、
当然COleVariantの値がdouble型で格納されている場合にしか使えない。
VARIANT(COleVariant)には値が整数型やdecimal型で格納されていたり、doubleへのポインタが格納されていたりするかもしれない。
そこでそういった内部の型の違いを吸収して指定された型に変換させるのがChangeType。
元が何型であっても、これでdoubleに変換しておけばその後は絶対にメンバdblValからdouble値を読み取れるようになる。
0661デフォルトの名無しさん
2005/10/01(土) 00:38:59メッセージ受け取って呼び出される関数内で砂時計にする処理を入れても、関数を抜けるとカーソルが戻ってしまう…
解除処理なんて入れてないのに…
関数抜けちゃダメならと、スレッド立てて、その中で砂時計にしようとしたら、thisポインタ渡しても一瞬たりとも砂時計にならず…
どなたかヘルプミー!orz
0662デフォルトの名無しさん
2005/10/01(土) 00:50:040663デフォルトの名無しさん
2005/10/01(土) 00:58:090664デフォルトの名無しさん
2005/10/01(土) 01:27:32AfxGetApp()->DoWaitCursor(1);
を使ってみたり、
SetCursor(LoadCursor(NULL,IDC_WAIT));
を使ってみたり、
CWaitCursorクラスを使ってみたりしました。
0665デフォルトの名無しさん
2005/10/01(土) 01:27:34CWaitCursor でも使ってんだろ
MSDN読め
スコープ外れたらデストラクタが以前のカーソルに戻すって書いてあんだろ
0666デフォルトの名無しさん
2005/10/01(土) 01:32:54CWaitCursorはスレッドで使えるかな?
と思ったけど、へたれな俺じゃ無理らしい。
0667デフォルトの名無しさん
2005/10/01(土) 01:38:550668デフォルトの名無しさん
2005/10/01(土) 02:07:21はい次の質問↓
0669デフォルトの名無しさん
2005/10/01(土) 03:10:11ありがとうございました。
やっと理解できてきた気がします。
聞いた事覚えつつ、とりあえずもっかいCOleVariantあたりのヘルプを読み直してみます。
0670デフォルトの名無しさん
2005/10/01(土) 16:25:55可能なとき、どのようにして作成すれば良いのでしょうか?
0671デフォルトの名無しさん
2005/10/01(土) 17:45:58基本クラスにHtmlViewを選択して、プロジェクトを作成しました。
リソースに組み込んだHTMLファイルを、起動と同時に表示させたいと思っています。
OnInitialUpdate内に記述するのかと思っているのですが、
どうすればよいのでしょうか。
0672デフォルトの名無しさん
2005/10/01(土) 17:54:53DLLを生成する新規プロジェクトを作って練習しなさい。
>>671
もっともがき苦しみなさい。
CHtmlView::LoadFromResource
指定されたリソースを WebBrowser コントロールに読み込みます。
BOOL LoadFromResource(LPCTSTR lpszResource);
BOOL LoadFromResource(UINT nRes);
0673デフォルトの名無しさん
2005/10/02(日) 07:15:38CStaticのサブクラスに関する質問です。
CStaticをオーバーライドしてCMyStaticをつくります。
CMyStaticに対してOnPaintをオーバーライドして全体を黒く塗ります。
DialogにCStaticを貼り付け、そのIDにメンバ変数のCStaticを割り当てます。
コイツをCMyStatic型に書き直して実行すればCMyStaticはCMyStatic::OnPaintの処理でその窓は黒く塗りつぶされるはずですよね?
でも実際にはCMyStatic::OnPaintには処理が着ませんでした。
自分は実はメッセージがどんな風に配られるのかよく分ってません。
CMyStatic::OnPaintが呼ばれるには何が不足してるのでしょうか?
教えてください。
0674デフォルトの名無しさん
2005/10/02(日) 08:35:07コード見ないとよく判らないけど、IDはIDC_STATIC以外のUniqな値にしている?
初めからCMyStaticに割り当てなかったのは何故か知らないけど、全部書き直した?
0675673
2005/10/02(日) 08:53:17IDはID_MYSTATICとしています。あとプルダウンからCMyStaticが出てこなかったのでCStaticで作成しておいて
それをCMyStaticにしました。
0676デフォルトの名無しさん
2005/10/02(日) 08:56:14class CMyStatic : CStaticという宣言のためpublic派生でないと判断され、
その結果DDX_Control(pDX, IDC_MYSTATIC, m_MyStatic);のところで
CMyStatic * _64がCStatic&に変換できないとかなんとか怒られていて
つい、DDX_Controlをコメントアウトにしていたのを忘れてました。
コイツを復活させてpublic派生にしたらちゃんときました。
ゴメンナサイ
0677デフォルトの名無しさん
2005/10/02(日) 08:58:45そこはプルダウンに出ないから自分で書けばいいはず。
そうすればそのクラスのあるファイルを指定できる。
0678デフォルトの名無しさん
2005/10/02(日) 09:14:32おはよう。
CMyStaticの作り方に問題がある。
一覧に出すためのおまじないが欠けている。
0679653
2005/10/03(月) 09:39:11解決しました。ありがとうございます。
http://forums.belution.com/ja/vc/000/186/73.shtml
0680デフォルトの名無しさん
2005/10/04(火) 18:29:030681デフォルトの名無しさん
2005/10/04(火) 19:00:510682デフォルトの名無しさん
2005/10/04(火) 19:02:19自分で作りなさい。
最近は探せない上に、自分で作れない子が多いね。
0683680
2005/10/04(火) 20:28:220684デフォルトの名無しさん
2005/10/04(火) 20:50:380685デフォルトの名無しさん
2005/10/04(火) 21:58:05Win32APIはスレ違い。
0686デフォルトの名無しさん
2005/10/05(水) 19:16:39MSDNだとポートじゃない方のCOMしかでてこないのですが・・・
0687デフォルトの名無しさん
2005/10/05(水) 19:18:390688デフォルトの名無しさん
2005/10/05(水) 19:21:010689デフォルトの名無しさん
2005/10/05(水) 19:26:050690デフォルトの名無しさん
2005/10/05(水) 22:24:53ReadFileで2バイト読み込んじゃうんだけど、そのことにきがつかずに
次にCOMのイベントチェックするとRXCHARが発生しているのでReadFileしようとするけど
さっき読んじゃったから次のバイトがくるまで固まるっていう不具合を避けるために1バイト
づつ読めっていう話があったけどいまだにそういうことに気をつけて作らないといけないの?
0691デフォルトの名無しさん
2005/10/05(水) 22:31:34それはMFC?
0692デフォルトの名無しさん
2005/10/05(水) 22:35:030693デフォルトの名無しさん
2005/10/06(木) 00:40:430694デフォルトの名無しさん
2005/10/06(木) 10:06:370695デフォルトの名無しさん
2005/10/06(木) 23:46:55ダイアログバーにボタンを貼り付けてそのボタンにたいして
GetDlgItem(ID_BTN1)->EnableWindow(TRUE);とやってあげます。
確かにウインドがEnableになるのですが、その後フレームワークにより
Disableにされてしまいます。
フレームワークはどういう条件でそんなことをしちゃうのでしょうか?
ちなみにソースはあまりキレイなものではなく(引き継いだ)
結構手作業でON_COMMANDやらON_UPDATE_UIやらを追加・削除なんかしてて
それなりに怪しいのですが。
0696デフォルトの名無しさん
2005/10/07(金) 00:01:470697デフォルトの名無しさん
2005/10/07(金) 00:04:310698デフォルトの名無しさん
2005/10/07(金) 00:07:380699デフォルトの名無しさん
2005/10/07(金) 00:10:210700デフォルトの名無しさん
2005/10/07(金) 09:53:59できますか?そのようなアプリケーションを探しているのですがないので
自作しようと思っています。
0701デフォルトの名無しさん
2005/10/07(金) 11:30:11MFCの機能じゃないからスレ違い
0702デフォルトの名無しさん
2005/10/07(金) 13:25:55「アプリケーションにメッセージ ボックスを実装するには、このメンバ関数ではなくグローバル関数 AfxMessageBox を使用してください。」
と書いてありますが、なぜなんでしょうか。
使ってはだめということじゃなくて、AfxMessageBoxの方が便利ですよ、ということだけなのかな?
0703デフォルトの名無しさん
2005/10/07(金) 14:03:260704デフォルトの名無しさん
2005/10/07(金) 14:16:210705デフォルトの名無しさん
2005/10/07(金) 15:26:47まあ頑張ってソース読んでみては。
0706デフォルトの名無しさん
2005/10/07(金) 15:33:25メインじゃないフレームウィンドウでAfxMessageBoxを使うと、
メインフレームを親にしちゃうからなぁ。
AfxMessageBox使えねー。
0707デフォルトの名無しさん
2005/10/07(金) 16:53:29AfxMessageBox()もCWnd::MessageBox()も内部で::MessageBox()を呼ぶが、
CWnd::MessageBox()よりもはるかに複雑なことをやってるから。
0708デフォルトの名無しさん
2005/10/07(金) 17:48:21見ても解らんのです。教えて下さい。
0709デフォルトの名無しさん
2005/10/07(金) 17:56:58CDateTimeCtrlでエディットコントロール部分の
文字の色とか背景の色とか変える方法ってありますか?
google様によれば文字の色だけはあるっぽいのでつが・・・
0710デフォルトの名無しさん
2005/10/07(金) 23:41:44メッセージハンドルを追加する際に「クリックされた時」か「ダブルクリックされた時」しかなく
「ボタンが押されている時」と「ボタンが離された時」のメッセージを
取りたいのですが何か良い方法はありませんか?なるべく簡単な方法で…(^-^A;
0711デフォルトの名無しさん
2005/10/07(金) 23:45:25_. -ッ'"  ̄ ̄`' ー-、
/、.....!......._,,::;;:'::::::::::::::ヽ
i´厂`''''"´ `ー、‐::-::;;l
}ノ-、 ,. -‐-、 ヽ;::::::::l
l ̄二'ー 'フ,ニニ.ーrー}-レ ''7
l : i.__゚〉r、::..ヽ.__゚ノ レ''}ノf´/
`''r-- ノ:::`ー---‐'′:l-イ
l `_ ____,、 :l|::::| >>710教えてあげません
. ヽ. ― /:::|:リ
ヽ. ,. -'-‐''"´| ,.へ,
r} ̄ _,,.. -‐ ''"フ‐''"_∠,`ー- ...,,_
-‐ノハ ̄ _.=''´/ --`i '''' ー-′
/ l / / '′ -ー{
,.ヘ. '´_,.‐'′
0712デフォルトの名無しさん
2005/10/08(土) 00:03:49「アプリケーションに【ユーザ独自の】メッセージ ボックスを実装するには」
ということでしょう。で、その場合↓をオーバライドする。
>CWinApp::DoMessageBox
>AfxMessageBox 呼び出しのアプリケーション レベルの処理をカスタマイズするには、
>このメンバ関数をオーバーライドします。
0713デフォルトの名無しさん
2005/10/08(土) 09:09:10COMのオブジェクトのイベント(OnStartとか)をどう実行したらよいかわかりません。タイプライブラリを追加して
できたヘッダファイルは以下のような感じです。
// IMeasurement ラップ クラス
class IMeasurement : public COleDispatchDriver{
public:
IMeasurement() {}// COleDispatchDriver デフォルト コンストラクション
IMeasurement(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
IMeasurement(const IMeasurement& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
// アトリビュート
public:
// オペレーション
public:
void Start();
void Stop();
void Step();
};
// _IMeasurementEvents ラップ クラス
class _IMeasurementEvents : public COleDispatchDriver{
public:
_IMeasurementEvents() {}// COleDispatchDriver デフォルト コンストラクション
_IMeasurementEvents(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
_IMeasurementEvents(const _IMeasurementEvents& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
// アトリビュート
public:
// オペレーション
public:
// メソッド 'OnStart' は戻り値の型またはパラメータ型が無効なため表示できません。
// メソッド 'OnStop' は戻り値の型またはパラメータ型が無効なため表示できません。
};
0714デフォルトの名無しさん
2005/10/08(土) 09:11:021.CreateDispatch
2.1でできたオブジェクトのOnStart
0715デフォルトの名無しさん
2005/10/08(土) 09:39:32そんなメッセージは無い
0716デフォルトの名無しさん
2005/10/08(土) 11:18:43CButton派生の自作クラスを作って、メッセージを送出したらいいじゃない。
0717デフォルトの名無しさん
2005/10/10(月) 13:49:09あるプロジェクトで作成したダイアログを、
他のプロジェクトで利用したいときはどうすればいいでしょう?
VC++6.0でSDI→MDI移植に挑戦してるけど、
ダイアログのソースファイルや.rcファイルをコピーしてもうまくいきません。
どなたか知恵をお貸しください。
0718デフォルトの名無しさん
2005/10/10(月) 18:40:43ダイアログをDLLで作ってあればまだしも
0719デフォルトの名無しさん
2005/10/10(月) 18:54:15何がうまくいかないのかよくわからん
0720デフォルトの名無しさん
2005/10/10(月) 21:26:520721デフォルトの名無しさん
2005/10/11(火) 19:49:50この時に飛んでくるイベントなどありますでしょうか?
未熟者ゆえ、Spy++を眺めてもわからなかったとです。どうぞ御教示下され
VC++ 6 on Win2KSP4
0722717
2005/10/11(火) 22:06:55でビルドしたところ"ID〜が定義されていません"系エラー多発。
ソースを追うとリソースエディタのプロパティで確認できるIDと、
ヘッダファイル内のIDが異なっていることに気付く。
これは元プロジェクトも同様。
よってIDを結びつけるマッピング関数が記述されたファイルがどこかにあると思ったんだがorz
結局SDIプロジェクトに新規MDIプロジェクトからApp,Doc,Viewを移植することで
SDI→MDI移植計画中ですたい。
0723デフォルトの名無しさん
2005/10/11(火) 22:24:18http://www.microsoft.com/japan/developer/library/vcug/_asug_copying_resources.htm
0724デフォルトの名無しさん
2005/10/11(火) 22:39:08まずは、すべてのIDをresource.hで定義しろ。
resource.hが他のソースの依存関係に入っていないので、
resource.hを手動で書き換えたらリビルドする必要がある。
resource.hが依存関係にないのは、
//{{NO_DEPENDENCIES}}
と書かれているため。
リソースを追加するとresource.hが書き換わるが、
リソース追加のたびにresource.hをincludeしてる全ファイルをビルドする羽目になる。
NO_DEPENDENCIESはこれを避けるための仕組み。
0725デフォルトの名無しさん
2005/10/11(火) 22:51:39プロジェクトそのまま移行できたはず。
俺も具体的な手順は忘れたけど。
0726デフォルトの名無しさん
2005/10/15(土) 00:09:04MFCダイアログベースのアプリで、メインのダイアログから、CDialog派生のダイアログを
DoModalで表示させています。
その派生ダイアログの中にCEditコントロールがあって、SetSelで選択範囲を指定している
んですが、Windows2000とXPで挙動が違うようなので困っています。
具体的には、たとえばテキストが"あいabcd"だとして、SetSel(2, 4)とすれば、2000環境では
"い"の部分が選択されますが、XP環境では"ab"の部分が選択されます。
どうやらXP環境ではバイト数ではなくマルチバイト文字数で選択範囲が決まっているようなんですが、
こういう仕様なんでしょうか?
0727デフォルトの名無しさん
2005/10/15(土) 02:11:24ヒント:UTF16
0728デフォルトの名無しさん
2005/10/15(土) 02:52:47MBCS版とWCS版を作ってみろ。
0729デフォルトの名無しさん
2005/10/15(土) 03:02:31XPでmanifestファイル、コモンコントロールv6.0を使用している場合、
テキスト関連(キャレット位置、選択範囲等)はだいたいバイト数ではなく
文字数での扱いになるようです。
そういう仕様なのだと…
0730デフォルトの名無しさん
2005/10/15(土) 03:04:14でもIsWindowUnicode()はFALSEを返すんですよね…
0731デフォルトの名無しさん
2005/10/15(土) 10:51:33MBCSでビルドしてもcomctl32.dll ver6.0だとWCHAR単位になるんだよ
0732デフォルトの名無しさん
2005/10/15(土) 15:33:12表示させたいのですが、実ファイルを作成せず、メモリファイルのまま
表示させる方法はないでしょうか?
0733デフォルトの名無しさん
2005/10/16(日) 01:21:47MDIのプログラムから起動時に、
モードレスダイアログボックスを呼び出しています。
モードレスダイアログボックスがアクティブになっている時、
CxxxDialog::OnKeyDownでキーの取得が出来ないのですが、
どのようにすればよろしいのでしょうか。
メインウィンドウがアクティブになっているときは、
CxxxView::OnKeyDownでキーの取得はちゃんとできます。
また、CxxxDialog::OnMouseMoveでマウスの動きは取得できます。
キー入力だけ取得できないので困っております。
原因が分かる方おしえてください。
0734733
2005/10/16(日) 01:37:030735デフォルトの名無しさん
2005/10/16(日) 17:51:43どのメソッド・関数で時間がかかっているか調べるようなツールはありませんか?
0736デフォルトの名無しさん
2005/10/16(日) 17:55:19関数などの処理の前後で現在時刻を取得しろ。ミリ秒単位で取得できるぞ。
0737デフォルトの名無しさん
2005/10/16(日) 19:45:060738デフォルトの名無しさん
2005/10/16(日) 19:51:21ある。
0739デフォルトの名無しさん
2005/10/16(日) 20:14:140740デフォルトの名無しさん
2005/10/16(日) 21:47:49詳しく教えてください
0741デフォルトの名無しさん
2005/10/16(日) 21:58:04googleで調べてください
0742デフォルトの名無しさん
2005/10/16(日) 22:06:200743デフォルトの名無しさん
2005/10/16(日) 22:30:44エンタープライズに付いているよ。
あまり高機能とは言えないけど。
0744デフォルトの名無しさん
2005/10/16(日) 22:46:05ある の検索結果 約 82,500,000 件中 1 - 10 件目 (0.03 秒)
0745デフォルトの名無しさん
2005/10/16(日) 22:53:430746デフォルトの名無しさん
2005/10/17(月) 13:33:32VC6 のプロファイラか…
あれ、設定ダイアログに罠が仕込んであるからなあw
0747デフォルトの名無しさん
2005/10/17(月) 21:26:09kwsk
0748デフォルトの名無しさん
2005/10/18(火) 01:20:36GUIのバグということだ。
0749デフォルトの名無しさん
2005/10/18(火) 03:27:46リストビューのLVS_SHAREIMAGELISTSのようなフラグが見つかりません。
ツリービューの場合は共有イメージリストであることを特に明示する必要はないんでしょうか?
0750デフォルトの名無しさん
2005/10/19(水) 05:35:06任意の背景色を与えることはできますか?
カスタムドローを使って NMLVCUSTOMDRAW の nmcd.dwDrawStage が
CDDS_PREPAINTのときにCDRF_NOTIFYSUBITEMDRAW をセットして・・・と
いうところに行き着きましたが、1行おきに色をつけること等はできても
目的の選択行だけ色を・・・という所には行き着けません。
この方法、選択行の色を変える方法として正しくない気もします・・・
0751デフォルトの名無しさん
2005/10/19(水) 08:55:451行おきに色をつけられるってことは、何行目かは判るってことでしょ。
その行が選択されているかどうかは得られるわけだから、カスタムドローでできそうだが。
0752デフォルトの名無しさん
2005/10/19(水) 10:41:021番がラジオボタンだと、初期表示でラジオボタンにフォーカスが当たってくれません。
プロパティではタブストップTRUEにしています。
画面はこんな感じの構成になっています。
----グループボックス-----------------------------------------
スタティックテキスト ○ラジオボタン1 ○ラジオボタン2
スタティックテキスト ○ラジオボタンA ○ラジオボタンB
エディットコントロール [______]
-------------------------------------------------------------
タブ順は
『ラジオボタン1→ラジオボタン2→ラジオボタンA→ラジオボタンB
→エディットボックス』と設定していますが、初期表示でフォーカスが
エディットボックスに当たってしまいます。
きちんと設定したタブ順で遷移させたいのですが、何か原因がありましたら
ご指導お願います。
0753デフォルトの名無しさん
2005/10/19(水) 10:42:190754デフォルトの名無しさん
2005/10/19(水) 10:56:560755デフォルトの名無しさん
2005/10/19(水) 11:21:41「グループ」をONにしてないんじゃまいか?
0756デフォルトの名無しさん
2005/10/19(水) 13:44:01グループはTRUEでグループ化しています。
チェック有無の制御も問題無く出来ています。
午前中いろいろ考えましたが、原因がわからないため
>>754さんの言うとおり、SetFocusで強制的にフォーカスを当てるように
作り直しました。ちょっと変な感じしますが、現状で問題なく動いてくれて
いるので由としてます。アドバイスありがとうございました。
0757750
2005/10/21(金) 05:01:09カスタムドローをベースに、選択行だけ背景と文字を自分で描くようにして
とりあえず解決しました。プチオーナードロー
0758デフォルトの名無しさん
2005/10/21(金) 13:28:47CArray<int, int> hoge;
と宣言すると ; が < の前に必要ですとかエラーが出ます。
でも、CArrayをググって見ると、上記で宣言してるソース見本がたくさんあります
これ、何がいけないんですか?
0759デフォルトの名無しさん
2005/10/21(金) 13:51:09エラーメッセージがアレだが、
「CArray って何よ?」
と訴えている。
#include <afxtempl.h>
0760デフォルトの名無しさん
2005/10/21(金) 13:56:34いけました、ありがとうございます
ウィザードで自動生成されたstdafx.hでインクルードされてるものだけじゃCArray使えないんですね・・・
勉強になりました
0761デフォルトの名無しさん
2005/10/21(金) 15:42:540762デフォルトの名無しさん
2005/10/21(金) 16:04:570763デフォルトの名無しさん
2005/10/21(金) 16:11:140764デフォルトの名無しさん
2005/10/21(金) 17:00:00どうせMFC使うんだから、STL使わずにMFCだけでやろうと思ってCArrayにしたんだけどね
0765デフォルトの名無しさん
2005/10/21(金) 17:03:150766デフォルトの名無しさん
2005/10/21(金) 17:04:22標準品があるのにわざわざ特殊仕様品を使う積極的な理由が他にあるとも思えないけど。
0767デフォルトの名無しさん
2005/10/21(金) 17:06:160768デフォルトの名無しさん
2005/10/21(金) 17:08:550769デフォルトの名無しさん
2005/10/21(金) 17:11:400770デフォルトの名無しさん
2005/10/21(金) 17:20:240771デフォルトの名無しさん
2005/10/21(金) 17:34:06だよねえ。
MFC のコンテナは C++ に STL が含まれて
居なかった頃の名残でしかないワケで
今更使う意味はないね。
0772デフォルトの名無しさん
2005/10/21(金) 17:45:36MFC嫌スレにでも行けば?
0773デフォルトの名無しさん
2005/10/21(金) 17:47:12CArrayを勧めるつもりではないが、CArrayでもおそらく&a[0]と&a[0] + a.GetSize()でいける。
0774デフォルトの名無しさん
2005/10/21(金) 17:49:53何て言うんだっけ。
0775デフォルトの名無しさん
2005/10/21(金) 17:51:270776デフォルトの名無しさん
2005/10/21(金) 18:13:210777774さん
2005/10/21(金) 18:19:16http://www.hey-to.net/ML-archive/vcppML/1999/msg03973.html
> MFCだと、たとえばCArrayで書いてた部分をCListに取り替えたとき、
> 書き直さなければならないコードの量がすんごいです。やってらんない。
> クラスとメソッドの直交性が皆無なんだな...
> MFCコレクションの唯一のメリットといえば、
> シリアライズがちょびっと楽なことくらいでしょうか。
0778デフォルトの名無しさん
2005/10/21(金) 18:19:57Even though it's perfectly safe to use STL classes in MFC applications,
many MFC programmers prefer MFC's collection classes to STL's,
either because they're more familiar with MFC's
or because they don't want to increase their applications' EXE size
by linking to two separate class libraries.
0779デフォルトの名無しさん
2005/10/21(金) 18:20:430780デフォルトの名無しさん
2005/10/21(金) 18:35:490781デフォルトの名無しさん
2005/10/21(金) 19:45:12それと、exeサイズを増やすことにロマンを感じてしまっている。
0782デフォルトの名無しさん
2005/10/21(金) 19:48:16コピコンに注意
0783デフォルトの名無しさん
2005/10/22(土) 10:51:36std::map<_bstr_t, std::vector< ComPtr<IStream> > >
};
はやくライブラリ統一されんかのか
0784デフォルトの名無しさん
2005/10/23(日) 02:34:49何か足りないでしょうか。。
BOOL CDialog1::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: この位置に初期化の補足処理を追加してください
m_list.InsertItem(0, "テスト");
UpdateData(FALSE);
return TRUE; // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
// 例外: OCX プロパティ ページの戻り値は FALSE となります
}
0785名無しさん@佐賀市長選挙にいこう
2005/10/23(日) 02:52:52努力が足りない。
0786784
2005/10/23(日) 03:07:12>785
その通りでした。。(*_ _)人
0787デフォルトの名無しさん
2005/10/23(日) 22:26:30VC6でMSDNのサンプルのKBBarを弄っています。
ボタンをクリックしたらダイアログが出るように改造しようと思い、
リソースにダイアログを追加し、クラスウィザードでCKBDlgクラスを作成し、
以下のようなソースを作成しました。
CKBDlg cdlg;
cdlg.DoModal();
これでDebugモードでコンパイルし、上記のソースの部分を実行すると、
DoModalする際にAssertされます。
内容はProgramがiexplorer.exeで
Fileがafxwin1.inl Line 26です。
どうにかDialogを表示することができないのか、
どなたか宜しくお願い致します。
0788デフォルトの名無しさん
2005/10/23(日) 22:30:45COMの初期化とかはちゃんとしてる?
0789デフォルトの名無しさん
2005/10/23(日) 22:35:480790787
2005/10/23(日) 22:56:30的外れかもしれませんが、
InitInstanceでAfxEnableControlContainer はしています。
>789
25 _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
26 { ASSERT(afxCurrentResourceHandle != NULL);
27 return afxCurrentResourceHandle; }
のところです。
0791デフォルトの名無しさん
2005/10/23(日) 23:14:13では
ASSERT(afxCurrentResourceHandle != NULL);
の意味を考えてみよう。
0792787
2005/10/24(月) 12:45:57遅くなって申し訳ございません。
afxCurrentResourceHandleの中を追っかけてたときは、値を返しているようなのですが、
どうも最終的にはNULLが返ってきます。
情けないことに、これまでこんなに奥深いところで悩んだことがなかったですので、
チンプンカンプンです。
0793デフォルトの名無しさん
2005/10/25(火) 13:16:09インタフェイス等で外部から呼ばれたときに、
ちゃんとAFX_MANAGE_STATEとかしてる?
0794デフォルトの名無しさん
2005/10/26(水) 14:20:02関数なんかの引数でCStringがあると、
F11キー「CString::CString(const CString& stringSrc)」の中まで潜っちゃうんですが、
そうならない設定を教えて下さい。
0795デフォルトの名無しさん
2005/10/26(水) 14:24:150796デフォルトの名無しさん
2005/10/26(水) 14:38:23それの繰り返し
0797デフォルトの名無しさん
2005/10/26(水) 17:02:08設定は欲しいなあとつくづく思う今日この頃。
0798デフォルトの名無しさん
2005/10/26(水) 17:29:570799デフォルトの名無しさん
2005/10/26(水) 17:34:180800デフォルトの名無しさん
2005/10/26(水) 17:48:330801デフォルトの名無しさん
2005/10/26(水) 18:21:410802デフォルトの名無しさん
2005/10/27(木) 22:52:470803デフォルトの名無しさん
2005/10/27(木) 23:13:09使う人によって評価は分かれるんだね
0804デフォルトの名無しさん
2005/10/27(木) 23:21:24デバッガはやっぱり、BCBではなく、VCの方を使いたい。
でも、いろいろと調べていくとBCBは独自のデバッグ情報を吐くらしい。
弱った。
無理なのだろうか?
0805デフォルトの名無しさん
2005/10/27(木) 23:30:5657 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/03(日) 22:40
BCB:
VC++にくらべてデバッガとテキストエディタの出来が悪い
あとは非常によい
VC++:
全体にバランスがとれているが、なんかめんどくさい。
0806デフォルトの名無しさん
2005/10/27(木) 23:40:27>VC++にくらべてデバッガとテキストエディタの出来が悪い
単なる慣れの問題です。
VC++5エディタなんてコード補完もついてない屑ですよ。
あとVC++のマクロ定義糞だるいんで覚える気しないですし
0807デフォルトの名無しさん
2005/10/27(木) 23:44:04>>58
何故わざわざ古いバージョンを持ち出す?
60 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/04(月) 00:47
開発業務アプリの都合でVerUpできねんだよ、藁エ!
ケッ
61 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/04(月) 04:07
ハッハッハ!>60
0808デフォルトの名無しさん
2005/10/28(金) 00:52:06正直、VS2003が一番なじめん。
0809デフォルトの名無しさん
2005/10/28(金) 02:02:42> VC++にくらべてデバッガとテキストエディタの出来が悪い
開発ってプログラム書いてデバッグするの繰り返しだよな。
エディタとデバッガの出来が悪かったら何が残る?
スプラッシュ? 外装? 分厚いマニュアル?
0810デフォルトの名無しさん
2005/10/28(金) 02:40:34ボーランドの社員の涙
0811デフォルトの名無しさん
2005/10/28(金) 09:47:56デバッグ用途なのでわざわざダイアログを興したくありません。
簡単なインプットボックスは無いでつか?
0812デフォルトの名無しさん
2005/10/28(金) 09:49:55開発者なら使って評価してみな。
論理的な文章とか、機能の有る無いのマトリクス、だけでは気付けない、
アプリの全体構造というか開発手法という重要なものがあるから。
0813デフォルトの名無しさん
2005/10/28(金) 10:21:38∩___∩
/ ヽ
|● ● ヽ
(_●_ ) |
彡 |∪| ミ
ヽノ (
/ ヽ / )
.( <| /
ヽ| |
| ) )
。。゚ | /| /
。゚ | / \ \
∪ 〉 )
(___ノ
0814デフォルトの名無しさん
2005/10/28(金) 13:32:15素晴らしいクラスライブラリ。
…ごめん知らん。言ってみただけだ。
0815デフォルトの名無しさん
2005/10/28(金) 13:54:36素晴らしいというより、普通のビジュアルコンポーネントクラスライブラリ。
普通のクラスライブラリ
↓
・コードが生成される部分が殆ど無くてチョコチョコっと書くと動作(ウィザードは×)
・開発は振る舞いを変える派生で、画面に貼るコンポの派生もおk(ActiveXは×)
・メソッドのオーバーライドすれば良い部分は一箇所に集約されてて特定にソース読める(ドトネトは×)
・標準的な動作(性能。依存度の低さ)で、ネットにフリーコンポーネントが溢れている(MFCは×)
0816デフォルトの名無しさん
2005/10/28(金) 13:56:300817デフォルトの名無しさん
2005/10/28(金) 16:21:39なるほど、BCB厨は日本語が不自由と。
0818デフォルトの名無しさん
2005/10/28(金) 16:27:07自分のアプリから他のアプリにちょっかいを出すのが面倒。
Borlandのエディットボックス(もどき)にWM_SETTEXTを送って、
Spy++で見ると(目に見えない)タイトルはちゃんと変わってるが、
目に見える文字列が変わらない。
Windows標準であるのに、わざわざ独自仕様のを自前で作って何がうれしいんだろうね。
0819デフォルトの名無しさん
2005/10/28(金) 16:34:28それは絶対気のせい。
ウィンドウズ標準コントロールはちゃんとTWinControlの派生となってて、
その中の人が標準コントロール派生してる。
0820デフォルトの名無しさん
2005/10/28(金) 16:36:19それが本当に独自コンポーネントだったとしたらだけど、
派生して数行で独自コンポーネント作りまくれるから超楽しい。
0821デフォルトの名無しさん
2005/10/28(金) 16:41:330822デフォルトの名無しさん
2005/10/28(金) 16:54:07携帯機器の今の時代超重要。
だからMFC/ActiveXやブビアプリが滅んだわけさ。
0823デフォルトの名無しさん
2005/10/28(金) 18:29:39エラーっぽいんですが、
Createの前後をチェックする方法ありましたっけ?
0824デフォルトの名無しさん
2005/10/28(金) 18:46:070825デフォルトの名無しさん
2005/10/28(金) 19:27:100826デフォルトの名無しさん
2005/10/28(金) 19:38:150827デフォルトの名無しさん
2005/10/28(金) 23:45:010828名無し募集中。。。
2005/10/29(土) 02:14:480829デフォルトの名無しさん
2005/10/29(土) 22:49:10メニューの新規作成を押した後でドキュメントの作成をキャンセルするにはどうしたらいいのでしょう。
0830デフォルトの名無しさん
2005/10/29(土) 22:50:550831デフォルトの名無しさん
2005/10/29(土) 23:11:38. (/ )´、r‐o-=' /=c<,ィ ル'
! r‐、 } ,,ー‐' ( ー-' !/ ・・・・・・
ヽ {.fi {( ;;;;; _」 │
. ヽ. `ー;`' r─-、´ /
`ヽ { └--‐' /
0832829
2005/10/29(土) 23:30:56CFrameWnd::OnCmdMsg()
CWinApp::OnFileNew()
MyDocument::OnNewDocument()
(途中一部略)
おおまかにこういう順番で呼ばれます。
このアプリではドキュメントが実際に作成される前にダイアログを出します。
そのダイアログはドキュメントに必要な属性値を前もって設定したり、ドキュメントの作成をキャンセルします。
しかしながら、キャンセルするためにダイアログをどの位置で呼び出せばいいのか、それがわかりません。
OnNewDocumentでFALSEを返したりOnFileNewをオーバーライドしてもダメでした。
教えてください。お願いします。
0833デフォルトの名無しさん
2005/10/29(土) 23:41:01MyDocument::OnNewDocument()内で、
CDocument::OnNewDocument()の前でFALSEを返してもダメ?
0834デフォルトの名無しさん
2005/10/29(土) 23:51:19それでできました!どうもありがとうございました。
0835デフォルトの名無しさん
2005/10/30(日) 09:53:090836デフォルトの名無しさん
2005/10/31(月) 14:26:35そういうメソッドありますか?
無ければ、やり方をお教えくださいませ・・・
0837デフォルトの名無しさん
2005/10/31(月) 15:49:270838デフォルトの名無しさん
2005/10/31(月) 16:00:270839デフォルトの名無しさん
2005/10/31(月) 16:08:530840デフォルトの名無しさん
2005/10/31(月) 16:17:51通じませんでしたか?
0841デフォルトの名無しさん
2005/10/31(月) 16:32:00選択してる位置を移動させるのか、選択したデータ自体を移動させるのかどっちだ?
0842デフォルトの名無しさん
2005/10/31(月) 16:56:02ChogeView
ChogeDoc
CChildFrm
CMainFrm
が生成されますが、CChildFrmの存在意義がわかりません。
私はCHogeViewがMDI子ウインドウを表すクラスだと解釈しています。
ではなぜCChildFrmが必要なのでしょうか?
CChildFrm::OnCreateChildをオーバーライドすると一応使われて画面にも表示(?)されているようで疑問です。いったいこれは何なんですか。
0843デフォルトの名無しさん
2005/10/31(月) 16:59:33Childframeの中にViewがはまってる
0844デフォルトの名無しさん
2005/10/31(月) 16:59:49選択を変えるのを移動なんていうヤツイネェ
0845842
2005/10/31(月) 17:00:02詳しくは
CChildFrm::OnCreateChildをオーバーライドしてデバッグ画面で呼び出しを確認すると、でした。
0846デフォルトの名無しさん
2005/10/31(月) 17:00:28わからんならDocument&Viewアーキテクチャの勉強してこい
0847デフォルトの名無しさん
2005/10/31(月) 17:02:32viewはsdiでも使うからフレームの機能はわけたのでは?
0848842
2005/10/31(月) 17:10:35フーム、納得。CViewがCWndを継承しているからMDI子ウインドウがCViewそのものだと誤解していました。
CViewはCFrameWndとはまったく別のものだったんですね。
どうもありがとうございました。
0849デフォルトの名無しさん
2005/10/31(月) 17:29:26コントロールも全部Windowですよ?
0850デフォルトの名無しさん
2005/10/31(月) 17:59:340851デフォルトの名無しさん
2005/11/01(火) 20:51:270852デフォルトの名無しさん
2005/11/01(火) 21:06:480853デフォルトの名無しさん
2005/11/01(火) 21:10:25ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_0g6r.asp
ttp://msdn.microsoft.com/library/en-us/gdi/bitmaps_99ir.asp
0854デフォルトの名無しさん
2005/11/02(水) 13:56:41かつ、両クラスがお互いを参照してない場合は、
SendMessageですか?
他に良いMFC的な方法があれば教えて下さい。
0855デフォルトの名無しさん
2005/11/02(水) 14:01:57指定されたメッセージをこのウィンドウに送ります。
LRESULT SendMessage(
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0
);
0856854
2005/11/02(水) 14:36:22了解しました。
やっぱ、Win32なんですね。
次、MFCのCDialog側のメッセージハンドラの作り方調べなきゃ。。。
0857デフォルトの名無しさん
2005/11/02(水) 15:08:290858854
2005/11/02(水) 15:09:17CDialogに「::WindowProc(message, wParam, lParam);」を追加しますた。
これであってんのかなぁ。
0859854
2005/11/02(水) 15:16:46WM_USERはいっぱいコールされるけどMFCが使用してる?
0860デフォルトの名無しさん
2005/11/02(水) 15:23:020861デフォルトの名無しさん
2005/11/02(水) 15:24:29MFCというかWindowsの普通のコントロールが使っています。
WM_APP以降を使ったほうが安全です。
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesmessages/wm_user.asp
0862デフォルトの名無しさん
2005/11/02(水) 15:29:04確かにCDialogの場合は、RUNTIMEで束縛されて無いからその方法も有なのかな。
自分だったら、wizardに無いなら、MESSAGE_MAPに手コード追加すると思う。
0864デフォルトの名無しさん
2005/11/02(水) 23:12:56>CDialogの場合は、RUNTIMEで束縛されて無い
ってどーいうこと?
0865デフォルトの名無しさん
2005/11/03(木) 06:13:330866デフォルトの名無しさん
2005/11/03(木) 09:18:45単にMFC知らないだけだろ
0867デフォルトの名無しさん
2005/11/03(木) 09:29:030868デフォルトの名無しさん
2005/11/03(木) 10:00:52RUNTIME_CLASS の事じゃね?
で、ウィザードでサポートしてないメッセージハンドラは
MESSAGE_MAP に手で追加するのが基本。
0869デフォルトの名無しさん
2005/11/03(木) 10:07:37C++のthorwって、int、const char*、exception等の派生と何でも投げれるって言うじゃなぃ?
0870デフォルトの名無しさん
2005/11/03(木) 10:18:110871デフォルトの名無しさん
2005/11/03(木) 10:42:180872デフォルトの名無しさん
2005/11/03(木) 12:50:450873デフォルトの名無しさん
2005/11/03(木) 15:45:050874デフォルトの名無しさん
2005/11/03(木) 16:10:16MSDNで調べれ
すぐわかる
0875デフォルトの名無しさん
2005/11/03(木) 17:28:150876デフォルトの名無しさん
2005/11/03(木) 18:04:090877デフォルトの名無しさん
2005/11/03(木) 18:09:340878デフォルトの名無しさん
2005/11/03(木) 21:39:540879デフォルトの名無しさん
2005/11/05(土) 05:19:44BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST, OnGetdispinfoList)
ON_NOTIFY(NM_CLICK, IDC_LIST, OnClickList)
END_MESSAGE_MAP()
CDialog->CStatic->CListCtrlの親子関係(CStaticがCListCtrlの親になった)
にしたら、上記のイベントハンドラにイベントが飛んでこなくなりました。
親子関係は下記のようにして構築しています。
CMyDlg::OnInitDialog() {
static.Create(NULL, SS_WHITERECT | WS_VISIBLE, rcStatic, this); // thisはCMyDlg
list.Create(LVS_..., rcList, &static, IDC_LIST);
}
BEGIN_MESSAGE_MAPマクロの方にも手をいれないといけないのでしょうか?
0880sage
2005/11/05(土) 05:36:020881デフォルトの名無しさん
2005/11/05(土) 08:49:35CDialog->CStatic->CListCtrlという関係なのだから、
CListCtrlに対するメッセージも、
CStaticが受け取ってCListCtrlに転送してやる必要がある。
CListCtrlへのメッセージをCStaticが受け取るなんて異常。
CListCtrlをCDialogの子ウィンドウにしたまま、
CStaticの手前に貼り付けるのが普通。
0882879
2005/11/05(土) 10:37:37CStaticの子にした理由はCListCtrlのスクロールバーを画面に表示させないためです。
(スクロールバーの幅分CListCtrlの幅を大きくしてます)
スクロールバーは自前のビットマップスクロールバーを使いたくて、自前のスクロールバーと
CListCtrlのリンクは出来たのですが、あとはCListCtrlの標準スクロールバーを画面に見せなく
する方法がこれしか思いつきませんでした。
CListCtrlに描画リージョンを持たせた方がいいのかなと思ったんですが、やり方が分からなくて…
0883デフォルトの名無しさん
2005/11/05(土) 10:46:42CListCtrlのスタイルを変更する方法を探せ。
LVS_NOSCROLL
LVS_EX_FLATSB
それでできないなら自前で描画した方がいい。
0884デフォルトの名無しさん
2005/11/05(土) 17:39:38ダイアログのエディットボックスに変数を割り当てたいのですが
これをUINTにしてあげると数字以外を入力すると禁止されるんですよね?
しかしこのエディットボックスを編集したときにその数字を使って計算をして
計算結果を表示させたいのですが、EN_CHANGEを実装して、その関数で
UpdateData(TRUE)をして値を引こうとしたのですが、どうもまともに取れないです。
具体的には初期化されてない時の0xCDCDCDCDである3452816845という値になってしまいます。
私がやろうとしていることは無理なのでしょうか?
ソースはかなりいろんな人がいじくっているのでリソースIDとの関係がおかしくなっている可能性もあるので
こういうことはできる・できないという点でのアドバイスで結構ですのでお願いします。
0885デフォルトの名無しさん
2005/11/05(土) 17:53:39できる。
resource.hを手動で書き換えたらリビルドしろ。
0886デフォルトの名無しさん
2005/11/05(土) 18:17:18もうちょっとがんばってみます。
最悪書き直しかも。
0887879
2005/11/05(土) 18:32:44>>883
>LVS_NOSCROLL
>LVS_EX_FLATSB
ありがとうございます。これどちらも効きませんでした。
もう一点教えてください。
自前のスクロールバー側から操作した内容をCListCtrlへ反映する処理はOnVScroll()で実装できたのですが、
今度は逆にCListCtrlのリスト部でスクロールに関連した操作(PgUp/PgDown/Up/Down/Home/Endキー)を
スクロールバー側へ反映させる場合、キーボードイベントはどこで拾うのがスタンダードなのですか?
PgUpキーがCListCtrl側で処理された後で、CListCtrl::GetTopIndex()を見てスクロールバーの新位置を決めなければ
ならないですよね。それってどこになるのでしょうか?
0888881,883,885
2005/11/05(土) 18:48:49キーを押したらCListCtrlの選択された項目が変化するのだから、
キー入力を意識する必要はない。
マウスクリックでCListCtrl内の項目がクリックされたときと同じ。
0889デフォルトの名無しさん
2005/11/05(土) 19:05:43なんか前の親子孫の関係と、今のそれの関係がよく分からんけど、
俺だったら、CDialogの派生クラスのハンドラに仮想関数持ってきて、
強制的に孫を読ませるようにすると思う。
見当違いだったらごめんね。
0890デフォルトの名無しさん
2005/11/05(土) 19:09:19意識する必要がないとは?
マウスクリックの時はNM_CLICKイベントが発生しますけど、キーボードでPgUpや上下キーを押した時はNM_CLICKイベントは発生しませんよね。
それでリスト部はカーソルキーを押すだけスクロールしていき、自前のスクロールバーへの反映ができずにスクロール位置がズレていってしまいます。
0891デフォルトの名無しさん
2005/11/05(土) 19:12:29すみません!! >>879 >>882 >>887の流れで話しています。
それで仮想関数で強制的に孫を読ませるという意味がわかりません。もう少しヒントをくれませんか。
0892デフォルトの名無しさん
2005/11/05(土) 19:34:07いやぁ、いきなり割り込んでしまった感があるけど、virtualの機能という面で見て、本にも書いてあると思うけど、
virtual関数呼ばれると、必然的に、その派生クラスのvirtualを継承した関数を探し、あった場合は継承したほうが呼ばれるでしょう。
これらを子と孫に適用してやる。
勘違いしてて、話し噛みあってないかもしれないから、具体的な方策は調べて?
余談として実行するまで呼ばれる関数は分からないという機能としても使える。
0893デフォルトの名無しさん
2005/11/05(土) 19:40:56MFC使わずにCのみで作ってもウィンドウの親子関係は存在する。
0894デフォルトの名無しさん
2005/11/05(土) 19:44:11CDCのメンバ関数LineToについてですが、たとえば、
CXXXView::Test(CDC* pDC)
{
pDC->MoveTo(0,0);
pDC->LineTo(1,100);
}
ってやると、画面に少し傾いた線が描画されますよね。その際、ピクセル単位で見ていくと
(0,0)-(0,1)-……-(0,50)-(1,50)-(1,51)-(1,52)-……-(1,99)
これらの点が塗られていると思うんですけど、
一旦線を引いた後に、これらの点を求める方法ってあるんですかね?
えと、つまり
(a,b)-(c,d)まで線を引こうと思ったとき、一体どの点が実際に塗られているのかを
判断する方法ってあるんですか?
0895デフォルトの名無しさん
2005/11/05(土) 19:46:51例えば縦横の比率がデバイスによって違う。
0896デフォルトの名無しさん
2005/11/05(土) 19:53:230897デフォルトの名無しさん
2005/11/05(土) 20:01:42実は多角形の内部判定ルーチンを作っていまして
次のような場合に問題が起こるんですよ。
三角形(0,0) - (1,100) - (1,0)の内部に(0,1)が含まれているか?
っていう事を考えると、実際にPCに描画したときには内部に含まれるのに
単純に座標で考えると内部に含まれていない。
っていうことになって困っています。
もちろん、こういった個別の場合に対応すること自体は可能なのですが
LineToを使った描画アルゴリズムがわからない限り、応急処置的な
対応が完全かどうか、まったく保証が得られません。
あと、LineToは顧客が使うといっているため、
ここを変更する事はできないんです。。。どうしましょう。
0898デフォルトの名無しさん
2005/11/05(土) 20:17:11デバイスコンテキストのコンパチのメモリ上の架空のメモリデバイスコンテキストて
あれは、枠(RECT)の大きさも変わるんでしたっけ?Frameの大きさとか変えたりしても。
CreateCompatibleDCで作ったメモリデバイスコンテキストに座標なんか扱えるかどうか分からないけど、扱ったことないし。
0899デフォルトの名無しさん
2005/11/05(土) 20:21:30リージョンCRgnを使いなさい。
内部判定ルーチンなど作る必要がなくなる。
0900デフォルトの名無しさん
2005/11/05(土) 20:42:30どうも、ありがとうございました。
0901デフォルトの名無しさん
2005/11/05(土) 20:52:42CRgn使ってみたのですが、結果は変わらず。
やっぱり、三角形(0,0) - (1,100) - (1,0)の内部に(0,1)が含まれているか?
っていう問題が解決しません。。。
0902デフォルトの名無しさん
2005/11/05(土) 21:16:17WindowRectとClientRectを使ってるか、違いはどこか?
この辺どんなもんでしょ
0903デフォルトの名無しさん
2005/11/05(土) 21:32:43WinAPIの::LineDDA()はどう?
0906901
2005/11/06(日) 00:54:36どうも、ありがとうございます。
0907仕様書無しさん
2005/11/06(日) 01:50:21試していないけど、自前のスクロールバーをメンバ変数(コントロール)
に持つ、CListCtrl派生クラス(CMyListCtrl)を作成して、CListCtrl::
PreSubclassWindow()か、CListCtrl::OnCreate()の一方または両方を
オーバーライドして、CListCtrlのスクロールバーをSubclassWindow()
してやればよいのでは?
ダイアログに貼り付けたリストコントロールは、CXXDlg::DoDataExchange()
内で、DDX_Control(pDX,IDC_LIST1,m_wndMyListCtrl);するか、CXXDlg::
OnInitDialog()内で、m_wndMyListCtrl.SubclassDlgItem(IDC_LIST1,this);
する。
0908仕様書無しさん
2005/11/06(日) 01:53:18選択アイテムの変更は、LVN_ITEMCHANGEDで検出できる。
0909仕様書無しさん
2005/11/06(日) 02:06:22DDX_Text()の処理で「数字を入力してください」と表示されるだけで、
エディットコントロ−ルに「ES_NUMBER」スタイルを適用するか、CEdit
派生クラスでCWnd::OnCharをハンドラしない限り、数字キー以外のキー
も入力できる。
コントロールからUINT変数に値が取得されないのはリソースIDが一致
していないせいで、Debugビルドならアサーションが起こると思われ。
0910デフォルトの名無しさん
2005/11/06(日) 06:40:19DirectXのプログラムを作ってて、後にMFCで動くプログラムに、
その機能を載せ代えたくて、作業を進めているのですが、
DirectInputをどうやって使うのか分からないので、
何か使う方法があれば教えてください。
*App :: InitInstance()上で、
m_hInstanceをグローバル変数に格納し、
初期化に使ったのですが、うまくいきませんでした。
環境は、
VC++ .NET 2003
DirectX 9.0 SDK August 2005
です。
0911デフォルトの名無しさん
2005/11/06(日) 19:02:37サンクス。ES_NUMBERを設定するのを忘れるところでした。
0912デフォルトの名無しさん
2005/11/07(月) 02:30:590913デフォルトの名無しさん
2005/11/07(月) 09:39:17ググれ。10秒でわかる。
0914デフォルトの名無しさん
2005/11/07(月) 09:48:53ククレ。三分で食える。
0915デフォルトの名無しさん
2005/11/07(月) 10:33:08データベースに問いあわせるとき
その問いあわせにかかった時間を取得する方法はありますか?
たとえば CSE というデータベースの
クライアントソフトがありますが,
あれでクエリすると反応時間が表示されます.
その値がほしいのです
0916デフォルトの名無しさん
2005/11/07(月) 10:41:24問い合わせの前後の時刻を自前で求めればいいじゃない。
//#include <atltime.h>
CTime t = CTime::GetCurrentTime();
#include <ATLComTime.h>
COleDateTime odt = COleDateTime::GetCurrentTime();
0917915
2005/11/07(月) 10:46:57CSE というソフトでは
データベースの反応時間と,
その結果を表示する時間の2種類が表示されるんですが,
前者の方はたぶん,おっしゃる方法ではなくて,
直接,データベースから値をもらってる
雰囲気があるのですが,
それができないかな,と思いまして
それともやっぱり >>916 の方法でやってるんですかね?
0918デフォルトの名無しさん
2005/11/07(月) 11:01:50使い方もわからずにプログラム作ろうとしてるんだろうか
0919デフォルトの名無しさん
2005/11/07(月) 11:04:110920デフォルトの名無しさん
2005/11/07(月) 11:30:40rs.Open(〜);
// 時刻2
// 時刻3
while (!rs.IsEOF()) {
rs.MoveNext();
}
// 時刻時刻4
この「時刻2-時刻1」、「時刻4-時刻3」をそれぞれ表示してるだけだろ。
0921890
2005/11/07(月) 16:14:30ありがとうございます。LVN_ITEMCHANGEDでやりたいことが実現できました!
はじめLVN_ITEMCHANGEDのイベント中にListCtrl::GetTopIndex()を取得して
自前のスクロールバーへSetScrollPos()してあげればいいかと思ってましたが
それだとListCtrl::GetTopIndex()は以前の値を返してしまうんですね。そこで
LVN_ITEMCHANGEDに渡ってくる現在行と1ページに表示できる行数を使って
画面上の先頭行を求めてSetScrollPos()してあげたらうまくいきました。
0922デフォルトの名無しさん
2005/11/07(月) 17:50:01ダイアログ(CDialog)にCStatic等のコントロールを乗せている状態で、
そのコントロールの左クリックイベントをCDialogが拾う、もしくはCDialogに
通知するにはどうしたらいいのでしょうか。
0923デフォルトの名無しさん
2005/11/07(月) 17:58:070924922
2005/11/07(月) 18:22:00ご助言ありがとうございます。
説明不足で申し訳ございません。
CStaicコントロールは、動的に不定数生成しており、
ON_CONTROL_RANGEでイベントをとっているのですが、
クリックされた際の座標が取得できないのです。
座標も取得できれば言うことはないのですが、簡単に取れますか?
0925デフォルトの名無しさん
2005/11/07(月) 18:35:10GetMessagePosしてScreenToClientする。
0926888
2005/11/07(月) 18:54:23>>888で言いたかったこと分かった?
だからキーかマウスかなんて関係ないんだよ。
888 :881,883,885:2005/11/05(土) 18:48:49
>>887
キーを押したらCListCtrlの選択された項目が変化するのだから、
キー入力を意識する必要はない。
マウスクリックでCListCtrl内の項目がクリックされたときと同じ。
0927デフォルトの名無しさん
2005/11/07(月) 18:55:290928922
2005/11/07(月) 19:14:36ありがとうございました!
無事座標を取得できました。
もうひとつ不明な点があるのですが、コントロール上でのマウス移動やボタンアップイベントは
親ダイアログからはON_CONTOROLを使用して取得できないものなのでしょうか。
できるとしたら、イベントに何を指定すればいいのでしょうか。
くれくれ君ですみませんが,よろしくお願いいたします。
0929922
2005/11/07(月) 19:26:02コントロールをサブクラス化して親へイベントを発行するようにしました。
どうもありがとうございました。
0930デフォルトの名無しさん
2005/11/07(月) 19:58:58>>908の説明でわかりました!感謝します。
0931デフォルトの名無しさん
2005/11/07(月) 21:01:40スタティックコントロールを作成する際に、「通知」属性をセットして
おけば、スタティックコントロール内のマウスイベントが親ウィンドウ
に通知される。
CStatic派生クラスを作る際に、CWnd::PreSubclassWindow()および、
CWnd::OnCreate()内で ...
ModifyStyle(0,SS_NOTIFY);
を呼び出せばよい。 PreSubclassWindow()も加えるのは、ダイアログの
初期化時やDDX_Control()でコントロールメンバをサブクラス化すると、
派生クラスのOnCreate()が呼ばれないから。
ダイアログリソースなら、迷わず「通知(N)」をチェックしる。
しかし、CEditのスタイルの説明からは「ES_NUMBER」が、CStaticの
スタイルの説明からは「SS_NOTIFY」が抜け落ちているのは、ナ〜ゼ〜。
0932デフォルトの名無しさん
2005/11/07(月) 21:06:040933デフォルトの名無しさん
2005/11/08(火) 05:14:13rgn.CreateRectRgnIndirect(rect); // (1)
rgn.DeleteObject(); // (1)のリージョンを解放
rgn.CopyRgn(rgn2); // ここでrgnがASSERT(m_hObject != NULL)で引っかかる
DeleteObject()した後でm_hObject変数にNULLをセットするのはプログラマーの役目なんですか?
それともCRgnのメンバ変数をリセットするような方法が他にありますか?
0934デフォルトの名無しさん
2005/11/08(火) 05:33:11勘違いしてました。orz
m_hObjectがNULLだからエラーになっているんですね。
CopyRgn()はCombineRgn()を呼び出しているのでコピー先がNULLでは使えないんですね。
新しいリージョンで上書きするというイメージで使おうとしていました。
0935デフォルトの名無しさん
2005/11/08(火) 05:42:17CopyRgn()はCombineRgn(RGN_COPY)で呼び出してるから上書きイメージで使えるんだった。orz
でもコピー前のリージョンをDeleteObject()で解放しなくて問題ないんですか?
CombineRgn()の中でやってくれている?
0936デフォルトの名無しさん
2005/11/08(火) 08:31:04CRgn rgn;
...
if ((HRGN)rgn) {
//rgnに対する操作
}
0937デフォルトの名無しさん
2005/11/08(火) 09:58:32じゃなくて
CRgn rgn1;
CRgn rgn2;
...
rgn1.CreateRectRgnIndirect(rect); // (1)
rgn1.CopyRgn(rgn2);
(1)で作ったリージョンは削除しなくても勝手に解放される?
DeleteObject()呼ぶとCopyRgn()内でアサートが発生するので呼べない
0938デフォルトの名無しさん
2005/11/08(火) 10:10:06フレックスグリッドで常に横一行の選択状態にしたいのです。
VC++6.0で作ったときはできたので同じように
VC.NETでやったのですが、うまくいきません。
なにか違いがあるのでしょうか?
0939デフォルトの名無しさん
2005/11/08(火) 10:37:44SelectionModeはどないなってん?
0940938
2005/11/08(火) 10:47:08SelectionMode = 1
HighLight = 1
です。プロパティでも設定していますし、動的にも設定してみました。
そしてSetColSel(GetCols() -1)をやっています。
0941デフォルトの名無しさん
2005/11/08(火) 11:06:27SetColSel()は要らんと思うけど。
VC.NETでC++からActiveX版のFlexGridを使ってるの?
#.NET版はプロパティが随分違うようだけど。
0942デフォルトの名無しさん
2005/11/08(火) 11:36:04Region が解放されるというわけではないけど、
DeleteObjectとかはしなくて良いよ。
CopyRegion とか CombineRgn の機能は、ターゲットのRegionを
得ようとする形状に変更する、というものだから。
0943938
2005/11/08(火) 11:55:47Microsoft FlexGrid Control version 6.0 を入れています。
これで答えになってますか?
0944941
2005/11/08(火) 12:46:59納得。確かVC7.1にはFlexGridはついてきてなかったと思ったから確認したかった。
つーか、今やってみたらMFC42.LIBを要求されてしまった。
VC6のディレクトリをライブラリパスに追加したらビルドは通ったけどクリエートができない。
そっちではFlexGridの表示までは行っているの?
0945デフォルトの名無しさん
2005/11/08(火) 12:50:48SelectionMode = By Row
Highlight = Always
にすればいいじゃない。
VC++.NETのプロパティでは数値でなくTrueとかAlwaysとか文字で出てないか?
0946945
2005/11/08(火) 12:53:13生成されたmsflexgrid1.hの一部:
enum
{
flexFocusNone = 0,
flexFocusLight = 1,
flexFocusHeavy = 2
}FocusRectSettings;
enum
{
flexSelectionFree = 0,
flexSelectionByRow = 1,
flexSelectionByColumn = 2
}SelectionModeSettings;
enum
{
flexHighlightNever = 0,
flexHighlightAlways = 1,
flexHighlightWithFocus = 2
}HighLightSettings;
0947945
2005/11/08(火) 13:05:47動的にスタイルを変えるのならこう。
m_FlexGrid.put_FocusRect(CMsflexgrid1::flexSelectionByRow);
m_FlexGrid.put_SelectionMode(CMsflexgrid1::flexSelectionByRow);
m_FlexGrid.put_HighLight(CMsflexgrid1::flexHighlightAlways);
つまり、>>946を見た感じだとFocusRectがNoneなのがまずい。
FocusRect = Light (1)
0948945
2005/11/08(火) 13:09:23(実際に作って確認してる。)
環境変数の順位とかが関係あるのかしら。
0949938
2005/11/08(火) 13:31:57表示&グリッド内への文字の表示は出来ています。
>945
FocusRect = Light
にすると、一番左の列のみに選択の囲いがいってしまいます。
VBにて「フレックス グリッドで行全体をハイライトしない不具合」
というのを見つけましたけど、関係ないですよね・・・
ttp://support.microsoft.com/default.aspx?scid=kb;ja;181912
0950デフォルトの名無しさん
2005/11/08(火) 16:00:34ありがとう。安心しました。
CreateRectRgnIndirect()のヘルプに、使い終わったらDeleteObject()しろと書いてあったから心配だったんだ。
0951938
2005/11/08(火) 17:51:38違う人間がプロジェクトにグリッドを突っ込んだので、怪しいと思い、
あらためて新しいプロジェクトで作り直したらきちんと動きました。
つーかVC++6.0からクラスをコピーしてきたんじゃなかろうかってかんじです。
>946のenum定義もないし、おかしいと思って調べまくりました。
くだらないことにお付き合いいただきありがとうございました。
これから正しく?組み込みなおします。
0952941
2005/11/08(火) 18:00:01#私の端末で巧くビルドできなかったり実行できなかったりしたのは謎だけど。
0953945
2005/11/08(火) 18:32:40FocusRect = Light はフォーカスの太さを指定するもの。
なしにしたら囲まれない。Heavyなら太線。
クリックしたセルが囲まれて、同じ行の他のセルは全部反転してるはず。
まあ解決したのならよかった。
>>952
解決したらいいね。↓うちのFlexGrid
Microsoft FlexGrid Control, version 6.0
C:\WINDOWS\system32\MSFLXGRD.OCX
ver 6.0.84.18
0955938
2005/11/08(火) 19:30:32原因は固定行のマージにありました・・・orz
また明日、マージのところをきちんと調べて再挑戦します。
ありがとうございました。
0956デフォルトの名無しさん
2005/11/09(水) 00:46:230957デフォルトの名無しさん
2005/11/09(水) 01:17:33neko toka ?
0958デフォルトの名無しさん
2005/11/09(水) 01:22:00猫は一応読みました。もう少しGUIに関する部分で突っ込んだ説明が欲しいのですが・・・
0959デフォルトの名無しさん
2005/11/09(水) 04:07:58いろいろ買った中で、これが一番役立った。
0960デフォルトの名無しさん
2005/11/09(水) 04:10:29ありがとう、明日本屋で立ち読みしてみます
でも確かその本はマネージドの事が主な内容だった気がするのですが・・・
MFCに関しても詳しく書かれてましたか?
0961デフォルトの名無しさん
2005/11/09(水) 04:13:04MFCの事も書かれてますね
0962デフォルトの名無しさん
2005/11/09(水) 08:48:11標準講座MFC6.0
基本的にAppWizardを使わないが、AppWizardの解説も少しある。
0963デフォルトの名無しさん
2005/11/09(水) 12:28:43賛成票を投じます。
0964デフォルトの名無しさん
2005/11/09(水) 13:02:06それがソースにどう反映されるかを見た方が
手っ取り早く勉強になったりするけどな。
0965956
2005/11/09(水) 15:41:32>>962>>963
参考にさせて頂きます
>>964
自分がやろうと思ってるのはちょっと定形外な事なので…
一応、ウィザードで作られるコードは十分理解しているつもりです
0966デフォルトの名無しさん
2005/11/09(水) 16:29:22それは二歩目ということで。
0967デフォルトの名無しさん
2005/11/10(木) 20:37:40CAsyncSocketを使って通信のクライアント処理を作ろうとしていますが、
CAsyncSocket socket;
socket.Create();
で、socket.Create()の返り値が 0(異常終了) で返ってきます。
Windowsフォーム アプリケーション(.NET)では、CAsyncSocketは使えないのでしょうか?
また、Windowsフォーム アプリケーション(.NET)の通信の実装は、CAsyncSocketを使う以外に
あるのでしょうか?
知っている人がいれば、よろしくお願いいたします。
某スレで
>おまえそれMFCだろうが
というご指摘があったので、マルチで質問しています。
★初心者にVisual C++を教えるスレ★ Part22
http://pc8.2ch.net/test/read.cgi/tech/1131443284/8-
0968デフォルトの名無しさん
2005/11/10(木) 20:47:58そうじゃなくて向こうのスレの人はこっちへ来いというのではなく、
「CAsyncSocketがMFCのだから.Netアプリで使うなよ」
と言ったかったのだと思う。
0969デフォルトの名無しさん
2005/11/10(木) 21:17:540970デフォルトの名無しさん
2005/11/11(金) 03:17:140971デフォルトの名無しさん
2005/11/11(金) 03:19:50/ \
 ̄| | ̄
___| |__
/ ⌒ ⌒ ::: \ |\
| (●), 、(●)、  ̄ ̄ \
| ,,ノ(、_, )ヽ、,, 左を見ろ> こっちは右だバカ!
| `トェェェェイ' .:::::__ ./
\ `ニニ´ .:::/ |/
l_!!! ,、 ,..-ヽー'',,.. ' ノ`丶--'ー--、 -―--、 + + +
| ! !_!|i::::::::::`´ー''´:::::::::::::::::::|:::::::::::::::::::::,..、::`ヽ + +
.! ', ,|!::::::::::::::::::::::::::::::::::::::::::ヽ/---‐'´`\::::\ +
!、_,イ:::ヽ::::::::::::::::::::::├┤:::/::| \:::ヽ、_
',::::::',::::::|ヽ::::::::::::::::::::::::::::/:::::::l
0972デフォルトの名無しさん
2005/11/12(土) 09:15:53某アプリのプラグインをmfcで作ろうと思っています
その仕様を見ると最初にCreateProc()というコールバック関数の中で
ウィンドウを作成して、そのウィンドウハンドルを本体側に返さないといけないのですが
いつものようにウィンドウを作ると、内部のCWinApp::Run()で処理がループしてしまうので
返り値を本体側に渡す事が出来ません
どのようにしたら解決出来るでしょうか?
0973デフォルトの名無しさん
2005/11/12(土) 09:28:120974デフォルトの名無しさん
2005/11/12(土) 09:28:210975デフォルトの名無しさん
2005/11/12(土) 11:11:08何のアプリか書いたら検証できるのに、頭が残念なやつだ。
0976デフォルトの名無しさん
2005/11/12(土) 11:32:46コールバック関数も使えるだろ
0977デフォルトの名無しさん
2005/11/12(土) 11:45:42Sleipnir1のパネルプラグインです。ごめんなさい
>>976
CWinApp以外でウィンドウを作る方法があるという事でしょうか。
イレギュラーな方法でなければ教えていただけると幸いです。
0978975
2005/11/12(土) 13:37:46Sleipnir本体がMFCで書かれてることが幸いしている。
CWinAppなんか出てこない。
DLLのプロジェクトを作成する。
ExPanel_Sample2.zipのソースを貼り付ける。
CWnd派生のクラスCMyPanelを作る。
SPX_CreateProcでウィンドウを作ってそのハンドルを返すようにする。
ここまでできたら、パネルが表示されるか確認
WndCallbackProc, OnCommand, OnSize 相当の機能を CMyPanel に書く。
0979デフォルトの名無しさん
2005/11/12(土) 22:48:29うわ、助かります
ちょっと今から試してみます
0980デフォルトの名無しさん
2005/11/13(日) 06:10:16それで上手く行きました。ありがとうございました
ところでドキュメント/ビューを使うなら結局CWinAppを使うしかないのでしょうか
CHtmlViewを使いたいのですが、また詰まってます…
0981デフォルトの名無しさん
2005/11/13(日) 06:18:060982デフォルトの名無しさん
2005/11/13(日) 06:52:23ATL/WTLを使うことになりますよね?(間違ってたらすいません)
そっちのほうが楽でしょうか?
いずれにしても、自分の力では何をやっても厳しいのは痛感しております
指針となるような情報を頂けると幸いです…orz
0983デフォルトの名無しさん
2005/11/13(日) 09:49:49Viewの基本クラスをCViewからCHtmlViewに変えれば出来るだろ。
0984デフォルトの名無しさん
2005/11/13(日) 11:13:43その程度が分からないなら、素直にCHtmlView使っとけ。
CHtmlViewの方がはるかに楽だ。
わからずにATL/WTLに特攻してもぐちゃぐちゃになるだけ。
0985デフォルトの名無しさん
2005/11/13(日) 13:10:04>Warning: Creating a pane with no CDocument.
>Warning: constructing COleException, scode = DISP_E_MEMBERNOTFOUND
>Sleipnir.exe の 0x7c81eb33 で初回の例外が発生しました : Microsoft C++ exception: COleException @ 0x0012d0e0。
のように何だか分らない例外が投げられてますが(これまずいんですかね)、一応動くようにはなりました。
助けてくださった方々に感謝m(_ _)m
0986975
2005/11/13(日) 15:32:48勉強不足だな。CHtmlView使うのなら、
ウィザードが作ったスケルトンを見ながらDoc-Viewの仕組みを勉強しろ。
CView系はCDocument系と対で使うもの。
0987985
2005/11/13(日) 17:05:38叱咤激励ありがとうございます、とりあえずMSDNを読み直しました
それで以下のようにCDocumentと結びつけたら最初のWarningは消えました。
その下のCOleExceptionに関してはお手上げで、ググったら
「CWebBrowserでも同じ例外が出るから、そういうものだと思って無視していいんじゃ?」
と書いてました。どうなんでしょうね。
CMyHtmlView *g_pMyPanel;
CMyDocument *g_pMyDocument;
static SPX_HWND SPX_CALL SPX_CreateProc(SPX_ISleipnir* ipSleipnir, SPX_HWND hWndParent)
{
g_pMyPanel = new CMyHtmlView();
g_pMyDocument = new CMyDocument();
CCreateContext CCC;
CCC.m_pNewViewClass = RUNTIME_CLASS(CMyHtmlView);
CCC.m_pCurrentDoc= g_pMyDocument;
g_pMyPanel->Create
(
NULL,
"PanelWindow",
WS_CHILD | WS_VSCROLL | WS_VISIBLE,
CRect(0, 0, 200, 200),
CWnd::FromHandle(hWndParent),
0,
&CCC
);
g_pMyPanel->Navigate2("http://2ch.net", NULL, NULL);
return g_pMyPanel->m_hWnd;
}
0988デフォルトの名無しさん
2005/11/14(月) 15:05:260989デフォルトの名無しさん
2005/11/14(月) 15:17:260990デフォルトの名無しさん
2005/11/14(月) 15:24:50でも、配列のIndexで取れないの?
0991デフォルトの名無しさん
2005/11/14(月) 15:30:42GetAt()はあるね。
まぁ、CObjectの派生クラスを使おうとしてしまった自分自身を呪うがいい。
0993デフォルトの名無しさん
2005/11/14(月) 15:35:19なんでそんなにPOSITIONを忌み嫌う。
おれは嫌いだが。
0994デフォルトの名無しさん
2005/11/14(月) 15:36:24CArray<CString,CString&> なら GetAt(nIndex) できる。
0995990
2005/11/14(月) 15:38:180996990
2005/11/14(月) 15:41:12MFCってワケワカメ。
0997デフォルトの名無しさん
2005/11/14(月) 15:46:37わかんなくてList使っちゃっただけか?
0999990
2005/11/14(月) 15:49:26自分、BCB/TStringList使ってたから、配列参照が欲しくて。
TStringListだとそれに対するNamesとかParamsとかでini形式の左右が取れたり便利だお。
1000990
2005/11/14(月) 15:49:54どっちが良い?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。