■MFC相談室 mfc17d.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/21(火) 10:38:31前スレ
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
0102デフォルトの名無しさん
2006/12/12(火) 21:55:03http://www.google.co.jp/search?hl=ja&safe=off&c2coff=1&q=%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%89%E3%83%AD%E3%83%BC+CListCtrl&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
010398
2006/12/12(火) 21:57:44すみません、自分で検索するべきでした
どうもありがとうございました
010499
2006/12/12(火) 22:00:20レスありがとうございます。
if(GetDlgItem(IDC_STATIC_COLOR1) == pWnd){
AfxMessageBox(L"一番目のコントロール");
}
//以降コントロールの数分else if
試しにこんなコードでやってみたのですが引っかかりませんでした。
比較処理が悪いのでしょうか?
0105デフォルトの名無しさん
2006/12/12(火) 22:06:07まあ、駄目だったら、そもそもIDC_STATIC_COLOR1が本当にそいつの直下に配置してあるコントロールなのかどうなのか
ってところがあやしいんじゃね?
010699
2006/12/12(火) 22:22:41OnInitDialog内で
GetDlgItem(IDC_STATIC_COLOR1)->SetWindowText("あいう");
で文字は表示されたので問題はないと思うのですが・・・。
もう少し調べてみます。
010799
2006/12/12(火) 22:31:54すみません、教えていただいた
pWnd->m_hWnd == GetDlgItem(IDC_STATIC_COLOR1)->m_hWnd
でできていました。(メッセージボックスが表示されていなかったのでできていないと思っていました)
どうもありがとうございます。
0108デフォルトの名無しさん
2006/12/12(火) 22:38:020109デフォルトの名無しさん
2006/12/13(水) 16:35:12まずは、CMainFrame に MDIタブ用の CDocBar を配置したいのだが、
どこをどうオーバーライドしたらいいんだ?
CMainFrame::recalcLayout() あたり?
0110デフォルトの名無しさん
2006/12/13(水) 17:02:480111デフォルトの名無しさん
2006/12/13(水) 19:25:44なんだかこの間からぶち当たった問題をことごとく質問してないか?
0112デフォルトの名無しさん
2006/12/13(水) 19:32:030113デフォルトの名無しさん
2006/12/13(水) 19:34:02相談しようぜ。
MDIの基本的な部分はOKなん?
0114デフォルトの名無しさん
2006/12/13(水) 19:52:360115デフォルトの名無しさん
2006/12/13(水) 20:17:28MFCって結構むずいじゃん。
俺、ドキュメントビューアーキテクチャーとかいう仕組み覚えるのに何日も必要だったぞ。
まず、ドキュメントビューアーキテクチャーの構造なんて大して重要なもんだと思ってなかったし(SDIで組んでたのもあって)。
この状態でMDIプログラミング特攻すると、はっきりいってハマルじゃんw
0116デフォルトの名無しさん
2006/12/13(水) 20:57:27ダイアログをいくつか作成(このときフォントをMSゴシックの12ptに変更)し、
各ダイアログ毎にクラスを作成(CPropertyPageクラスの派生クラス)して
メインメニューに[プロパティ]項目を追加、そのイベント内で
・プロパティシートのインスタンス生成
・プロパティページをプロパティページにAddPage
・DoModalで表示
しています。
このとき、表示された各ページのフォントサイズが標準のMS UI Gothicの9pt
で表示されてしまっています。なのでCPropertySheetの派生クラスを作り、
OnInitDialog内でフォントサイズの変更を行ってみたのですが変化なしでした。
なぜこのような現象が起こるのでしょうか?
0117デフォルトの名無しさん
2006/12/13(水) 21:00:50タブコントロールなら、全ページフォントを設定する必要があるな。
プロパティシートにもそんなのあんじゃね?(適当w)
0118デフォルトの名無しさん
2006/12/13(水) 21:10:57それでも変わらないんですよ。各ページのコントロールのサイズも
ちっちゃくなってますし。全ページのコントロールの位置、サイズ、フォントを
設定しないといけないんでしょうか。
0119デフォルトの名無しさん
2006/12/13(水) 21:42:180120デフォルトの名無しさん
2006/12/13(水) 21:44:25だからおいらの相談に答えてくれよー
0121デフォルトの名無しさん
2006/12/13(水) 21:46:33あ、やっぱ、手動なんだw
0122デフォルトの名無しさん
2006/12/13(水) 21:48:25ドキュメントビューアーキテクチャ(なげぇなw)の理解は大丈夫ということでOK?
0123デフォルトの名無しさん
2006/12/13(水) 21:57:52MFCにCDocBarなんてあったけ?
0124デフォルトの名無しさん
2006/12/13(水) 22:20:15すまん CDockBar だった
CDockBar はアンドキュメンテッドなクラスで、CControlBar を配置するための滑走路みたいなものだよ
0125116
2006/12/13(水) 22:43:28SendMessageToDescendants()?でフォントは変更できましたが、
サイズとかの変更の仕方が分かりませんでした。
0126デフォルトの名無しさん
2006/12/13(水) 23:09:570127デフォルトの名無しさん
2006/12/13(水) 23:33:370128デフォルトの名無しさん
2006/12/13(水) 23:47:280129デフォルトの名無しさん
2006/12/13(水) 23:49:05まず、全体っちゅーか概要ぐらいは理解しないと
なにやるにも知ってる人間にお伺いを立てないと何もできなくなっちゃうぞ。
0130デフォルトの名無しさん
2006/12/14(木) 01:57:250131デフォルトの名無しさん
2006/12/14(木) 03:22:110132デフォルトの名無しさん
2006/12/14(木) 07:02:17そういうときもある。
0133デフォルトの名無しさん
2006/12/14(木) 09:06:58ダイアログベース単位はフォントの幅が元になってる。
だからダイアログのフォントを変えると
コントロールのサイズと位置もフォントに比例して変わる。
このフォントサイズはダイアログを作る時に指定した
ダイアログボックステンプレートに定義されている。
ダイアログを作った後でフォントを変えても
コントロールは既に作成されてしまっているから
コントロールのサイズと位置は後で指定したフォントには影響されない。
以上ここまでMFCに限らずWin32でも同様
プロパティシートがリソースで定義されたダイアログのフォントを無視しているということは
たぶんメモリ上に読み込んだダイアログボックステンプレートのフォントを書き換えてから
その変更を加えたダイアログボックステンプレートでダイアログを作っているのではないか
と推測されるけど、あとはCPropertyPageのソース等を読めばわかることだから省略
0134デフォルトの名無しさん
2006/12/14(木) 10:51:38☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< MDIタブ実装方法 まだー?
\_/⊂ ⊂_)_ \_______
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
| .|/
0135デフォルトの名無しさん
2006/12/14(木) 11:22:300136デフォルトの名無しさん
2006/12/14(木) 11:43:330137デフォルトの名無しさん
2006/12/14(木) 13:05:500138デフォルトの名無しさん
2006/12/16(土) 17:26:02SetCheck()かと思ったのですが違うようでした。。
0139デフォルトの名無しさん
2006/12/16(土) 17:46:32基本クラスのメンバEnableWindowで
0140デフォルトの名無しさん
2006/12/16(土) 18:12:46やってみます。ありがとうございました。
0141デフォルトの名無しさん
2006/12/17(日) 19:17:510142デフォルトの名無しさん
2006/12/17(日) 19:21:10ツリーリストコントロールって標準で存在しませんか?
存在しない場合はどうすれば使えますか?
MFCで作ったフリーソフトでツリーリストが使われていたので、
何らかの方法でできるのではないかと考えているのですが・・・
ちなみに、今の自分の技術力では自作は無理です
0143デフォルトの名無しさん
2006/12/17(日) 19:25:35MDI子ウィンドウのビュー(フォームビュー)でリストコントロール(CListCtrl)を使っているのですが、
他の子ウィンドウがリスト部分の前に重なった後、リスト部分をクリックしてリストがある子ウィンドウを
アクティブにすると重なっていたリスト部分だけが再描画されません
原因はまったく不明です
どのようにすれば子ウィンドウがアクティブになった時に正常に再描画されるようにできますか?
0144デフォルトの名無しさん
2006/12/17(日) 19:29:21MDI子ウィンドウのビューでリストコントロールを使っているのですが、
子ウィンドウのサイズ変更にあわせてリストのサイズを動的に変更するには
どのようにすれば良いですか?
VC#ではプロパティ画面で簡単に設定できたのですが、
VC++にはないのでとても困っています・・・
以上4つ質問させて頂きました
何かご存知の方は、ご回答をよろしくお願いしますm(_ _)m
0145デフォルトの名無しさん
2006/12/17(日) 19:37:53子ウィンドウのサイズ変更にあわせてリストのサイズを動的に変更する
0146デフォルトの名無しさん
2006/12/17(日) 19:45:000147デフォルトの名無しさん
2006/12/17(日) 19:51:360148デフォルトの名無しさん
2006/12/17(日) 19:53:22普通リードオンリーでできんじゃねぇっけ?
リソースファイルの方の設定に編集できるとかできないとかそういうプロパティあった希ガス。
0149デフォルトの名無しさん
2006/12/17(日) 20:00:56昔、俺がみたのは自力で描画してたのしかみたことないな。
今、どうなってるのかはよくわからん。
0150デフォルトの名無しさん
2006/12/17(日) 21:27:01勉強してないの丸わかりなんだけど
よくリストコントロール表示できたね
どっかからソースぱくってきた?
0151デフォルトの名無しさん
2006/12/17(日) 21:43:340152デフォルトの名無しさん
2006/12/18(月) 01:37:330153デフォルトの名無しさん
2006/12/18(月) 16:59:07点の数は数千を越えていると思うのですが かなり処理に時間がかかります。
自分なりに色々調べたところ SetPixelは遅い ということがわかりました
同時に BitBlt とか 裏画面 などと 高速化に関するワードも出てきましたが
全く分かりませんでした
この言葉で全て解決しようとするのが悪いのですが 初心者です。
しかし、時間が本当に無いので時間をかけて勉強して… ができません。
ちなみに 点は一色です。 SetPixelの遅さを解決する方法で
まだ分かり易いだろう と思う方法を教えていただけませんか?
0154デフォルトの名無しさん
2006/12/18(月) 17:15:420155デフォルトの名無しさん
2006/12/18(月) 17:27:01具体的にはループ回数が3万でそのうちの一部の点を
描画しているので、最大でも3万ですね
1万は越えているかも知れませんが…
時間は3分から5分程度でした。
0156デフォルトの名無しさん
2006/12/18(月) 17:31:20描いても0.1秒ぐらいだったよ。(裏画面とか未使用)
描画以外の部分に時間かかってるんじゃないかな。
0157デフォルトの名無しさん
2006/12/18(月) 17:35:590158デフォルトの名無しさん
2006/12/18(月) 17:39:17ループ回数を増やすと比例関数的に時間も延びたので
てっきりそこが問題だと思っていました。
そうなるとどこに時間がかかっているのか全く分かりませんね…
ランダムウォークさせているのんですが そこか
1024*768もの配列を作って その中身全てを参照(検索)するという作業を
何度かしているのも原因かもしれませんね。
mallocなんかも全く使っていませんし…
ループ回数をこれ以上にするとエラーになり途中で動作が止まってしまうのも
同じ原因から来ているのかも…
しかし ここまでくるとここで相談させてもらう内容ではなくなってしまいますね。
0159デフォルトの名無しさん
2006/12/18(月) 17:42:35それは遅いだろ...
0160デフォルトの名無しさん
2006/12/18(月) 17:57:38>初心者です
>時間が本当に無いので時間をかけて勉強して… ができません。
結論: 無理
0161デフォルトの名無しさん
2006/12/18(月) 17:57:46いちいちSetPixel使うからだよ。
0162デフォルトの名無しさん
2006/12/18(月) 18:01:51まぁ特に考えてたわけではなく、むしろ本当は描画の
様子が分かるように1回1回点を打ちたかったのですが
それができなくて 最後にだけ描画してます。
(点を打つ配列に目印をいれて最後にその部分だけ描画)
結論を言うと そのループ及び巨大な配列の中身を参照するのに
時間がかかってるというわけなんですね・・・
>>160 ってことでFAですかね。
検索の仕方や配列の使用法などを再考してみますね。
こんなくだ質に付き合ってくださってありがとうございました。
0163デフォルトの名無しさん
2006/12/18(月) 18:13:410164デフォルトの名無しさん
2006/12/18(月) 18:17:040165デフォルトの名無しさん
2006/12/18(月) 18:20:290か1を直接書き込めばいいじゃない。
その後BMPに変換すれば?
0166デフォルトの名無しさん
2006/12/18(月) 18:54:300167デフォルトの名無しさん
2006/12/18(月) 19:57:42遅いというのは一瞬じゃないということ
自分で試さずに質問するのはやめてほしい。
0168デフォルトの名無しさん
2006/12/19(火) 00:26:28そういう時は、SetPixelだけをコメントアウトしてみる。
そうすれば、それが犯人かどうか分かる。
0169デフォルトの名無しさん
2006/12/19(火) 00:53:12130万pixelなんて問題にならないぐらい強烈に早いね。
今後使う機会があるかは微妙だけど勉強になったよ。
>>170 スレ違い房乙
0170153です
2006/12/19(火) 00:55:54>>163
確かにループには入ってますね
でもループもしないで1回だけ なんて できるんですか
>>164
そのような方法がある事は調べていたときにわかったんですが
なかなか理解できなかったんですよね
>>165
今は理解できないんで ちょっと考えて見ます^^;
ありがとうございます。
>>166
ですね。 158で自分でも言ってますが。 すみませんでした。
>>167
そうなんですか。 >遅いというのは一瞬じゃない そうですね
自分で試さずに とは 何のことでしょう?
確かに SetPixelに時間がかかっていたかどうかは
自分で画面全体にSetPixelで塗りつぶしてみれば分かったんですね…
そうだ と思い込んでしまったので思いつきませんでした ごめんなさい。
0171デフォルトの名無しさん
2006/12/19(火) 01:15:49そんな方法もありますね 次回から参考にします!
>>169
スレ汚しすみませんでした。
0172デフォルトの名無しさん
2006/12/19(火) 02:51:30つーか、普通にSetPixelとGetPixelが遅い。
GDI+を使っているならこれで速くなるっぽいことが書いてある。
http://junki.lix.jp/csgr/002ColorDataAccess1.htm
0173デフォルトの名無しさん
2006/12/19(火) 08:21:41> 1万は越えているかも知れませんが…
>
> 時間は3分から5分程度でした。
描画しているのは最大でも3万で時間は3分から5分
0174デフォルトの名無しさん
2006/12/19(火) 14:48:18そこに描画してBitBltするという、昔ながらのやり方を
試すのが今後のためにいいと思うが。
0176デフォルトの名無しさん
2006/12/19(火) 16:20:570177デフォルトの名無しさん
2006/12/19(火) 23:24:44よろしくおながいします
0178デフォルトの名無しさん
2006/12/19(火) 23:36:110179デフォルトの名無しさん
2006/12/19(火) 23:58:470180デフォルトの名無しさん
2006/12/20(水) 10:36:29存在しないから作るんですよ
0181デフォルトの名無しさん
2006/12/20(水) 10:49:580182デフォルトの名無しさん
2006/12/20(水) 11:18:15>>142 LVITEM::iIndent'
>>143 WS_CLIPSIBLINGS
0183デフォルトの名無しさん
2006/12/20(水) 12:37:11MFCを使わず、まったくゼロから MDIタブを作るのならそれほど難しくはない
と混じれ酢してみる
0184デフォルトの名無しさん
2006/12/20(水) 13:08:570185デフォルトの名無しさん
2006/12/20(水) 13:18:050186デフォルトの名無しさん
2006/12/21(木) 01:17:540187デフォルトの名無しさん
2006/12/21(木) 10:24:22そのためには void CMainFrame::RecalcLayout(BOOL bNotify) をオーバライドすればいいぞ
どうオーバライドするかは自分で調べろ
0188デフォルトの名無しさん
2006/12/23(土) 01:28:040189デフォルトの名無しさん
2006/12/23(土) 14:47:20XPログオン時のユーザ名とパスワードが正しいかどうかを、開発したプログラム上で
確認したいと思っているのですが、どのようにすればよろしいでしょうか。
0190デフォルトの名無しさん
2006/12/23(土) 14:51:25ここはライブラリの専用スレですよ
0191デフォルトの名無しさん
2006/12/23(土) 14:55:43スイマセン、他スレで聞いてきます。
0192デフォルトの名無しさん
2006/12/23(土) 15:26:31どうすれば取得できるでしょうか?
0193デフォルトの名無しさん
2006/12/23(土) 15:35:000194デフォルトの名無しさん
2006/12/23(土) 15:42:35色々調べてみたのですが、GetWindowLongの使い方がいまいちよく分からないです。。
具体的にどう使えばいいか、ご教授願えますでしょうか(><
0195デフォルトの名無しさん
2006/12/23(土) 15:49:270196デフォルトの名無しさん
2006/12/23(土) 15:56:33LONG lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
で取れると思うんですけど、そこからどうすればいいか分からないんです。
どこを見れば分かりますか?
0197デフォルトの名無しさん
2006/12/23(土) 16:04:120198デフォルトの名無しさん
2006/12/23(土) 16:07:050199デフォルトの名無しさん
2006/12/23(土) 16:20:22MFC以前の問題ですか・・・
もっとよく調べてきます。
0200デフォルトの名無しさん
2006/12/23(土) 23:28:320201デフォルトの名無しさん
2006/12/24(日) 22:58:19現在、ダイアログAのボタンを押すと、ダイアログAを隠して
ダイアログBをモードレス表示し、
表示されたダイアログBのボタンを押すと、ダイアログBを隠して、
ダイアログAをモードレス表示するツールを作成しております。
そこで、ダイアログAのボタンを押すと、ダイアログAを隠して
ダイアログBをモードレスで表示することは出来たのですが
モードレスで開いたダイアログBのボタンを押すと、
ダイアログAをモードレスで開く方法がわかりません。
教えてください。
よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています