■MFC相談室 mfc17d.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/21(火) 10:38:31前スレ
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
0334デフォルトの名無しさん
2007/01/16(火) 05:27:51情報少なすぎでどうespしろと?
0335デフォルトの名無しさん
2007/01/16(火) 05:36:21自分でエディタとか作ったことない?
0336デフォルトの名無しさん
2007/01/16(火) 08:03:52プロファイルで
0337デフォルトの名無しさん
2007/01/16(火) 09:03:52HEAP、スタックを2000000(2M)や20000000(20M)で試しましたが、タイミングや場所は変わらないようです
お手上げです。解決策をお知りの方おりませんか?
0338デフォルトの名無しさん
2007/01/16(火) 09:15:520339デフォルトの名無しさん
2007/01/16(火) 09:42:17malloc(255);//必ず成功。 戻り値:0x00b72e68
WideCharToMultiByte
MultiByteToWideChar
malloc(255);//必ず失敗
こんな感じです
0340デフォルトの名無しさん
2007/01/16(火) 09:59:040341デフォルトの名無しさん
2007/01/16(火) 10:05:25MultiByteToWideCharを2度使いmallocのサイズを指定していたのですが、wchar単位でNULLが含まれていないため少なくなっていました
成功するほうをmalloc((len+1)*sizeof(wchar_t));で動きました。
ありがとうございました。
0342デフォルトの名無しさん
2007/01/16(火) 12:49:330343デフォルトの名無しさん
2007/01/16(火) 17:35:59>>336
ありがとうございます。
プロファイルで調べたところOnIdle()のreturnが原因だったようです。
そのreturnのことで質問なのですが、
OnIdle内でのレンダリングによってCGアニメーションを表示するプログラムを書いているのですが、
return TRUE;だと前述のようにCPU使用率が高くなるのですが、
アニメーションは正常に表示されます。
return CWinApp::OnIdle(lCount);だとCPU使用率の問題は解消されるのですが
OnIdle()が呼ばれる間隔が長くなるためか、アニメーションが滑らかに表示できません。
この2つを同時にクリアできる良い方法はありませんか?
よろしくお願いします。
0344デフォルトの名無しさん
2007/01/16(火) 19:02:170345デフォルトの名無しさん
2007/01/16(火) 19:27:010346デフォルトの名無しさん
2007/01/16(火) 21:57:57ありがとうございます!!
どうやらすごく基本的なことのようですね。。
0347デフォルトの名無しさん
2007/01/18(木) 21:52:58水平方向のスクロールバーの位置から
列の何文字目から表示している知りたいのですが
どうすればいいのでしょうか?
やりたいことはエディットボックスの中身を編集して
かきかえても書き換える前と同じ位置を表示したいのです。
LineScrollを使用すれば垂直はうまくいくのですが、水平がうまくできません。
また、SetScrollPosを使用してもエディットボックス内が更新されないのでこまっています。
0348デフォルトの名無しさん
2007/01/18(木) 23:52:25「書き換えても書き換える前と同じ位置」というのもよくわからないんだけど、
わざわざスクロールバーを使っているのはなぜ?
単純にGetSelでカーソル位置を取得しておいてSetSelで戻すだけじゃダメ?
あと、エディットボックスの更新するにはUpdateData(FALSE)とUpdateWindow()
じゃない?
質問がよくわかってないのではずしてるかも知れんけど。
0350デフォルトの名無しさん
2007/01/19(金) 16:13:48誰に責任があるんでしょうか?ソースコードを少し追ってみると、独自のアロケータ
でごにょごにょやってるような感じなんですが。
0351350
2007/01/19(金) 16:23:11CWinApp::OnIdle() → CWnd::DeleteTempMap() あたりで解放するんですね。
0352デフォルトの名無しさん
2007/01/19(金) 16:23:370353デフォルトの名無しさん
2007/01/19(金) 16:34:29」としか書いてないから、誰がどこでいつ解放するか気になるじゃん?
0354デフォルトの名無しさん
2007/01/19(金) 16:39:540355デフォルトの名無しさん
2007/01/19(金) 17:09:59よって「一時的なポインタ」とやらの有効範囲が決まってくるわけだから。
0356デフォルトの名無しさん
2007/01/19(金) 17:21:080357デフォルトの名無しさん
2007/01/19(金) 18:22:15ヘルプだけで一時的なCWnd*がいつ消されるかも読んだ気がしたが・・・
0358デフォルトの名無しさん
2007/01/19(金) 18:27:04それがヘルプに書いてあれば悩む必要がないのにね。
0359デフォルトの名無しさん
2007/01/22(月) 18:39:22自作でエクスプローラ風アプリケーションを作りたいのですが、
それ風なサンプルを説明しているサイトとか知りませんか?
全く、それ系のインターフェイス名も知らないんで、
ググれなく困っています。
0360デフォルトの名無しさん
2007/01/22(月) 19:00:580361デフォルトの名無しさん
2007/01/22(月) 20:54:50えー!!
そんな殺生なぁ
0363デフォルトの名無しさん
2007/01/23(火) 11:03:34AppクラスからDocumentクラスのポインタの取得方法を教えてください
よろしくお願いします。
0364デフォルトの名無しさん
2007/01/23(火) 11:12:520365デフォルトの名無しさん
2007/01/23(火) 11:13:20GetFirstDocTemplatePosition()、GetNextDocTemplate()、GetFirstDocPosition()、GetNextDoc()
あたりで。
0366363
2007/01/23(火) 11:19:24GetFirstDocPosition()、GetNextDoc()で取得できました。
ありがとうございます。
0367デフォルトの名無しさん
2007/01/25(木) 16:20:26slider.SetRange(0, 100, true);
slider.SetTicFreq(10);
slider.SetPos(0);
このようなスライダを作り、スライダで設定した値をEditBoxに表示しています。
このとき、スライダのつまみをドラッグした場合には正しい値が得られますが
クリックで設定しようとした場合が上手くいきません
例えば、70を設定しようと思って該当する目盛りのあたりをクリックすると、
70の位置には来ず、マウスボタンが押されるたびに60と80で切り替ってしまいます。
クリックでも値を設定できるようにするには、何か特殊な処理が必要なのでしょうか?
0368デフォルトの名無しさん
2007/01/25(木) 18:32:400+GetPageSize()で得られる位置に移動するのがスライダ
コントロールの仕様だと思うんですが。
仕様が気に入らないのであれば、自分で必要なイベントを拾ってSetPos()すれば良い。
0369デフォルトの名無しさん
2007/01/26(金) 01:06:48任意のテキストフィールドをフォーカスさせたい場合は
CEdit::SetFocus()を行うと実現できますが、
このとき、フォーカス対象のテキストフィールドに文字列が
入力されているとき、文字列全体を範囲選択した状態で
フォーカス移動させるにはどのような手法があるでしょうか?
イメージとしてはタブでフォーカス移動させたときのような感じです。
よろしくお願い致します。
0370369
2007/01/26(金) 01:14:49CEdit::SetFocus();
CEdit::SetSel(0,-1);
で実現できるようでした。
0371デフォルトの名無しさん
2007/01/27(土) 01:54:56英語化について教えてほしいです。
タイトルアイコンをクリックした時のシステムメニューや、
AfxMessageBoxを表示させたときのキャンセルの表示など
あらかじめ用意されている部分に日本語が表示されますが、
すべて、一切がっさいを英語にしたいと考えています。
どのような方法で英語かすることができるでしょうか?
0372デフォルトの名無しさん
2007/01/27(土) 02:56:08アプリケーションを実行するとき、デフォルトのコードページを英語に変更する。
でも、システムのバグをたたくこともあるからお勧めしない。
0373デフォルトの名無しさん
2007/01/27(土) 06:21:45OSの問題だろ
0374デフォルトの名無しさん
2007/01/27(土) 13:08:410375デフォルトの名無しさん
2007/01/27(土) 15:15:32日本語関連を全くインストールしていない、設定も悉く日本にしていない端末で、実行する。
0376デフォルトの名無しさん
2007/01/27(土) 15:21:43Visuall C++(VC6)に付属のMFCのバージョンはいくらになりますか?
0377デフォルトの名無しさん
2007/01/27(土) 15:31:000378デフォルトの名無しさん
2007/01/27(土) 17:48:04どこの知障だよ、書いたの。
0379デフォルトの名無しさん
2007/01/27(土) 18:41:44DelphiやJavaはライブラリらしい。しかも、C++はコンパイル時間が長いらしい。
0380372
2007/01/27(土) 19:01:12あと、afxMessageBoxにはユーザ拡張用の前呼び出し処理があるから、
それを横取りして自作のメッセージボックスを表示する。
とかかな。
0381デフォルトの名無しさん
2007/01/27(土) 19:01:26比べてどうなのかはわからんな。
ただ、「C++だから」ってより「色々インクルードするから」長いんだけど。
0382デフォルトの名無しさん
2007/01/27(土) 19:06:080383デフォルトの名無しさん
2007/01/27(土) 19:52:07ANSIの
unsigned char foo[64]
MFCではどの様に書いたらいいのでしょうか?
コンパイラはVC6です
0384デフォルトの名無しさん
2007/01/27(土) 20:20:340385デフォルトの名無しさん
2007/01/27(土) 20:47:58これはもちろんWikipediaに書いてはいけない。
Delphiの方にもしょうもない書き込みしてるが、
群を抜いているのなら特定のソフトウェアをあげつらう必要はなかろうに。
「中立的な観点」を欠いてしまっているのが分らないのかね。
0386デフォルトの名無しさん
2007/01/27(土) 23:24:57VC++ ネイティブのより多少計算とか遅いかもしれないけどさ、
開発が VB 並にめっちゃ楽だし、
文法は Java そっくりで習得も移行も容易だし、
全体的にスマートな印象を受けるじゃん
いい加減 VC++ 信仰は止めて欲しいんだよね
一々 Windows と UNIX(Linux) 版を作りたくねーんだよ
もうさ、時代は中間言語の時代だと思うね
頼むから、ネイティブ信仰は止めようぜ
な
0387デフォルトの名無しさん
2007/01/27(土) 23:34:26TPOで使い分けるでFAだろ。
まあその手の議論は実りがないから他でやったほうがいいな。
0388デフォルトの名無しさん
2007/01/28(日) 08:18:59なければSendMessage(WM_CLOSE);として終了するようにしているのですが
一瞬Windowが表示されてしまいます。。。
Windowを表示させずにそのまま終了する方法はないでしょうか?
0389デフォルトの名無しさん
2007/01/28(日) 08:37:300390デフォルトの名無しさん
2007/01/28(日) 10:07:30モーダルならEndDialog、モードレスならDestroyWindow。
0391デフォルトの名無しさん
2007/01/28(日) 11:06:290392デフォルトの名無しさん
2007/01/28(日) 12:29:47表示位置をそれぞれのプロパティから数値で詳細に設定できるのですが、VC6のMFCでは
そのようなプロパティに項目が見当たりません、VC6で皆さんは位置決めやサイズを
何処で設定されているのでしょうか?
0393デフォルトの名無しさん
2007/01/28(日) 13:03:170394デフォルトの名無しさん
2007/01/28(日) 13:16:13ありがとうございました!
0395デフォルトの名無しさん
2007/01/28(日) 16:34:24ウインドウサイズをマウスで自由に変更できるようにするには
どのような設定、または処理を作れば良いでしょうか?
SDI/MDIベースでないとできないですか?
0396デフォルトの名無しさん
2007/01/28(日) 16:48:030397デフォルトの名無しさん
2007/01/28(日) 17:04:26中のコントロールもそれにあわせて調整したければ、自分で書くしかない。
0398デフォルトの名無しさん
2007/01/28(日) 17:17:53お返事ありがとうございます。
サイズ可変のスタイルのつけ方は、具体的なコードイメージを教えていただけないでしょうか。
ダイアログ内部に設置したCEditのコントロールもあわせて変更するように実装します。
0399396
2007/01/28(日) 17:44:13>サイズ可変のスタイルのつけ方は、具体的なコードイメージを教えていただけないでしょうか。
MSDN嫁。リソースで定義したダイアログならリソースエディタのプロパティの該当項目をチェックするだけ。
>ダイアログ内部に設置したCEditのコントロールもあわせて変更するように実装します。
サイズ変更のメッセージハンドラを書く必要がある(勿論そこでCEditのサイズを調整する)ので、
初心者向けの解説サイトでも探して解説を読め。
0400デフォルトの名無しさん
2007/01/28(日) 18:57:22これからはMSDNみてから質問します。
CEditのほうもありがとうございました。
0401デフォルトの名無しさん
2007/01/28(日) 21:19:270402デフォルトの名無しさん
2007/01/28(日) 21:38:35VC6の場合画面の右下のステータスバーに座標とサイズが表示されてるから
それを見ながら、マウスかキーボードで配置する。
[↑↓←→]で位置の変更、[Shift]+[↑↓←→]でサイズ変更。
もしくはリソーススクリプトを直接編集する。
0403デフォルトの名無しさん
2007/01/29(月) 05:11:451.テキストエディタで.rcファイルを開く。
2.DIALOG内のCONTROL行をcsvファイルとして保存する。
3.以下省略。
0404デフォルトの名無しさん
2007/01/29(月) 05:36:570405デフォルトの名無しさん
2007/01/29(月) 06:20:100406デフォルトの名無しさん
2007/01/29(月) 15:36:03defineと日本語/英語の文字列が一気に書ける。同時に仕様書も作れて一挙両得。
defineの数値はドラッグすれば1づつ増やせるからバグもでない。
0407デフォルトの名無しさん
2007/01/30(火) 23:29:19通常 OnDestroy の中では親クラスの OnDestroy を呼んでいますが、
その親の OnDestroy の直前の部分でメモリ開放処理を行うのは良くないですか?
リストに登録されているアイテムを開放したいのですが・・・
0408デフォルトの名無しさん
2007/01/30(火) 23:50:16良くないと思う理由は?
リストってリストボックスやリストビューコントロールのこと?
0409デフォルトの名無しさん
2007/01/31(水) 00:00:58CListCtrl のことです
これに new で生成したオブジェクトを登録?しています
そのまま終了するとメモリリークが発生してしまうので、
ウィンドウが破棄される直前に開放しようと思いました
それで OnDestroy に追加することにしました
良くないと思った理由は、親クラスの OnDestroy を
呼んでいるところの下にデフォルトで「ここに追加」
的なコメントが入っているからです
0410デフォルトの名無しさん
2007/01/31(水) 00:10:13プログラムが生成→消滅→生成→消滅→・・・ってやってるか
生成→表示→非表示→表示→非表示→・・・消滅ってやってるかでタイミング違ってくるじゃん。
生成したインスタンスを消したいタイミングはいつよ?
最終的に(それがいつだかはアプリにもよるが)インスタンスを確実に消滅さしときゃ問題ねーんだしよ。
0411デフォルトの名無しさん
2007/01/31(水) 00:29:46終了時に一覧情報を保存して破棄することにしています
できるだけ綺麗な(オブジェクト指向的な)ソースコードを
書きたいので、親の OnDestroy の前が正解か後ろが正解か
が気になります
0412デフォルトの名無しさん
2007/01/31(水) 00:49:58WM_DESTROYを処理してる間は、子ウィンドウは存在している。
ttp://msdn2.microsoft.com/en-us/library/ms632620.aspx
リストビューアイテムに設定しているデータを削除するのは、LVN_DELETEITEM, LVN_DELETEALLITEMSでやるといい。
0413デフォルトの名無しさん
2007/01/31(水) 00:51:06ありがとうございます!
やってみます!
0414デフォルトの名無しさん
2007/01/31(水) 00:52:14だったらOnDestroyは関係ないんじゃない?
つか、親のOnDestroy後にCListCtrlにアクセスされたら(するのか?)死ぬじゃない。
親のデストラクタでdeleteしとけばいいんじゃね?やってみ、やってみ。やってみたら結果報告ヨロ
0415デフォルトの名無しさん
2007/01/31(水) 00:53:07個人的には、Documentで扱っているデータなら
CHogeDocument::OnCloseDocument() or OnSaveDocument()
ViewのみでやってるならCHogeView::PostNcDestroy()でやると思う。
CMainFrameにCListCtrlのデータ持たせるとViewからデータへの
アクセスが面倒じゃない?
0416デフォルトの名無しさん
2007/01/31(水) 01:08:09ありがとうございます!
いろいろと試してみます!
0417デフォルトの名無しさん
2007/01/31(水) 08:40:38closeしたらウインドウ関係ないから心配いらん
>綺麗な(オブジェクト指向的な)ソースコード
普通はデストラクタで解放
0418デフォルトの名無しさん
2007/02/01(木) 00:21:49クリック時とダブルクリック時とで処理を分けたいと思っています
しかし、ダブルクリック時には先に必ずクリックイベントが
発生してしまってうまくいきません
NM_DBLCLK の直前に NM_CLICK が発生するのを
防ぐことはできませんか?
0419デフォルトの名無しさん
2007/02/01(木) 00:53:14コントロールの身になって考えれば、ユーザーのクリックがシングルなのかダブルの1発目
なのかの判断はできない。
シングルクリック時の処理開始をしばらく待ってみる以外手はないと思う。
0420デフォルトの名無しさん
2007/02/01(木) 01:11:47レスありがとうございます
つまり、NM_DBLCLK 前には NM_CLICK が
絶対に発生してしまうということですね
何か良い手はないですかね・・・
0421デフォルトの名無しさん
2007/02/01(木) 01:20:02シングルの処理。来たらダブルの処理するだけ。
VBのサンプルではタイマー使ってるみたい。
http://support.microsoft.com/kb/109865/ja
0422デフォルトの名無しさん
2007/02/01(木) 09:45:30のショートカットだから、シングルクリックのあとにダブルクリックがきても
何も困らないんだけどな。
ダブルクリックを変なことに使おうとするからこうなる
0423デフォルトの名無しさん
2007/02/03(土) 19:33:32書籍の「標準講座MFC」って今でも役に立つでしょうか?
MFC6.0ってちょっと古いみたいですが、最新のバージョン(MFC8.0?)と
大きく違うところってあるのでしょうか
0424デフォルトの名無しさん
2007/02/03(土) 20:20:00でなければ止めとけ。
0425デフォルトの名無しさん
2007/02/03(土) 20:42:57新しいUI関連のクラスがいくつか無いだけで、基本はそんなに変わってないと思うけど。
0426デフォルトの名無しさん
2007/02/03(土) 21:18:50ソースは公開されてる
0427デフォルトの名無しさん
2007/02/03(土) 21:57:59ツールバーのボタンに文字列のみ表示したいのですが、
TBBUTTON::iBitmapにNULLを指定しただけでは
イメージ(アイコン?)のスペースの分のスペースが空き、
そこから先から文字列が描画されてしまいます。
どうすればいんでしょうか?
0428デフォルトの名無しさん
2007/02/03(土) 22:40:060429427
2007/02/03(土) 22:47:49なるほど!
CToolBar::SetSizes()の中にやり方が書いてありました。
助かったよ!ありがとう!
0430デフォルトの名無しさん
2007/02/04(日) 09:09:06どれを導入すればいいのだろう?
無料で配布されている Visual C++ 2005 Express は MFC は入ってないんですよね?
それとも、あと少し待って次のバージョンが出たときのほうがいいんでしょうかね。
0431デフォルトの名無しさん
2007/02/04(日) 09:26:03そりゃおめ、vista上で動くモン買えや。
いま、XPでなにやら揃えるのは無駄でしょ?
0432デフォルトの名無しさん
2007/02/04(日) 11:30:15「>>」を表示し、「>>」を押せば残りのメニューが表示されるようにしたいのですが、
そういったコントロールがあるのでしょうか?
どなたかヒントだけでもわかる方おられましたら教えてやって下さい。
0433デフォルトの名無しさん
2007/02/04(日) 11:39:00■ このスレッドは過去ログ倉庫に格納されています