■MFC相談室 mfc17d.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/21(火) 10:38:31前スレ
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
0587デフォルトの名無しさん
2007/04/10(火) 20:51:13>>585だが
なんだよ、マジレスしてるのにww
いいよ585の反対で実装してごらん面白いことになるよww
それから>>573は簡単だからタイマー割り込み使うって書いてたけど
MFCでタイマーの使い方ってネットでたまに見かけるけど
まともな使い方してない場合が多いよMSDNのコードも漏れ的には不満なんだが
0588デフォルトの名無しさん
2007/04/10(火) 21:31:23「>>556です」とか突然言い出すからネタで返しただけ。気にするな。
で、まともじゃないタイマーの使い方の説明キボンヌ。何か気になる。
0589デフォルトの名無しさん
2007/04/11(水) 13:37:48CControlBar 派生クラスの OnCreate で CDialog::Create を呼び出して
コントロールバーの中にダイアログを入れています。
このとき、ダイアログ上のコントロールのメッセージは、
どうやって受け取ったらよいでしょうか?
int CFooControlBar::OnCreate(.....)
{
......
// コントロールを乗せたダイアログをリソースから読み取る
m_hogeDlg.Create(IDD_HOGE_DIALOG, this);
m_hogeDlg.ShowWindow(SW_SHOW);
}
m_hogeDlg のメッセージを受け取るには?
0590586
2007/04/11(水) 19:42:13マジレスはもうおしまい後は自分で考えてねww
それではそっけないのでヒントは 「一意」
サービスしすぎww以上
>>>589
C++から勉強しなおした方がいいYOというか
585で説明してるしww
皆さん結果を求めたいがために焦りすぎ、実装する以上もっと気の細かい
シーケンスが必要ですww
質問「何々の関数に、赫々しかじかの引数を与えましたが結果がでません」
答え「準備不足です」
0592デフォルトの名無しさん
2007/04/12(木) 09:38:16ある関数で、CStringの文字列を引数として渡し、リスト内に同じ項目が
存在しない場合、追加処理を行っています。
LVFINDINFO listInfo;
listInfo.flags = LVFI_STRING;
listInfo.psz = inStr;
// Itemを検索
int findItem = listCtrl.FindItem(&listInfo);
このとき、FindItemを使って検索するときに大文字と小文字を別物として検索することはできますか?
今のままだと、AAAの後にaaaを追加しようとしたときに既に追加されていると判断され、
リストにはAAAしか存在しない状態になってしまいます。
0593デフォルトの名無しさん
2007/04/12(木) 09:49:38できない。
0594デフォルトの名無しさん
2007/04/12(木) 11:10:59FindItemで見つけた後、一致しているかどうか自分でチェックしたら?
0595デフォルトの名無しさん
2007/04/13(金) 03:27:540596592
2007/04/13(金) 14:43:38ただ、3つ以上重複した場合(aaaa,AAAA,AAAA, aaAAなど)、の場合、
AAAAのが2つ重複して追加される問題があるので
仮想リストビューにする方法も含めて、何か対応を考えて見ます
0597デフォルトの名無しさん
2007/04/13(金) 23:24:350598デフォルトの名無しさん
2007/04/14(土) 14:07:26安易に画面も持たないのに CDialog を継承したクラスをCreate してたり
するんだけど、(要は他のオブジェクトからメッセージを投げるのに、
有効なm_hWndが欲しいだけ)
CDialog じゃなくて CWnd を継承して有効な m_hWnd をもつ
オブジェクトを生成する手段ってあります?
0599デフォルトの名無しさん
2007/04/14(土) 15:13:150600598
2007/04/14(土) 16:07:09CWnd を継承したオブジェクトを Create しても
h_hWnd は 0x0000 なので CDialog を Create してます
なにか、画面に関係しないで CWnd を Create して 有効な
h_hWnd を得られれば文句無いんですが
0601デフォルトの名無しさん
2007/04/14(土) 17:12:160602デフォルトの名無しさん
2007/04/14(土) 18:04:490603デフォルトの名無しさん
2007/04/14(土) 18:23:04::CreateWindowExでメッセージonlyウィンドウ作って、
CWnd::SubclassWindow使えばいいんじゃね?
0604デフォルトの名無しさん
2007/04/14(土) 18:33:191億件までですよね?ドキュメントにはDWORDの最大数まで
サポートしているようなことが書いてありますが、
実際にそこまで設定することは出来ますか?
SetItemCountExを辿っていくとSendMessageで投げていますが、
1億を越える数字を設定するとSendMessageがFALSEを返すので
APIのバグのような気もしますけど。
0605デフォルトの名無しさん
2007/04/14(土) 18:36:08出来ません。
0606デフォルトの名無しさん
2007/04/14(土) 19:05:42>ドキュメントにはDWORDの最大数までサポートしているようなことが書いてありますが
実際はメモリ量とか空間の限界とかあるから無理。
0607デフォルトの名無しさん
2007/04/14(土) 19:13:090608デフォルトの名無しさん
2007/04/14(土) 19:29:02なんで「一億」にしてあるのかがわからん。
100000001件にすると表示されないのな。ワロス。
MSDNに書いとけよ。これじゃアメリカ国民全員の名前を
リストコントロールで表示することは出来ないじゃん。
マイクロソフトのくせに自国民の数すらサポートできない
コントロールを作るなんて非難の対象だな
0609デフォルトの名無しさん
2007/04/14(土) 20:35:560610598
2007/04/15(日) 08:16:10ありがとうございます
今は休み中にてVSEしかないのでMFCが無いので試せないので
明日にでも試そうと思います
ちなみに画面を持たないCWndオブジェクトをCreate()する場合、
どんな引数が望ましいのでしょうか?
0611デフォルトの名無しさん
2007/04/15(日) 09:00:12なかったらShowWindowで表示することもできない
ShowWindow
指定されたウィンドウの表示状態を設定します。
BOOL ShowWindow(
HWND hWnd, // handle to window
int nCmdShow // show state of window
);
パラメータ
hWnd
ウィンドウのハンドルを指定します。
nCmdShow
ウィンドウの表示状態を指定します。
0612デフォルトの名無しさん
2007/04/15(日) 22:16:49MFCで作成したソフトを公開したいのですが、VS.net2003の入っていないパソコンで
自分の作ったソフトを実行してみると、
mfc71d.dll msvcp71d.dll msvcr71d.dll
が必要です、とでてきます。
これらのdllは勝手に配布しても大丈夫なのでしょうか?
0613デフォルトの名無しさん
2007/04/15(日) 22:30:070614デフォルトの名無しさん
2007/04/15(日) 22:34:110615デフォルトの名無しさん
2007/04/15(日) 23:04:36MSに訊け。つーか付属ドキュメントくらい読め。
0616デフォルトの名無しさん
2007/04/16(月) 00:55:13便乗で質問なんだが、その手の質問は
MSDN購読してなくても答えてもらえるの?
0617デフォルトの名無しさん
2007/04/16(月) 06:01:25無料のexpressユーザー?と思ったけど
MFCなら製品版使ってるんだろうし、どうやって手に入れたんだろう?
0618デフォルトの名無しさん
2007/04/16(月) 17:40:12MFC AppWizerdで作ったDLLを
Win32 Application(SDK)から呼び出せますでしょうか?
0619デフォルトの名無しさん
2007/04/16(月) 22:46:380620デフォルトの名無しさん
2007/04/21(土) 20:43:010621デフォルトの名無しさん
2007/04/27(金) 02:12:22> 正規ユーザーが知らないはずがない
いや、キッチリとは知らんよ俺は
VC4,VC6,VS8の正規ユーザーなんだけどさw
0622デフォルトの名無しさん
2007/04/27(金) 07:54:490623デフォルトの名無しさん
2007/04/27(金) 11:35:150624デフォルトの名無しさん
2007/04/27(金) 11:36:160625デフォルトの名無しさん
2007/04/27(金) 12:38:590626デフォルトの名無しさん
2007/04/27(金) 13:00:28実際、知らなくても利用できると言いたかった。
0627デフォルトの名無しさん
2007/04/27(金) 14:21:360628デフォルトの名無しさん
2007/04/27(金) 14:56:35strData[0] = "0000";
strData[1] = "1111";
strData[2] = "2222";
COleSafeArray sa;
sa.CreateOneDim(VT_BSTR, 3, strData);
_variant_t va = sa;
とやってみると、_variant_tのコンストラクタで例外が出てしまいます。
sa.CreateOneDim(VT_BSTR, 3, strData);
sa.CreateOneDim(VT_BSTR, 3);
とすると通過するので、CreateOneDim()にstrDataを渡す方法が
間違ってるのかなと思うんですけど、
_bstr_t配列はどうやって渡すものなんでしょうか。
それとも、CreateOneDim()には_bstr_t配列は渡せない?
0629デフォルトの名無しさん
2007/04/27(金) 14:58:29> sa.CreateOneDim(VT_BSTR, 3);
> とすると通過するので
sa.CreateOneDim(VT_BSTR, 3, strData);
の部分を
sa.CreateOneDim(VT_BSTR, 3);
とすると通過するので
のミスです。失礼しました。
よろしくお願いいたします。
0630デフォルトの名無しさん
2007/04/27(金) 16:25:300631デフォルトの名無しさん
2007/04/27(金) 16:41:39ということは、_bstr_t配列のままだとCreateOneDim()に直接は渡せないということですよね。
SAFEARRAYとかはまったくの未知で、このへんの使いかたって、
ネット上を探してもなかなか見つからないのですが、
_bstr_t配列やCString配列からCreateOneDim()に渡すBSTR配列を作る方法って、ご存知無いでしょうか。
0632デフォルトの名無しさん
2007/04/27(金) 17:06:440633デフォルトの名無しさん
2007/04/27(金) 17:21:390634デフォルトの名無しさん
2007/04/27(金) 17:29:32Suicaとパスネットでやってきたが、最近はパスネットもいらなくなったし
オートチャージで入金もない。
車はETCで料金所はとまらないし、旅行先でレンタカー
借りるときもETC車載かどうかを気にしてる
0635デフォルトの名無しさん
2007/04/27(金) 17:30:45並ぶことがほとんどなくなった
0636デフォルトの名無しさん
2007/04/27(金) 23:24:510637デフォルトの名無しさん
2007/04/28(土) 02:40:31日本語の練習です
0638デフォルトの名無しさん
2007/04/28(土) 11:12:47プロジェクトの設定の、デバッグ、C/C++、リンクにプロジェクトオプションがあるのだが
コマンドラインからビルドする場合この引数をどの様に渡したらいいの?
0639デフォルトの名無しさん
2007/04/28(土) 11:21:41CL [option...] file... [option | file]... [lib...] [@command-file] [/link link-opt...]
0640デフォルトの名無しさん
2007/04/28(土) 11:40:00サンクス
0641デフォルトの名無しさん
2007/04/29(日) 02:23:43とかは?
0642デフォルトの名無しさん
2007/04/30(月) 22:58:55VBのShowのようなコマンドがあるのかと思ったのですが、よくわかりませんでした。
よろしくお願いします。
0643デフォルトの名無しさん
2007/04/30(月) 23:05:300644デフォルトの名無しさん
2007/05/01(火) 05:06:10インスタンス生成してから
a) Create() して ShowWindow()
b) DoModal()
のどちらでも。つか、MSDNくらい嫁。
0645デフォルトの名無しさん
2007/05/01(火) 12:44:36メニュー→ツール→オプション→ディレクトリ配下の
インクルードファイル、ライブラリファイルは何処に保存されているのしょうか?
C:\program Files\Microsoft Visual Studio配下はgrepしてみましたがありませんでした
レジストリに記録されているのでしょうか?
知ってる人いたら教えてホスイ
0646デフォルトの名無しさん
2007/05/01(火) 13:45:470647デフォルトの名無しさん
2007/05/01(火) 14:50:26ちょっと探してみたがレジストリの
HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Build System\Components\Platforms\Win32 (x86)\Directories
に入ってるみたいだよ
0648デフォルトの名無しさん
2007/05/01(火) 17:28:42>>645ですが
神が降臨しました、ありがとう実は現在ではVC6 MFCのUIが非常に悪いので
秀丸のマクロと融合させてできる限りの操作を秀丸中心にお行おうと思っていたところです
そういう訳で探していました、本当にありがとね
処でMFCで作成したプログラムはコマンドラインからビルド、コンパイルまで出来るのでしょうか?
(rcファイルはVCで作ってあると仮定してです)?
0649デフォルトの名無しさん
2007/05/01(火) 17:40:50プロジェクトのプロパティで、コンパイルとリンクのコマンドライン見られなかったっけ
それ参考にしたらいいと思う。
0650デフォルトの名無しさん
2007/05/01(火) 17:45:48サンクスです、取り合えず今レジのバックアップを保存したところです
これからゴリゴリとマクロを書いていきますww
0651デフォルトの名無しさん
2007/05/01(火) 18:35:22相当頭堅そうだから本人のやりたいようにやらせて置くのが一番だな
わざわざレジストリの場所教えてやったやつはかわいそう
0652デフォルトの名無しさん
2007/05/01(火) 21:19:12OSについてるものとまったく同じDLLが出来上がるんですか?
0653デフォルトの名無しさん
2007/05/02(水) 00:37:190654デフォルトの名無しさん
2007/05/02(水) 17:48:50複数のモードレスダイアログを入れ子のような感じで作成したいのですが
孫のウィンドウを作成したところで正常に動作しなくなってしまいました。
実際のコードは下のように書いています。
//ビューでマウスがクリックされたら子ウィンドウとしてモードレスダイアログを生成
void CtestView::OnLButtonDown(UINT nFlags, CPoint point)
{
CTestDlg *testdlg;
testdlg = new CTestDlg();
testdlg->Create(CTestDlg::IDD);
testdlg->SetParent(this);
testdlg->ShowWindow(SW_SHOW);
CView::OnLButtonDown(nFlags, point);
}
//ビューで作成した子ウィンドウのボタンが押されたら、孫のモードレスダイアログを生成
void CTestDlg::OnBnClickedButton1()
{
CTestDlgB *testdlg;
testdlg = new CTestDlgB();
testdlg->Create(CTestDlgB::IDD);
testdlg->SetParent(GetParent());
testdlg->ShowWindow(SW_SHOW);
}
何か根本的な勘違いをしてしまっているのでしょうか?
初歩的な質問ですいません、よろしくお願いします。
0655654
2007/05/02(水) 17:52:31testdlg->SetParent(GetParent());
↓
testdlg->SetParent(this);
でした。
0656デフォルトの名無しさん
2007/05/02(水) 18:58:47解決の重要な手がかりなんだから。
0657デフォルトの名無しさん
2007/05/02(水) 19:14:54モーダルならそういう風にローカル変数でもいいけど
モードレスだと関数抜けた後のことが気になる。
0658デフォルトの名無しさん
2007/05/02(水) 19:17:27PostNcDestroy で delete this が入ってるか、メッセージで何とかしてるのかと
0659654
2007/05/02(水) 21:03:30すいません、説明不足でした。
わかっている限りだと2パターンの変な挙動をしていて
1つはダイアログのウィンドウ自体は生成されているようでウィンドウの移動などはできるのですが
再描画のコードが動作していない時のような感じになる事があるのと(必ずというわけでも無いようです)
生成した孫ウィンドウがアクティブな間は何の問題も無く動作しているように見えるのですが
一度、子のウィンドウをアクティブにしてしまうとアプリケーション自体がフリーズしたような
状態になってしまうといった感じです。
念のためSDIの新規プロジェクトを作り直して見ても結果は同じでした。
>>657,658
一応 PostNcDestroy で delete this をしていました。
こういう場合でもスタティックかグローバル変数にしておいた方が安全なのでしょうか?
0660デフォルトの名無しさん
2007/05/02(水) 21:44:10思いつきで書いただけだから
「関係ないけど」と断ってる
0661デフォルトの名無しさん
2007/05/02(水) 21:45:08ttp://msdn2.microsoft.com/en-us/library/ms633541.aspx
>if hWndNewParent is not NULL and the window was previously a child of the desktop,
> you should clear the WS_POPUP style and set the WS_CHILD style before calling SetParent.
>Windows 2000/XP: When you change the parent of a window, you should synchronize the UISTATE of both windows.
なんでSetParent使ってるの?
ダイアログリソースに子スタイル設定して、Createで親指定すればいいのに。
0662デフォルトの名無しさん
2007/05/03(木) 00:14:49質問させてください
MFCでコンソールアプリって作成出来ないですよね、バージョンは問いません。
0663デフォルトの名無しさん
2007/05/03(木) 00:24:430664デフォルトの名無しさん
2007/05/03(木) 00:52:33え〜まじっすか?
新規作成→プロジェクトからはMFC ActiveX ContorolWizard or MFC AppWizard(dll) or MFC AppWizard(exe)しかないのだけど?
これじゃあコンソールアプリは作成できないよね?
0665デフォルトの名無しさん
2007/05/03(木) 00:57:51Win32コンソールプロジェクトを選択して、詳細でMFCサポート追加しろ。
0666デフォルトの名無しさん
2007/05/03(木) 01:16:56そういう裏技があったのね、サンクス
0667デフォルトの名無しさん
2007/05/05(土) 09:51:020668デフォルトの名無しさん
2007/05/05(土) 10:28:540669デフォルトの名無しさん
2007/05/06(日) 00:16:24一見便利そうに見えるけどインスタンスがハッキリしないから
すげー扱いづらい
こういう仕様デフォにする奴ってアフォだろ
なげー文字列をCStringで扱うとアフォかってほど遅くなる
結局、使えない
0670デフォルトの名無しさん
2007/05/06(日) 00:49:03○(・ω・)○ ソンナコトイワレテモ
○○○ ウチ、ボン・デ・ライオンヤシ
.c(,_uuノ
0671デフォルトの名無しさん
2007/05/07(月) 11:46:34>インスタンスがハッキリしないから
君が何を言っているのか判らないよ…
理解できてないだけじゃ?
0672デフォルトの名無しさん
2007/05/07(月) 11:54:13せめて他の文字列を取り扱う手段と比較してから結論を出してくれ。
0673デフォルトの名無しさん
2007/05/07(月) 17:21:390674デフォルトの名無しさん
2007/05/07(月) 18:55:30CDialogを継承した派生クラスを作りました。
コントロールは、追加したメンバ変数を操作して
扱えましたが、ダイアログ自身はどうやれば操作
できるのでしょうか。
タイトルバーの文字列を変更する方法を模索中です。
this->SetWindowText("タイトル文字列");
を試すと異常終了だし。
0675デフォルトの名無しさん
2007/05/07(月) 19:29:26我が左手に封じられし鬼よ
今こそその力を、示せえーー!!
うおおおおおおーーー!!!
俺の生徒に、手を出すなあーーー!!!!
0676デフォルトの名無しさん
2007/05/07(月) 20:10:38異常終了の詳細キボンヌ
0677デフォルトの名無しさん
2007/05/07(月) 20:22:51「Visual C++ Runtime Error [中止][無視][キャンセル]」
のような感じ文面のダイアログが出て終了。
本来ならそれで正解のはずということでしょうか。
何らかのプログラム上のミスが原因で異常終了が出てるのではないか
という意味でしょうか。
0678デフォルトの名無しさん
2007/05/07(月) 20:30:27コンストラクタの中とかじゃダメだよ。
ちゃんとウィンドウが作成されてCDialogオブジェクトに
アタッチされてからじゃないと。
0679デフォルトの名無しさん
2007/05/07(月) 20:40:02じゃ、mallocで確保した領域に突っ込んだ文字列でいいよ
これで想像付く?
後付けであれがないこれがないごちゃごちゃいうなよぶっ殺すぞ
0680デフォルトの名無しさん
2007/05/07(月) 20:43:58エディットコントロールやスタティックテキストの値を変更している直後
で呼び出してます。
SetWindowTextで正解で、やはり何かプログラム上のミスでしたか。
わかりました、ありがとうございます。
0681デフォルトの名無しさん
2007/05/07(月) 20:50:22そもそもエラーで止まったところで何エラーなのか調べなさいよ
0682デフォルトの名無しさん
2007/05/07(月) 20:58:270683デフォルトの名無しさん
2007/05/07(月) 22:29:57想像も何も、あんたが比較して実際に遅いかどうか判断しなさいよ。
0684デフォルトの名無しさん
2007/05/07(月) 22:39:03CStringは糞だろ
文字列に1文字ずつ足していくとどんどん遅くなってく類だろw
0685デフォルトの名無しさん
2007/05/07(月) 22:42:11まさかとは思うが、CString foo = ""; for (;;) {foo = foo + '-'; std::cout << foo << std::endl;} とかしちゃってるんだろうかw
0686デフォルトの名無しさん
2007/05/07(月) 23:04:49CString hoge, hoge2;
strcpy(hoge.GetBuffer(20), "this is a test.");
hoge=""; //クリアしたつもりだけど何故かクリアされていない
int length=hoge.GetLength(); //この値は確かにゼロ
hoge2=hoge; //でもhogeもhoge2も"this is..."が入る
hoge="AAA"; //これなら上書きされる
int length2=hoge.GetLength(); //この値は3
hoge=""; //今度はきちんとクリアされる
■ このスレッドは過去ログ倉庫に格納されています