1 :
デフォルトの名無しさん :
05/03/07 16:19:56
3 :
デフォルトの名無しさん :05/03/07 19:27:22
レジストリエディタ(regedit.exe)のようなUIのアプリを作ろうとしています。 つまり、スプリッタで左右2つのViewを持ち、 左がTreeViewで右がListViewです。 そこで、ListView側に関する質問です。 これまたレジストリエディタにように、アイテムをダブルクリックしたら 値を表示したりするようなダイアログを開くようにしたいのです。 それには、どのようなオーバーライド関数や、メッセージで 引っ掛ければいいのでしょうか?
>>4 あぁ… なるほど… アイテムがハイライト状態になったりするのはListViewの
デフォルトの機能だから、ダブルクリックのメッセージで引っ掛ける。
あとは、そのときのマウスカーソルの位置で対象のアイテムを特定
すればいいということでしょうか?
マウスカーソル言うかアイテムの位置じゃね?
7 :
デフォルトの名無しさん :05/03/09 11:17:58
>>4 ,6
どうもありがとうございました。
こんな感じになりました。あとは、↓ではメッセージボックスで
表示しているのをダイアログにして、表示内容を充実させるだけになりました。
void CCcvListView::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
CListCtrl& listCtrl = GetListCtrl();
int iItem = listCtrl.GetNextItem(-1, LVNI_SELECTED);
if (iItem == -1) { /* アイテムが選ばれていなかったら */
goto FUNC_EXIT; /* あとの処理はしない */
}
/* ダイアログへ表示する内容 */
CString name = listCtrl.GetItemText(iItem, 0);
CString data = listCtrl.GetItemText(iItem, 1);
CString msg;
msg.Format("name = [%s]\ndata = [%s]", name, data);
MessageBox(msg, "aaa", MB_OK); /* 表示 */
FUNC_EXIT:
*pResult = 0;
}
ピクチャーボックスの塗りつぶす色を 黒以外(黄色)の色を設定したいのですが どうすればよろしいですか?
9 :
デフォルトの名無しさん :05/03/09 21:07:10
すまん。誰か教えてください。 CreateDispatchでCOleDispatchDriverを継承したクラスのポインタを グローバル変数にし、マルチスレッドにしたら、必ず、COleException が発生するんだけど、どうすれば解決するか知りませんか? CoMarshalInterThreadInStreamを使って解決しようしたんだけど、なんか無理っぽかった。 CCustom *m_p; void main(void) { ::CoInitializeEx(NULL, COINIT_MULTITHREADED); m_p = new CCustom(); m_p->CreateDispatch("なんかID") ; CreateThread( NULL, 0, CreateThreadFunc, 0, 0, 0 ); m_p->なんかメソッドA; } void CreateThreadFunc(void) { ::CoInitializeEx(NULL, COINIT_MULTITHREADED); While(1){ m_p->なんかメソッドB; Sleep(1000); } ///// }
>>8 黄色いビットマップのリソースでも張り付けてやればええんジャマイカ?
11 :
デフォルトの名無しさん :05/03/12 10:41:33
CBitmap *pBitmap; HBitmap hBitmap; /* hBitmap作成 */ pBitmap->FromHandle(hBitmap); //HBITMAPからCBitmapを得る /* 処理 */ のようにHBITMAPからCBitmapを得て、処理後にDeleteObjectしようとしたのですが pBitmap->DeleteObject(); はダメで DeleteObject(hBitmap); なら開放できました どうしてもDeleteObject(hBitmap);を使わないで開放したいのですが、何か方法は無いでしょうか?
>>11 FromHandle使うんじゃなくてAttachしたらどうか。
Attachでいけました ありがとうございます
VC++6.0を使ってます。 スクロールバーのつまみのサイズを変えるにはどうしたらいいでしょうか。
15 :
デフォルトの名無しさん :05/03/13 20:59:38
VC++6.0を使っています。 リストボックスの背景を動的に変える方法を 知ってる方がいましたら教えて頂けないでしょうか?
MDIで、ドキュメントをアクティブにせずに開く方法ってありますか? タブブラウザの「リンクを開くときにアクティブにしない」と同じような動作にしたいのですが。
とあるWindowLessのActiveXコントロールを作っています。 大雑把に機能を言うと、リクエスト(ActiveXメソッド)があったら、 AfxBeginThreadでワーカースレッドを起こして、 そのスレッド内でとある機器とソケット通信を行って、 終わったら通信終了ということで、 そのスレッドからActiveXイベントを投げたいわけです。 まず、スレッドに発生元であるコントロール自身のポインタを渡して、 スレッド中からFireEventを呼んでみたら失敗。 まあ、これはスレッドとコントロール自身が別スレッド空間だからなあと思いつつ、 じゃあしゃあないPostMessageするかと思ったら、 WindowsLessだから当然hWndを持ってないわけです。 こういう場合、どうやって別スレッドからActiveXコントロールのFireをしてやればいいんでしょ? 少し調べてマーシャリングというものを行えば良いらしいというとこまでは行き着いたのですが、 ググった程度ではサンプル等にまではぶち当たることができませんでした。 このへん説明してるいいwebとかないっすかね?
21 :
デフォルトの名無しさん :05/03/15 20:32:02
画像ファイルを読み込むときってCImageとか使わないで自分でオープンソースのライブラリから作るメリットってありますか?
CRichEditViewで、例えばメニューのボタンを押したらエディタに「あああ」とか出るような方法で、 直接あああと出せる方法ってありますか? 今はクリップボードに「あああ」をコピーさせて出しているんですが・・・
GetRichEditCtrl().ReplaceSel
うおおおお!!できました ありがとうざいます!
26 :
デフォルトの名無しさん :05/03/16 11:58:04
VC6++使用 DIID_HTMLElementEvents2使いたくて Platform Sdk入れたのですが、 以下のエラーが出ます。 c:\program files\microsoft platform sdk for windows xp sp2\include\mshtml.h(40626) : error C2061: 構文エラー : 識別子 'LONG_PTR' がシンタックスエラーを起こしました。 SDKセットアップ後、環境変数のバッチ当てて、 VCの環境でIncludeとLibにSDKのディレクトリを設定して 既存のIncludeとLibより上位に持ってきました。 他に設定する項目はあるのでしょうか? よろしくお願い致します。
27 :
デフォルトの名無しさん :05/03/16 19:35:12
mshtml.h, mshtml.idl mshtml.dll
BITMAPリソースにある画像を絶対座標で最善面に表示したいのですが、やり方、あるいは参考になるサイトってあるでしょうか?
>>28 絶対座標ってなんの座標?
最善面に表示ってどこの最前面?
デスクトップの絶対座標と全てのアプリの最前面です。WndTopMostみたいなやつでしょうか
>>30 ビットマップリソース表示と、最前面表示を別々にググればたくさん出てくるよ。
それじゃ意味がないんです
>>32 ビットマップリソース表示と最前面表示の方法がわかれば
あとはそれらを組み合わせるだけじゃん。
因みに
>>32 は別人です。
もっと色々やってみます。ありがとうでした
誰か、教えて・・・
だからアクティブにしたくなかったら アクティブにすればいいんだよ
38 :
デフォルトの名無しさん :05/03/17 18:55:21
リストビューの項目をセンタリングしたい場合どうしたらよいのでしょうか?
40 :
デフォルトの名無しさん :05/03/18 13:21:46
exeと同じ階層に設定ファイルを置いているんですが、 開くファイル?を右クリック⇒プログラムから開く、でやるとその開くファイルと同じ階層から設定ファイルを開こうとしているようなんです どうすれば常にexeと同じ階層から設定ファイル開くようにできるんでしょうか?
>>41 実行モジュールのあるディレクトリにある設定ファイルを開けばいい。
つまり、GetModuleFileName()で取得できたファイル名の'\\'から後を捨てて得られたディレクトリに
移動してから設定ファイルを開けばいい。
ありがとうございます、できました
44 :
デフォルトの名無しさん :05/03/20 21:55:02
mfc最高!
検索サイトエンジンを作ってみたい>< あれってCGIでできてるの?? 誰かつくり方しってますかー????
スレ違いどころではないな
MFCってまだ廃れないよね? .net+Win32SDKとかにならないよね?
48 :
デフォルトの名無しさん :2005/03/21(月) 19:57:23
ttp://kody.jp/vc/index.shtml と
ttp://wg-web.ics.teikyo-u.ac.jp/usage/VC/vwchange.html を参考にして、CFormViewを切り替えて、
そのCFormViewにWeb Browser Controlを
貼り付けようとしているのですが、
2つ目以降のCFormViewでWeb Browser Controlがうまく動きません。
Program: XXX
File: winocc.cpp
Line:345
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
コンパイルは通るのですが、上記のエラーが出てしまいます。
MainFrmから呼び出すなど、色々試してみたのですがうまく行きません。
原因がわかる方いらっしゃいましたらどうぞ御教授下さいませ。
VC++のように複数行選択してシフトを押すと全体にタブ、シフト押しながらだとタブが1つ減る(なんか変な言い方・・・) とか、CTRL+Zで何十回も戻れたりする動作は自分でコーディングしないといけないんでしょうか? それとも簡単にできるものなんでしょうか?
>>49 VisualStudioのテキストエディタの、インデントの話かな?
かなり自分で書かないとダメッしょ。
全部、自分で書け。 エディットコントロールに頼る様ではダメ。
52 :
48 :2005/03/22(火) 16:12:20
53 :
携帯から :2005/03/22(火) 16:17:45
ダイレクトにカキコ
54 :
デフォルトの名無しさん :2005/03/22(火) 20:23:25
VSのようなドッキングウインドウが使いたいのだが、 みんなそういう時どうしてる? 何かいいものあるかい?
CodeGuruから拾ってきたりダイアログバーを無理やり着飾ったり。
56 :
デフォルトの名無しさん :2005/03/22(火) 20:59:09
MFCじゃないけどWTLにあったような希ガス
58 :
49 :2005/03/23(水) 11:35:29
ありがとうございます あれから頑張ってみたんですが、TABとSHIFT+TABは比較的すぐできました しかし複数UNDOが難しすぎます・・・ UNDOされている内容を別のところに保存する、ということはできないんでしょうか?
59 :
49 :2005/03/23(水) 11:36:58
UNDOされている内容ってorz UNDO用のデータ?ですかね・・・
60 :
デフォルトの名無しさん :2005/03/23(水) 17:48:28
newが投げる例外についての質問です。 std::bad_alloc前提で作った非MFCライブラリを MFCプロジェクトで使うことはできるのでしょうか? 単純にリンクすると、newがCMemoryExceptionを 投げるので、例外処理が働かなくなってしまいます。
63 :
61 :2005/03/24(木) 11:42:45
>>62 文字切り捨ては最終手段と考えています。
どうも横幅の64のみが無視されるようで、
例えば32ピクセル分のテキストを全てのボタンに当てた場合、
今度は32*64のボタンになってしまうのです。
画像にテキストを埋め込む手段も考えてはいますが…
もっとスマートに変えられないものでしょうか。
>>63 文字切捨てを避けたい理由は?
その方がスマートだと思うけど。
後は、メモリDC使ってテキストを描画して、それを貼るとか。
>>63 手元のソースで
TBBUTTON tb;
memset(&tb, '\0', sizeof(tb));
tb.fsState = TBSTATE_ENABLED;
tb.fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;
の最後の行を
tb.fsStyle = TBSTYLE_BUTTON;
に変えるとうまくいった。
カットされた分 "..."が付加されるので、確かにスマート。
ただ、XP Styleにするために、comctl32.dllのバージョンを上げると変になった。
>>65 訂正、最後の行は高さが64のせいで、バージョンが変わっても問題なし。
67 :
61 :2005/03/24(木) 12:50:05
>>64 デザインの都合上、ボタンサイズを64*64で固定させたいので、
64未満になってもらっても困るのです。
どうも私の環境だと、幅64の指定が無視されまくるようで・・・
テキスト切捨てで解決できるのならば、それでも良いのですが。
>>65 TBSTYLE_AUTOSIZEは意図的に下ろしてもNGでした。
念のためもう一度確認してみます。
MFCやめたい_| ̄|○
普通にやっても、固定サイズになったよ UINT nStyle = ToolBar.GetButtonStyle(index); ToolBar.SetButtonStyle(index, nStyle ^ TBBS_AUTOSIZE);
69 :
61 :2005/03/24(木) 13:21:43
うーん、どうも何かの条件で TBSTYLE_AUTOSIZE が適用されているようです。
そのタイミングがOnCreate後に来ているようで、
OnCreate内で SetSizes() や SetButtonStyle()をコールしても無視されてしまう模様。
多分私の造り方に問題があるのだと思いますが・・・
荒っぽいやり方ですが、Notify メッセージで毎回SetSizes()をコールしたら固定になりました。
とりあえずコレで放置しておきます。
尚、引き続き原因と思われる箇所は募集させてください。
ツールバー関連のソースは、
>>61 のリンク先に書いたものが全てです。
まだ何も書いていません^^;
70 :
デフォルトの名無しさん :2005/03/24(木) 17:20:38
質問です。現在vc.net2003です。 動的にエディットボックスのReadonlyを設定解除するにはどうしたら良いでしょうか? CWndのクラスにそれらしいものがみあたらないのですが。 Enableだとグレーアウトしてしまうので、やりたいことと違うのです。 以上、よろしくお願いします。
スタイルいじって更新すればいいんでないか?
>>70 read MSDN.
CEdit::SetReadOnly()
73 :
70 :2005/03/24(木) 17:30:09
あああ!CEditにあったんですね! おらこっぱずかしいです! ありがとうございました。
普通、派生クラスからメソッド探していくんじゃないの?
メソッドと言う香具師はイッテヨシ
メッソド
メンバ関数
>>75 しまった!
サブクラスってのは派生クラスに直したんだけど・・・
って、C++はメソッドって言わないんだっけ?
(・∀・)メソッド
意味が通じるんならいいじゃない
>>80 MSDN を規範にするのもどうかと思うが…
まあ C++ のメンバ関数を「メソッド」と呼ぶのが誤りなのは確かだな。
ActiveX のメソッドと紛らわしいし。
メソッドって書いてある本は多いよね
86 :
61 :2005/03/25(金) 13:53:05
>>78 上がってきたデザインがツールバーそのものだったんですよ。
ボタンの真ん中に画像、その下にテキストつきです。
ダイアログのボタン操作になれていなかったので、ツールバーを使ったのですが・・・
今思えばダイアログの方が苦しまずに済んだかもです。
少々結果報告を。
Notify で苦し紛れをしていましたが、
今度はOnUpdatexxx() でSetCheck() をいじったところ、
ボタンを押すだけでまたサイズが変化する現象が発生しました。
SetCheck() の後に SetSizes() をボタン数分コールして汚いソースになってきまして、
更にツールバーが度重なる画面更新でちらつきまで発生して、
結局テキストをぶった切って対処しましたとさ。
;y=ー( ゚д゚)・∵. ターン
87 :
61 :2005/03/25(金) 14:02:42
>>87 ・InsertColumn()でラベルを貼り付けてカラム数を確保
・InsertItem()で行を追加
・SetItemText()などで項目をセット
この要領で問題なくできると思うけど?
89 :
61 :2005/03/25(金) 14:34:01
アリガトウ・・・ゴザイマシタ... (´:;....::;.:. :::;.. .....
Cランタイムを利用しているスタティックリンクライブラリAがあります。 そのライブラリを、あるMFCプロジェクトで使うとします。 最終的な実行ファイルにMFCをスタティックリンクしたい場合、 AもMFCをスタティックリンクする設定にしないとダメですか?
91 :
デフォルトの名無しさん :2005/03/26(土) 19:55:27
質問です。 VCでダイアログベースのexeを作成しています。 CWinAppのコンストラクタの中の、 ASSERT(AfxGetThread() == this); でAssertが発生するのですが、原因がわからなくて困っています。 どうしたら解決できるのでしょうか。 どなたかご存知の方、よろしくお願いします。
>>91 CWinAppのコンストラクタはMFCの初期化前に走る。(グローバルにあるので)
初期化前なのでAfxGetThread()が正常な値を返していないのだろう。
93 :
デフォルトの名無しさん :2005/03/26(土) 23:03:44
コンボボックスで選択されているアイテムのインデックスを取得したい場合どうすればいいでしょうか
CComboBox::GetCurSel()
96 :
デフォルトの名無しさん :2005/03/27(日) 16:50:14
コントロールのメンバ変数をClass wizardから追加するとClass Viewからクラス構成が消えてしまい困っています。 対処法を教えてください
97 :
デフォルトの名無しさん :2005/03/27(日) 16:58:19
クラス構成が消えたら作り直せば良い。 VSを一旦終了して.clwというファイルを削除 VSを起動してクラスウィザードを起動すると クラス情報が無いから既存のファイルから作るかとか聞かれるので 承諾する。これでクラス情報は作り直せる。
つーか、スレ違いだがや。
クラスビューはヘッダーを元にツリーを作るから、ヘッダーを更新してやりゃいいよ。 改行して改行消して保存とか。
100 :
デフォルトの名無しさん :2005/03/29(火) 10:52:01
MFCを後から継ぎ足したようなプログラムを解析してますが、 mainはMFC内にあるんでしたっけ? プログラム側の開始はどこにあるか、どう読めば良いでしょう? ダイアログはリソースになってますが、起動時の画面はリソース定義されてないみたい。 で100ゲト
適当なところでブレークしてコールスタック見る
102 :
デフォルトの名無しさん :2005/03/29(火) 11:41:21
サンクス
>>101 見れたけど、
CWinThread::Run()
AfxWinMain
WinMain
くらいしかナカタ
WinMain == main
>MFCを後から継ぎ足したようなプログラム どんなのかよくわからんが CWinApp の派生クラスがあるなら 派生クラス::InitInstance() あたり
105 :
100 :2005/03/29(火) 12:11:58
サンクス
>>104 CWinAppとInitInstanceの両方ありますた。
106 :
デフォルトの名無しさん :2005/03/29(火) 19:12:50
beckyのような分割ウィンドウのアプリを作りたいと思っています。 (以下、激しく becky をイメージした説明&質問になってます。 すみません。。) 3ウィンドウを作るには、CSplitterWnd でまず二分割して 一方をさらに入れ子にして二分割する。でもって、左側の ビューはCTreeView、右上のビューはCListView、右下の ビューはCEditViewあたりから派生させてやればいいと思いました。 で、疑問なのですが、右上のメールリストと右下のメール本文 表示ビューとの間にある、メールタイトルなどがでている部分は MFC的にはどのように実装されているのでしょうか。
ダイアログ
108 :
106 :2005/03/29(火) 22:14:59
コメントありがとうございます。
>>107 右下のビューをCFormViewから派生させて
リソース・エディタで適当にコントロールを配置。
あと、ウィンドウのサイズ変更に備えて、WM_SIZEに
対するOnSize関数をオーバーライドしてMoveWindow()で
各コントロールのサイズ調整する、って感じでうまく
いきそうです。
なにか変なことやってるかもなので気づいたら
教えてもらえると嬉しいです。
ビットマップリソースをデスクトップの絶対座標で表示したいのですが、どうすればよいのでしょうか? BitBltだとウィンドウ内にしか表示されなくて・・・ 詳細に言うと、ダイアログベースで、計算結果のデスクトップ座標にリソースのビットマップを印として置きたいのです。 前にも似たような質問あったみたいですが、それ見ても分からなくてOTL
Desktopのハンドル取得して、以下同文。
質問です Viewの基本クラスをCRichEditViewにしてエディターを作っているのですが これで作成するとデフォルトでテキストが右端で自動で折り返されてしまいます これを回避しようと ViewのPreCreateWIndowでcs.styleに ES_AUTOHSCROLLとWS_HSCROLLフラグを追加してみましたが オートスクロールはするようになったのですが今度は改行がされません じゃあってことで ES_MULTILINEとES_WANTRETURNをさらに追加してみると デフォルトの動作と全く一緒になってしまいます どこか根本的に間違ってるきもするのですが知恵を貸してください
112 :
デフォルトの名無しさん :2005/03/30(水) 23:40:46
ダイアログベースで作成しています。 コントロールのメンバ変数を追加してほかのクラスからこのメンバ変数を参照するにはどうすればいいですか?
113 :
111 :2005/03/30(水) 23:55:37
済みません、自己解決です m_nWordWrapを変更するだけでよかったみたいです
114 :
デフォルトの名無しさん :2005/03/31(木) 00:22:57
IEコンポーネントを使ったソフトを作りたいんですが、 IWebBrowser2に相当するクラスはCHtmlViewがあるのでいいですが、 IHTMLDocumentやらIHTMLElement等に相当するクラスがないので なんかすごく不便です。 文字列型もBSTRだし、CStringとの橋渡しが面倒。 IEコンポーネント用の便利なクラスライブラリってないですかね。
115 :
デフォルトの名無しさん :2005/03/31(木) 17:21:08
>112 )ノ AfxGetMainWnd
116 :
デフォルトの名無しさん :2005/03/31(木) 23:21:54
エクスプローラのファイル名変更のように、 CListCtrlのラベル編集で同名の項目がある場合などに メッセージを表示して再び編集状態にするにはどうしたらよいでしょう? OnEndlabeledit関数で SendMessage(LVN_ENDLABELEDIT) や EditLabel してもだめでした。
メッセージじゃない物をSendMessageしてもなあ
SetFocus(); GetListCtrl().EditLabel(pDispInfo->item.iItem);
>>117 メッセージの一覧に出てきてもメッセージじゃないものがあるんですね。
自分まだまだ精進が足りないっす。
>>118 できました!ありがとうございます。
>>119 LVN_ENDLABELEDITはWM_NOTIFYに乗せられてやってくる。
WM_NOTIFYは何か操作が行われた結果を通知するメッセージなので勝手に送っちゃダメよ。
CButtonを使った丸いボタンを作っているのですが、 オナードローにして楕円の絵を描き、リージョンの設定も行って 実際触れられるのは丸い領域になっているのですが、背景に 元の四角形の大きさで灰色の部分が残ってしまいます。 (楕円の絵の後ろに灰色の四角があるような状態です) これを消すと言うか最初から描かない方法はありますか?
>>122 描かないとその部分だけおもしろいことになる
クリップしちゃえばいいじゃない。
MFCでドキュメントビューアーキテクチャを使ってMDIアプリを作っているのですが この場合ドキュメントの種類ごとにメニューが変わりますよね? メニューの状態を動的に変化(例えばチェックを入れる)させたいのですが 現在セットされてるメニューの状態しか変化させられません デフォルトで作られる「表示>ツールバーを表示」のチェックみたいに メニューが切り替わっても状態の同期をとることはできないのでしょうか?
>>125 ON_UPDATE_COMMAND_UI を調べろ
CDialog::DoModalってプロセスに対してモーダルじゃなくてスレッドに対してモーダルなの? モードレスのダイアログとマルチスレッドのモーダルダイアログって何が違うの? 後ひとつ質問、CDialogのクラス名ってどこで決まるの? ::GetClassNameで取得してみると「#32770」なんて出るんだけど???
>>128 前半。
メッセージの処理のされ方が違う。
130 :
デフォルトの名無しさん :2005/04/03(日) 00:17:00
CArrayについておたずねします。 下のコードはコンパイルできますが、 CArray<CString, CString&> a; CString tmp; for(int i= 0; i< 10; i++ ){ a.Add(tmp); } 下のコードはコンパイルできません。 CArray<CStringArray, CStringArray&> a; CStringArray tmp; for(int i= 0; i< 10; i++ ){ a.Add(tmp); } 下のようなコンパイルエラーがでます。 error C2582: 'operator 'type' 関数は '<Unknown>' 内では使用できません。 エラーの意味がよく分かりません。 CArrayではCStringArrayの配列は作れないんでしょうか?
>>130 CStringArrayにはoperator=がないから。
CArray::Addのソース見てみればわかるが、拡張した要素に引数を代入してる。
>>131 ありがとうございました。
operator=をサポートしているオブジェクトしかCArrayは使えないんですね。
勉強のためにCArray::Addのソースを見ておこうと思います。
133 :
130 :2005/04/03(日) 01:08:06
ちょっと訂正。 operator=をサポートしていないオブジェクトの場合は CArrayが使えないんじゃなくて、CArray::Addが使えないだけですか。 下のコードはコンパイルできました。 CArray<CStringArray, CStringArray&> a; CStringArray tmp; a.SetSize(10); for(int i= 0; i< 10; i++ ){ a[i].Copy(tmp); } でも、 a[0].Add("123"); とかやった場合、CArrayのバッファが壊れたりしないか不安。
>>133 >とかやった場合、CArrayのバッファが壊れたりしないか不安。
なんで?
135 :
130 :2005/04/03(日) 01:37:10
>>134 何となくですが、CArrayの配列を確保したあとに
配列要素のオブジェクトサイズが増えると
メモリをオーバーライトしそうな気がしたので。。
しかしそんな訳ないですね。
つーか、なんでSTL使わないの?
またSTL厨か。
いや、なんでCArrayを使うのかなぁと。
CArrayってメモリ再確保する時、既存の要素をmemcpyでコピーしてるんだよね・・・ class A { HOGE a, b; HOGE* p; public: A(bool f) : p(f ? &a : &b) {} }; なんてクラスだと、再確保されたとたんおかしくなる。 あとコピーコンストラクタも使ってないから要素を追加すると デフォルトコンストラクタ→operator=となる。
え、memcpyってマジなの? なんか、勉強するのがマジで嫌になってきた・・・ 質問なんだけど、みんなクラスウイザードつかってクラス作ってるの? 今、Win32アプリケーション−空のプロジェクトから作ってるんだけど マクロが使いにくくて辛い・・・ ウイザードを我慢して使う? ウイザードを使わない? ウイザードが吐いたコードを修正して使う? どれが方針として正しいの?
>>140 私は、MFCのクラスを継承するときだけクラスウィザードを使った。
後は普通にエディタで書くからねぇ。
142 :
デフォルトの名無しさん :2005/04/03(日) 19:49:38
これからMFCを勉強しようと思っています。 MFC入門の本はいろいろ出てますが、 お勧めや買っちゃいけないものはありますか? CやC++の基本はわかってるつもりです。
143 :
デフォルトの名無しさん :2005/04/03(日) 20:44:41
新VisualC++.NET入門買ったけど金をドブに捨てたようなもんだったな
>>123 描かない事自体が出来ない感じです・・・DrawItemをすぐにreturnで返しても
灰色の四角が残っているような状態です。
>>124 描画処理の所ではクリップして転送してるのですがダメなんですよね・・・。
灰色の部分は最初から背景に描かれてるような感じです。
ウィンドウにリーヂョン当てちゃえばいいじゃない
ON_COMMANDってGoFの Chain of Responsibility を実装するためのマクロなの?
148 :
デフォルトの名無しさん :2005/04/05(火) 11:28:32
だれかCMapおせーて
やだ
おせーてよ
>>148 インチキ臭い CMap など使わず、std::map 使え。
CBitmapButtonにリージョン設定してもうまく動きません。 なんででしょう。
>>152 「うまく動きません」を説明するところから始めようか。
154 :
152 :2005/04/05(火) 16:38:49
>>153 そうですね。
まず、LoadBitmapsをオーバーライドしてファイルのビットマップを
開くようにしています。
で、LoadImageしたハンドルをそれぞれm_bitmap、m_bitmapSel、
m_bitmapFocus、m_bitmapDisabledにアタッチします。
この時に、ついでにm_bitmapに割り当てるビットマップを使って
リージョンを作成し、SetWindowRgnしています。
DrawItemでは、CBitmapButton::DrawItem(lpDrawItemStruct)をした
後に自分で文字乗せをしています。
この状態で走らせると、ボタンの押下とかでちゃんとリージョンが
効いている事が確認出来るのですが、表示の方はリージョンで切り
取られず、元の四角いビットマップ画像が出てしまいます。
画像の描画をリージョン内に止めるにはどうすればいいのでしょう。
>>152 この前から何度も質問しているんだから、もう少し質問の仕方巧くなろうよ…
>>155 期待する動作を得ることができました。
ありがとうございます。
>>156 質問、初めてなんですけどねw
確かに質問の仕方は悪かったですね。
以後気を付けるようにします。
158 :
デフォルトの名無しさん :2005/04/05(火) 21:21:08
ダイアログ内にエディットボックスを配置して、 その入力補助みたいなことをやりたいのです。 エディットボックスの変更によってEN_CHANGEが送られてきたときに、 それがユーザによるものなのか、プログラム自身によるものなのかを見分けるには どうするのが定番なのでしょうか?
159 :
デフォルトの名無しさん :2005/04/05(火) 21:26:44
陸、海、空オンライン、ただ今鋭意!開発中! 小規模板にある、MMO製作プロジェクトぉ 厨房こぃ!
160 :
158 :2005/04/05(火) 21:30:18
ちなみに、今のところテキストボックスがフォーカスを持っているかで判定しています。 問題無ければこれで行こうと思ってるんですが。
161 :
デフォルトの名無しさん :2005/04/05(火) 22:52:02
リストボックスを複数選択可能にして選択されているアイテムを全て取得するにはどうすればいいですか?
164 :
デフォルトの名無しさん :2005/04/06(水) 16:00:28
intの値を、文字列数値としてCStringに入れるにはどうしたら良いで塚?
>>164 see CString::Format
167 :
デフォルトの名無しさん :2005/04/06(水) 16:21:37
int i=100; CString str; str.Format("%d",i); if(str=="100") printf("OK\n"); else printf("ゴルア\n");
いつからココは凄い勢いで答えるスレになりましたか
169 :
デフォルトの名無しさん :2005/04/06(水) 18:01:25
int i=100; char a[20]; itoa(i,a,10); CString str=a; if(str=="100") printf("OK\n"); else printf("orz\n");
170 :
デフォルトの名無しさん :2005/04/06(水) 18:12:09
CMapおせーてよ
>>171 んなもん根拠ないでしょ。一例なだけで。
173 :
デフォルトの名無しさん :2005/04/06(水) 18:36:26
実行Exeのファイルパス取れますか?
20桁くらいのサイズなら2^32までの数字は文字列に 収まるだろう。char a[4]とかだと数字の1000000は 文字列として格納出来ない
>>174 GetCurrentDirectory
176 :
デフォルトの名無しさん :2005/04/06(水) 18:42:03
>>175 それって、実行時のフォルダ変えられたら変わるんでないの?
177 :
デフォルトの名無しさん :2005/04/06(水) 18:49:25
GetModuleFileName
Win32APIの質問ばかり。。。
180 :
デフォルトの名無しさん :2005/04/07(木) 10:21:07
ちっちゃいテストアプリ作りたいんですが、 AppWizardすると巨大なファイル&コード郡が... 自分でWinMainして中の人にMFCクラスをnewさせた方が良いのかなぁ?
そんなことできないよな?
182 :
180 :2005/04/07(木) 11:04:10
何か、WinMainもAfxWinMainもあるわけね。 で、CWinApp派生させて処理起動すんのか。
183 :
180 :2005/04/07(木) 11:19:25
テストアプリと最終的に開発するアプリと、 ダイアログ単位のファイル/クラスを共有させたいんですが、 RCファイル1個に全ダイアログ入れなきゃならないんでしょうか?
184 :
180 :2005/04/07(木) 11:25:19
CWinAppはInitInstanceだけをオーバーライドして、 他はイジラナイ方が良いんだろうかね? CWinAppに全処理入れたら、巨大な1クラスアプリになっちゃうし。
185 :
180 :2005/04/07(木) 11:34:12
ダイアログ・クラス単位にライブラリ化したいんだが、 アプリのrcファイルとダイアログと切り離し可能でつか?
可能だけどめんどくさい。
187 :
ほれ :2005/04/07(木) 12:32:05
#include <afxwin.h> #include "resource.h" int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { CWinApp* app = new CWinApp(); CDialog* d = 0; int ret = -1; if (! AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nShowCmd)) { goto endapp; } if (! app->InitApplication()) { goto endapp; } d = new CDialog(IDD_MAINW); ret = (d->DoModal() == IDOK? 0: 1); delete d; endapp: AfxWinTerm(); delete app; return ret; }
188 :
180 :2005/04/07(木) 13:02:02
サンクスでつ
>>186-187 ダイアログ単位にクラスライブラリ化する方法も教えてキボンニュ
189 :
180 :2005/04/07(木) 14:18:34
なんだか、ダイアログ1枚作るにも、リソース作成、クラス作成、コンパイルエラー、 とメンドクなぁい?
>>189 それなら、どうあればいいと思うのだ?
つーか、最期のコンパイルエラーとは何だ。
191 :
180 :2005/04/07(木) 15:18:40
Docクラスのnewでエラーだったので消しますた。 もちろんDocクラスは自作しますが、IDEに作って貰う必要はナサゲ。
192 :
180 :2005/04/07(木) 15:54:30
CDialogの派生なんて、C++的には数行の筈なのにイミプーなヘッダーファイルが...
193 :
180 :2005/04/07(木) 16:15:02
Dlg.DoModal()しても表示されない。orz MFCって画面に弱くない?
194 :
デフォルトの名無しさん :2005/04/07(木) 16:19:58
CFileDialogをデフォルトで縮小表示させたいのですが、やり方知っている方いますか? 【XP/2000 VC++6.0】
196 :
180 :2005/04/07(木) 16:28:06
確かに頭が強ければ、ダイアログ単位にクラスライブラリ化できない環境を使うべきでないな。
197 :
180 :2005/04/07(木) 17:03:44
リソースのプロパティ開き直してダイアログクラスにリンクさせてやっとダイアログが開いた。 何のリンク情報が抜けてたんだろう?
ここが >180 の日記スレになった件について
久しぶりに香ばしいのが来たじゃないか でもまんどくせ
まんどくせ
駄目だ。やっぱりbitmapリソースの最前面表示が出来ないorz 誰か教えてください。・゚・(ノд`)・゚・。
お前のプログラム如きが最前面に表示される価値は無い。
煽るならもっと面白い事書いてやれよ
マウスクリックでフォーカスを得ると、内容が全て選択された状態になるエディットボックス、
つまり、IEのURL入力ボックスのようなものはどうやって実現するのでしょうか?
この辺を参考に、
ttp://www.snark.co.jp/soft/faq/vc_a2.htm#Q2 ttp://www.sources.ru/cpp/mfc/t6850.htm void CSelectEdit::OnSetFocus() // WM_SETFOCUS ハンドラ
{
PostMessage( WM_MYSELECTALL ); // カスタムメッセージを送る
}
void CSelectEdit::OnSelectAll(WPARAM wParam, LPARAM lParam) // カスタムメッセージのハンドラ
{
SetSel( 0, -1 ); // 全て選択
}
ってことをやってみたのですが、
マウスボタンを押した直後には全て選択されるものの、
ボタンを離すまでは範囲選択状態のままのようで、
文字列の先頭から、マウスボタンを離した場所までの選択になってしまいました。
205 :
デフォルトの名無しさん :2005/04/08(金) 14:35:26
すいません。。。 質問良いでしょうか? CoInitializeEx(NULL, COINIT_MULTITHREADED); ↑(これがコンパイル通らないんですよ。) error C2065: 'CoInitializeEx' : 定義されていない識別子です。 error C2065: 'COINIT_MULTITHREADED' : 定義されていない識別子です。 ↑(コンパイルエラーが出てしまいます) もちろん、objbase.hはincludeしました。 #include "stdafx.h" #define _WIN32_DCOM #include <objbase.h> ↑(こんな感じ) #include "stdafx.h" #define _WIN32_WINNT 0x400 #include <objbase.h> ↑(これでも駄目でした) MFCだと駄目で、MFCを使用しないと通ります。。。 どうやれば良いのでしょうか? もう、2日悩んでます。。。
206 :
205 :2005/04/08(金) 14:38:57
すいません。 環境忘れてました。 ・Win2000 ・VC6 ・Win32 Console Application
>>205 stdafx.hの後にマクロ定義してもダメ。
プロジェクトの設定のマクロのところで定義するか
stdafx.h内でwindows.hやafx〜.hをincludeする前に定義する。
208 :
205 :2005/04/08(金) 16:13:30
>>207 返答ありがとうございます。
通りました。。。(;;
ありがとうございました。
順番でしたか、、、
こんなので悩むのは私だけでしょうが、解決したソースを記述しておきます。
[ atdafx.h ]
--------------------------------------------------------------------------
#define_WIN32_DCOM
#defineVC_EXTRALEAN // Windows ヘッダーから殆ど使用されないスタッフを除外します
#include <afx.h>
#include <afxwin.h> // MFC のコアおよび標準コンポーネント
#include <afxext.h> // MFC の拡張部分
#include <afxdtctl.h> // MFC の Internet Explorer 4 コモン コントロール サポート
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC の Windows コモン コントロール サポート
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <iostream>
// TODO: プログラムで必要なヘッダー参照を追加してください。
#include<objbase.h>
--------------------------------------------------------------------------
プリプロセッサがどう処理してるか考えれば一目瞭然なんだけどな
ここでいいかどうか微妙だけど質問 今、MFCを使わないでコンソール用のプログラムを作ってる。 構造体の名前でCButtonとかCDialogといったMFCのクラスと同じ名前を使うと 構造体のメンバ補完の場面で自作構造体のメンバが候補に出てこないで MFCのメンバが候補に出てくるんだが、これを正しい候補が出るようにするには どうしたらいいんだ? VC6です。
>>210 ちょっとやってみたがちゃんと自分のクラスが表示されたぞ。
まぁインテリセンスがまともに機能しないのは仕様だから諦めるしかないんじゃね?
213 :
デフォルトの名無しさん :2005/04/09(土) 18:36:37
リストビューでカラムのサイズを変更できないようにする方法とスクロールバーを表示させない方法をおしえてください
モーダルダイアログを出したくて、呼び出す側のヘッダーで public: CModDlg *m_mod; このようにデータメンバーを追加したのですが、この行で error C2143: 構文エラー : ';' が '*' の前に必要です。 error C2501: 'CModDlg' : 識別名を宣言するのに、型が指定されていません。 error C2501: 'm_mod' : 識別名を宣言するのに、型が指定されていません。 と、エラーが出てしまいます。 原因分かる方いらっしゃらないでしょうか?
>>215 >識別名を宣言するのに、型が指定されていません。
の通りなんだが。
>>215 つ【#include "ModDlg.h"】
218 :
204 :2005/04/09(土) 22:34:15
すみませんー
>>204 のやり方をご存知の方おられませんか?
>>218 ためしにやってみたけど
それで問題なく動くと思うけど?
マウス押してから離すまでの間にマウス動かしたりしてない?
もしくはおまいさんのマウスがおかしくなってて動かしてないのに
ぷるぷる動いてる状態になってるとか
221 :
204 :2005/04/10(日) 18:59:58
すんごい素早くシングルクリックすると全部選択されるな。
223 :
204 :2005/04/10(日) 19:47:45
なんですと。 とりあえず正攻法じゃ無いですよねコレ
>>221 普通にクリックしても全部選択されたよ???
VC6, Windows XP SP2
225 :
204 :2005/04/10(日) 22:04:04
>>224 ありがとうございます。
環境によるのかなぁ…
ちなみにウチはVC6, Windows 2000 SP4です。
>>225 あなたと同じ環境だけど必ずでは無いけど確かになるね。
・・・と思ったらクリックした後にちょっとマウスカーソルが
動くとなるみたいだな。光学式のマウスとか使ってない?
あと起動した最初だけはマウスカーソルの場所までしか選択されないね。
228 :
204 :2005/04/10(日) 23:39:33
>>226 ズバリ光学式です。
少なくとも画面上ではカーソルは動いてないんですけどね。
むしろ上手く選択されない方がレアケース?
とはいえ、IEのアドレスバーの方はきちんと動作してますしねー
229 :
224 :2005/04/10(日) 23:41:29
>>225 WM_SETFOCUSとWM_LBUTTONUPの間に、どんなメッセージが来てるか、SPYで監視してみれば。
原因はよく分からないけど、WM_MOUSEMOVEが同時に送られているんだと思う。
当たり前だけど、左ボタンを押したまま、マウスを動かすと選択範囲がカーソルまでになる。
これはエディットボックスのデフォルトの仕様。
IEのURLボックスは、そうならないように別途処理しているはず。
ボタンが押されている間は、WM_MOUSEMOVEを無視するようにすれば、最初の問題も解決するのでは?
>>204 あと言っておくけど
IEのバーはエディットボックスじゃなくコンボボックスだ
複数行じゃなくてもいいなら
コンボボックスにしてドロップダウンのサイズを0にして
タイプを標準にするっていうのはどうだろう?
正攻法ではないがこれで難なく望む動作が得られると思うが
231 :
204 :2005/04/10(日) 23:58:37
おぉ、マウスを浮かせていてもWM_MOUSEMOVEが飛んできてました。 マウスがヘタレなんでしょうか? WM_MOUSEMOVE無視で、めでたく全部選択されました。 どうもありがとうございました。>付き合って下さった方々
232 :
204 :2005/04/11(月) 00:01:58
>>230 あ、そういえばそうですねw
単にデフォルトの動作だったのですか…
233 :
デフォルトの名無しさん :2005/04/11(月) 16:24:43
ダイアログの中の部品をグループボックスで作っといて、 実行時にダイアログにグループボックスを貼り付けるには、 どんなコードになるんでしょうか?
234 :
233 :2005/04/11(月) 16:56:02
もしかして、グループボックスでなくて、プロパティシートを使うんですか?
235 :
233 :2005/04/11(月) 16:59:40
それとも、ダイアログのプロパティをチャイルドにするのかな? 教えてキボンニュ
>>233 スマン
おまいさんの言いたいことがさっぱりわからん
237 :
233 :2005/04/11(月) 17:13:57
ダイアログの中に、何枚も貼りたい部品があった場合、 その部品をクラスにするじゃないですか? その場合、どのリソースをクラスにするんでしょ? グループボックスなのか、ダイアログのチャイルドなのか、 また、貼るときのコード教えて下さい。
おまいさんの言いたいことがさっぱりわからん
239 :
233 :2005/04/11(月) 17:19:43
ダイアログの中に、動的に枠を複数枚貼りますよね? わかりますか?
241 :
233 :2005/04/11(月) 17:40:04
データの数によって枠の数が変わるなら動的にするしか無いんです。 MFCのクラス流儀でいけば、 ダイアログクラスに実行時生成したオブジェクトをペタペタ貼るのがふつー。
よくわかんないから図で示してくれろ。
243 :
233 :2005/04/11(月) 17:48:38
┏━━━━━━ ┃ダイアログクラス ┣━━━━━━ ┃ ┗━━━━━━ ┏━━━━━━ ┃ダイアログの中身クラス ┗━━━━━━ 実行時に、ダイアログが中身を生成して、 ┏━━━━━━ ┃ダイアログ ┣━━━━━━ ┃┏━━━━━ ┃┃中身 ┃┗━━━━━ ┗━━━━━━ メデタシ。
よくわかんないからどっか行ってくれろ
245 :
233 :2005/04/11(月) 18:09:14
プロパティシートはタブコントロールだから関係ないみたいだね。 ダイアログの中にダイアログを入れる、で良いのか?
ここはお前のスレか 自己レスとかいらないから
247 :
デフォルトの名無しさん :2005/04/11(月) 18:29:29
>>245 リソースエディタでダイアログ作って枠なし・CHILDにチェック入れて
クラスウィザードでCDialogと結びつけて
好きなだけCreateすればいいんじゃね?
249 :
233 :2005/04/11(月) 19:01:24
サンクスデツ
>>248 そのやり方でやります。
ところで、ダイアログと枠無しダイアログの位置あわせはどうやったら良いですか?
VCLだと、
ChildForm->Parent = Form1->PanelForPosition; //Form1のパネルの上にチャイルド
ChildForm->Align = alClient; //チャイルドはパネル一杯に描画
なんて書けたんですけど。
>>249 どんな風に配置したいのか知らんが
GetClientRectとかMoveWindowとか駆使して自前で並べるとか
CSplitterWndとか
>>249 親ダイアログの OnSize() で、自分で並べるしか。
CRect r;
GetClientRect(r);
子.MoveWindow(r); // クライアント領域いっぱいに
252 :
233 :2005/04/11(月) 19:17:59
リョウカイ
>>250 >>251 並べた後は親に合わせてチャイルドが動いてくれるんですね。
ま、もし動かなかったら自分で動くコード入れれば良いか。
>>252 >並べた後は親に合わせてチャイルドが動いてくれるんですね。
ぅおぃ!
「親ダイアログの OnSize() をオーバーライドして
>>251 のコード書かないとダメよ」って事スよ。
254 :
デフォルトの名無しさん :2005/04/11(月) 20:08:20
非アクティブ状態のメインウインドウで、ジョイパッド の状態を取得したいのですが、わかりません。 ちなみにアクティブ状態ならジョイパッドを使用できる 状況にあります。
>>254 Win32APIスレで聞いたほうがはやいんじゃ?
DirectInput使うのが早いとは思うけどね
256 :
デフォルトの名無しさん :2005/04/11(月) 22:59:25
RegisterHotkeyでホットキーを設定して メインフレームのウィンドウプロシージャの中で WM_HOTKEYを受け取りSetFocusしているのですが、 フォーカスが他のアプリにあるとき、自アプリに フォーカスが移ってくれないんです。 自アプリにフォーカスを持たせるにはどうしたらいいんでしょうか?
257 :
デフォルトの名無しさん :2005/04/11(月) 23:14:38
CListCtrlでエクスプローラ風のアプリを作っています。 DeleteAllItems()、及びCImageList のDeleteImageList() を 表示切替のたびに毎回コールしているのですが、 タスクマネージャのコミットチャージが増え続け、 操作を続けると数ギガ単位まで膨れ上がります。 このメモリをどうやったら解放できるようになるのでしょうか? VC++6.0/Win2k MFCで作成しています。
259 :
258 :2005/04/12(火) 14:40:01
ごめんなさい、今試したらCImageList に貼り付けている GDI+の Image の解放がNGだったようです。 シツレイシマシタ
260 :
デフォルトの名無しさん :2005/04/12(火) 15:44:18
グループボックスの座標が欲しくて、 CWnd* hStatic = GetDlgItem(IDC_STATIC); としていますが、NULLが帰ってきます。 どうしたら良いですか?
261 :
260 :2005/04/12(火) 15:55:44
もしかして、グループボックスをダイアログクラスのメンバ変数に割当できるんでしょうか?
IDC_STATICってあんたなに参照してるの?
>>260 IDC_STATICの定義を見よ。
#define IDC_STATIC (-1)
なので、IDC_STATICのままではGetDlgItemもメンバ変数化もできない。
グループボックスのコントロールIDを適切に定義した値にしてやれば
>>260-261 の方法で
取得できる。
264 :
デフォルトの名無しさん :2005/04/12(火) 16:58:54
つまりは、スタティックコントロールは全部デフォルトでは IDC_STATICで同じなんですのよ。ですから、個別にメンバ変数とか 設定したい場合は、IDC_STATとか、別のIDにしてあげないと いけないのですわ。
265 :
260 :2005/04/12(火) 17:21:08
>>262-264 うまく逝きました。有難うございました。
ところで、グループボックスのClientRectのRECT.TOPを0にしてますが、
相当上に余白がありますね。
このBottomを下のコントロールのTopにセットしてMoveWindowしてますが、
非常に重なります。
何かテクニックが要りますか?
ん? ClientRectはあくまでそのグループボックスのRECTであって ダイアロルの中の位置ではないぞ?
267 :
260 :2005/04/12(火) 18:07:59
あ、そうか、ダイアログ内の座標は何で取るんでしたっけ? GetWindowRectだとデスクトップ座標だし。
>>260 いくらなんでも甘えすぎ
そうやって一個躓くごとにここで質問してくのか?
それくらい自分で調べような
>>268 ソウデスネ
>hStatic->GetWindowRect(&rStatic);
>ScreenToClient(&rStatic);
でウゴキマスタ
VB経験はそこそこ長いMFC超初心者です。 急にMFCを使ったプログラミングを強いられる状況になってしまったのですが、 VBでいうところのApp.Pathと同等の結果はどうやれば得られますか?
VBでどうこう言うよりどういう事をしたいのかを書いた方がいいと思うよ。
272 :
270 :2005/04/13(水) 11:37:57
>>271 CWinAppのGetProfile系やWriteProfile系で使用するiniファイルの保存場所を
アプリケーションと同じフォルダに変更(デフォはWindowsフォルダ)したいので、
実行中のアプリケーションがあるフォルダのパスを取得したかったんです。
>>270 MFC に関係なく、API 呼び出し。
GetModuleFileName
274 :
270 :2005/04/13(水) 11:54:38
>>273 てっきりどこかのクラスに同様の機能が潜んでるのかと思ってました。
GetModuleFileNameで無事取得できました。
ありがとうございました。
275 :
デフォルトの名無しさん :2005/04/13(水) 12:01:23
ダイアログリソースにスクロールバーを付けましたが、 押しても上から移動しません。
そうです。
工工エエエ(´Д`;)エエエ工工 スクロールバーの活かし方教えて下さいでつ。
スクロールバーが活きるようなコードを書きなさい
スクロールバーが動かない、ことはなかったでつ。 マウスでバーの位置を動かして、マウスがスクロールバーを離すと、 また初期値(0の位置?)に戻ってしまいます。 ダイアログリソースのスクロールバーを使うのは難しいのかな?
スクロールバーを置く クラスを初期化する イベントを取得してイベントに沿ったコードを書く これらをやってやんないとダメよ。 スクロールバー置いたからって勝手になんでもスクロールしちゃ困るっしょ?
ダイアログのリソースのプロパティでスクロールバーするより、 スクロールバーコントロールを置いた方が無難でつか。 ところで、マウスでスクロールバー動かしても位置が戻っちゃうのは、 やっぱ不思議じゃないですか?
動作が設定されてないんだから初期値に戻るしかないでしょう。
クラスウィザードでスクロール・イベント作ろうにも、 関数の追加がディセイブルになってる。 スクロール1個に1クラス追加してからイベント追加なのかなぁ?
284 :
デフォルトの名無しさん :2005/04/13(水) 18:25:05
CDialogのプロパティ設定でスクロールを付けたら、 それのイベントハンドラを作ることは出来ました。 でも相変わらずスクロールは元に戻るし、CScrollBarに初期設定でも要るのかな?
あんたの日記帳じゃないんだからもう少し自分で調べてから質問するなり成果発表するなりしてくれ。
というか、長時間ググリながらコード直したり実行したりしてんでつが。
そもそもスクロールバーコントロールが何なのかわかっていないに一票
いや、別にスクロールバーコントロールが何なのかわかっていなくても、 CDialogの領域をスクロールしたい、という目的を果たせれば良いんだが、 楽に出来ないものか。
分かる分からない以前に、CDialogのプロパティで表示させたスクロールバーが、 マウス移動で移動後マウスから離すと元に戻るというのデフォルトとして変杉。 そんなアプリ無いよ。
ダメだこりゃ
質問タタキで盛り上がってもダメだ罠
CDialogに、 ::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) イベントハンドラを作ったけど、 このpScrollBarがNULLのみ、というのは何でだろう。 CDialogのプロパティでスクロールバー作って、イベントハンドラ足して、 というスタンダードな操作だと思うんだが。
ダイアログにスクロールバー置くこと自体がスタンダードでない
ダイアログのCScrollBarを取得しようとして、 this->GetScrollBarCtrl(SB_VERT); しましたが、NULLですね。
296 :
デフォルトの名無しさん :2005/04/13(水) 20:35:28
MFC 使ってるんだから、自前でスクロールのハンドリングなんて面倒なことしないで SDI に FormView でも張れば良いと思うのは変かな・・・
ダイアログをスクロールさせなきゃいけない時点で設計間違ってるだろ。
Office系って、Windowsの標準インターフェイス仕様を真っ先に覆す代表アプリケーションだったわけで。
CListViewで、左クリックをするとアイテムが選択されますが(当たり前) 右クリックでも選択されるようにするにはどうすればいいのでしょうか? 素人考えながら、右クリックのイベントハンドラ(OnRButtonDown()だった ような・・)を設けて、 SendMessage(WM_RButtonDown(だったような・・), 0, 0) と メッセージを投げてもダメでした。(根本的に違うことやってますか?)
>>299 右ボタンダウンを投げちゃダメだろ。
素直に選択メソッド呼んだら?
301 :
299 :2005/04/14(木) 00:40:20
コメントありがとうございます。
>>300 すみません。右クリックのハンドラで投げた
メッセージはご指摘のとおりRButtonDownじゃなくて
LButtonDownだったのでした。
でもって、OnRButtonDown()でGetHotItem()で
カーソル位置のアイテムのインデックスを取得して
SetHotItem()したら、期待通りのことができました。
いただいたコメントのおかげです。どうもありがとうございました!
だからスクロールバーの処理ってのは自分でやろうとすると見た目以上にメンドクサイんだって。 コントロールがデフォで持ってるなら意識する必要がないけど。
うむ、ダイアログにスクロールバーをつけるような設計するのが悪い。
CToolBarのSetButtonTextで、ツールバーのボタンにテキストを表示する事ができますが これを改行することって出来るのでしょうか? CToolBarCtrlのSetDrawTextFlagsを使って、センターや、\tの展開なんかは出来るのですが、 \nで改行してくれないのです。
306 :
304 :2005/04/14(木) 14:38:19
>>305 済みません言葉が足りませんでした。
\r\nも試しています。
改行が許可されていない部分でのエスケープ文字は、
"・"とかゴミが残ると思っていたんですが、ツールバー上では
そんなゴミも残らず完全にスルーされている感じです。
何か他にコツ等ありましたら、お願いします。
ボタン上にテキストを表示するには、GetButtonText を呼び出してボタンに表示するテキストを取得し、その後 SetButtonText を呼び出してテキストを設定します。
CDialog中の初期処理で、CDialogをCreate(IDD_〜, this)としてます。 CDialog終了時に何かしなきゃならないんでしょうか? といいますのは、VC++のデバッグ実行が終了しなくなって、 半フリーズな感じなんですが、終了処理とか開放を忘れてるのかなと思いまして。
そもそもCDialogって自分でいちいちCreateするもんだっけ?
>>309 モードレスなら必要。
>>308 OnClose の中で DestroyWindow()。
モードレスダイアログでEndDialogしてるというオチでは?
ダイアログなんかのヘッダーファイルをイジルと必ずコンパイルエラーになって、 毎回リビルドしてまつ。 回避方法キボンユ
というかエラーの内容くらい書いてくれ
>>312 「コンパイル済みヘッダを使用しない」設定に。
コンポーネントの色付けがプロパティになってない、 というか、コーディングがやたら中途半端じゃないでつか?
GroupBoxには色付けできないみたいなんでつが、これはMFCの欠陥でつか?
ハァ?
>320は汚くないのかな?
−−−−−−−−−−−−−−−−−−−−−−−−−− 俺様用しおり ∧_∧ ( ・∀・)< 一旦仕切り直し −−−−−−−−−−−−−−−−−−−−−−−−−−
323 :
デフォルトの名無しさん :2005/04/15(金) 16:32:14
>error C2504: 'CRichEditDoc' : 定義されていない基本クラスが宣言されています。 古いソース組み込んだらエラーになります多。 どうしたら回避で期末か?
>>323 CRichEditDocを定義しているファイルを探してインクルードする。
#include <afxrich.h>
326 :
デフォルトの名無しさん :2005/04/15(金) 20:23:47
CTreeViewについて質問があります。 現在TVS_SINGLEEXPANDのスタイルを設定して 展開されるノードを一つだけにしています。 しかし、Ctrlキーを押しながら左クリック 又はキーボードの矢印キーを使った時に 複数ノードが展開されてしまいます。 複数のノードを展開しないようにしたいのですが 誰かいい方法を知らないでしょうか? 教えて、エロイ人。
ヒント:HitTest
とあるモードレスダイアログが、MessageBoxで メッセージボックスのモーダルループにはいっているとして、 外部から、このようなモーダルループの状態かどうかを 判断することってできますか? どなたか、、
>>328 どうにかやればできそうな気がするが、果てしなく面倒なことになりそう。
>>328 pとあるモードレスダイアログ->IsWindowEnabled()
でいいんじゃない?
ダイアログを意図的にEnableWindow(FALSE)してる場合と見分けがつかないけど、
そんなことあんまりしないだろう。
331 :
デフォルトの名無しさん :2005/04/17(日) 22:43:25
ダイアログベースでリッチテキストコントロールを配置すると実行してもダイアログが表示されなくなるのはなぜ?
立地エディットは使う前に初期化しないといけません。 これに失敗してダイアログが表示されなくなりマンモス。 詳しくはMSDNに出てます。 AfxなんとかというのをInitInstanceかどこかに加えれば 良かった。
そーだったのか ありがとうございマンンコモス
MFCでpingみたいなネットワークの接続確認とか調べる方法ってどうやるのが良いのでしょう? ヒント的なものでも良いので。
335 :
デフォルトの名無しさん :2005/04/18(月) 09:35:42
msdnでafx云々を検索 出てきたものからそれらしいものを一個選んで書くだけ 解決コードにもならんレベルのものだぞ
リッチテキストコントロールを配置程度でM$DNを検索してさらに、 コードを足すなんてmfcって変だなー。 ふつーのGUIライブラリならペタペタ貼るだけちゃうんかと。
リッチテキストコントロールはいろいろと問題があるからなー
クラスライブラリ側が、特殊なコードとかパラメタをコンストラクタとかメソッド内に隠すべきでわ?
どんな問題があるのか調べてそんなこと言ってるのか?
>>331-333 みたいな会話が必要になること自体、超問題。
それらをうまくラップで隠せるのがクラスライブラリ。
さらに
>>340 は、それらのふつーの感覚や考える頭が破壊されて不憫だ。
MFCがマトモじゃないのは周知の通り。
だがそれはそれとして
>>337 は VB でもやっとけ。
>>341 俺の質問に答えてくれよぅ
とりあえず問題ありなリッチテキストコントロールは使わない。
もし使う場面が来たら自分でラップ出来ますのでお構いなく。
ってか今からならM$はMFCでラップ出来るはず
時の流れ(による問題)を調べロッテ
344は統合失調でつか?
AfxInitRichEdit MFCがおかしいんじゃなくて この程度が自分で調べられないのがおかしい
CString型に格納されているJISコード文字列をSJISに変換するには どうすればいい?unsigned long型のを変換できるライブラリは 見つけたんだけど・・・。
CStringにJISコード???
msdn no cruntime kannsuu de dekiruyo
>>346 プロセスごとのコンテキスト見て RICHED32.DLL ロードするだけの処理を
アプリケーションから態々呼び出さなきゃいけないなんてのは
設計の失敗としか思えないけどな。
プロセスのコンテキストがRICHED32.DLLとどのような関係があるのか説明して欲しいものだ。
353 :
デフォルトの名無しさん :2005/04/19(火) 12:18:30
>>347 COM で MultiLanguage オブジェクト(CLSID_CMultiLanguage ) 作って、
IMultiLanguage を QueryInterface で取得して、
IMultiLanguage::ConvertString で変換する。
354 :
デフォルトの名無しさん :2005/04/20(水) 03:06:01
ポップアップメニューのイベント処理を OnCmdMsgで処理しているのですが、選択した項目が2回連続で呼ばれてしまうです 原因、対処方法教えてください よろしくおねがいします
原因:二回呼ばれるように書いている。 対処法:一回だけ呼ばれるように書き直す。
デバッガで何処で呼ばれているかをチェックしてみたら?
357 :
デフォルトの名無しさん :2005/04/20(水) 10:52:04
CRichEditCtrlとCRichEditCtrlは同じものでつか?
358 :
357 :2005/04/20(水) 10:56:33
唐突に、「GetRichEditCtrl()」をコールしてるコードがあるんですが、 これはMFCの標準関数でつか?
>>357 どこをどうみても同じものにしか見えないが。
CRichEditViewとCRichEditCtrlでは?
>>358 CRichEditViewのメンバ関数
サンクツ
>>359 MFC超スペシャル初心者なんですが、
IMPLEMENT_DYNCREATE(C???View, CRichEditView)
というステートメントは何なんでしょう。
唐突にViewとCRichEditViewが出てきますが、
これはMFCのフレームワークであり、
ふーん、ViewとRichEditはデフォルトで定義されるんだな、
と読んどけば良いのかな。
361 :
360 :2005/04/20(水) 11:20:46
もう一つ、教えて下さい。 別のプロジェクトでコンパイル通すために、 CRichEditViewを用意しようと思いますが、 CDialogのリソースに「リッチ エディット」を貼っとけば良いのですか?
超スペシャル初心者がいきなりCRichEditViewですか
>>360 IMPLEMENT_DYNCREATEは単なるマクロだが
ちゃんと理解したければMFCのソースを読む必要があるよ
>>361 ダイアログで使いたければ貼っとけばいいけど
それはViewクラスではないよ
ヘルプ(MSDNライブラリ)インストールしてない?
364 :
360 :2005/04/20(水) 11:39:52
>>363 >それはViewクラスではないよ
では、CRichEditViewをnewして、CDialogに貼れば良いですか?
>ヘルプ(MSDNライブラリ)インストールしてない?
了解でつ。今からインストールしますです。
教える前に教えてわかるか相手かどうか考えよう
つか、人を選ぶような人は匿名掲示板に入って頂く必要ありません。
−−−−−−−−−−−−−−−−−−−−−−−−−− ∧_∧ ( ・∀・)< CRichEditViewをnewして、CDialogに貼るコード教えてキボン −−−−−−−−−−−−−−−−−−−−−−−−−−
368 :
367 :2005/04/20(水) 13:54:40
もしくは、 ダイアログにリッチエディットを貼っておけば、 CRichEditCtrl *cre=(CRichEditCtrl *)GetDlgItem(IDC_RICHEDIT1); で、クラスとして使えますか?
369 :
デフォルトの名無しさん :2005/04/20(水) 14:48:21
CRichEditCtrlクラスって文字の入出力や描画を行うクラスだから、 まさか文字入出力メソッドが無くてコントロールにSendMessageしなきゃならないんて筈はないよね?
Editコントロールさえ使ったことなさそうなふいんき
371 :
デフォルトの名無しさん :2005/04/20(水) 15:00:27
CStringの文字列のポインタの取り方教えて下さいでつ。
372 :
デフォルトの名無しさん :2005/04/20(水) 15:03:01
>>370 SetWindowText(value)出来ます田。
でも、追記はできないんでつね?
>>371 CString foo = "bar";
const char * p = static_cast<const char *>(foo);
374 :
デフォルトの名無しさん :2005/04/20(水) 15:47:22
>>374 >372だけ見ても、何を知りたいのか判らないのだが。
376 :
372 :2005/04/20(水) 16:30:14
RichEditCtrl->SetWindowText("aaa") で、文字を設定することは出来ましたが、 次に、 RichEditCtrl->SetWindowText("bbb") とすると、 前の文字が消えてしまいます。 どうか追記の方法教えて頂けないでしょうか?
377 :
デフォルトの名無しさん :2005/04/20(水) 16:40:22
aaaの後ろにカーソルを置いて キーボードの b のキーを3回押してみ
>>376 GetWindowText()で取得して、自前で追加、SetWindowText()で設定。
或いは、SetSel()で末尾を選択、ReplaceSel()で置換。
つーか、MSDNをちっとは読めや。
つーかまずCEdit辺りから始めた方が良いんじゃないかい?
MFCが一通り使えるようになるまで ずっとここで逐一質問し続ける気だろうか…
逐一回答お願いします
だから、教える前に教えてわかるか相手かどうか考えよう
一人が質問し続けようが、大勢の質問が殺到しようが、関係ないべ。 つーか382は不気味なレスやめれ。
383みたいなバカが出てくるとスレが止まっていいな。
そうだね、スレストのオカゲで静かになって良かったね。 ってヴぁか?
とにかくなんでも質問、ドンとこーい 自分で何が解かってないのが解かってないような質問は勘弁だけどな
質問が明確になったときには既に回答出てんだよ。
オマ、ふよー
>>386
何も塗りつぶさないブラシを作りたいのですが, CBrush nullbrush; nullbrush.CreateSolidObject(NULL_BRUSH); で出来ることはわかったのですが, これを CBrush nullbrush(NULL_BRUSH); //黒で塗りつぶされて失敗 みたいに初期化の時に出来る方法はありませんか?
失礼 × nullbrush.CreateSolidObject(NULL_BRUSH); ○ nullbrush.GetStockObject(NULL_BRUSH); でした.
二度間違えるなよ
VC.NETのプロパティウィンドウみたいな、リストになっていて 右側には文字列を入力できるコントロールはどう作ればいいんでしょうか?
一生懸命
リストの項目をクリックしたら 文字列を入力出来るようにエディットコントロールを サイズ合わせてぴったり重ね、 別のところをクリックしたら入力された文字列をリストに転送して エディットコントロールを隠す。 みたいな感じ
ListCtrlのカラム編集機能を使って、編集前と編集後のメッセージをトラップして頑張る。 #但し、その場合プロパティのようにコンボボックスにはできないけれど。
395 :
389 :2005/04/22(金) 16:39:10
うは,さらに間違えてる. nullbrush.CreateStockObject(NULL_BRUSH); だ. で,これを初期化の時に実現するにはどうしたらいいんですか?
>>395 ない。
どうしてもやりたかったら、CBrushから派生させたクラスを作って好きにすればいい。
397 :
デフォルトの名無しさん :2005/04/24(日) 11:40:14
質問なのですが、アプリがバックグラウンド状態の時にキー入力を受けるにはどうすればいいのでしょうか? 具体的にはキー入力を監視したいのです。
399 :
デフォルトの名無しさん :2005/04/24(日) 16:05:50
リッチエディットコントロールでマウスポインタが CFE_LINK 属性を もったテキストの上に来たことを知るには、イベントマスク EM_SETEVENTMASK に ENM_LINK を設定しておけば、EN_LINK メッセージとして通知してもらえると 思いますが、そのマウスポインタが CFE_LINK 属性のテキストの上から 外れたことはどのようにすれば知ることが出来るのでしょうか・・?
>>398 ありがとうございます。参考になりました
401 :
デフォルトの名無しさん :2005/04/25(月) 13:54:08
処理クラス(画面無し)でタイマー処理行いたいんですが、 タイマークラスみたいなのは使えるのでしょうか?
もしかして、MFCのCWnd::Timerってクラスとかに閉じるような用途では使い難い?
MFCだろうがSDKだろうがタイマーがやってることは同じ ウインドウのタイマーイベント
VCLならTTimerアイコンぽとぺたしてプロパティ設定するだけだし、 画面無い場合なら、ソースコードでTTimerをnewしたり、派生したり、 ふつーに使えるじゃん。
マルチメディアタイマ
メッセージ処理と同期して動かないとバカがバグ作る原因になるから、 WM_TIMERベースの方がいいと思う。
407 :
デフォルトの名無しさん :2005/04/25(月) 19:00:04
すみません、ビットマップをダイアログに描画したいのですが、 どのイベントかメソッドでBitBltしてやれば良いか、 エライ人教えて下さい。
画面なしやって言うてるのに。>406
…じゃなんで MFC 使うかな、ってのは置いといて、
>>401 Win2000 以降限定なら CreateWaitableTimer っちゅう API 使う手も。
407 WM_PAINTかOnPaint
デバッグ版では普通に動くプログラムが、リリース版では落ちまくり ってのは、どんな原因が考えられるかな?
漏れはその逆の挙動を示すプログラムのバグ潰しを今日してたよ。
ポインタがNULLであるかどうかをチェックしていないとか
変数の初期化漏れとか
415 :
デフォルトの名無しさん :2005/04/26(火) 13:08:55
>>409 サンクスでつ。クラスウィザードで、WM_PAINT→OnPaint内で処理入れたらおkでした。
で、さらにWM_PAINTを発生させるメソッドなんかありますでしょうか?
まさかメッセージでWM_PAINT送るなんてしたら、作り方変だし。
Invalidate
417 :
デフォルトの名無しさん :2005/04/26(火) 14:10:17
モーダルウィンドウで、自分を閉じたいだけなんですが、 CloseWindow()するとアイコンになっちゃうし、 DestroyWindow()するとエラー画面でるし、 結構難しいですね。
そうですね
>>417 PostQuitMessage()ではどうだろう。
420 :
417 :2005/04/26(火) 15:25:58
工工エエエ(´Д`;)エエエ工工 MFCでの書き方お願いします。
( ´д)ヒソ(´д`)ヒソ(д` )
422 :
デフォルトの名無しさん :2005/04/26(火) 17:29:23
SetTimer(1, 500, NULL)でデバッガが止まっちゃうんですが、 タイマー壊れたのかな。
423 :
デフォルトの名無しさん :2005/04/26(火) 18:51:31
SetTimerの最初の引数は、プログラム全体で固有値じゃないとダメですか?
なんでもええんちゃうん
ウィンドウ内でユニークであればいい ということがMSDNに書いてあるではないか。
CString temp; 〜〜 temp.SetAt(j , '\x20'); この処理でランタイムエラーが出るんだけど、何がいけないの?
427 :
426 :2005/04/26(火) 21:44:06
失礼。jはint型ね。
マニュアルを読まないのがいけない
>>422 タイマーイベントの溜まり杉じゃないかと。
ブレークポイント設定してない?
SetAtは確か デバックバージョンは文字列の長さチェックしてるけど リリースバージョンではチェックしてないとかだった気がする
文字列がセットされていないからアクセス違反
433 :
426 :2005/04/28(木) 01:39:22
>>432 それだった。tempが空だったからね。
下らない質問してしまった。
答えてくれた人たち、ありがとう。
ありがちな「解決した気になってる」パターンやね。
馬鹿だ、お前は
タイプライブラリを使って他アプリを操作したく思ってます。(COMのクライアントを作りたい) ClassWizardのオートメーションにラッパクラスを作ってもらい、オブジェクト宣言後に なんか必要ぽいからCreateDispatchし、何とかメソッドが実行できた、というのが現状です。そこで・・・ (1) 明示的なReleaseDispatchも必要か? (2) new, delete も併用すべきなのか? (3) 「VCによるクライアント作製」に重きを置いた、良いCOM文献は無いか? の3点で悩んでいる次第です。(3)に関しては、「COMとは」「COMコンポーネントを作る」 みたいな解説は幾つか見つけたのですが、「VCでクライアント作ろうぜ」てな感じの詳しい解説は 見つけられなかったのです。かろうじてMSDNのサンプルくらいでしょうか。 この辺りの事情に詳しい方、御教示願えますでしょうか?
437 :
デフォルトの名無しさん :2005/05/02(月) 11:45:42
CPaintDC dc(this)のdcから、HDCを取得できまつか?
>>437 CPaintDCはCDCから派生してるんだよ。
439 :
437 :2005/05/02(月) 13:04:01
thx!
>>438 dc.m_hDCでつね。
「m_」っていつも見落としちゃいますね。
>>436 1.COleDispatchDriverのクラス定義とデストラクタ見れ、明示的なReleaseはたぶんクラス破棄しないでインターフェイスだけ取り替えたい時だけっぽい
2.COle(ry作る時だけでいいんじゃね?
3.そんなのはしらんが、ActiveX関連なんかでも探してみれ
ちなみに俺はたいして詳しくない
コンボボックスに自分でパスとかを入力した場合に それをリストに追加するのは可能ですか できるならどのようにすればよい? 教えてください
エディットコントロールの部分に入力したものを リストに追加するということ?
443 :
441 :2005/05/02(月) 16:49:10
>442 コンボボックスの右のタグ(?)が伸びてる状態で 一番上のエディット部分に入力・・・ たぶんそうだと思います
追加するトリガさえ何とかすればテキストとってAddStringとか
445 :
441 :2005/05/02(月) 17:09:18
>444 キリ番おめです(ぉ トリガっていうと「追加」ボタンとかを付けて押されたら エディットに入った文字列を読んでAddString って感じでしょうか?
でなければEnterキーが押されたら追加とか。 ブラウザのアドレス入力なんかはこの形式だよね。
入力した文字を普通は読むだろうから そのときついでに
449 :
441 :2005/05/02(月) 17:43:30
>446 >でなければEnterキーが押されたら追加とか。 >ブラウザのアドレス入力なんかはこの形式だよね。 む、確かにそうですね Enterで追加となるとどうすればよいですかね
450 :
441 :2005/05/02(月) 18:37:15
結局、ボタンを使ってできました お早い対応ありがとうございました<(_ _)>
441は女
452 :
デフォルトの名無しさん :2005/05/02(月) 23:05:30
唐突に質問です。 CString の文字列を数値に変換したいのですが、 なにかいい方法はありますか? CString str = "13.2345"; この文字列をlong型などに変換して数値データとして扱いたいのです。
455 :
デフォルトの名無しさん :2005/05/02(月) 23:29:31
その場合、CString型のままではだめですよね? CStringからcharへと変換するのでしょうか?
>>455 LPCTSTRにキャスト
atol((LPCTSTR)str)
457 :
デフォルトの名無しさん :2005/05/02(月) 23:44:27
strtol strtoul StrToInt
458 :
デフォルトの名無しさん :2005/05/03(火) 00:02:58
str = "62.707317073171"; const char * csp = atol((LPCSTR)str); そしてTRACE("%lf\n",csp);で 0.000000 と表示されます。なぜでしょうか?
459 :
デフォルトの名無しさん :2005/05/03(火) 00:07:24
str = "62.707317073171"; long x= atol((LPCSTR)str); TRACE("%lf\n",x);
460 :
デフォルトの名無しさん :2005/05/03(火) 00:17:34
だめです。どうしても0.000000となります。 str = "12345.6789"; TRACE("%s\n",str); long x= atol((LPCSTR)str); TRACE("%lf\n",x); アウトプットは 12345.6789 0.000000
%lfなのになんでlongなの?
・キャストはいらん ・使うなら、_tstol
463 :
デフォルトの名無しさん :2005/05/03(火) 00:47:18
_tstol 定義されていない識別子です・・。
464 :
デフォルトの名無しさん :2005/05/03(火) 00:59:54
どうもlongだとうまくいかないので、全部dobuleにしましたところ、 なんとかうまくいきました。お騒がせしました。
なんでそうなるのかよく理解しといた方がいいよ。
>>463 #include <tchar.h>
>>464 なんだかatolの戻り値をdouble型の変数で受けていそうだ。
467 :
デフォルトの名無しさん :2005/05/06(金) 09:36:05
そういえば、MFCで(=Win32API直呼びでなくて)ポップアップメニューって作れるんでつか?
>>467 CMenu のインスタンス作って
CMenu::LoadMenu() でリソース読んで
マウスの右ボタン押されたら
CMenu::TrackPopupMenu() で表示。
469 :
デフォルトの名無しさん :2005/05/07(土) 01:00:42
CEditやCRichEditCtrlの中に記入されている文字列に対して ツールチップを表示するのはどうやっているのでしょうか。 イメージとしては、Visual Studio のソース・エディタの なかで、任意の文字列にマウス・カーソルをあてると、 変数の型とか関数の引数とかがツールチップとして出てくる アレを想定しているのですが。。 ひとつひとつのツールチップ表示対象位置に AddTool() して いる・・?んでしょうか?
470 :
デフォルトの名無しさん :2005/05/07(土) 01:12:39
471 :
デフォルトの名無しさん :2005/05/09(月) 02:03:45
タスクトレイのアイコンからメニュー処理したいのですが、 メッセージハンドラ(右クリック後)の先頭に SetForegroundWindow(); SetFocus(); TrackPopupMenu 最後にPostMessage(WM_NULL); という定説の流れでうまく表示はできるんですが、クリックすると数回に一回 OSそのもののメニューが同時に表示されます 理由、解決方法教えてください よろしくおねがいします
>>471 よくわからんが、TrackPopupMenuの前にWM_CANCELMODEでも
Postしてみたらどうだろう。
473 :
471 :2005/05/09(月) 16:04:06
>472 だめでした どうやら最初の SetForegroundWindowが悪さをしているようなんですが これを消すと、OSのタスクメニューがでないかわりに、アプリのメニューが 消えない現象がおこります。
474 :
デフォルトの名無しさん :2005/05/09(月) 17:58:20
class CMyDialog : public CDialog { void close(); } だとして、 そのCMyDialogのcloseメソッドからCMyDialogフォームを閉じたいときは、 どう書けばよいでつか?
476 :
474 :2005/05/09(月) 19:58:21
モーダルの場合を教えて下さい。
モードレスダイアログを閉じるにはDestroyWindow()だけで いいんですか?deleteしなくていいんですか?
>>478 モーダルの場合大抵
CMyDialog dlg;
if( dlg.DoModal()==IDOK ){ ... }
みたいにスタック上に割り当てて使う
そうだね
481 :
479 :2005/05/09(月) 22:38:54
読み違えちったスマソ。
>>479 はモーダルの場合
モードレスダイアログでdeleteを呼ぶべきかどうかは作成の仕方による。
new CMyDialog() を使っている場合に対してdeleteが必要
482 :
デフォルトの名無しさん :2005/05/10(火) 18:17:50
ダイアログの淵に色付けしたいのですが、簡単に書く方法ありまつか?
ダイアログをサブクラス化してWM_NCPAINTの処理を追加 簡単には説明できないが今ならもっといい方法があるかも
逆にXP対応が面倒な罠。
485 :
デフォルトの名無しさん :2005/05/11(水) 00:16:54
CRichEditCtrlで固定幅フォント(MS ゴシック)をフォントサイズ固定で 使っていますが、boldにしても固定幅がキープされる素敵な方法は ないでしょうか。当たり前ですが、boldにするとその分微妙にズレて しまうのです。orz
486 :
471 :2005/05/11(水) 04:29:32
471ですが、ここ数日 試行錯誤しているのですが 解決できません。 ご教授よろしくおねがいします
>>471 MS製品の動作を調べてみると、押した瞬間でなく離した瞬間にメニュー表示してる模様。
WM_*BUTTONDOWNの直後は
SetActiveWindow(hWnd);
のみ
WM_*BUTTONUPの方で
TrackPopupMenu
メニューを表示したらよいと思われ.
>>487 こんな時間にレスするなんてよほど暇で絶望的だな
DrawTextで45度回転させた文字を書くことってできますか? フォントで回転を指定しても、階段状に表示されるだけでフォント自体は回転されないんですが…。
>>482 取り敢えずで良いならOnPaintで枠を描くって手もある。
>>489 user.dllの関数にそんな描画を期待するなよ。
TextOut系でやるべし。
>>491 そうすると、クリップ処理とか自分でやれってことですかねぇ?
改行とか面倒臭そう…。
まぁ、出来ないのであれば仕方ないですけど。
493 :
471 :2005/05/11(水) 14:15:36
>>487 あなたは髪ですね
無事解決しました ありがとうございます!
ダイアログベースで作ってるんですが モードレスダイアログを作るにはどうすればよいんですか?
適当にインスタンスを確保したら、CreateWindow()してShowWindow()。
496 :
494 :2005/05/12(木) 13:09:11
何とか出せました ありがとうございます ShowWindow()をやってないのですが表示できたのは ダイアログプロパティで可視にチェックを入れたから、であってますかね?
497 :
495 :2005/05/12(木) 13:48:31
>>496 ああそうか、私は予めCreateしておいて後でShowするから意識してなかった。
リストビューの中のデータの編集方法がヘルプ見ても分かりません。 ご教授お願いします。
教授はできないが、ユーザに編集させたいのなら生半可な手間じゃないので覚悟が必要。
500 :
デフォルトの名無しさん :2005/05/12(木) 23:26:48
ダイアログベースにエディットボックスを貼り付けたのですが、 Ctrl+A(全て選択)が出来ません。 Ctrl+C(コピー)やCtrl+V(ペースト)は出来ています。 また右クリックでコンテキストメニューからの「すべて選択」は機能します。 Ctrl+Aを機能させる方法を教えてください。
メニューにCtrl+A(全て選択)を追加
時間の掛かる計算処理中にキャンセルボタンが押されたら中断するようにしたいのですが、 普通にボタンを押しただけではループが終わるまでボタンのクリックが発生しません。 VBでいうところのDoEventsみたいな処理はMFCではどうしたらいいでしょうか?
スッドレ
505 :
503 :2005/05/13(金) 14:12:11
スレッドですか。 敷居が高そうで勉強してなかったんだけど、 いい機会なんでちょっと調べてみます。 ありがとうございました。
>>503 MSDNで「アイドル ループ処理」を検索。
最も単純なのは、「時間のかかる処理」の最中にメッセージループを埋め込む。
こんなんでいいのかな? for (MSG msg; PeekMessage(& msg, NULL, 0, 0, PM_NOREMOVE); AfxGetThread()->PumpMessage());
>>507 MSDNのサンプルでは、PumpMessage()の戻り値の評価と、ループ終了後に
CMyApp->OnIdle()の明示的な呼び出しがある。
OnIdleを呼ばないと、コマンドインターフェースの更新が行われない気がする。
MFCベースで、自分で作ったGUI部品をGUI開発環境で使いまわすための方法っていうと、 COM/ActiveX以外に何かあります?
>>509 確かコンポーネントの追加かなんか(COMオブジェクトを追加する奴)で、
他プロジェクトからクラス単位でコピーを追加できるので、GUI部品を
CButtonとかCStatic とか適当ななもののサブクラスとして作成しておけば、
ダイアログエディタでCStaticとかを張って、
ウィザードでそのコントロールに当該のクラスの変数を追加、
ってな手順で再利用できます。
この場合そのクラス独自の初期化 OnSubclass あたりでやることになる。
>>510 どうもです。
コンポーネント ギャラリ って機能でしょうか。
Class Viewでのクラスの右クリックから「ギャラリへ追加」すると
クラス単位で部品化してくれるようですね。
ところでデフォルトで用意されてるコンポーネントは、
挿入時にダイアログが表示されて、いくつか設定が可能だったりしますが、
自前のクラスではそういう事はできないのでしょうか。
ありがとう。ここで聞こうとして、ソース見てたら間違いを見つけたよ。 ごめん。
CDialogとSetWindowPos( &wndTopMost...について質問〜 二つのCDialog?.Create( CDialog?::IDD, 0 )で作ったモードレスダイアログA,Bがあるとして、 Aで最前面にすると、取りあえず最前面になります。 そして、Bで最前面にすると、両方最前面になります で、問題はここからなんですが、 Bの最前面を解除すると、勝手にAの最前面も解けるんです。 何故でしょーか・・・ Spy++で見たところ、オーナーウィンドウが有るのが怪しいと思うのですが、 オーナーウィンドウ無しで作る方法が分からない…
514 :
513 :2005/05/16(月) 23:20:36
解決しますた。お騒がせしてすんません。
SDIで作ってるのですが エクスプローラーみたいにウィンドウ全体にリストコントロールが 表示されるようにするにはどうすればいいのですか? コントロールだからリソースにダイアログを作ってリストビューを貼り付けるのですか?
>>515 View を ListViewにすればいいんじゃない?
517 :
515 :2005/05/17(火) 17:18:12
ListViewにしてみました が、どこでリストビューコントロールを作ればいいのかわかりません 申し訳ないですが教えてください
>>517 ListViewならもう貼ってあるんじゃない?
GetListCtrlつかって操作できるよ。
手動でやりたいなら、CWndのメンバーに、CListCtrlを
置いて、OnCreate 内でCreateすればいい。
大きさは適当でいいよ。
そして、OnSize 内で、MoveWindowかSetWindowPosで
クライアント領域いっぱいにリサイズする。
519 :
デフォルトの名無しさん :2005/05/17(火) 18:07:50
VC始めたばかりの初心者です クラスのメンバ変数にCObArray型の変数を追加し、 ある関数でその変数のAddメソッドで要素を追加すると 中の方のASSERT_VALID(this)でエラーが発生してしまいます メンバ変数ではなく関数内で宣言したCObArrayの変数だと出ません CObArray型の変数をメンバ変数にすることはできないのでしょうか? private: CObArray _array; ... _array.Add( new CBitmap() ); <- エラーがでます -------------------------------------------- CObArray array; array.Add( new CBitmap() ); <- 上手くいきます
520 :
デフォルトの名無しさん :2005/05/17(火) 18:10:31
VC始めたばかりの初心者です クラスのメンバ変数にCObArray型の変数を追加し、 ある関数でその変数のAddメソッドで要素を追加すると 中の方のASSERT_VALID(this)でエラーが発生してしまいます メンバ変数ではなく関数内で宣言したCObArrayの変数だと出ません CObArray型の変数をメンバ変数にすることはできないのでしょうか? private: CObArray _array; ... _array.Add( new CBitmap() ); <- エラーがでます -------------------------------------------- CObArray array; array.Add( new CBitmap() ); <- 上手くいきます
エラーがでます
アサートが出た場合は、それがどこで出たのかが重要なのだ。
523 :
500 :2005/05/17(火) 23:43:56
亀ですみません。
>>501-502 ありがとうございます。
501氏の方法で解決しました。
524 :
デフォルトの名無しさん :2005/05/18(水) 10:02:32
多分標準ライブラリみたいですが、 >ビルド : 警告 : ビルドに失敗しました (またはビルドの方法がわかりません) '〜\tabstrip.cpp' みたいな、エラーの消し方教えて下さい。
それはMFCじゃなくてVCかIDEの問題な気がしないでもないが
WindowsXPで2画面のプログラムを作っているのですが、 MoveWindowで(0,0)に移動しようとすると2画面目に行ってしまいます。 (1,1)ですと1画面目に移動するのですが…。 これってやりかたが悪いんでしょうか。 ちなみに、SXGAで(1280,0)とすると、正しく2画面目に表示されるんですが。 うまいこと(0,0)に移動させる方法はないですか?
>>526 よくわからんのだが、、、
こっちで試した限りじゃ、0,0でプライマリの左上にちゃんといくが・・・
ドライバのバグだったりして。
>526 ドライバのバグって前提で考えると、 SetWindowPos使ってみるとか、直前に(1,1)に移動してからやってみるとか。
便乗質問ですが、 ポップアップメニューが出るときに、 SetForegroundWindowしてるために、画面が最前面に出てきます。 これを防ぐにはどうしたらいいんでしょう?
>>530 SetForegroundWindowしない
>>527 こちらでやっているのは、XGA×2の場合、2048×768のダイアログを表示して、
そこからボタンを押した時に出すダイアログを(0,0,1024,500)にしようとすると
2画面目に出てしまうんですよねぇ…。
MoveWindowでもSetWindowPosでも一緒です。
ちなみに、2048×768のウインドウを表示した状態で、Windowsキー+Dで全最小化
して、「元のサイズに戻す」と、開始位置が2画面目の方にいってしまう場合もあります。
ついでといっては何ですが、こういう現象も出ています。
まず、SXGA×2のサイズのダイアログを表示した場合、タスクバーの上に表示されます。
(固定・隠さない・手前に表示設定)
ところが、XGA+SXGAという画面構成にした場合、必ずタスクバーが前に来ます。
画面サイズが同じ場合と違う場合で何故こういう現象が起こるか謎です。
何か知っていらっしゃる方がおりましたら教えてください。
ちなみに、WindowsXP+VC++6 SP6です。
APIスレの方がよくねえか?
マイナーな話題は適当な所で切り上げてください。 他の人には関係ない話題だし
そうだな。 しかもビデオディスプレイ付属のドライバの 専用ユーティリティのオプション設定な気がする
536 :
532 :2005/05/20(金) 19:14:41
そうですかぁ。 もし良かったら誘導お願いします。<すれ違い ちなみに、 Intel845G+MATROX G400の2画面 MATROX G400の2画面 MATROX G450の2画面 で同様の動きをするので、ビデオドライバーとは関係ないのかなぁ?って気が するんですけどね…。 一応、付属CDのドライバとダウンロードした最新ドライバも使ってみました。
その時にSpy++で見るとWindow位置どうなってるのさ
538 :
530 :2005/05/20(金) 20:17:11
>531 いや、SetForegroundWindowしないとポップアップが消えないんですけど。 SetForegroundWindowはポップアップを消すために必要なのかと。
トレーアイコンに直結したウィンドウは透明にしとけ そして別のやつを見えるように出しとけ
こ こ は M F C ス レ だ
カスな質問ですが、AppWizardの最後の基本クラスの設定で CListView CTreeView CScrollView の3つはCViewと何が違うんでしょうか・・・?
その質問を書き込んだソフトに全部あるんじゃないのか
>>541 MSDNに書いてある
それでわからないなら本買え
544 :
デフォルトの名無しさん :2005/05/21(土) 19:34:24
mfc70.dll とか mfc71.dll って、 マイクロソフト社(US/JP)のダウンロードセンターには置いてないんですか? いちおう検索かけてみたのですが見つかりませんでした。 VS2003 で作ったソフトを配布したのですが、 スタティックリンクでビルドしなかったので、 ユーザー環境で起動不能が続出し、集中砲火を浴びてしまいました。 ( 配布してから気づいた... )
>>545 うーむ、たしかにそれはそうなのですが。
別に、配布手段が無いとか、配布コストがかかるとか、
インストーラ作るのがめんどくさいとか、
そういう問題は、まったくありません。
ただ、MFCのようなライブラリは、
マイクロソフトから手にいれてもらうと、
ユーザーさん達が「ちょっとだけ安心」かな、
と、思ったのですよ。
リビルドしようかな,,,
544=546です。 VC6とかのときは、普通に MFC42.dll があるから、 ダイナミックリンクでビルドしておりましたが、 VS2002 とか VS2003 の VC だと、 スタティックリンクしてビルドするのが常識なのですか??
>>547 スタティックリンクじゃなくて、スタティックライブラリだった。
549 :
デフォルトの名無しさん :2005/05/21(土) 20:18:50
CFileFindを利用したプログラムを作成したのですが, メンバ関数GetFilePath()の挙動がおかしいことがありました. たとえば,フォルダ構造が C:\管理表 - 01.txt - 02.txt のとき, 「C:\管理表」フォルダを検索対象とすると,GetFilePath()で得る文字列は 「C:\管理表\01.txt」「C:\管理表\02.txt」ではなく, 「C:\管理表01.txt」「C:\管理表02.txt」となってしまうのです. ググってみると,MFCのバグらしく, フォルダ名末尾の「表」という文字に「\\」と同じコードが含まれているのが 原因らしいのですが,どのように解決したらいいのでしょうか. よろしくお願いします.
>>549 MFCのソースついてるから自分で好きなように
551 :
549 :2005/05/21(土) 21:13:09
>>550 ソースが付属されているとは知りませんでした.ありがとうございます.
\Microsoft Visual Studio\VC98\MFC\SRC\FILEFIND.CPP
を書き換えてみました.
しかしなにぶんMFCを再コンパイルする方法がわかりません.
教えていただけませんか?
ちなみにCFileFind::GetFilePath()をこんなふうに↓書き換えてみました.
(前)
CString CFileFind::GetFilePath() const
{
〜省略〜
if (strResult[strResult.GetLength()-1] != '\\' &&
strResult[strResult.GetLength()-1] != '/')
strResult += m_chDirSeparator;
〜省略〜
}
(後)
CString CFileFind::GetFilePath() const
{
〜省略〜
if ( _ismbblead( strResult[strResult.GetLength()-2] ) ||
strResult[strResult.GetLength()-1] != '\\' &&
strResult[strResult.GetLength()-1] != '/' )
strResult += m_chDirSeparator;
〜省略〜
}
552 :
549 :2005/05/21(土) 21:19:29
あ 改変したmfcのライブラリってプログラムに同梱配布してもいいのでしょうか? 改変したライブラリなしでは,配布先のWindowsにおいて正しい挙動を望めませんよね・・・
553 :
549 :2005/05/21(土) 21:24:35
すいません.
>>552 の疑問については自己解決です.
改変MFCライブラリをスタティックリンクすればいいのですね.
>>551 の疑問は解けていないので,わかる方はよろしくお願いします.
継承とか知らないんだろうか? ソース見るとm_strRootから作ってるから CFileFind::GetRoot呼べばなんとかなるでしょう。
555 :
549 :2005/05/21(土) 21:41:27
>>554 他のプログラムでも同じクラスを使う可能性を考えていたので,
モトから正すことばかり考えていました.
とりあえず,自前ソースに同等の処理を書くことにします.
ありがとうございました.
持ってきた文字列を自分で処理すればいいのに なんでライブラリのせいにするかね・・・
でも知らずに使ってるとはまるから バグは報告してもらうと助かる
ごみ箱を空にする方法を教えてください
SHEmptyRecycleBin
system32にあるiphlpapi.dllっていうIP使用に関するライブラリを使いたいんだけど、 どうやってリンクすればいいんでしょうか? \MFC\Libにあるライブラリじゃないから、設定のリンクでiphlpapi.dllを 加える事は出来ないのでしょうか?
>>560 >\MFC\Libにあるライブラリじゃないから
それが解っていてこのスレで訊く理由は?
>>560 インポートライブラリをリンクすればいいだけ
563 :
デフォルトの名無しさん :2005/05/22(日) 13:51:41
MFC で SDI スタイルの印刷アプリを作っています。 現在のメインウインドウの状態が、 普通のウインドウか、印刷プレビューのウインドウ どちらなのかを、知る方法はありますでしょうか? 目的はといいますと、 通常は、ファイルのドラッグアンドドロップを受け付けて、 印刷プレビューの場合は、それを受け付けないようなアプリを作りたいのです。
ダイアログベースアプリで、本体の部分をドラッグ&ドロップ することによってウィンドウを移動させたいのですが、 どうすればいいのでしょうか?
現在IEで開いているページのアドレスの取得方法を教えてください
IEで開いているというのはIEのコンポーネントを使った自作の アプリケーションのこと?それともIEそのもの?
IEそのものです。
IEからアプリへURLをD&Dじゃだめなんだろうか? それかIEを右クリックでコンテキストメニューとか
572 :
デフォルトの名無しさん :2005/05/24(火) 17:20:17
IEのウィンドウハンドル取って、(もしくは自分でIE開いてプロセスIDからウィンドウハンドル取って) その下層にあるExplorer_server取得。 Explorer_serverからIWebBrowser2Ptr取得して、 GetLocationURLでOK
573 :
572 :2005/05/24(火) 17:21:15
IWebBrowser2Ptrを得るなら、SHDocVw::IShellWindowsPtrからの方が 簡単だと思うけど。その代わり、IEとエクスプローラの区別が必要だけど
575 :
530 :2005/05/24(火) 19:44:19
>539 やってみましたが、残念ながらだめでした。 画面の構成が悪いんでしょうか? A(非表示)→B(モーダル、表示) ↓ C(モードレス、非表示) Cでポップアップの処理をしてます。 Create(IDD_xxx,NULL)でCダイアログを作っています。 Cをモーダルにもしましたが、 どうしてもBが前面に出てきます。
ttp://www.simeji.com/bun/icmpecho.htm ↑ここを参考に、icmp.dllから関数を呼び出して利用するプログラムを作ってます。
icmp.dllロード→IcmpCreateFileは出来たのですが、
以下の「cnt = SendEcho〜」の部分で関数呼び出しエラーが出て、プログラムが止まってしまいます。
SendEcho = (SENDFUNC)GetProcAddress(hInstDLL , "IcmpSendEcho");
cnt = SendEcho(hIcmpFH , *(IPAddr *)(&m_dlg_ping.m_IPAddr) , request_data,
sizeof(request_data) , pipopt , reBuff , sizeof(reBuff) , m_dlg_ping.m_timeout);
以下のように定義してます。
typedef DWORD (*SENDFUNC)(HANDLE , IPAddr , LPVOID ,
WORD , PIP_OPTION_INFORMATION , LPVOID , DWORD , DWORD);
引数に関しては、
SENDFUNC SendEcho; (DLLのIcmpSendEcho関数へのポインタ)
m_dlg_ping.m_IPAddrはCIPAddressCtrlクラスで、IPアドレスを取り込んであります。
m_dlg_ping.m_timeoutはDWORD型で、TIMEOUT値を設定してあります。
他は、一番上のリンク先の通りです。
IcmpSendEchoは、MSDNでは以下のようになっています。これに従って、typedefしました。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/icmpsendecho.asp 長くなってスイマセン。
一体どこを直せばいいのか考えて、息詰まってます。
助言お願いします。
>>577 気になった点を2つ。
・GetLastErrorは何を返すか。
・typedef DWORD (WINAPI *SENDFUNC)(HANDLE , IPAddr , LPVOID ,
WORD , PIP_OPTION_INFORMATION , LPVOID , DWORD , DWORD);
ではないのか。
579 :
577 :2005/05/24(火) 23:08:41
>>578 例の関数呼び出しエラーが出るコードの直後、GetLastError()は
何故か正常終了の0を返します。
関数定義でWINAPIを入れても、同様に関数呼び出しエラーが出ます。
一晩寝て、明日また考えてみます。
580 :
575 :2005/05/24(火) 23:21:00
>576 Create(IDD_xxx,NULL)でも親子関係があるってことですよね。 (NULLを指定すればいいのかと思っていました) 親子関係なしのダイアログはどうやってつくればいいんでしょう? CreateWindow?
>>580 なるほど、MFCだとNULLいれると親が確定するのか。
Create(IDD_xxx, GetDesktopWindow()) でどう?
582 :
デフォルトの名無しさん :2005/05/25(水) 02:50:52
クリックとダブルクリックを識別する方法を教えてください
>>583 何がわからないんだ。
ペインの大きさ指定で
そう
そう
>>582 メッセージが違う
ダブルクリックが来る時はその前に
シングルクリックも一回来るのはわかるよな?
クリックというメッセージは無いけどね
587 :
584 :2005/05/25(水) 11:23:50
>>583 リンク先を見るまで質問を勘違いしていた
そのリンク先に対しての質問なのね。
左から数えて何番目という指定だから
複数も何もない。
コマンドIDは押したときに来るIDだから自分で決める
コントロールIDも自分で決める、他と重複しないようにすればいい
両方ともリソースIDで先に番号振っておけばID_xxが使える
VC++6.0ダイアログベースで以下のようなプログラムを 組んだんですが、デバッグ時には動くのですが リリース時にAccessViolationで落ちます リリース時に落ちないようにするにはどうすればいいでしょうか? VC++.netだと落ちずに動作します。 概要:ダイアログからスレッドを起動し、スレッドからダイアログへメッセージを 送信し、ダイアログの表示を変更する ダイアログ側 onBtn(){ CThread *p = (CThread*)AfxBeginThread(RUNTIME_CLASS(CThread),0,0,CREATE_SUSPEND,NULL) ↓グローバル変数へウィンドウハンドルを渡す g_hWnd = m_hWnd; p->ResumeThread(); } getMessage(){ ここでメッセージを受け取って処理 } スレッド側 Run(){ SendMessage( ユーザー定義Msg, g_hWnd, 0, 0); ←一回は動作する SendMessage( ユーザー定義Msg, g_hWnd, 0, 0); ←二回目でエラー PostQuitMessage(0); return CWinThread::Run(); }
>>588 ユーザー定義メッセージの型やメッセージマップの書き方が正しくないんじゃない?
×ユーザー定義メッセージの型 ○ユーザー定義メッセージハンドラの型
591 :
575 :2005/05/25(水) 20:24:48
>581 できました!! どうもです!!
592 :
588 :2005/05/25(水) 20:26:50
確かにVC++6.0の時は afx_msg void test(); って書いてコンパイルが通るんだけど VC++.netの時は afx_msg LRESULT test(WPARAM wp, LPARAM lp); と書かないとコンパイルが通らないです。 メッセージマップはどちらもON_MESSAGE(ユーザー定義MSG, メッセージハンドラ) とかいてます。 VC++6.0が手元に無いのですぐに確認できないですが、明日確認してみます。 どうも、ありがとう。 デバッグとリリースで動作が違うのは、そういうものなんでしょうか? リリース時でも MTでなく MTd をリンク?するようにしたら動作するので。
>>592 ON_MESSAGE に渡すパラメータは
LRESULT f(WPARAM, LPARAM);
のシグネチャを持たなければいけない。
void f() を渡したいときは
ON_MESSAGE_VOID を使いなされ。
>>593 ON_MESSAGE_VOIDを使用したところ
void func();のメッセージハンドラが無事作れました。
重ねがさね、どうもありがとう。
ところでこういうのってどうやって検索してますか?
ヘルプにも記載されてないみたいだし
(なもんで、afxpriv.hのインクルードがなかなか解らなかった)、
ON_MESSAGE_VOIDでずばりググっても3件しかヒットしないんですが。
面倒ならスルーしてください。
>>594 ON_MESSAGEの定義を見れば受け取れる型はわかるのでその時点で諦めてメソッドのシグネチャを修正する。
長ったらしいON_MESSAGEを入力するのが面倒なのでON_Mまで入力して後補完させると幸運にもON_MESSAGE_VOIDが出てくるのでなんじゃいなと思って調べる。
運に頼らずこれを見つけられるやつはそうそういないだろう。
596 :
583 :2005/05/25(水) 23:00:31
>>587 >両方ともリソースIDで先に番号振って
先に決めるとありますが、コンボボックスのIDはいつどこで決めるんですか?
後、セパレータの位置はどうやって求めるんでしょうか?
597 :
594 :2005/05/25(水) 23:01:37
>>595 なるほど。そういうのもありますね。
参考になりました。
COMまわりのことです。
ClassWizardのオートメーションタブにタイプライブラリのヘッダを作ってもらった
のですが、定数に関する宣言が無いのです。
「#import に作ってもらった時はenumしてくれてたのになあ・・・」と思ったら
ttp://www.athomejp.com/goldfish/mfc/ole/excelexec2.asp にも同様な記述がありました。
#import してできた .tlh から定数部分だけ拝借すればとりあえずは良いのですが、
あまりスマートな方法に思えません。どう対処するのが正統な方法なのでしょうか?
AppWizardで基本クラスをCListViewにしてSDIアプリを作ったのですが カラムのヘッダをクリックしてソートしたいのですが ダイアログにListCtrlを貼り付けた場合はClassWizardでメンバ関数を作れますけど 今回の場合オブジェクトがないので作れません(と思う) 基本クラスをCListViewにした時OnColumnclickみたいなメンバ関数はどうすれば作れるのですか?
601 :
600 :2005/05/26(木) 11:16:40
>>599 ごめん、IDEはどれ?
2003だと普通にLVN_COLUMNCLICK とか選択して
メンバー作れるわ・・
602 :
599 :2005/05/26(木) 11:28:16
OnNotifyで登録しようとしてもコントロールの子の識別子に入れるべき オブジェクトIDが存在しない(と思う)ので入れられないのです 当方VC++6.0です
自分で呼べばいいじゃん クラスウィザードにやらせたいってこと?
CListView ってListViewコントロールそのものじゃなかったっけ。 だったら ON_NOTIFY_REFLECT で自分が発行する Notify を 処理できそうな気がする。
605 :
599 :2005/05/26(木) 11:53:19
あ、勘違いでした OnNotifyじゃなくてON_NOTIFYでした >603 いえ、自分で呼べばいいのですがよく分からなかったです けっきょく>604のおっしゃるようにON_NOTIFY_REFLECTでできました ありがとうございました
606 :
デフォルトの名無しさん :2005/05/26(木) 14:00:53
関連づけられているファイルやフォルダのアイコンの取得方法を教えてください
マルチポスト
こんばんわ 質問ですが、 MFCで.xlsファイルを作成・操作する方法はどのようにすればいいのでしょうか? 一般的にどのような方法が使われていますか?
.netから6.0に移植したいのですが、 リソースの移行は可能でしょうか? とりあえずrcファイルをコピーしてみましたが駄目でした。 clw(だっけ?)などを一度削除してみようかなと思っています。 .netはバグが多すぎませんか?嫌になりました。
610 :
609 :2005/05/26(木) 22:47:46
とりあえず6.0同士ではできました。 プロジェクト名を変えて、clw等を消して再読み込み?しました。 .netでは月曜に試してみます。 注意点あればお願いします。
internal error でコンパイルできないのは2003で減ったけどなあ
612 :
デフォルトの名無しさん :2005/05/27(金) 11:01:04
VC++6でつが、トグルボタンはありまつか?
>>608 ClassWizard から EXCEL9.OLB を開いて Excel クラスを作成。
でも、バージョンも何も書かずに訊いて回答が得られると思う人には
無理でしょうから、.csv でも書いとけ。
チェックボックス(CButton)では如何?
BS_PUSHLIKEなチェックボックスやラジオボタンでどうか
VC++.netですが、私もトグルボタン超ほしいです 普通のボタンでSetState()を使ってみましたが、 上手くトグルしてくれませんでした・・・
全然上のレス見てないのか・・・
618 :
616 :2005/05/27(金) 11:44:52
まことにすみませんでした・・・ 回答出てるとは気づきませんで・・・
619 :
612 :2005/05/27(金) 13:05:22
トグルボタンがあるということでつか?
ODBCでmdbファイルをCRecordsetクラスで扱ってるのですが、 mdbファイルの位置を固定しなければなりません。 可変にするにはどうしたらいいんでしょう? レジストリに登録でしょうか? また、CRecordsetよりもCDaoRecordsetの方が便利ですが、 Microsoft Jet データベース エンジンとやらがない環境でも動くんでしょうか?
622 :
612 :2005/05/27(金) 13:35:53
チェックボックスやラジオボタンじゃイヤン
BS_PUSHLIKE入れてやってみたのかよ
I_LIKE_ENKA
>>620 | mdbファイルの位置を固定しなければなりません。
固定しなくてもいい。
lpszConnectでいろいろ指定できる。
| Microsoft Jet データベース エンジンとやらがない環境でも動くんでしょうか?
無いと絶対動かない。
626 :
620 :2005/05/27(金) 16:02:09
>625 >lpszConnectでいろいろ指定できる。 確かにそうですが、質問の意図はアプリ実行時にlpszConnectで指定したところに mdbを固定しないといけないですよね?という意味です。 それに対する回答でしょうか?
627 :
デフォルトの名無しさん :2005/05/27(金) 17:28:03
CStaticのクリックイベントって発生しないんでつか?
SS_NOTIFY 入れてないとか
って、ここはMFCスレか。 SS_NOTIFY (VC++のリソースエディタなら通知をtrue) にすれば来ると思うよ
631 :
620 :2005/05/27(金) 18:47:40
>625 私はあらかじめデータソースをコンパネで作って、 ClassWizardでそのデータソースを指定してCRecordsetクラスを作っています。 cppファイルのほうには、 CString rs2::GetDefaultConnect() { return _T("ODBC;DSN=testDs"); }
632 :
620 :2005/05/27(金) 18:56:23
(つづき) となります。 データソース作成時にmdbの位置を指定して作成するので、 おそらくそのせいでmdbファイルの位置が指定されてしまうのだと思います。 データソースをいじらないといけないのでしょうか? それとも他の方法が?
ゆーずーきかんやっちゃな
634 :
デフォルトの名無しさん :2005/05/27(金) 19:23:14
CComboBoxで、プロパティでリスト足しても実行時に追加されないんでつね。 中々分かり難いでつ。
635 :
634 :2005/05/27(金) 19:37:50
あれ、CComboBoxにAddStringしてもドロップダウンしない... クリック時に自分でドロップダウンしてやる必要あるのか?????
超FAQの予感
ConnectStr.Format(_T("ODBC;DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=%s"), nullpo);
638 :
620 :2005/05/27(金) 20:41:24
>637 なるほど。 あとはmdbファイルの位置を取得すればいいわけですね。 ありがとうございます。
639 :
620 :2005/05/27(金) 22:45:41
さらに質問で恐縮ですが、 ファイル検索で目的のmdbファイルのパスを取得するつもりですが、 予備などの理由で同名のファイルが他に存在する場合、判別できないですよね。 なるべく置き場所に制約をつけたくないのですが、 他に同名のファイルがある可能性を考えると、 フォルダ名などで区別できるようにしないといけないのかなぁと思っています。 一般的にこういう場合はどうするんでしょう? レジストリに登録でしょうか。レジストリにあまり触れたことがないのですが。
>>639 明らかにMFCの問題じゃないのでどっか行ってください。
そういう外部仕様的な問題は各解決方法の利点欠点を洗い出して関係者で話し合って決める事。
>>639 どうでもいいが、あんたホンットにレジストリ好きだな。
642 :
デフォルトの名無しさん :2005/05/28(土) 09:49:05
>>634-635 の超FAQもヨロ
拡張タブのドロップダウンを許可する、をオンにしてもダメでつぅ
>>642 ダイアログエディタ上でリストのサイズを設定したか?
[ ▼]
↑
クリック
644 :
639 :2005/05/28(土) 10:27:34
>640 そうですね。すみません。いろいろ教えて頂いてありがとうございました。
今、VC++6.0で MFCを利用してDLLを作成しているのですが、 .odlファイルでenum等を、外部からの参照可能にする際、 helpstring に2バイト文字を埋め込む事はできないのでしょうか? 1バイト文字は以下の様にすれば問題ないのですが、 typedef [public, helpstring("RS-232C communication receive data type.")] enum { [helpstring("Data type as \"String\"")] rtString = 0, [helpstring("Data type as \"Byte()\"")] rtByteArray = 1, } RS232_ReceiveType; これを例えば typedef [public, helpstring(L"RS-232C から受け取るパケットの型を設定します。")] enum { とすると syntax error が発生してしまいます。 最悪英語でも良いのですが、良い方法をご存じの方が居ましたら教えてください。 よろしく御願いします。
Lを外す
ttp://www.interq.or.jp/jazz/iijima/mfc/iijima/14tabctrl.html を真似て、タブコントロールを使ったプログラムを書いてます。
今まで、タブページを2ページにして通常に動作していました。
で、3ページ目を加えようとして、
○新しいダイアログボックス(IDD_DIALOG3)を作成
○これに対応するクラス(CDlg3)を作成
○タブコントロールの初期化(上のHPの(4)-1部分)に3ページ目の記述
○親ダイアログのクラス宣言にCDlg3 m_dlg3を追加
(今まで通常に動作していたCDlg2 m_dlg2の次行に)
・・・と行い、「m_dlg3.Create(IDD_DIALOG3 , this);」を加えようとして異変に気付きました。
「m_dlg3.」と入力した際、利用できる関数一覧?みたいなのが表示されるのが
普通ですが、これが表示されませんでした。(クラス宣言内でCDlg3 m_dlg3は確かに記入したのに)
で、この「m_dlg3」にマウスポインタを合わせても、通常は表示される変数の情報も表示されません。
嫌な予感がしつつ、追加作業を進め、コンパイルしてエラー・警告ともに0。
しかし、実行すると親ダイアログも何も表示されず、OnInitDialogの段階で既に問題が起こっている様子。
デバッグ実行すると、アクセスバイオレーション。
多分、自分がどこかで見落としているのでしょうが、どうにも原因が分かりません。
何か気付いた点があれば、ご教授下さい。宜しくお願いします。
インテリセンスと実行時エラーにはなんの関係も無い。
>>647 プロジェクトコピーして作るとよくそういうエラーが出る。
原因不明のエラーの場合は中間ファイル消してリビルドだな
650 :
647 :2005/05/29(日) 10:53:56
>>648 あれが出ない時って、大抵定義段階でミスって認識されていない
変数を使おうとしている場合、だと勝手に思ってました。
勉強不足でした。
>>649 指摘通り、USBでコピーしたプロジェクトでした。
その方法で無事に解決し、実行出来ました。
ありがとうございました。
時々ピンポイントな解決策を提示する人が居る時は、ああこのスレ役に立ってるんだなと思う
ある変数を一時的にシリアライズ化し、後で元に戻したいのですが うまくいきません。 int x = 1234,y = 0; CMemFilemem; { CArchivearS1( &mem, CArchive::store ); arS1 << x; } // ここで処理いろいろ { CArchivearL1( &mem, CArchive::load ); arL1 >> y; } ↑の処理実行後にy=1234となってほしいのですが、実際は 「無題のファイルの末尾以降にアクセスしようとしました」 とエラー表示してしまいます。 一体何処がいけないのでしょうか?
書き込み後にmemのSeekしなきゃ、 ファイルポインタがファイル末尾のまんまだと思う。 と日記には書いておこう。
シリアライズ化・・・?
655 :
652 :2005/05/29(日) 17:54:55
>> 653 ありがとうございます、↓で解決しました。 mem.Seek( 0, CFile::begin); CArchive自身がポインタもってるわけではなく、ただのラッパーだったのね。 >> 654 本当はこれはフレームがビューを切り替える時に、ある程度の情報を引き継ぐ のが真の目的でしたが、質問しやすいように簡略化させて頂きました。 本当は↓こんな感じです arS << x; → pOldView->Serialize(arS); arL1 >> y; → pNewView->Serialize(arL);
試してないけどソース見たら CArchive::Flushでもよさそうな気がする。
657 :
デフォルトの名無しさん :2005/05/29(日) 23:12:17
VC6.0でエディットボックスを作成する際、キー入力を半角英数に固定することってできるんですか。 大文字固定にはできるんですが。
VC6.0じゃなくたって出来るよ。
659 :
デフォルトの名無しさん :2005/05/29(日) 23:35:22
不要なキー入力を弾く。
661 :
デフォルトの名無しさん :2005/05/29(日) 23:59:05
エディットボックスのプロパティから大文字固定はできますが、不要なキー入力をはじくってのもプロパティからできるのかな。
プロパティだけに頼らなきゃ何も出来ないなら、今すぐプログラムなんかやめちまえ
コピペにはなかなか勝てないんだけどな
プロパンティ
>>662 これからはオブジェクトをポトペタしてプロパティを設定することをプログラミングというのですよ。
いつの間にか日本人にとって寿司=回転寿司になってしまったように。
キー入力をはじいてもコピペされるだろう。 あとIMEで日本語入力はどうなる?
プロパティってのはIDEのものだけを指すのでなく、クラスの属性だろ? 662は今すぐプログラムなんかやめちまえ
脳味噌のしわが無い667は人間なんかやめちまえ
( ゚д゚) …
ユーザー拡張機能 デフォルトの DDX/DDV 機構を拡張するには、以下の方法があります。 新しいデータ型を追加する。 CTime 新しいデータ交換ルーチン (DDX_???) を追加する。 void PASCAL DDX_Time(CDataExchange* pDX, int nIDC, CTime& tm); 新しい正当性評価ルーチン (DDV_???) を追加する。 void PASCAL DDV_TimeFuture(CDataExchange* pDX, CTime tm, BOOL bFuture); // make sure time is in the future or past 正当性評価ルーチンに任意の式を渡す。 DDV_MinMax(pDX, age, 0, m_maxAge);
671 :
デフォルトの名無しさん :2005/05/30(月) 11:50:59
>>643 IDEでリストのサイズを設定できるとこ無いですが...
SetWindowPosでサイズ設定でつか?
コンボボックス びろーん の検索結果 約 9 件中 1 - 7 件目 (0.24 秒) ありがちFAQ ... コンボボックスの「びろーん」の長さを変更できません。 下向き三角の上にカーソル を持ってくると、カーソルが上下矢印に ... このとき左クリックすると、この「びろー ん」の長さを調節するモードになります。 ちなみにコンボボックスのタイプを「 ... www.kab-studio.biz/Programing/Codian/Basis/03.html - 10k - キャッシュ - 関連ページ コンボボックスのリスト部分を表示するには? ... コンボボックスを実装しているのですが、コンボボックス左端の 「▼」ボタン を押してもドロップダウンされず、 コンボボックスの下に黒い線が表示される ... ダイアログエディタ上で▼をクリックして、リスト部分を びろーんと下に広げていますか? ... homepage1.nifty.com/MADIA/ vc/vc_bbs/200410_04100029.html - 5k - キャッシュ - 関連ページ
ビローンワラタ
675 :
デフォルトの名無しさん :2005/05/30(月) 16:20:50
CComboBoxにSetEnabledは無いんでしか?
はい。
質問です。 ダイアログベースのWizardで作成。 CxxxDlg::PreTranslateMessage{ if(F1が押されたら){ 何やら処理 return TRUE; } としても、ヘルプが起動してしまいます。 「何やら処理」は動いているので、if文は通ってるみたいです。 もちろんOnHelpInfoとかを、 何もしないような処理にすれば良いかと思いますが、 そもそもPreTranslateMessageでTRUEを返してるのに、 ヘルプが起動してしまう理由って何でしょうか?
アクセラレータ
679 :
デフォルトの名無しさん :2005/06/02(木) 17:20:09
OnRButtonDown(UINT nFlags, CPoint point) のpointをダイアログ座標にする方法教えてでつぅ。
ScreenToClient() ダイアログ座標って言うのがよくわからんが
もしかしてダイアログ単位のこと? システムフォントの幅と高さによる
682 :
679 :2005/06/02(木) 18:13:09
サンクツ
>>680 -
ポップアップメニュー用の座標が欲しかったのですが、
ClientScreenTo() でうまくいきますた。
684 :
677 :2005/06/02(木) 22:01:56
要するに、アクセラレータはディスパッチする前に 起動するっちゅうことでokでしょうか?
自力描画でエディタを作っています。 CScrollViewを使っているのですが行番号表示を実装しようとした処で詰まりました。 Viewの中に「スクロールしない領域」のようなモノを作る方法はありますか? 行番号の表示領域は(Viewと兄弟、もしくは子の)別のウィンドウにした方が良いのでしょうか。 環境はvc++.net2003です。
俺が作ったときは、知らないうちにスクロールされるよりはと 別Windowにしたなあ
IPアドレスのボックスか、エディットボックスを2個用意して、 片方にIPアドレスを、もう一方にサブネットマスクを入力させる。 で、そのネットワーク内のアドレスを全て抽出したい。 例えば、「192.168.0.1」・「24」と入力すると、「192.168.0.1」〜「192.168.0.255」と。 どうすればスマートに出来るでしょう? 無理矢理、2進数10進数の変換とかをやっていくしか無いでしょうか。
>>687 ・それってサブネットマスクって言うの?
・「2進数10進数の変換」を無理矢理、ってどんなことを想定している?
MFCと関係ないな
691 :
687 :2005/06/04(土) 22:30:29
>>688 ・ネットワークアドレス長、って言うのでしょうか。
サブネットマスクが「255.255.255.0」ならば24。
・10進数のIPアドレスを2進数32ビットに変換して、
右側「32 - ネットワークアドレス長」分全てを0にしたもの〜全て1にしたものを
出して、10進数のIPアドレスに戻す、って作業を考えてます。
ただ、面倒なので何か方法があるのでは・・・と思って相談しました。
質問ですが、CRichEditのメンバを見たところ、文字列の設定などができないみたいです。 あるのは、StreamInという回りくどい方法でテキストかリッチファイルを入れていくだけ。 どうしてこんな変な仕様なんですか? SetText(char* p);みたいなものを用意してくれればいいと思うのですが。
>>692 長くてしかも書式付きのテキストを扱うんだから
仕方ないのでは?
うろ覚えだが、単純に中身全部を置き換えるなら
SetWindowText()つかえるんじゃなかったか
694 :
デフォルトの名無しさん :2005/06/06(月) 22:09:05
>>691 面倒じゃないよ。
long addr_base = ntohl(inet_addr("1.2.3.0"));
long addr_mask = ntohl(inet_addr("255.255.255.0"));
addr_base &= addr_mask;
long addr = addr_base;
in_addr ad;
do (
ad.S_un.S_addr = htonl(addr);
printf("addr=", inet_ntoa(ad);
addr = (addr+1) & addr_mask;
} while (addr != addr_base);
695 :
デフォルトの名無しさん :2005/06/06(月) 22:09:48
>>694 訂正
>printf("addr=", inet_ntoa(ad);
↑
printf("addr=%s", inet_ntoa(ad))
>>694 さらに訂正
> addr = (addr+1) & addr_mask;
>} while (addr != addr_base);
addr++;
} while ((addr & addr_mask) == addr_base);
ひとつもMFC使ってないのが泣ける
CString str; str.Format("addr=%s", inet_ntoa(ad)); printf("%s", str);
699 :
デフォルトの名無しさん :2005/06/07(火) 07:24:50
VC++6.0を使ってます。 僕に彼女が出来るにはどうしたら良いですか?
CreateKanojo
IntersectRect(698, Kanojo) = 0
こんにちは 質問ですが CStdioFile fout("myfile\\diary.txt",CFile::modeCreate|CFile::modeWrite); .exeファイルはmyfileと同じフォルダ階層にあるのに、 なぜか、無効なパス名ということで例外が出ます。 どうしてなのでしょうか?
>>702 カレントディレクトリ基準であってEXEのあるディレクトリが基準ではない。
704 :
デフォルトの名無しさん :2005/06/08(水) 17:37:27
エディットボックスの文字選択が解除されたときに処理を追加したいのですが 以下のコードではメッセージが取れないです。 どうしたらいいですか? BOOL CMyEdit::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_SETSEL){ if(pMsg->wParam == -1){ //処理 } } return CEdit::PreTranslateMessage(pMsg); }
705 :
デフォルトの名無しさん :2005/06/08(水) 17:45:44
あ、まちがえました。 ×WM_SETSEL ○EM_SETSEL です。
EM_SETSELは自分でセットするときに使う 通知関係は、EN_ だろう
ありがとうございます。やってみます。
あれ、でもEN_SETSELっていうのはないですよね。 自分でも調べていますが、どういうメッセージで取れるのかわかりません。
まずメッセージをとる方法が変 選択が解除というのがよくわからんが、 マウスやキーのメッセージが来るたびに 選択範囲をチェックして、自分でUSERメッセージを送ってみたら
エディットボックス内に表示されている文字列を マウスドラッグやshiftキーを押しながら矢印キーで範囲選択された タイミングで処理を行いたいのです。 >709が一番いいのかなぁ。ちょっとよくわかりませんがやってみます。
711 :
704-705 :2005/06/10(金) 13:51:39
およそ>709のようなことで何とかなりました。 もうひとつ質問です。 エディットボックス内で右クリックして表示されたポップアップメニューの コマンドが選択されたことを取るにはどうしたらいいでしょう?
spy++等で調べるといろいろわかるよ
ちょっと見てみたけど、 WM_MENUSELECTとかWM_CONTEXTMENUとか来てるなあ・・
714 :
704-705 :2005/06/10(金) 18:44:06
なんとかなりました。 >713のところではなくて、切り取りとか貼り付けの決定時がよかったので WM_CUTやWM_COPYなどなどをとりました。 とりあえずありがとうございました。 それにしても私、PreTranslateMessageとDefWindowProcの違いがわかってません・・・
javaからC++(MFC)に移行しようとしている者です。 ダイアログで得られた値をメインで反映させるためにグローバルな変数を 使うのでは無く、ダイアログのクラスとメインのクラスでデータを共有す るクラスを作って参照をそれぞれのメンバにセットするというjavaっぽい プログラミン手法はよくやられるのでしょうか?
>715 DDX(Dialog Data eXchange)を使うのが一般的。 DDXとはダイアログボックスに貼り付けられたコントロールの設定値を クラスのメンバ変数で操作できる仕組み。
>>715 簡単なダイアログなら、ダイアログのクラス自体をデータクラスと
割り切って、コントロールに関連付けされたメンバをpublicにして
しまうのもありだと思う。
718 :
デフォルトの名無しさん :2005/06/14(火) 17:29:28
パレットにCBitmapButtonが無いんですが、 どうやってポトペタしたら良いでつか?
719 :
718 :2005/06/14(火) 17:47:19
Microsoft Forms 2.0 ToggleButtonだと、 ビットマップが設定できますね。 でも、トグルじゃないボタンが欲しい...
720 :
718 :2005/06/14(火) 17:55:39
ToggleButtonがグループボックスの下に入っちゃうけど、 何で?
>>718 ボタン貼ってスタイル変更すればいいじゃない。
722 :
デフォルトの名無しさん :2005/06/15(水) 10:31:22
コントロールの親ダイアログを実行時に差し替えることはできまつか?
724 :
デフォルトの名無しさん :2005/06/15(水) 13:49:27
ダイアログの中にダイアログ表示して、それを途中でDoModalしたり、 と、工夫しようと思ったが、 MFCで変わったことするとエラーが激しいな。
>ダイアログ表示して、それを途中でDoModalしたり >MFCで変わったことするとエラーが激しいな そりゃぁ、馬鹿なことすりゃぁね。
RADってのはバカな事しても開発サポートするもんだよ。 MFCは実行時エラーダイアログからしてイマイチ。
727 :
デフォルトの名無しさん :2005/06/15(水) 19:33:45
Dlg.Create(IDD_DIALOG,NULL); Dlg.ShowWindow(SW_SHOW); だと正常に動作するのに、 Dlg.Create(IDD_DIALOG,this); Dlg.DoModal(); だと、 >X Debug Assertio Failed! >File: dlgcore.cpp >Line: 462 エラーになってしまいます。 対処方法キボンッユ
Createするな。
>727 >Dlg.Create(IDD_DIALOG,this); >Dlg.DoModal(); アホ? すげーレベル低い Modal DialogとModeless Dialogの違いわかってる? それぞれのMFCでの作成方法わかってる?
732 :
727 :2005/06/16(木) 08:56:25
MyDlg Dlg(this); Dlg.DoModal(); でおk?
733 :
デフォルトの名無しさん :2005/06/16(木) 10:15:45
MFC AppWizard(dll)で extern "C" __declspec(dllexport) void add(int *a,int *b,int *c) { *c=*a+*b; } というようにdllを作ったのですが、作ったdllがうまく分かりません。 教えていただけませんか
俺もうまくわからん。
735 :
727 :2005/06/16(木) 11:16:24
MyDlg Dlg(this); Dlg.MyProcess(); Dlg.DoModal(); としてますが、DoModalの前に、「DoDataExchange(CDataExchange* pDX)」で セットされるべき、画面コントロールプロパティがNULLになってます。 これを回避する方法はありますか? というより、「DoDataExchange」とは何者なんでしょ。
736 :
727 :2005/06/16(木) 11:17:26
「DoDataExchange」を外からコールしようにも、 「CDataExchange* pDX」に何をセットすれば良いのやら?
調べもせずにここで訊いて
教えてもらっても礼もなく
再び、調べもせずここで訊く、か…
MSDN 全文音読の刑
>>727
739 :
デフォルトの名無しさん :2005/06/16(木) 13:00:59
MFCって色んな癖を覚えないと使えないわけ?
そりゃまあね・・・独自の癖みたいなものに気付くと一気に習得速度が上がる
741 :
デフォルトの名無しさん :2005/06/16(木) 13:09:42
その逆に、 その癖で躓いてるという相談があったら、 どこを嫁、 とヒント出そうぜ!
APIで躓いてるならAPIの上でF1を押せ。 その他で躓いてるならそれをキーワードにしてぐぐれ。 それでも分からなければ質問掲示板等のサイトの 過去ログを検索しろ。 こんなもんじゃないかね? それ以前の基礎がわからなければここで質問しても 理解は難しいと思う。
743 :
デフォルトの名無しさん :2005/06/16(木) 13:24:58
答えない人が相談室に居る必要は無い
744 :
デフォルトの名無しさん :2005/06/16(木) 13:26:16
相談室に質問者の存在は許される。 答えない回答者は存在自体が否定される。 それだけ。
まあ要はここで質問するより他所でした方が確実って事だw
746 :
デフォルトの名無しさん :2005/06/16(木) 13:34:27
747 :
727 :2005/06/16(木) 13:41:31
// ダイアログ データ //{{AFX_DATA(CExamDlg) enum { IDD = IDD_MY_DIALOG }; CSpinButtonCtrlm_MySpinButton; //}}AFX_DATA ↑ ヘッダーファイルのこのメンバにアサインされるのはいつなのか、 また、DoModal前にアサインする方法が知りたいのですが、 定石は無いのでしょうか?
748 :
737 :2005/06/16(木) 14:26:39
なんか答えるまで居座りそうだな、こいつ…
DoModal() を呼び出すだけで
1. ダイアログが作成される
2. OnInitDialog() 呼び出し
3. UpdateData() 呼び出し
4. DoDataExchange() 呼び出し
が行われる。DoDataExchange() をオーバーライドし、そこで
DDX_Control(pDX, コントロールのID, メンバ変数);
と呼び出せば、メンバ変数が設定される。
で、音読したか?
>>727
>>747 コントロールをメンバ変数に割り当てているわけなので、ウィンドウが作成される前
(≒DoModal前) にはそのコントロールは存在しません。なのでアサイン不可能です。
定石1.簡単なものの場合
クラスウィザードで、コントロールじゃなくて値に対するメンバ変数を追加して、
自動生成されるDDXに任せる。
定石2.面倒なものの場合
適切にメンバ変数を設定して、OnInitDialog で独自にコントロールにあれこれする。
コントロール側が操作された場合の処理も適切に自前で行う。
定石3.MFC原理主義の人の場合
自前のDDX関数を作成して、コントロールの初期化とメンバ変数への書き戻しは
DoDataExchangeに任せる。
定石以前に、まずは付属ドキュメントのチュートリアルとか読んだ方が時間も
掛からず効率が良いと思います。
750 :
727 :2005/06/16(木) 14:54:24
751 :
737 :2005/06/16(木) 15:04:31
ゎ-ぃ10円ヵョ
つS
>>749 |
\ __ /
_ (m) _ピコーン
|ミ|
/ .`´ \
∧_∧
( *・∀・)∩ いいことを思いついた!
(つ 丿
⊂_ ノ
(_)
DoModalのアトに処理走らせれば良いんだ。
面白くもない冗談だな。
上がってよいぞ
755 :
デフォルトの名無しさん :2005/06/17(金) 11:37:33
ダイアログをDoModalする前にダイアログ・オブジェクトの外からプロパティ設定したい場合は、どうすんだろ?
757 :
デフォルトの名無しさん :2005/06/17(金) 18:34:28
フロッピードライヴにディスクを入れた, というイベントをつかむ方法はありますか? USBメモリを指すとメッセージが飛び, それでわかるのですが,フロッピーのディスクで 同様のことはできないのでしょうか?
無いってAPIスレで言っただろ。
759 :
デフォルトの名無しさん :2005/06/17(金) 18:55:16
空のプロジェクトでウィンドウを表示させるだけのプログラムを書きたいんだけど リンク中に見慣れないエラーが出た >nafxcwd.lib(thrdcore.obj) : error LNK2019: 未解決の外部シンボル __endthreadex が 関数 "void __stdcall AfxEndThread(unsigned int,int)" (?AfxEndThread@@YGXIH@Z) で参照されました。 >nafxcwd.lib(thrdcore.obj) : error LNK2019: 未解決の外部シンボル __beginthreadex が 関数 "public: int __thiscall CWinThread::CreateThread(unsigned long,unsigned int,struct _SECURITY_ATTRIBUTES *)" (?CreateThread@CWinThread@@QAEHKIPAU_SECURITY_ATTRIBUTES@@@Z) で参照されました。 >Debug/MfcWindows.exe : fatal error LNK1120: 外部参照 2 が未解決です。 nafxcwd.libはバイナリデータで何書いてあるのか分からないし、process.hをインクルードしても直らないし 誰か直し方教えて
/MT
スレッドを作成して定期的にドライブ情報を取得すれば?
763 :
デフォルトの名無しさん :2005/06/17(金) 19:09:09
>>762 それは考えたけど
FD が実際にはいってるかどうかなんてわかんのか?
FDにアクセスすれば判るっちゃ判るけどいい迷惑だな。
766 :
デフォルトの名無しさん :2005/06/17(金) 20:31:18
1つのリソース・ダイアログに1つのCDialog派生クラスがクッツイテまつ。 そのリソースに、別のCDialog派生クラスをクッツケルのは可能ですか? そういうことやってても、開発中に意味不明なエラーで悩まされたりせず、楽に作業できますか? それともクラスウィザードがエラー起すかな?
>>764 FDからもブートするようにBIOSで設定すると、
起動時にFDアクセスして調べるよね。
それがどうかしたのかカス
昔の話でスレ違いになるが PC9801で暴走したときにキーボード押しながらフロッピーを入れると割り込みが入って 自動的にリセットしてくれるソフトが在ったな。 Windowsだとそういうの出来ないのか,セキュリティ対策にも使えそうなネタだったのに。
772 :
デフォルトの名無しさん :2005/06/18(土) 08:40:01
766もヨロ
>>766 クッツケルの>可能。問題ない。
楽に作業できるか>知らない。IDEのヴァージョンにもよるでしょう。クラスウィザードは*.hのIDDの定義みて動いてる。
774 :
デフォルトの名無しさん :2005/06/18(土) 11:13:32
>>757 コールバック関数(WindowProc)内で WM_FLOPPYENTER を監視する。
775 :
デフォルトの名無しさん :2005/06/18(土) 18:56:44
>>774 えっマジ?
そんな都合がいいメッセージがあるん?
バカじゃねーの
分割ウインドウを使って、ウインドウA(リストビュー)に表示させたものを 選択することによって、ウインドウB(エディットビュー)にそれに応じた 情報を表示する、というようなプログラムを作っています。 丁度、2chブラウザでスレ一覧からスレを選択する事で、その内容を 表示させるように。 何か参考になるサンプルが載っているHPを探しているのですが、 期待するようなものが見つかりません。 ご存知でしたら、紹介してください。
リストビューで選択されたアイテムの番号を取得。 その取得に応じた情報を取得。 それをエディットビューにSetWindowText()でよゐのでわ。
779 :
デフォルトの名無しさん :2005/06/20(月) 00:25:10
>>777 VC++のチュートリアルでいいのでは?
780 :
デフォルトの名無しさん :2005/06/20(月) 09:09:24
>>774 そんなメッセージはないやんけ!
ウソこくな!
781 :
デフォルトの名無しさん :2005/06/20(月) 18:51:11
>>780 すまん。あの日はちょっとムシャクシャしてたんだ。
許してくで。
自演警報発生
784 :
774 :2005/06/21(火) 13:49:55
もともとPCはフロッピー入れてもなにも信号が発生しないからなぁ 無理やり読みに行ってみるしか手がない
>>785 そだっけ?
抜くと割り込みが発生したような記憶があるんだけど気のせいかな?
>>786 太古のPC-9801系とかはその辺の信号があった。
いわゆる PC-AT 系には無い。
788 :
デフォルトの名無しさん :2005/06/22(水) 19:52:02
一度に描画できるデバイスコンテキストが5個までだったら ゲームとか作るんだったらまったく向いてないと思うのですが。 背景とか含めて5個しかないと何も作れませんよ。
意味がワカラン
791 :
デフォルトの名無しさん :2005/06/22(水) 20:07:55
5個以上描画できないってことじゃないんですか?
デバイスコンテキストに対する認識が根本から間違っている。
WindowDCについて 何かでチラッと見た程度の知識か うんこ
誤爆だろ。脈絡無杉
795 :
デフォルトの名無しさん :2005/06/22(水) 22:46:34
だって描画するものが一度に5個しか出せないんですよ? インベーダーゲームで言ったら 敵3体と味方の機体一体表示したら弾一個しか出ないじゃないですか。
スプライト≠デバイスコンテキスト
>>795 デバイスコンテキスト使ったことねーだろお前
798 :
デフォルトの名無しさん :2005/06/23(木) 00:52:42
>>797 プログラム自体あんまりやったことないので詳しいことはわかりません。
しかし、一生懸命勉強していくつもりです。
でも、3DゲームとかはMFCじゃできないんだろうなぁ…。
799 :
デフォルトの名無しさん :2005/06/23(木) 01:28:05
>>798 んなことねーだろ。アホか。
あーあ。VC++ネイテブでGDI+使えたらなー
使えるよ
801 :
デフォルトの名無しさん :2005/06/23(木) 15:26:50
特殊なメッセージを受信するために 前もって RegisterDeviceNotification というので登録するのですが, Windows プロジェクトではこれが使用できるのですが MFCプロジェクトだとこれを知らないというエラーがでます winuser.h に定義されている,とあるので, #include <winuser.h> しても結果は同じです どうしたら使えるようになるのでしょうか?
#define WINVER 0x0500 #include <DBT.H>
803 :
801 :2005/06/24(金) 18:10:53
>>802 #include <dbt.h>
が必要なのは承知しておりましたので
すでにしていたのですが
#define WINVER 0x0500
をしたみたところ
やはり結果変わらずです
ウィザードが作成した.cppで #include "stdafx.h" #define WINVER 0x0500 #include <DBT.H> ・・・ DEV_BROADCAST_HDR dbhdr; ・・・ RegisterDeviceNotification(); ・・・ としたらコンパイル通って動くけど。 ちなみにVC6 sp6。
805 :
803 :2005/06/24(金) 18:32:31
>>804 おかしいですね
空の MFC DLL プロジェクトに
#define WINVER 0x0500
#include <DBT.H>
・・・
DEV_BROADCAST_HDR dbhdr;
・・・
RegisterDeviceNotification();
とかやっても
そんな型は知らないというエラーです
Visual Stdio .NET 2003
VC++ .NET 7 です
VS.Net 2003なんだけど、 #define 「下のincludeファイル内で必要な定義」 #include <hogehoge.h> のdefineがたまに無視されることがある。 VS起動し直したりすれば直るんだが、なんだか変というかすごく不便
ドドネトが手元にないからよく判らんけど stadafx.hの先頭行あたりに #define WINVER 0x0500 をもってくるとか 「プロジェクトの設定」の「プリプロセッサの定義」に WIN32, ・・・ ,WINVER=0x0500 を追加する(これが本筋かも)。
アプリケーションにシリアル番号「1111」を入れ、コンパイルします。 このシリアル番号を「2222」へ変えるためには再度コンパイルしなければならないと 思っていましたが、アップデートTOOL(アプリ)のようなもので使って 更新しているものを見ました。 どのようにすれば再コンパイル無しにアプリの中の値を変更することができるのでしょうか。
もうねぇ(VC6) // 三次元配列 list<list<list<int> > > stl;// OK..スッキリ CArray<CArray<CArray<int, int&>, CArray<int, int&>&>, CArray<CArray<int, int&>, CArray<int, int&>&>&> mfc; //OK 込み入ってるし読めない CList<CList<int, int&>, CList<int, int&>&> bad; // NG コンパイルすら通らない これって嫌気が差したスレに書くべきかもしれないけど、MFCを妄信してる実装担当が回りに多くて 激しく鬱になって・・・
恐ろしいコードだな。
811 :
デフォルトの名無しさん :2005/06/25(土) 02:49:18
Document-View構造を使ってビットマップを表示させたいのですが、 SelectObjectでビットマップを表示させる場合 一つのビットマップしま表示できないです。 複数のビットマップを表示するにはどうすればよいのでしょうううか
>>811 複数のCBitmapを用意しろ
とりあえず、ソースどんなん?
HBITMAP bmpOUTPUT; HBITMAP bmpAAA, bmpBBB, bmpCCC; を宣言して、場合によって bmpOUTPUT = bmpAAA; とか bmpOUTPUT = bmpBBB; とかして、 その直後に this->UpdateAllViews( NULL, 0, NULL ); すればよい。 CView の OnDraw では SelectObject( hdcBMPOUTPUT, bmpOUTPUT ); BitBlt( hdcWindow, ...., hdcBMPOUTPUT, SRCCOPY ); しておくだけでいい。 bmpAAA と bmpBBB と bmpCCC の実体は必要だが、 bmpOUTPUT は画像選択出力用ポインタとして使う。 実行中に bmpOUTPUT が「ぬるぽ」だったら OnDraw を脱出すればよい。 フラグとしてグローバル変数を用意して OnDraw 内で、 bmpAAA と bmpBBB と bmpCCC の switch をする方法もあるが、 なんかシロウトっぽくてイヤだ。
うわあ、シロウトだ。
816 :
デフォルトの名無しさん :2005/06/27(月) 15:52:12
MFCでよい書籍を教えてください。 開発環境:VS.NET 2003
ここ数年はMFCの新刊なんてほとんど出てないんじゃない? 書店でも全然見かけなくなったし
VC6の時に出てたMFCの本は? 標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング Programmer’s SELECTION
>>818 まともなMFC本と言ったらそれくらいかね
820 :
デフォルトの名無しさん :2005/06/27(月) 19:53:00
MFCを使ってDllを作成しています。 呼び出し側からDllが呼び出されるとDll内でダイアログを表示したいのですが、 色々調べてDLL側で以下のようにプログラムしています。 AFX_MANAGE_STATE(AfxGetStaticModuleState()); Tdlg *pDlg; pDlg = new Tdlg; pDlg->Create(IDD_DIALOG1,CWnd::GetDesktopWindow() ); pDlg->ShowWindow(SW_SHOW); しかし、このようにすると確かに表示はされるのですが、ダイアログがアクティブに なりません。(ダイアログの上の青い部分が薄いまま) マウスでなんとか移動はで きるのですが、アクティブになってスムーズに移動することはできません。何が原因 なのでしょうか?
pDlg->Create(IDD_DIALOG1,NULL);
>>820 親がデスクトップなので、デスクトップが非アクティブになると
ダイアログも非アクティブになるという動作です。
親をdllを呼び出している側のメインウィンドウ(?)にして
アクティブとかそこらへんの関係を適切にしたいなら、
dll の関数に親ウィンドウの HWND を渡してもらうか、
メインウィンドウらしきものを自力で探すしかないです。
>>820 pDlg->Create(IDD_DIALOG1,::GetDesktopWindow() ); でもだめ?
824 :
デフォルトの名無しさん :2005/06/28(火) 14:03:57
>823 pDlg->Create(IDD_DIALOG1,::GetDesktopWindow() ); はビルド時にエラーが出ます。 >822 なるほど分かりました。もとは親のハンドルを受け取るようにしていたのですが、それだとうまく 表示されなかったので親をデスクトップにしてみたのです。 親のハンドルに設定していると子ダイアログが親ウィンドウ内に表示され てしまったり画像が移ってしまったりとうまく描画できなかったのでしか たなく親をデスクトップにしてみたのですが。
MFCの質問かどうか迷うのですが、 異なるようでしたら適切な場所を教えてください。 MFC拡張DLLにて namespace ごと クラスをエクスポートしたいのですが 正しい方法がわかりません。 // 策 1 namespace hoge { class AFX_EXT_CLASS CHoge{ // いろいろ }; } // 策 2 namespace hoge{ class CHoge; } class AFX_EXT_CLASS hoge::CHoge{ // いろいろ }; 1,2 ともにDLLプロジェクトはコンパイルが通るのですが 他のプロジェクトで使おうとすると > fuga.cpp(xxx): error C2653: 'hoge'' : 識別子がクラス名でも名前空間名でもありません。 とのエラーが出ます。 MFC拡張DLLにて名前空間をエクスポート可能なのでしょうか。 可能でしたら方法を教えていただけないでしょうか。
名前空間てダイナミックにできちゃうのか?プリプロッセッサがあぼんするんじゃ
>>825 使う側にもこれは書かないとだめじゃない?
namespace hoge{
class CHoge;
}
使う側はヘッダファイルを#includeしてるので 書いてるのと同じ状態です。 インテリセンスでの補完も働くようです。 しかしコンパイル通らず、、、 名前空間 jp::somewhere のクラス CComoplex と 名前空間無しのクラス CSimple のコンストラクタ(多分)は ??0CComplex@somewhere@jp@@QAE@XZ ??0CSimple@@QAE@XZ 上記のような名前付けになっていて、@の被る位置の判断とかがアレなのかな。
>>828 >> fuga.cpp(xxx): error C2653: 'hoge'' : 識別子がクラス名でも名前空間名でもありません。
このエラーはどう見てもそんな高尚な話ではなく、単なる文法違反なわけで。
なにかのポカミスだと思います。
>>824 > 親のハンドルに設定していると子ダイアログが親ウィンドウ内に表示され
WS_CHILD が指定されているとこうなるよ。
CListCtrlのCtrl+Shiftクリックに対するデフォルトの選択方式を Ctrlクリックと同じ選択方式に変更する方法はあるのでしょうか?
832 :
デフォルトの名無しさん :2005/06/29(水) 06:11:54
いまのモニターの状況を取得する関数ないでしょうか? Printscreenみたいな感じのものです。
画面をキャプチャしたいんなら、デスクトップのDCを取得してメモリDCなりにBitBlt。
時分秒を数字で表示するだけの時計プログラムなのに動かないの 最初に1回表示されるけどあと全然更新されない Timer関数は動いてるみたいだけどデバッグで追いかけてると 現在の場所のソース コードを表示できません。とか言われて進まなくなる ↓OnPaintとOnTimerで呼び出してる。描画関数はこれで合ってる? void CMainWnd::DrawClock() { CRect rect; GetClientRect(&rect); CString string; string.Format(_T("%2d:%2d:%2d"), tmOldTime.GetHour(), tmOldTime.GetMinute(), tmOldTime.GetSecond()); CPaintDC dc(this); dc.DrawText(string, -1, &rect, DT_SINGLELINE); }
>>834 OnTimer() では Invalidate() するだけでいいんじゃ?
836 :
834 :2005/06/29(水) 19:37:21
やってみたけど変わらなかった 昼からずっと 9: 0: 0のまま
CClientDC dc(this);
>>834 tmOldTimeはどこで更新している?
見たところ、0のままで1970/1/1 9:0:0を指しているような気がするのだけれど。
839 :
834 :2005/06/29(水) 21:48:12
>>837 数字は進まないけど画面がチラつくようになった
>>838 コンストラクタで0にしてTimer関数で更新してる
afx_msg void CMainWnd::OnTimer(UINT ID)
{
CTime tmCurTime;
tmCurTime.GetCurrentTime();
if (tmOldTime == tmCurTime) {
return;
}
tmOldTime = tmCurTime;
DrawClock();
}
>>839 すげぇ素朴な疑問なんだが、何故tmOldTimeとtmCurTimeの二つの
変数を用意する必要があるのだ?
呼び出し側では
CTime tmCurTime = CTime::GetCurrentTime();
DrawClock(tmCurTime);
としておき、DrawClock側では
void CMainWnd::DrawClock(const CTime& now)
{
CClientDC dc(this);
CRect rect;
GetClientRect(&rect);
CString str;
str.Format(_T("%2d:%2d:%2d"),now.GetHour(),now.GetMinute(),now.GetSecond());
dc.DrawText(str,-1,&rect,DT_SINGLELINE);
}
じゃ駄目なのか?
841 :
834 :2005/06/29(水) 22:26:02
駄目も何も思いつかなかったんだもん やっぱり 9: 0: 0で止まってチラつくだけだった
>>841 デバッグモードにしてる?
リリースモードでもデバッグ情報を埋め込むことはできるが、煩雑?なので。
843 :
834 :2005/06/29(水) 23:11:43
勿論
tmCurTime.GetCurrentTime();ってやっても、tmCurTimeには現在時刻は代入されない希ガス。 CTime tmCurTime = CTime::GetCurrentTime();
>>844 俺も今同じこと書こうとした。
CTime::GetCurrentTime()はスタティック関数だな。
846 :
834 :2005/06/29(水) 23:44:13
おお!動いた! なんでtmCurTime.GetCurrentTime()はダメなの?
C++の勉強をやりなおしましょう
MSDNくらい読もうや。 CTimeクラスの説明で、GetCurrentTime()は静的関数とあるぞ。
だから静的関数だったら何なの?
850 :
838 :2005/06/30(木) 08:46:46
>>849 つまりそれは、クラスの名前空間に束縛されている只の静的関数。
メンバが更新されるのではなく、戻り値として戻されるだけ。
851 :
834 :2005/06/30(木) 09:21:27
全く以て意味不明 time.GetCurrentTime()とCTime::GetCurrentTime()はどう違うの? どっちも現在時刻を取得する関数じゃないの?
>>851 これだけ書かれても、それ以上自分で調べることもしないで思考停止に陥ってるなら
プログラミングなんて止めて自動販売機の空き缶いれでも探ってる方がいいよ。
>>851 2つとも同じだ。同じなので>839は↓これと同じだ。 tmCurTime に値が入るわけ無いだろ。
afx_msg void CMainWnd::OnTimer(UINT ID)
{
CTime tmCurTime;
CTime::GetCurrentTime();
854 :
834 :2005/06/30(木) 09:41:39
ああなるほど 現在時刻を取得したけどそれをどこにも代入してなかったわけだ よくわかったありがとう
>>854 これぐらいドキュメント見てわかるようになれよ。
856 :
834 :2005/06/30(木) 09:45:29
がんばる 静的メンバ関数はもう間違えない
静的メンバ関数を普通のメンバ関数のように time.GetCurrentTime() で 呼び出せてしまうC++の文法は個人的にあまり好きじゃない。 thisポインタが渡されるわけじゃないのに紛らわしい。
858 :
デフォルトの名無しさん :2005/06/30(木) 19:58:11
ダイアログに2つリストコントロール(Aリスト、Bリスト)を置いて、 両方に「OnNMClickList」ハンドラを割り当てているのですが、 Aリストの項目をクリックした後、Bリストの空白の場所をクリックしても OnNMClickListが呼ばれず、再度クリックすると呼ばれます。 1クリックでBリストのOnNMClickListを呼び出す方法ってないですか? メニューからこのダイアログを呼び出したとき、どちらのリストも最初の 1クリックでちゃんとOnNMClickListが呼ばれます。 このことから、おそらく原因はAリストをクリックしたときに取得した項目が Bリストをクリックしたときにもまだ選択状態にあるという点だと思うのですが。 そこで、 AList.SetItemState( 0, LVIS_SELECTED, LVIS_SELECTED) を使って選択解除の方法を試しているのですが、うまくいきません。 どなたかご指導お願します。環境はVC++.NET2003です
試してみたが、クリックする時のマウスボタン押し下げの 動作がうまく伝わらないみたいだね。クリックはマウスボタンを 押して上げるという動作だからCListCtrlの派生クラスを 作ってWM_L(R)BUTTONDOWNのメッセージを処理すればうまく行く。 ただ、この時はマウスポインタを動かすとドラッグ操作みたいに 四角い枠が出てしまうことがあるので、その派生クラスの中で 適切に処置してあげないといけない。
ありがとうございました
DeleteAllItems()の後に再度InsertItem()を行うと 何も表示されなくなります。解決法ありませんか?
862 :
デフォルトの名無しさん :2005/06/30(木) 22:49:28
>>861 ListCtrlですか?
InsertItem()する前に構造体のアイテムとサブアイテムに正しく番号
ふっておかないと表示されないです。
アイテム:0 サブアイテム:0 のときはInsertItem()、
アイテム:0 サブアイテム:1〜のときはSetItem()、
で入れないと正しく表示されません。この辺は大丈夫ですか?
>>862 CTreeCtrlです。
書いたつもりが書いてませんでした。
.NETをつい最近使い出しました。 VC6 のMFCクラスウィザートのように、自分の作ったクラスのオブジェクトに対し、 メッセージや変数を追加したいのですが、どうも見つかりません。 関数のオーバーライドや、ダイアログコントロールに対して変数を設定するのに 重宝していたのですが・・・ 友人から本体部分だけ貰ったんで、MSDNがないんです。^^; サイトのMSDNで調べても要領を得ないんで、こちらに来てみました。よろしくお願いします。 Visual Stdio .NET 2003 VC++ .NET 7 です
クラスのプロパティから行ってください
867 :
575 :2005/07/01(金) 02:07:31
865さん、速攻のRESありがとうございます。 無事、オーバーライドできました。
嬉しさのあまり名前欄の番号間違えてるし・・・しかも全然違う orz >866さん、リンクありがとうございます。私の探し方が甘すぎの模様です。
869 :
デフォルトの名無しさん :2005/07/01(金) 17:23:56
>>859 858です。
問題はリストコントロールのプロパティで「フォーカスを持たないときでも
項目を選択」みたいなやつをTRUE(リストとフォーカスの関係を無視する)
にすることで解決しました。フォーカスの存在は盲点でした。
リストのOnNMClickListイベントは自分自身のフォーカスを持ってないと反応
しないらしく、2度クリックしないと反応しない原因は、1度目のクリックで
リストのフォーカスを取得。2度目のクリックでOnNMClickList反応という流れ
のようです。ですので↑にあるプロパティ項目の変更で、1クリックで
直接OnNMClickListようにする必要があるみたいです。
この変更をした場合、以前に選択した項目が薄いグレーで見えてしまうので、
必要ないときは
SetItemState( -1, 0, LVNI_SELECTED );//選択項目(グレーの部分)を解除
SetItemState( -1, 0, LVNI_FOCUSED );//選択項目(点線の枠)を解除
をすることで、処理できます。
ひとつ勉強になりました。ありがとうございました。
870 :
デフォルトの名無しさん :2005/07/01(金) 19:26:08
ODBC接続で RCS.Open( CSimDBAc::snapshot, _T( "select * from table where POINT > 50"),CRecordset::readOnly ); とした後GetRecordCount()でレコード数を受け取ろうとしたのですが、 POINT>50 であるレコードはいくつもあるのに1が帰ってきます。これは なぜなのでしょうか?
末尾のレコードに移動してカウント だめならSQLをちがうのにかえてみる。
872 :
デフォルトの名無しさん :2005/07/01(金) 19:51:01
>871 どうやって末尾にいどうすればいいのですか?
ムーヴラスト
875 :
デフォルトの名無しさん :2005/07/01(金) 20:05:18
ムーブラストでも駄目でした。
↓MSDN MoveLast 関数を呼び出してもレコード数は更新されません。 ユーザーが独自にレコード数を数えるには、IsEOF が 0 以外を返すまで MoveNext を繰り返し呼び出します。
あれ? CRecordsetはそうだったのか。 MoveNextなんか繰り返し呼んでると、場合(DBMSとかレコードセットの種類とか)によっては ものすごく時間がかかるので、count(MFCじゃないぞ)でも使った方がいいな。
878 :
デフォルトの名無しさん :2005/07/01(金) 21:04:27
>876 あなたの言うとうりでした。 解決しました
theAppを直接使うのはイケナイ子のすることですか?
>>879 イケナイ子かどうかは判らん。
でも大抵AfxGetApp()で間に合ってる。おいらの場合。
>>879 theAppを直接使うのは泣きべそで弱虫のするすることだ。
882 :
デフォルトの名無しさん :2005/07/03(日) 14:39:27
リソースエディタでダイアログを作ったのですが、 その後モードレスダイアログとして表示させようとして、以下のようにしたら アプリケーションがエラーを起こします。 なぜなのでしょうか。 CProgressDlg prgDlg; prgDlg.Create(CProgressDlg::IDD, NULL); CProgressCtrl* pPrgCtrl=(CProgressCtrl*)prgDlg.GetDlgItem(IDC_STATIC); CStatic* pStc=(CStatic*)prgDlg.GetDlgItem(IDC_STATIC); pStc->SetWindowText("aaa"); ←ここでエラー DoModalでないと、ダイアログ内部のコントロールは自動的に作られず、こちら側でCreateしないといけないということでしょうか?
yes
884 :
832 :2005/07/03(日) 15:10:15
それだと、リソースダイアログの場合、モードレスではコントロールを配置させる意味が無いんですね。 あくまでリソースダイアログはモーダルのときのみと。
CProgressDlg* prgDlg=new CProgressDlg(); prgDlg->Create(IDD_DIALOG1, NULL); CProgressCtrl* pPrgCtrl=(CProgressCtrl*)(prgDlg->GetDlgItem(IDC_STATIC)); CStatic* pStc=(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC)); pStc->SetWindowText("aaa");
>>882 IDC_STATIC が重複してるだけ。
各 control にちゃんと固有の ID 付けること。
当然 dialog resource template で作って modeless で動く。
887 :
832 :2005/07/03(日) 15:26:13
>>885 それでも例外になりました。
ちなみに、
CProgressCtrl* pPrgCtrl=(CProgressCtrl*)(prgDlg->GetDlgItem(IDC_STATIC));
は
CProgressCtrl* pPrgCtrl=(CProgressCtrl*)(prgDlg->GetDlgItem(IDC_PROGRESS1));
と修正します。
すいませんでした。
(CProgressCtrl*)(prgDlg->GetDlgItem(IDC_PROGRESS1));で返ってくる値がNULLなので。
>>882 それから 885 の指摘は prgDlg object の寿命のことを言っている。
modal じゃないのだから function 内の寿命ではダメだ。
modeless なら 885 のように free store 内に作るか、static な寿命にすること。
889 :
832 :2005/07/03(日) 15:29:01
>>886 失礼しました。
(CProgressCtrl*)(prgDlg->GetDlgItem(IDC_PROGRESS1));
で値のあるポインタが返ってきましたが、
(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
では、まだNULLのままです。
IDC_STATICというIDも間違ってません。
いま現在のソースはこれです。
CSAPProgressDlg* prgDlg=new CSAPProgressDlg();
prgDlg->Create(IDD_PROGRESS,NULL);
CProgressCtrl* pPrgCtrl=(CProgressCtrl*)(prgDlg->GetDlgItem(IDC_PROGRESS1));
CStatic* pStc=(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
pStc->SetWindowText("aaa");
>>889 >(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
>では、まだNULLのままです。
じゃあダメにきまってる。
>IDC_STATICというIDも間違ってません。
resource editor で IDC_STATIC じゃなくて何か固有の ID 作ること。
Windowsプログラム実行時にシステムの表示可能色数の設定を調べる事はできるんでしょうか? コントロールパネルの画面設定でやる256色とかHighColorとかTrueColorとかの現在の設定を知りたいんです。 スレ違いだったらゴメンなさい。
892 :
832 :2005/07/03(日) 15:37:32
>>890 解決しました。
他のダイアログリソースとIDが重複していたみたいです。
他のダイアログリソースは同じ会社の人が作ったものでしたが、気がつきませんでした。
皆様、ありがとうございました。
893 :
882 :2005/07/03(日) 15:38:07
832→882
>>892 「IDC_STATIC」はデフォルト値として特別な意味を持ってるんだよ。
他のリソースと重複していることが問題の本質ではない。
895 :
882 :2005/07/03(日) 15:44:45
>>894 そうなんですか。。。
IDはダイアログリソース単位での管理でいいんですね。
大変失礼しました&ありがとうございました。
>>894 別に特別な意味はないでしょ。MFC が reserve してるだけで。
892 の問題は dialog control ID の重複であなく dialog ID の重複という
落ちだったらしいし。ほっとけばいい。
897 :
882 :2005/07/03(日) 15:50:11
いえ、dialog control IDの重複でした。 IDC_STATIC以外は問題なかったので。
>>896 IDC_STATICは編集できないって基本だろ
ほっとけないよぉ〜♪
>>897 >いえ、dialog control IDの重複でした。
>>892 で
>他のダイアログリソースとIDが重複していたみたいです。
て言うからさ。
しかし dialog control ID の重複なら
>>889 で
>(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
>では、まだNULLのままです。
てことはないだろう。意図した control は取れないが何か取れるはずだ。
>>898 編集って何を指してる?
SetWindowText() はできるよ。
NULLぽにSetWindowTextはできないだろ
dialog 上に IDC_STATIC である dialog control が 1 つしかなければ それを GetDlgItem(IDC_STATIC) で意図どおり取得できるし、 なおかつそれが static control だったら SetWindowText() もできる って言ってるのさ。
904 :
デフォルトの名無しさん :2005/07/04(月) 10:07:38
MFCでresource dialogを作ったのですが、 returnキーを押すとWM_CLOSEが飛ぶようで、returnキーを押してもWM_CLOSEが飛ばないようにするためには どうすればいいのでしょうか? よろしくお願いします。
>>904 OnOKをoverrideしたmethod作って、実装は空にするとか。
Escapeで閉じないようにするには、OnCancelに同じ事を。
タイトルバーの×ボタンを押したらダイアログを閉じるようにするには、
WM_CLOSEメッセージを捕まえたOnCloseハンドラで、CloseDialogとか
呼べばOKだったような希ガス
906 :
デフォルトの名無しさん :2005/07/04(月) 10:42:29
エディットボックスのIME制御ってどうやるのですか? フォーカスをあわせると日本語入力のモードに切り替わるようにしたいのですが
IMEのON/OFFはsetfocusのとき ImmGetContext(); ImmSetOpenStatus(, TRUE); killfocusのとき ImmSetOpenStatus(, FALSE); ImmReleaseContext(); 日本語モードの制御は ImmSetConversionStatus();
>>904 Returnキーでダイアログが閉じるのは当たり前の挙動だけど、
それを敢えてそうさせたくない理由は?
>>908 Returnキーでダイアログが閉じるのを敢えて容認している理由は?
Returnキーでダイアログ閉じたっけ? OKボタンにフォーカスがある状態で押しただけじゃないの?
>>909 そうなるのが一般的なダイアログだと思っているから。
個人的にもそうでないダイアログはうざい。
パスワードとか誤って入力してreturn押したりしたらそれで 確定出来ちゃうダイアログ最高!
ESCでキャンセルはデフォだけど、リターンは場合によるな。
激しく厨の香りがする
>>909 がいるスレはここですか?
>>910 BS_DEFPUSHBUTTON スタイルのボタンが押されたことになるのが、
Windows でのお作法。
このスタイル、「OK」ボタンにあるダイアログも多いけど、
検索ダイアログの類だと「次を検索」あたりにあることが多いか。
まちがった。orzzzz
914のは
>>911 向け
で、
>>904 は何がしたいのだろう?
そのdialogはOKとCancelのある普通のmodal dialogだという前提で話が進んでいるようだが。
この前提が違ったら意味ないね。
>>915 の書いてるような検索のmodeless dialogとか。
仮にOKとCancelのある普通のmodal dialogだとして、 OKやCancelボタンにフォーカスがあるときにReturn押してもOKやCanelせずに 閉じないdialogはやめたほうがいい。
921 :
920 :2005/07/04(月) 23:19:16
でもそうしたいなら勝手だよね。すまんかった。
Enterはともかく、ESCで消えないダイアログは絶対許さん。
>904は単にダイアログ上のエディットコントロールなどでReturn Keyを押しても BS_DEFPUSHBUTTONがPUSHされる動作をやめさせたいだけじゃないの? 結構、そういう要望はあると思うが 不「可視」、「無効」属性でダミーの「標準のボタン」を作っておけばいいんでは 「」はVC6での表記、VC7は知らん
>>923 ・可能な場合、ダイアログ ボックスの既定のアクションに Enter キーを使用する。
・操作の中止またはキャンセルに Esc キーを使用する。
「可能な場合」ってのがポイントだな。
ダイアログベースのアプリケーションだと OKやCancelで閉じたくないとは思いませんかそうですか俺だけですか
馬鹿は来るな
928 :
926 :2005/07/05(火) 11:22:25
間違え寺… ×OKやCancelで ○EnterやEscで
馬鹿は来るな
パシャッ パシャッ
パシャッ
∧_∧ パシャッ
>>926 パシャッ ( )】Σ
. / /┘ パシャッ
ノ ̄ゝ
真実は常に時と場合によりけり。
932 :
デフォルトの名無しさん :2005/07/06(水) 20:27:41
親ダイアログのボタンを押すと子ダイアログが出るようにして その子ダイアログの背景色を変えたいのですが、どのようにすれば いいでしょうか?ネットで色々調べてみてるのですが、いまい ち分かりません。具体的に教えていただけないでしょうか?
親ダイアログから子ダイアログの背景色を変更できるようにしたいのか、 ただ単にダイアログの背景色を変更したいのか、どちらでしょうか。 あと、今どこまで出来てるのかも記した方が良いと思います。 (ダイアログの作り方から聞いてるのか、そうでないのかが分からない。)
934 :
デフォルトの名無しさん :2005/07/06(水) 20:59:17
>933 すいませんでした。説明不足でした。 ボタンを押して子ダイアログを表示するとこまではできています。 あとはその子ダイアログの色を変えたいのです。 簡単なことのようですがわかりません。
935 :
デフォルトの名無しさん :2005/07/06(水) 21:01:28
あとMFCを使っていて、子ダイアログは CDialogクラスでモーダレスダイアログとして作っています。
WM_CTLCOLOR HBRUSH hbr=::CreateSolidBrush(RGB(255,0,0)); return hbr;
937 :
デフォルトの名無しさん :2005/07/07(木) 11:35:59
>936 ありがとうございます。 できました。
938 :
デフォルトの名無しさん :2005/07/07(木) 21:10:11
Windows2000,VC6でCDaoDatabase,CDaoRecordset,CDaoTableDef を使用してEXCELのインストールされていないPC環境で、 EXCELファイルからデータを読み込むプログラムを作成しています。 ソースコードはこのような感じ CDaoDatabase excel; CDaoTableDef td( &excel ); CDaoRecordset rs; COleVariant var; CDaoFieldInfo fInfo; excel.Open( "test.xls", FALSE, TRUE, "Excel 8.0" ); td.Open("main$"); rs.Open( &td ) ; rs.GetFieldInfo( offX, fInfo ); rs.GetFieldValue( fInfo.m_strName, var ); data.strCode = var.pcVal; このときに、EXCELシートのセルにデータが入っているのに読み込めない (varのvtがVT_NULLになってしまう)場合があり困っています。 原因、対処方法、もしくは、上記以外の実現方法がわかる方 いらっしゃいましたら教えてください。 よろしくおねがいします。
フォトショップのツールボックスみたいなダイアログはbitmapで作ってるわ けですか?
>>936 それじゃ GDI リソースがリークするのでまずいでしょ。
>>941 そうかもしれんしそうじゃないかもしれん。
ツールボックスの造りによってどうにでもできる。
944 :
デフォルトの名無しさん :2005/07/10(日) 08:33:00
VC.NET2003日本語版をマルチバイトでコンパイルしてるのですが、 このバイナリを他の言語のOSで起動すると ロケールは変更されるのでしょうかか?(テスト環境がないもので...) MFCをスタティックリンクした場合、ダイナミックリンクした場合でも変わるのでしょうか? よろしくお願いします。
945 :
944 :2005/07/10(日) 08:33:56
VC++.NET2003日本語版で の間違いです...
946 :
デフォルトの名無しさん :2005/07/10(日) 13:16:04
こんばんわ CString::Findの逆検索をおこなうメソッドはないのでしょうか?
>>946 MSDN で"CString クラス メンバ"を調べれ。
知ってるなら答え書けよバカ
答えよりも答えにたどり着く方法のほうが重要。
950 :
946 :2005/07/10(日) 13:41:12
>>950 >別の逆検索メンバがあるのかと思い
意味不明だが? CStringのメンバは調べたんだよね?
>950 ソース見ろ 汚いソースだが、目的の物があるかないか(非公開でも)はわかるはず
m_string.ReverseFind(cp,pos); error C2660: 'ReverseFind' : 関数が不正な 2 個の実引数をともなって呼び出されました。
954 :
デフォルトの名無しさん :2005/07/10(日) 15:55:28
VC++初心者です VC2005 Express edition beta2を使っていますが、MFCは使えないのでしょうか? どうしたら使えるようになりますか?
Professional以上を使って下さい
やはりそういうことですかorz
>>939-940 938です。
ありがとうございます。
リンク先を見る限り仕様と言う事みたいですね。
EXCELシートのセルを全て文字列に指定できるかどうか
相手に聞いてみます。
958 :
デフォルトの名無しさん :2005/07/11(月) 16:35:33
リソースのダイアログ開いて、 MFC ClassWizardを開いて、 クラスと結びつけるを選択したのですが、 CDialogから派生したダイアログクラスが出てきません。 作り方も、VC++の「新規フォーム」機能で作った正規物なんだけどなー?????
CListCtrlで、あるitemを選択状態にしたい場合はどのメソッドを使えばいいのでしょうか? MSDNを見たのですが、妥当なものがありません。 よろしくねがいます。
>>959 SetItemState(n, LVIS_SELECTED, LVIS_SELECTED)
962 :
デフォルトの名無しさん :2005/07/11(月) 16:44:56
963 :
958 :2005/07/11(月) 17:01:47
ついでに教えて欲しいのですが、 クラスとダイアログリソースとの結びつきは、 ソースファイル(?)のどこに書かれてるのでしょうか?
>>963 もっと具体的に質問してくれたまえ。
#つーか、***_dlg.cpp, ***_dlg.h, ***.rc, resource.hを眺めれば判るだろ。
965 :
958 :2005/07/11(月) 17:23:28
966 :
958 :2005/07/11(月) 17:26:20
あきらめて新規クラスとソースファイルを作り直そうとしたら、 「新規クラス "C〜Dlg"のためのファイル(〜.h, 〜.cpp)はそのクラスの残りを含んでいます」 というイミプーなエラーメッセージ。 ちょっと手詰まり。
967 :
958 :2005/07/11(月) 17:37:11
ダイアログのヘッダーには、以下のように書かれてて、 ダイアログリソースのプロパティのIDと合致してるんですが、 ClassWizardではクラスと結びついてないおかしいですね。 // ダイアログ データ //{{AFX_DATA(C〜Dlg) enum { IDD = IDD_〜_DIALOG }; // メモ: ClassWizard はこの位置にデータ メンバを追加します。 //}}AFX_DATA
*.clwあたり
969 :
958 :2005/07/11(月) 17:42:05
>>968 そのclwファイルはどうやったら更新されるんですか?
リビルドしても上記症状が変わらないんです。
971 :
デフォルトの名無しさん :2005/07/11(月) 19:00:58
1つのダイアログリソースに、 別のCDialog派生クラスを作成しようとしたんですが、 「ダイアログ ID」欄に既存IDが出てきません。 1つのダイアログリソースには、基本的に1つのクラスが良いのかな?
>>971 Wizardが受け付けないだけなので、自分で書く
973 :
958 :2005/07/11(月) 19:15:18
clwに登録されないファイルを指定して追加する方法教えて下さいでつ。
>>973 >>970 ファイル捨ててから Wizard 起動したら「作り直す?」って訊いて来ない?
975 :
970 :2005/07/11(月) 23:09:16
977 :
974 :2005/07/12(火) 00:21:49
ごめん解り難かった。orz
>>976 の言う通り。
978 :
958 :2005/07/12(火) 09:12:49
>>974 thx、聞いてきます。
が、何か中途半端に作られて、あるクラスが登録されたり登録されなかったり、、、
で、1ファイルだけ足したいなーと。
ビルド通れば問題ないから そんなのいちいち気にしない。
980 :
デフォルトの名無しさん :2005/07/12(火) 11:31:29
CDialogの2つのサイズを同じにしようとおもったら、 SetWindowRectもSetWidth/Heigthもありませんが、 どうすれば良いでつか?
981 :
980 :2005/07/12(火) 11:40:10
やりたいことは、 Dialogのま上にDialogを同じ大きさで開きたいだけですが、 一番簡単な方法教えて下さい。 リソースを同じにするのは大変そう...
リソースで合わせる方が簡単なんだが。
継承知らんのか?
北斗神拳なら継承しましたが
985 :
デフォルトの名無しさん :2005/07/12(火) 13:14:51
というかクラスライブラリなんだから、 Form1->Height = Form2->Height; Form1->Width = Form2->Width; くらい書けないの、 おかしくない?
とりあえず超能力者の登場を待とう
CDialogのカラーもプロパティになってないし、 何のためのクラスライブラリだよ、 とか思うこと無い?
※※※※※※※※※※※※※※※※※※※※ ※※※※※ キチガイ発生中 ※※※※※※ ※※※※※※※※※※※※※※※※※※※※
>>987 カラーを言うならフォントも。つか、MFCなんてその程度だ。
で、解決策はいいのか?
サイズ変更は CDialog の基底クラスであるところの CWnd の機能だが。
990 :
デフォルトの名無しさん :2005/07/12(火) 20:03:17
CDialogを派生しまくっても問題発生しませんか?
991 :
990 :2005/07/12(火) 20:08:52
具体的には派生しまくったクラスをクラスウィザードが扱えるのか知りたいでつぅ。
>>991 >派生しまくった
とは?
俺語を使わず説明しなさい。
予想するとVB厨だな。
>>991 よく解らんが、暮らすウィザードが吐く/認識するコメント行さえ維持していれば。
抽象クラスをMFCで継承するにはどうしたらいい?
さん付けで呼んでみれば?
997 :
デフォルトの名無しさん :2005/07/13(水) 04:10:40
999 :
デフォルトの名無しさん :2005/07/13(水) 05:52:35
1000 :
デフォルトの名無しさん :2005/07/13(水) 06:00:01
6時です
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。