■MFC相談室 mfc13d.dll■

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/

過去ログは >>2-5 の辺り。
2デフォルトの名無しさん:05/03/07 16:20:50
2get

過去スレ
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc5.2ch.net/test/read.cgi/tech/1062098350/
■ VisualC++(MFC限定)相談室 MFC8.dll■ (スレタイ壊れているけど前スレ)
http://pc5.2ch.net/test/read.cgi/tech/1056584836/
■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc5.2ch.net/test/read.cgi/tech/1047949606/l50
■ VisualC++(MFC限定)相談室 MFC6.dll■
http://pc5.2ch.net/test/read.cgi/tech/1039607377/
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/tech/kako/1028/10285/1028553308.html
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/tech/kako/1021/10216/1021620974.html
■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/tech/kako/1014/10140/1014057520.html
■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/tech/kako/1008/10080/1008031675.html
■ VisualC++(MFC限定)相談室 ■
http://pc.2ch.net/tech/kako/989/989902845.html
3デフォルトの名無しさん:05/03/07 19:27:22
レジストリエディタ(regedit.exe)のようなUIのアプリを作ろうとしています。
つまり、スプリッタで左右2つのViewを持ち、
左がTreeViewで右がListViewです。

そこで、ListView側に関する質問です。
これまたレジストリエディタにように、アイテムをダブルクリックしたら
値を表示したりするようなダイアログを開くようにしたいのです。
それには、どのようなオーバーライド関数や、メッセージで
引っ掛ければいいのでしょうか?
4デフォルトの名無しさん:05/03/07 19:58:57
>>3
ダブルクリック
53:05/03/07 20:52:25
>>4
あぁ… なるほど… アイテムがハイライト状態になったりするのはListViewの
デフォルトの機能だから、ダブルクリックのメッセージで引っ掛ける。

あとは、そのときのマウスカーソルの位置で対象のアイテムを特定
すればいいということでしょうか?
6デフォルトの名無しさん:05/03/08 11:25:46
マウスカーソル言うかアイテムの位置じゃね?
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;
}
8デフォルトの名無しさん:05/03/09 16:51:44
ピクチャーボックスの塗りつぶす色を
黒以外(黄色)の色を設定したいのですが
どうすればよろしいですか?
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);
}
/////
}
10デフォルトの名無しさん:05/03/10 13:20:35
>>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);を使わないで開放したいのですが、何か方法は無いでしょうか?
12デフォルトの名無しさん:05/03/12 11:05:51
>>11
FromHandle使うんじゃなくてAttachしたらどうか。
1311:05/03/12 12:05:29
Attachでいけました
ありがとうございます
14デフォルトの名無しさん:05/03/13 12:11:50
VC++6.0を使ってます。

スクロールバーのつまみのサイズを変えるにはどうしたらいいでしょうか。
15デフォルトの名無しさん:05/03/13 20:59:38
VC++6.0を使っています。
リストボックスの背景を動的に変える方法を
知ってる方がいましたら教えて頂けないでしょうか?
16デフォルトの名無しさん:05/03/13 21:39:36
>>14
SCROLLINFO::nPage
17デフォルトの名無しさん:05/03/14 21:03:48
>>16
ありがとう。
18デフォルトの名無しさん:05/03/15 09:38:16
MDIで、ドキュメントをアクティブにせずに開く方法ってありますか?
タブブラウザの「リンクを開くときにアクティブにしない」と同じような動作にしたいのですが。
19デフォルトの名無しさん:05/03/15 12:13:12
>>18
アクティブにする
20デフォルトの名無しさん:05/03/15 20:03:04
とあるWindowLessのActiveXコントロールを作っています。
大雑把に機能を言うと、リクエスト(ActiveXメソッド)があったら、
AfxBeginThreadでワーカースレッドを起こして、
そのスレッド内でとある機器とソケット通信を行って、
終わったら通信終了ということで、
そのスレッドからActiveXイベントを投げたいわけです。

まず、スレッドに発生元であるコントロール自身のポインタを渡して、
スレッド中からFireEventを呼んでみたら失敗。
まあ、これはスレッドとコントロール自身が別スレッド空間だからなあと思いつつ、

じゃあしゃあないPostMessageするかと思ったら、
WindowsLessだから当然hWndを持ってないわけです。
こういう場合、どうやって別スレッドからActiveXコントロールのFireをしてやればいいんでしょ?

少し調べてマーシャリングというものを行えば良いらしいというとこまでは行き着いたのですが、
ググった程度ではサンプル等にまではぶち当たることができませんでした。

このへん説明してるいいwebとかないっすかね?
21デフォルトの名無しさん:05/03/15 20:32:02
画像ファイルを読み込むときってCImageとか使わないで自分でオープンソースのライブラリから作るメリットってありますか?
22デフォルトの名無しさん:05/03/15 21:13:39
>>21
そのオープンソースのライブラリによる
23デフォルトの名無しさん:05/03/16 04:53:41
CRichEditViewで、例えばメニューのボタンを押したらエディタに「あああ」とか出るような方法で、
直接あああと出せる方法ってありますか?
今はクリップボードに「あああ」をコピーさせて出しているんですが・・・
24デフォルトの名無しさん:05/03/16 05:17:25
GetRichEditCtrl().ReplaceSel
2523:05/03/16 05:41:33
うおおおお!!できました ありがとうざいます!
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
28デフォルトの名無しさん:05/03/16 19:54:59
BITMAPリソースにある画像を絶対座標で最善面に表示したいのですが、やり方、あるいは参考になるサイトってあるでしょうか?
29デフォルトの名無しさん:05/03/16 20:03:37
>>28
絶対座標ってなんの座標?
最善面に表示ってどこの最前面?
30デフォルトの名無しさん:05/03/16 20:14:42
デスクトップの絶対座標と全てのアプリの最前面です。WndTopMostみたいなやつでしょうか
31デフォルトの名無しさん:05/03/16 20:27:52
>>30
ビットマップリソース表示と、最前面表示を別々にググればたくさん出てくるよ。
32デフォルトの名無しさん:05/03/16 20:29:20
それじゃ意味がないんです
33デフォルトの名無しさん:05/03/16 21:01:15
ていうか>>30で激しく正解が出ているわけだが。
34デフォルトの名無しさん:05/03/16 21:34:40
>>32
ビットマップリソース表示と最前面表示の方法がわかれば
あとはそれらを組み合わせるだけじゃん。
35デフォルトの名無しさん:05/03/16 21:45:49
因みに>>32は別人です。
もっと色々やってみます。ありがとうでした
3618:05/03/17 11:13:35
誰か、教えて・・・
37デフォルトの名無しさん:05/03/17 12:01:54
だからアクティブにしたくなかったら
アクティブにすればいいんだよ
38デフォルトの名無しさん:05/03/17 18:55:21
リストビューの項目をセンタリングしたい場合どうしたらよいのでしょうか?
39デフォルトの名無しさん:05/03/18 10:38:09
40デフォルトの名無しさん:05/03/18 13:21:46
>>39ありがとうございますm(__)m
41デフォルトの名無しさん:05/03/20 19:00:17
exeと同じ階層に設定ファイルを置いているんですが、
開くファイル?を右クリック⇒プログラムから開く、でやるとその開くファイルと同じ階層から設定ファイルを開こうとしているようなんです
どうすれば常にexeと同じ階層から設定ファイル開くようにできるんでしょうか?
42デフォルトの名無しさん:05/03/20 19:26:47
>>41
実行モジュールのあるディレクトリにある設定ファイルを開けばいい。
つまり、GetModuleFileName()で取得できたファイル名の'\\'から後を捨てて得られたディレクトリに
移動してから設定ファイルを開けばいい。
4341:05/03/20 20:09:10
ありがとうございます、できました
44デフォルトの名無しさん:05/03/20 21:55:02
mfc最高!
45ゆん:05/03/20 23:17:49
検索サイトエンジンを作ってみたい><
あれってCGIでできてるの??
誰かつくり方しってますかー????


46デフォルトの名無しさん:05/03/20 23:31:44
スレ違いどころではないな
47デフォルトの名無しさん:2005/03/21(月) 06:24:54
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から呼び出すなど、色々試してみたのですがうまく行きません。
原因がわかる方いらっしゃいましたらどうぞ御教授下さいませ。
49デフォルトの名無しさん:2005/03/21(月) 20:28:04
VC++のように複数行選択してシフトを押すと全体にタブ、シフト押しながらだとタブが1つ減る(なんか変な言い方・・・)
とか、CTRL+Zで何十回も戻れたりする動作は自分でコーディングしないといけないんでしょうか?
それとも簡単にできるものなんでしょうか?
50デフォルトの名無しさん:2005/03/21(月) 21:20:19
>>49
VisualStudioのテキストエディタの、インデントの話かな?
かなり自分で書かないとダメッしょ。
51デフォルトの名無しさん:2005/03/21(月) 22:44:48
全部、自分で書け。
エディットコントロールに頼る様ではダメ。
5248:2005/03/22(火) 16:12:20
pc8キタ━━━━(゚∀゚)━━━━ッ!!

>>48
解決したので自己レス。
ttp://wg-web.ics.teikyo-u.ac.jp/usage/VC/vwchange.html
の中の各フォームビューの切り替え時に、
OnInitialUpdateを明示的に呼んであげたら直りました。
上記のサンプルコードだと、うまくイニシャライズされてないのかなという感じ。
53携帯から:2005/03/22(火) 16:17:45
ダイレクトにカキコ
54デフォルトの名無しさん:2005/03/22(火) 20:23:25
VSのようなドッキングウインドウが使いたいのだが、
みんなそういう時どうしてる?
何かいいものあるかい?
55デフォルトの名無しさん:2005/03/22(火) 20:44:14
CodeGuruから拾ってきたりダイアログバーを無理やり着飾ったり。
56デフォルトの名無しさん:2005/03/22(火) 20:59:09
>>55
難しそうだな。
拾ってくるとしたらお勧めってある?

Visual Studio のようなドッキングするウィンドウをつくるには?
http://techtips.belution.com/ja/vc/0004/

ツールバーやダイアログバーをもっとお洒落に!DCL2について
http://www.systemconcept.co.jp/DclDocs/DclHelp.htm

Xtreme Suite(英語版) - for Visual C++ (MFC) - V9.601
http://devx.componentsource.co.jp/catalog.asp?ul=ja&PO=514433

2番目のDCL2って言うのが気になるんだが、
使ったことある人いる?
57デフォルトの名無しさん:2005/03/22(火) 21:17:41
MFCじゃないけどWTLにあったような希ガス
5849:2005/03/23(水) 11:35:29
ありがとうございます
あれから頑張ってみたんですが、TABとSHIFT+TABは比較的すぐできました
しかし複数UNDOが難しすぎます・・・
UNDOされている内容を別のところに保存する、ということはできないんでしょうか?
5949:2005/03/23(水) 11:36:58
UNDOされている内容ってorz
UNDO用のデータ?ですかね・・・
60デフォルトの名無しさん:2005/03/23(水) 17:48:28
newが投げる例外についての質問です。
std::bad_alloc前提で作った非MFCライブラリを
MFCプロジェクトで使うことはできるのでしょうか?

単純にリンクすると、newがCMemoryExceptionを
投げるので、例外処理が働かなくなってしまいます。
61デフォルトの名無しさん:2005/03/24(木) 10:32:16
マルチで申し訳ないです。
以下で質問を投げているのですが、決定打が無く困っています。
切羽詰った状況なので、どなたか教えていただけないでしょうか?

http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200503/05030042.txt
62デフォルトの名無しさん:2005/03/24(木) 11:19:24
>>61
自分で文字数計算して切り捨て
6361:2005/03/24(木) 11:42:45
>>62
文字切り捨ては最終手段と考えています。

どうも横幅の64のみが無視されるようで、
例えば32ピクセル分のテキストを全てのボタンに当てた場合、
今度は32*64のボタンになってしまうのです。

画像にテキストを埋め込む手段も考えてはいますが…
もっとスマートに変えられないものでしょうか。
64デフォルトの名無しさん:2005/03/24(木) 11:55:00
>>63
文字切捨てを避けたい理由は?
その方がスマートだと思うけど。
後は、メモリDC使ってテキストを描画して、それを貼るとか。
65デフォルトの名無しさん:2005/03/24(木) 12:20:34
>>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のバージョンを上げると変になった。
66デフォルトの名無しさん:2005/03/24(木) 12:24:54
>>65
訂正、最後の行は高さが64のせいで、バージョンが変わっても問題なし。
6761:2005/03/24(木) 12:50:05
>>64
デザインの都合上、ボタンサイズを64*64で固定させたいので、
64未満になってもらっても困るのです。
どうも私の環境だと、幅64の指定が無視されまくるようで・・・

テキスト切捨てで解決できるのならば、それでも良いのですが。

>>65
TBSTYLE_AUTOSIZEは意図的に下ろしてもNGでした。
念のためもう一度確認してみます。

MFCやめたい_| ̄|○
68デフォルトの名無しさん:2005/03/24(木) 12:52:35
普通にやっても、固定サイズになったよ
UINT nStyle = ToolBar.GetButtonStyle(index);
ToolBar.SetButtonStyle(index, nStyle ^ TBBS_AUTOSIZE);
6961: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だとグレーアウトしてしまうので、やりたいことと違うのです。
以上、よろしくお願いします。
71デフォルトの名無しさん:2005/03/24(木) 17:23:53
スタイルいじって更新すればいいんでないか?
72デフォルトの名無しさん:2005/03/24(木) 17:24:08
>>70
read MSDN.

CEdit::SetReadOnly()
7370:2005/03/24(木) 17:30:09
あああ!CEditにあったんですね!
おらこっぱずかしいです!
ありがとうございました。
74デフォルトの名無しさん:2005/03/24(木) 20:17:43
普通、派生クラスからメソッド探していくんじゃないの?
75デフォルトの名無しさん:2005/03/24(木) 21:31:38
メソッドと言う香具師はイッテヨシ
76デフォルトの名無しさん:2005/03/24(木) 22:18:35
メッソド
77デフォルトの名無しさん:2005/03/24(木) 22:23:16
メンバ関数
78デフォルトの名無しさん:2005/03/25(金) 01:00:18
>>69ダイアログバー使えばいいじゃん。
79デフォルトの名無しさん:2005/03/25(金) 08:06:31
>>75
しまった!
サブクラスってのは派生クラスに直したんだけど・・・
って、C++はメソッドって言わないんだっけ?
80デフォルトの名無しさん:2005/03/25(金) 08:55:50
>>79
MSDNにメソッドと書いてあるか?
81デフォルトの名無しさん:2005/03/25(金) 10:21:20
(・∀・)メソッド
82デフォルトの名無しさん:2005/03/25(金) 11:23:06
意味が通じるんならいいじゃない
83デフォルトの名無しさん:2005/03/25(金) 12:39:47
>>80
MSDN を規範にするのもどうかと思うが…
まあ C++ のメンバ関数を「メソッド」と呼ぶのが誤りなのは確かだな。
ActiveX のメソッドと紛らわしいし。
84デフォルトの名無しさん:2005/03/25(金) 12:53:14
メソッドって書いてある本は多いよね
85デフォルトの名無しさん:2005/03/25(金) 13:52:52
>>83
MSDNで調べる話だからでしょ。
8661:2005/03/25(金) 13:53:05
>>78
上がってきたデザインがツールバーそのものだったんですよ。
ボタンの真ん中に画像、その下にテキストつきです。
ダイアログのボタン操作になれていなかったので、ツールバーを使ったのですが・・・
今思えばダイアログの方が苦しまずに済んだかもです。

少々結果報告を。
Notify で苦し紛れをしていましたが、
今度はOnUpdatexxx() でSetCheck() をいじったところ、
ボタンを押すだけでまたサイズが変化する現象が発生しました。
SetCheck() の後に SetSizes() をボタン数分コールして汚いソースになってきまして、
更にツールバーが度重なる画面更新でちらつきまで発生して、
結局テキストをぶった切って対処しましたとさ。

;y=ー( ゚д゚)・∵. ターン
8761:2005/03/25(金) 14:02:42
脳汁拾ってくれる方がいましたらコレ↓についてもコメントを・・・
ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200503/05030050.txt

(´・ω:;.:...
88デフォルトの名無しさん:2005/03/25(金) 14:23:31
>>87
・InsertColumn()でラベルを貼り付けてカラム数を確保
・InsertItem()で行を追加
・SetItemText()などで項目をセット

この要領で問題なくできると思うけど?
8961:2005/03/25(金) 14:34:01
アリガトウ・・・ゴザイマシタ...

(´:;....::;.:. :::;.. .....
90デフォルトの名無しさん:2005/03/26(土) 06:04:41
Cランタイムを利用しているスタティックリンクライブラリAがあります。
そのライブラリを、あるMFCプロジェクトで使うとします。

最終的な実行ファイルにMFCをスタティックリンクしたい場合、
AもMFCをスタティックリンクする設定にしないとダメですか?
91デフォルトの名無しさん:2005/03/26(土) 19:55:27
質問です。

VCでダイアログベースのexeを作成しています。
CWinAppのコンストラクタの中の、
ASSERT(AfxGetThread() == this);
でAssertが発生するのですが、原因がわからなくて困っています。
どうしたら解決できるのでしょうか。

どなたかご存知の方、よろしくお願いします。
92デフォルトの名無しさん:2005/03/26(土) 20:53:08
>>91
CWinAppのコンストラクタはMFCの初期化前に走る。(グローバルにあるので)
初期化前なのでAfxGetThread()が正常な値を返していないのだろう。
93デフォルトの名無しさん:2005/03/26(土) 23:03:44
コンボボックスで選択されているアイテムのインデックスを取得したい場合どうすればいいでしょうか
94デフォルトの名無しさん:2005/03/26(土) 23:06:46
CComboBox::GetCurSel()
95デフォルトの名無しさん:2005/03/26(土) 23:14:23
ttp://mfc.acty-net.ne.jp/ml/mfc/00050332.shtml
と同じ症状で困っています。
原因は、ウィザードで作成された class をnamespaceで区切ったことに
あるとおもうのですが、これを迂回する方法があれば教えて下さい。
96デフォルトの名無しさん:2005/03/27(日) 16:50:14
コントロールのメンバ変数をClass wizardから追加するとClass Viewからクラス構成が消えてしまい困っています。
対処法を教えてください
97デフォルトの名無しさん:2005/03/27(日) 16:58:19
クラス構成が消えたら作り直せば良い。
VSを一旦終了して.clwというファイルを削除
VSを起動してクラスウィザードを起動すると
クラス情報が無いから既存のファイルから作るかとか聞かれるので
承諾する。これでクラス情報は作り直せる。
98デフォルトの名無しさん:2005/03/27(日) 18:53:00
つーか、スレ違いだがや。
99デフォルトの名無しさん:2005/03/27(日) 21:53:30
クラスビューはヘッダーを元にツリーを作るから、ヘッダーを更新してやりゃいいよ。
改行して改行消して保存とか。
100デフォルトの名無しさん:2005/03/29(火) 10:52:01
MFCを後から継ぎ足したようなプログラムを解析してますが、
mainはMFC内にあるんでしたっけ?
プログラム側の開始はどこにあるか、どう読めば良いでしょう?
ダイアログはリソースになってますが、起動時の画面はリソース定義されてないみたい。

で100ゲト
101デフォルトの名無しさん:2005/03/29(火) 11:28:49
適当なところでブレークしてコールスタック見る
102デフォルトの名無しさん:2005/03/29(火) 11:41:21
サンクス>>101
見れたけど、
CWinThread::Run()
AfxWinMain
WinMain
くらいしかナカタ
103デフォルトの名無しさん:2005/03/29(火) 11:59:30
WinMain == main
104デフォルトの名無しさん:2005/03/29(火) 12:04:04
>MFCを後から継ぎ足したようなプログラム
どんなのかよくわからんが CWinApp の派生クラスがあるなら
派生クラス::InitInstance() あたり
105100:2005/03/29(火) 12:11:58
サンクス>>104
CWinAppとInitInstanceの両方ありますた。
106デフォルトの名無しさん:2005/03/29(火) 19:12:50
beckyのような分割ウィンドウのアプリを作りたいと思っています。
(以下、激しく becky をイメージした説明&質問になってます。
すみません。。)

3ウィンドウを作るには、CSplitterWnd でまず二分割して
一方をさらに入れ子にして二分割する。でもって、左側の
ビューはCTreeView、右上のビューはCListView、右下の
ビューはCEditViewあたりから派生させてやればいいと思いました。

で、疑問なのですが、右上のメールリストと右下のメール本文
表示ビューとの間にある、メールタイトルなどがでている部分は
MFC的にはどのように実装されているのでしょうか。
107デフォルトの名無しさん:2005/03/29(火) 19:28:53
ダイアログ
108106:2005/03/29(火) 22:14:59
コメントありがとうございます。>>107

右下のビューをCFormViewから派生させて
リソース・エディタで適当にコントロールを配置。
あと、ウィンドウのサイズ変更に備えて、WM_SIZEに
対するOnSize関数をオーバーライドしてMoveWindow()で
各コントロールのサイズ調整する、って感じでうまく
いきそうです。

なにか変なことやってるかもなので気づいたら
教えてもらえると嬉しいです。
109デフォルトの名無しさん:2005/03/30(水) 05:49:38
ビットマップリソースをデスクトップの絶対座標で表示したいのですが、どうすればよいのでしょうか?
BitBltだとウィンドウ内にしか表示されなくて・・・
詳細に言うと、ダイアログベースで、計算結果のデスクトップ座標にリソースのビットマップを印として置きたいのです。
前にも似たような質問あったみたいですが、それ見ても分からなくてOTL
110デフォルトの名無しさん:2005/03/30(水) 09:12:28
Desktopのハンドル取得して、以下同文。
111デフォルトの名無しさん:2005/03/30(水) 23:17:31
質問です
Viewの基本クラスをCRichEditViewにしてエディターを作っているのですが
これで作成するとデフォルトでテキストが右端で自動で折り返されてしまいます
これを回避しようと
ViewのPreCreateWIndowでcs.styleに
ES_AUTOHSCROLLとWS_HSCROLLフラグを追加してみましたが
オートスクロールはするようになったのですが今度は改行がされません
じゃあってことで
ES_MULTILINEとES_WANTRETURNをさらに追加してみると
デフォルトの動作と全く一緒になってしまいます
どこか根本的に間違ってるきもするのですが知恵を貸してください
112デフォルトの名無しさん:2005/03/30(水) 23:40:46
ダイアログベースで作成しています。
コントロールのメンバ変数を追加してほかのクラスからこのメンバ変数を参照するにはどうすればいいですか?
113111: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 してもだめでした。
117デフォルトの名無しさん:2005/03/31(木) 23:31:19
メッセージじゃない物をSendMessageしてもなあ
118デフォルトの名無しさん:皇紀2665/04/01(金) 03:31:18
SetFocus();
GetListCtrl().EditLabel(pDispInfo->item.iItem);
119デフォルトの名無しさん:皇紀2665/04/01(金) 10:34:02
>>117
メッセージの一覧に出てきてもメッセージじゃないものがあるんですね。
自分まだまだ精進が足りないっす。

>>118
できました!ありがとうございます。
120デフォルトの名無しさん:皇紀2665/04/01(金) 10:57:17
>>119
LVN_ENDLABELEDITはWM_NOTIFYに乗せられてやってくる。
121デフォルトの名無しさん:皇紀2665/04/01(金) 11:30:59
WM_NOTIFYは何か操作が行われた結果を通知するメッセージなので勝手に送っちゃダメよ。
122デフォルトの名無しさん:皇紀2665/04/01(金) 17:14:12
CButtonを使った丸いボタンを作っているのですが、
オナードローにして楕円の絵を描き、リージョンの設定も行って
実際触れられるのは丸い領域になっているのですが、背景に
元の四角形の大きさで灰色の部分が残ってしまいます。
(楕円の絵の後ろに灰色の四角があるような状態です)
これを消すと言うか最初から描かない方法はありますか?
123デフォルトの名無しさん:int 2ch =05/04/01(金) 20:44:39
>>122
描かないとその部分だけおもしろいことになる
124デフォルトの名無しさん:int 2ch =05/04/01(金) 20:58:17
クリップしちゃえばいいじゃない。
125デフォルトの名無しさん:int 2ch =05/04/02(土) 00:58:03
MFCでドキュメントビューアーキテクチャを使ってMDIアプリを作っているのですが
この場合ドキュメントの種類ごとにメニューが変わりますよね?
メニューの状態を動的に変化(例えばチェックを入れる)させたいのですが
現在セットされてるメニューの状態しか変化させられません
デフォルトで作られる「表示>ツールバーを表示」のチェックみたいに
メニューが切り替わっても状態の同期をとることはできないのでしょうか?

126デフォルトの名無しさん:int 2ch =05/04/02(土) 01:19:43
>>125
ON_UPDATE_COMMAND_UI を調べろ
127デフォルトの名無しさん:int 2ch =05/04/02(土) 02:05:20
>>126
サンクス、解決しました
128デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 16:15:06
CDialog::DoModalってプロセスに対してモーダルじゃなくてスレッドに対してモーダルなの?
モードレスのダイアログとマルチスレッドのモーダルダイアログって何が違うの?

後ひとつ質問、CDialogのクラス名ってどこで決まるの?
::GetClassNameで取得してみると「#32770」なんて出るんだけど???
129デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 16:46:17
>>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の配列は作れないんでしょうか?
131デフォルトの名無しさん:2005/04/03(日) 00:34:02
>>130
CStringArrayにはoperator=がないから。
CArray::Addのソース見てみればわかるが、拡張した要素に引数を代入してる。
132デフォルトの名無しさん:2005/04/03(日) 00:46:25
>>131
ありがとうございました。
operator=をサポートしているオブジェクトしかCArrayは使えないんですね。
勉強のためにCArray::Addのソースを見ておこうと思います。
133130: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のバッファが壊れたりしないか不安。
134デフォルトの名無しさん:2005/04/03(日) 01:21:00
>>133
>とかやった場合、CArrayのバッファが壊れたりしないか不安。

なんで?
135130:2005/04/03(日) 01:37:10
>>134
何となくですが、CArrayの配列を確保したあとに
配列要素のオブジェクトサイズが増えると
メモリをオーバーライトしそうな気がしたので。。

しかしそんな訳ないですね。
136デフォルトの名無しさん:2005/04/03(日) 11:29:08
つーか、なんでSTL使わないの?
137デフォルトの名無しさん:2005/04/03(日) 11:44:11
またSTL厨か。
138デフォルトの名無しさん:2005/04/03(日) 11:50:43
いや、なんでCArrayを使うのかなぁと。
139デフォルトの名無しさん:2005/04/03(日) 13:35:35
CArrayってメモリ再確保する時、既存の要素をmemcpyでコピーしてるんだよね・・・

class A
{
HOGE a, b;
HOGE* p;
public:
A(bool f) : p(f ? &a : &b) {}
};

なんてクラスだと、再確保されたとたんおかしくなる。
あとコピーコンストラクタも使ってないから要素を追加すると
デフォルトコンストラクタ→operator=となる。
140デフォルトの名無しさん:2005/04/03(日) 14:24:02
え、memcpyってマジなの?
なんか、勉強するのがマジで嫌になってきた・・・

質問なんだけど、みんなクラスウイザードつかってクラス作ってるの?
今、Win32アプリケーション−空のプロジェクトから作ってるんだけど
マクロが使いにくくて辛い・・・

ウイザードを我慢して使う?
ウイザードを使わない?
ウイザードが吐いたコードを修正して使う?
どれが方針として正しいの?
141デフォルトの名無しさん:2005/04/03(日) 15:18:03
>>140
私は、MFCのクラスを継承するときだけクラスウィザードを使った。
後は普通にエディタで書くからねぇ。
142デフォルトの名無しさん:2005/04/03(日) 19:49:38
これからMFCを勉強しようと思っています。
MFC入門の本はいろいろ出てますが、
お勧めや買っちゃいけないものはありますか?
 CやC++の基本はわかってるつもりです。
143デフォルトの名無しさん:2005/04/03(日) 20:44:41
新VisualC++.NET入門買ったけど金をドブに捨てたようなもんだったな
144デフォルトの名無しさん:2005/04/03(日) 20:53:31
145デフォルトの名無しさん:2005/04/04(月) 09:16:33
>>123
描かない事自体が出来ない感じです・・・DrawItemをすぐにreturnで返しても
灰色の四角が残っているような状態です。

>>124
描画処理の所ではクリップして転送してるのですがダメなんですよね・・・。
灰色の部分は最初から背景に描かれてるような感じです。
146デフォルトの名無しさん:2005/04/04(月) 11:55:51
ウィンドウにリーヂョン当てちゃえばいいじゃない
147デフォルトの名無しさん:2005/04/04(月) 19:31:39
ON_COMMANDってGoFの Chain of Responsibility を実装するためのマクロなの?
148デフォルトの名無しさん:2005/04/05(火) 11:28:32
だれかCMapおせーて
149デフォルトの名無しさん:2005/04/05(火) 11:44:46
やだ
150デフォルトの名無しさん:2005/04/05(火) 13:16:41
おせーてよ
151デフォルトの名無しさん:2005/04/05(火) 13:38:20
>>148
インチキ臭い CMap など使わず、std::map 使え。
152デフォルトの名無しさん:2005/04/05(火) 14:52:22
CBitmapButtonにリージョン設定してもうまく動きません。
なんででしょう。
153デフォルトの名無しさん:2005/04/05(火) 15:48:32
>>152
「うまく動きません」を説明するところから始めようか。
154152:2005/04/05(火) 16:38:49
>>153
そうですね。
まず、LoadBitmapsをオーバーライドしてファイルのビットマップを
開くようにしています。
で、LoadImageしたハンドルをそれぞれm_bitmap、m_bitmapSel、
m_bitmapFocus、m_bitmapDisabledにアタッチします。
この時に、ついでにm_bitmapに割り当てるビットマップを使って
リージョンを作成し、SetWindowRgnしています。

DrawItemでは、CBitmapButton::DrawItem(lpDrawItemStruct)をした
後に自分で文字乗せをしています。

この状態で走らせると、ボタンの押下とかでちゃんとリージョンが
効いている事が確認出来るのですが、表示の方はリージョンで切り
取られず、元の四角いビットマップ画像が出てしまいます。

画像の描画をリージョン内に止めるにはどうすればいいのでしょう。
155デフォルトの名無しさん:2005/04/05(火) 17:09:33
>>154
WS_CLIPSIBLINGS
156デフォルトの名無しさん:2005/04/05(火) 17:14:12
>>152
この前から何度も質問しているんだから、もう少し質問の仕方巧くなろうよ…
157デフォルトの名無しさん:2005/04/05(火) 17:36:30
>>155
期待する動作を得ることができました。
ありがとうございます。

>>156
質問、初めてなんですけどねw
確かに質問の仕方は悪かったですね。
以後気を付けるようにします。
158デフォルトの名無しさん:2005/04/05(火) 21:21:08
ダイアログ内にエディットボックスを配置して、
その入力補助みたいなことをやりたいのです。

エディットボックスの変更によってEN_CHANGEが送られてきたときに、
それがユーザによるものなのか、プログラム自身によるものなのかを見分けるには
どうするのが定番なのでしょうか?
159デフォルトの名無しさん:2005/04/05(火) 21:26:44
陸、海、空オンライン、ただ今鋭意!開発中!

小規模板にある、MMO製作プロジェクトぉ

厨房こぃ!
160158:2005/04/05(火) 21:30:18
ちなみに、今のところテキストボックスがフォーカスを持っているかで判定しています。
問題無ければこれで行こうと思ってるんですが。
161デフォルトの名無しさん:2005/04/05(火) 22:52:02
リストボックスを複数選択可能にして選択されているアイテムを全て取得するにはどうすればいいですか?
162デフォルトの名無しさん:2005/04/05(火) 23:42:39
163デフォルトの名無しさん:2005/04/06(水) 14:26:50
>>151
CMapはインチキくさいの? std::mapはつかえないんだわ。
コンテナで、mapは、Dllの引数などにつかえないらしくってさ。
http://support.microsoft.com/default.aspx?scid=kb;JA;168958
164デフォルトの名無しさん:2005/04/06(水) 16:00:28
intの値を、文字列数値としてCStringに入れるにはどうしたら良いで塚?
165デフォルトの名無しさん:2005/04/06(水) 16:07:16
>>164
CString::Format()
166デフォルトの名無しさん:2005/04/06(水) 16:07:38
>>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");
168デフォルトの名無しさん:2005/04/06(水) 16:53:15
いつからココは凄い勢いで答えるスレになりましたか
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デフォルトの名無しさん:2005/04/06(水) 18:15:45
>>169
20の根拠は?
172デフォルトの名無しさん:2005/04/06(水) 18:21:07
>>171
んなもん根拠ないでしょ。一例なだけで。
173デフォルトの名無しさん:2005/04/06(水) 18:36:26
実行Exeのファイルパス取れますか?
174デフォルトの名無しさん:2005/04/06(水) 18:38:15
20桁くらいのサイズなら2^32までの数字は文字列に
収まるだろう。char a[4]とかだと数字の1000000は
文字列として格納出来ない
175デフォルトの名無しさん:2005/04/06(水) 18:39:41
>>174
GetCurrentDirectory
176デフォルトの名無しさん:2005/04/06(水) 18:42:03
>>175
それって、実行時のフォルダ変えられたら変わるんでないの?
177デフォルトの名無しさん:2005/04/06(水) 18:49:25
>>176
そりゃそうだ
178デフォルトの名無しさん:2005/04/06(水) 20:20:12
GetModuleFileName
179デフォルトの名無しさん:2005/04/07(木) 00:09:33
Win32APIの質問ばかり。。。
180デフォルトの名無しさん:2005/04/07(木) 10:21:07
ちっちゃいテストアプリ作りたいんですが、
AppWizardすると巨大なファイル&コード郡が...

自分でWinMainして中の人にMFCクラスをnewさせた方が良いのかなぁ?
181デフォルトの名無しさん:2005/04/07(木) 10:50:35
そんなことできないよな?
182180:2005/04/07(木) 11:04:10
何か、WinMainもAfxWinMainもあるわけね。
で、CWinApp派生させて処理起動すんのか。
183180:2005/04/07(木) 11:19:25
テストアプリと最終的に開発するアプリと、
ダイアログ単位のファイル/クラスを共有させたいんですが、
RCファイル1個に全ダイアログ入れなきゃならないんでしょうか?
184180:2005/04/07(木) 11:25:19
CWinAppはInitInstanceだけをオーバーライドして、
他はイジラナイ方が良いんだろうかね?

CWinAppに全処理入れたら、巨大な1クラスアプリになっちゃうし。
185180:2005/04/07(木) 11:34:12
ダイアログ・クラス単位にライブラリ化したいんだが、
アプリのrcファイルとダイアログと切り離し可能でつか?
186デフォルトの名無しさん:2005/04/07(木) 12:11:49
可能だけどめんどくさい。
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;
}
188180:2005/04/07(木) 13:02:02
サンクスでつ>>186-187

ダイアログ単位にクラスライブラリ化する方法も教えてキボンニュ
189180:2005/04/07(木) 14:18:34
なんだか、ダイアログ1枚作るにも、リソース作成、クラス作成、コンパイルエラー、
とメンドクなぁい?
190デフォルトの名無しさん:2005/04/07(木) 15:00:03
>>189
それなら、どうあればいいと思うのだ?
つーか、最期のコンパイルエラーとは何だ。
191180:2005/04/07(木) 15:18:40
Docクラスのnewでエラーだったので消しますた。
もちろんDocクラスは自作しますが、IDEに作って貰う必要はナサゲ。
192180:2005/04/07(木) 15:54:30
CDialogの派生なんて、C++的には数行の筈なのにイミプーなヘッダーファイルが...
193180:2005/04/07(木) 16:15:02
Dlg.DoModal()しても表示されない。orz
MFCって画面に弱くない?
194デフォルトの名無しさん:2005/04/07(木) 16:19:58
CFileDialogをデフォルトで縮小表示させたいのですが、やり方知っている方いますか?
【XP/2000 VC++6.0】
195デフォルトの名無しさん:2005/04/07(木) 16:21:57
>>193
弱いのはあんたの頭。
196180:2005/04/07(木) 16:28:06
確かに頭が強ければ、ダイアログ単位にクラスライブラリ化できない環境を使うべきでないな。
197180:2005/04/07(木) 17:03:44
リソースのプロパティ開き直してダイアログクラスにリンクさせてやっとダイアログが開いた。
何のリンク情報が抜けてたんだろう?
198デフォルトの名無しさん:2005/04/07(木) 18:17:04
ここが >180 の日記スレになった件について
199デフォルトの名無しさん:2005/04/07(木) 23:39:00
久しぶりに香ばしいのが来たじゃないか

でもまんどくせ
200デフォルトの名無しさん:2005/04/07(木) 23:44:06
まんどくせ
201デフォルトの名無しさん:2005/04/08(金) 02:26:11
駄目だ。やっぱりbitmapリソースの最前面表示が出来ないorz
誰か教えてください。・゚・(ノд`)・゚・。
202デフォルトの名無しさん:2005/04/08(金) 02:28:36
お前のプログラム如きが最前面に表示される価値は無い。
203デフォルトの名無しさん:2005/04/08(金) 02:43:01
煽るならもっと面白い事書いてやれよ
204デフォルトの名無しさん:2005/04/08(金) 04:19:35
マウスクリックでフォーカスを得ると、内容が全て選択された状態になるエディットボックス、
つまり、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日悩んでます。。。
206205:2005/04/08(金) 14:38:57
すいません。
環境忘れてました。
・Win2000
・VC6
・Win32 Console Application
207デフォルトの名無しさん:2005/04/08(金) 15:43:23
>>205
stdafx.hの後にマクロ定義してもダメ。
プロジェクトの設定のマクロのところで定義するか
stdafx.h内でwindows.hやafx〜.hをincludeする前に定義する。
208205: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>

--------------------------------------------------------------------------
209デフォルトの名無しさん:2005/04/08(金) 16:28:22
プリプロセッサがどう処理してるか考えれば一目瞭然なんだけどな
210デフォルトの名無しさん:2005/04/08(金) 18:09:28
ここでいいかどうか微妙だけど質問

今、MFCを使わないでコンソール用のプログラムを作ってる。
構造体の名前でCButtonとかCDialogといったMFCのクラスと同じ名前を使うと
構造体のメンバ補完の場面で自作構造体のメンバが候補に出てこないで
MFCのメンバが候補に出てくるんだが、これを正しい候補が出るようにするには
どうしたらいいんだ?

VC6です。
211デフォルトの名無しさん:2005/04/08(金) 18:16:11
>>210
C〜って名前にするのをやめればいい。
212デフォルトの名無しさん:2005/04/08(金) 18:19:34
>>210
ちょっとやってみたがちゃんと自分のクラスが表示されたぞ。
まぁインテリセンスがまともに機能しないのは仕様だから諦めるしかないんじゃね?
213デフォルトの名無しさん:2005/04/09(土) 18:36:37
リストビューでカラムのサイズを変更できないようにする方法とスクロールバーを表示させない方法をおしえてください
214デフォルトの名無しさん:2005/04/09(土) 19:10:29
>>213
See MSDN.
215デフォルトの名無しさん:2005/04/09(土) 20:49:13
モーダルダイアログを出したくて、呼び出す側のヘッダーで

public:
CModDlg *m_mod;

このようにデータメンバーを追加したのですが、この行で
error C2143: 構文エラー : ';' が '*' の前に必要です。
error C2501: 'CModDlg' : 識別名を宣言するのに、型が指定されていません。
error C2501: 'm_mod' : 識別名を宣言するのに、型が指定されていません。
と、エラーが出てしまいます。
原因分かる方いらっしゃらないでしょうか?
216デフォルトの名無しさん:2005/04/09(土) 20:52:51
>>215
>識別名を宣言するのに、型が指定されていません。
の通りなんだが。
217デフォルトの名無しさん:2005/04/09(土) 21:23:41
>>215
つ【#include "ModDlg.h"】
218204:2005/04/09(土) 22:34:15
すみませんー
>>204のやり方をご存知の方おられませんか?
219デフォルトの名無しさん:2005/04/10(日) 04:26:59
>>218
ためしにやってみたけど
それで問題なく動くと思うけど?
マウス押してから離すまでの間にマウス動かしたりしてない?
もしくはおまいさんのマウスがおかしくなってて動かしてないのに
ぷるぷる動いてる状態になってるとか
220デフォルトの名無しさん:2005/04/10(日) 10:19:58
>>204自身がぷるぷる震えてたりして。
221204:2005/04/10(日) 18:59:58
うーむ。
どうクリックしても、クリック位置までの選択になってしまいます。
仮にマウスが動いていたとしても、IEなんかの場合、
マウスをどう動かそうと全部選択になりますよね?

テスト用に簡単なソースと実行ファイルです。
試してみてもらえないでしょうか?
ttp://www.uplo.net/www/vip4916.zip
222デフォルトの名無しさん:2005/04/10(日) 19:15:07
すんごい素早くシングルクリックすると全部選択されるな。
223204:2005/04/10(日) 19:47:45
なんですと。
とりあえず正攻法じゃ無いですよねコレ
224デフォルトの名無しさん:2005/04/10(日) 21:39:36
>>221
普通にクリックしても全部選択されたよ???
VC6, Windows XP SP2
225204:2005/04/10(日) 22:04:04
>>224
ありがとうございます。
環境によるのかなぁ…
ちなみにウチはVC6, Windows 2000 SP4です。
226デフォルトの名無しさん:2005/04/10(日) 22:30:23
>>225
あなたと同じ環境だけど必ずでは無いけど確かになるね。
・・・と思ったらクリックした後にちょっとマウスカーソルが
動くとなるみたいだな。光学式のマウスとか使ってない?
227デフォルトの名無しさん:2005/04/10(日) 22:31:36
あと起動した最初だけはマウスカーソルの場所までしか選択されないね。
228204:2005/04/10(日) 23:39:33
>>226
ズバリ光学式です。
少なくとも画面上ではカーソルは動いてないんですけどね。
むしろ上手く選択されない方がレアケース?
とはいえ、IEのアドレスバーの方はきちんと動作してますしねー
229224:2005/04/10(日) 23:41:29
>>225
WM_SETFOCUSとWM_LBUTTONUPの間に、どんなメッセージが来てるか、SPYで監視してみれば。
原因はよく分からないけど、WM_MOUSEMOVEが同時に送られているんだと思う。

当たり前だけど、左ボタンを押したまま、マウスを動かすと選択範囲がカーソルまでになる。
これはエディットボックスのデフォルトの仕様。
IEのURLボックスは、そうならないように別途処理しているはず。
ボタンが押されている間は、WM_MOUSEMOVEを無視するようにすれば、最初の問題も解決するのでは?
230デフォルトの名無しさん:2005/04/10(日) 23:56:20
>>204
あと言っておくけど
IEのバーはエディットボックスじゃなくコンボボックスだ
複数行じゃなくてもいいなら
コンボボックスにしてドロップダウンのサイズを0にして
タイプを標準にするっていうのはどうだろう?
正攻法ではないがこれで難なく望む動作が得られると思うが
231204:2005/04/10(日) 23:58:37
おぉ、マウスを浮かせていてもWM_MOUSEMOVEが飛んできてました。
マウスがヘタレなんでしょうか?
WM_MOUSEMOVE無視で、めでたく全部選択されました。

どうもありがとうございました。>付き合って下さった方々
232204:2005/04/11(月) 00:01:58
>>230
あ、そういえばそうですねw
単にデフォルトの動作だったのですか…
233デフォルトの名無しさん:2005/04/11(月) 16:24:43
ダイアログの中の部品をグループボックスで作っといて、
実行時にダイアログにグループボックスを貼り付けるには、
どんなコードになるんでしょうか?
234233:2005/04/11(月) 16:56:02
もしかして、グループボックスでなくて、プロパティシートを使うんですか?
235233:2005/04/11(月) 16:59:40
それとも、ダイアログのプロパティをチャイルドにするのかな?

教えてキボンニュ
236デフォルトの名無しさん:2005/04/11(月) 17:09:44
>>233
スマン
おまいさんの言いたいことがさっぱりわからん
237233:2005/04/11(月) 17:13:57
ダイアログの中に、何枚も貼りたい部品があった場合、
その部品をクラスにするじゃないですか?

その場合、どのリソースをクラスにするんでしょ?
グループボックスなのか、ダイアログのチャイルドなのか、
また、貼るときのコード教えて下さい。
238デフォルトの名無しさん:2005/04/11(月) 17:18:19
おまいさんの言いたいことがさっぱりわからん
239233:2005/04/11(月) 17:19:43
ダイアログの中に、動的に枠を複数枚貼りますよね?
わかりますか?
240デフォルトの名無しさん:2005/04/11(月) 17:37:57
>>239
俺はそんなことしないなぁ
241233:2005/04/11(月) 17:40:04
データの数によって枠の数が変わるなら動的にするしか無いんです。
MFCのクラス流儀でいけば、
ダイアログクラスに実行時生成したオブジェクトをペタペタ貼るのがふつー。
242デフォルトの名無しさん:2005/04/11(月) 17:42:33
よくわかんないから図で示してくれろ。
243233:2005/04/11(月) 17:48:38
┏━━━━━━
┃ダイアログクラス
┣━━━━━━

┗━━━━━━

┏━━━━━━
┃ダイアログの中身クラス
┗━━━━━━

実行時に、ダイアログが中身を生成して、
┏━━━━━━
┃ダイアログ
┣━━━━━━
┃┏━━━━━
┃┃中身
┃┗━━━━━
┗━━━━━━
メデタシ。
244デフォルトの名無しさん:2005/04/11(月) 18:02:19
よくわかんないからどっか行ってくれろ
245233:2005/04/11(月) 18:09:14
プロパティシートはタブコントロールだから関係ないみたいだね。

ダイアログの中にダイアログを入れる、で良いのか?
246デフォルトの名無しさん:2005/04/11(月) 18:25:41
ここはお前のスレか
自己レスとかいらないから
247デフォルトの名無しさん:2005/04/11(月) 18:29:29
248デフォルトの名無しさん:2005/04/11(月) 18:56:04
>>245
リソースエディタでダイアログ作って枠なし・CHILDにチェック入れて
クラスウィザードでCDialogと結びつけて
好きなだけCreateすればいいんじゃね?
249233:2005/04/11(月) 19:01:24
サンクスデツ>>248
そのやり方でやります。

ところで、ダイアログと枠無しダイアログの位置あわせはどうやったら良いですか?

VCLだと、
ChildForm->Parent = Form1->PanelForPosition; //Form1のパネルの上にチャイルド
ChildForm->Align = alClient; //チャイルドはパネル一杯に描画
なんて書けたんですけど。
250デフォルトの名無しさん:2005/04/11(月) 19:09:09
>>249
どんな風に配置したいのか知らんが
GetClientRectとかMoveWindowとか駆使して自前で並べるとか
CSplitterWndとか
251デフォルトの名無しさん:2005/04/11(月) 19:16:39
>>249
親ダイアログの OnSize() で、自分で並べるしか。
 CRect r;
 GetClientRect(r);
 子.MoveWindow(r); // クライアント領域いっぱいに
252233:2005/04/11(月) 19:17:59
リョウカイ>>250 >>251

並べた後は親に合わせてチャイルドが動いてくれるんですね。
ま、もし動かなかったら自分で動くコード入れれば良いか。
253デフォルトの名無しさん:2005/04/11(月) 19:29:09
>>252
>並べた後は親に合わせてチャイルドが動いてくれるんですね。
ぅおぃ!
「親ダイアログの OnSize() をオーバーライドして
>>251 のコード書かないとダメよ」って事スよ。
254デフォルトの名無しさん:2005/04/11(月) 20:08:20
非アクティブ状態のメインウインドウで、ジョイパッド
の状態を取得したいのですが、わかりません。
ちなみにアクティブ状態ならジョイパッドを使用できる
状況にあります。
255デフォルトの名無しさん:2005/04/11(月) 22:58:14
>>254
Win32APIスレで聞いたほうがはやいんじゃ?
DirectInput使うのが早いとは思うけどね
256デフォルトの名無しさん:2005/04/11(月) 22:59:25
RegisterHotkeyでホットキーを設定して
メインフレームのウィンドウプロシージャの中で
WM_HOTKEYを受け取りSetFocusしているのですが、
フォーカスが他のアプリにあるとき、自アプリに
フォーカスが移ってくれないんです。
自アプリにフォーカスを持たせるにはどうしたらいいんでしょうか?
257デフォルトの名無しさん:2005/04/11(月) 23:14:38
CreateGameー陸海空オンラインー
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm
2chスレ
http://game10.2ch.net/test/read.cgi/mmominor/1109935948/

ただ今、即戦力募集中!歴史に残るMMOを作ってみないか!!
258デフォルトの名無しさん:2005/04/12(火) 14:22:22
CListCtrlでエクスプローラ風のアプリを作っています。
DeleteAllItems()、及びCImageList のDeleteImageList() を
表示切替のたびに毎回コールしているのですが、
タスクマネージャのコミットチャージが増え続け、
操作を続けると数ギガ単位まで膨れ上がります。

このメモリをどうやったら解放できるようになるのでしょうか?

VC++6.0/Win2k MFCで作成しています。
259258:2005/04/12(火) 14:40:01
ごめんなさい、今試したらCImageList に貼り付けている
GDI+の Image の解放がNGだったようです。
シツレイシマシタ
260デフォルトの名無しさん:2005/04/12(火) 15:44:18
グループボックスの座標が欲しくて、
CWnd* hStatic = GetDlgItem(IDC_STATIC);
としていますが、NULLが帰ってきます。
どうしたら良いですか?
261260:2005/04/12(火) 15:55:44
もしかして、グループボックスをダイアログクラスのメンバ変数に割当できるんでしょうか?
262デフォルトの名無しさん:2005/04/12(火) 16:28:07
IDC_STATICってあんたなに参照してるの?
263デフォルトの名無しさん:2005/04/12(火) 16:28:30 BE:122283397-#
>>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にしてあげないと
いけないのですわ。
265260:2005/04/12(火) 17:21:08
>>262-264
うまく逝きました。有難うございました。

ところで、グループボックスのClientRectのRECT.TOPを0にしてますが、
相当上に余白がありますね。
このBottomを下のコントロールのTopにセットしてMoveWindowしてますが、
非常に重なります。
何かテクニックが要りますか?
266デフォルトの名無しさん:2005/04/12(火) 17:23:33
ん?
ClientRectはあくまでそのグループボックスのRECTであって
ダイアロルの中の位置ではないぞ?
267260:2005/04/12(火) 18:07:59
あ、そうか、ダイアログ内の座標は何で取るんでしたっけ?
GetWindowRectだとデスクトップ座標だし。
268デフォルトの名無しさん:2005/04/12(火) 18:15:31
>>260
いくらなんでも甘えすぎ
そうやって一個躓くごとにここで質問してくのか?
それくらい自分で調べような
269デフォルトの名無しさん:2005/04/12(火) 18:31:18
>>268
ソウデスネ

>hStatic->GetWindowRect(&rStatic);
>ScreenToClient(&rStatic);
でウゴキマスタ
270デフォルトの名無しさん:2005/04/13(水) 10:56:34
VB経験はそこそこ長いMFC超初心者です。
急にMFCを使ったプログラミングを強いられる状況になってしまったのですが、
VBでいうところのApp.Pathと同等の結果はどうやれば得られますか?
271デフォルトの名無しさん:2005/04/13(水) 11:15:20
VBでどうこう言うよりどういう事をしたいのかを書いた方がいいと思うよ。
272270:2005/04/13(水) 11:37:57
>>271
CWinAppのGetProfile系やWriteProfile系で使用するiniファイルの保存場所を
アプリケーションと同じフォルダに変更(デフォはWindowsフォルダ)したいので、
実行中のアプリケーションがあるフォルダのパスを取得したかったんです。
273デフォルトの名無しさん:2005/04/13(水) 11:41:22
>>270
MFC に関係なく、API 呼び出し。
GetModuleFileName
274270:2005/04/13(水) 11:54:38
>>273
てっきりどこかのクラスに同様の機能が潜んでるのかと思ってました。
GetModuleFileNameで無事取得できました。
ありがとうございました。
275デフォルトの名無しさん:2005/04/13(水) 12:01:23
ダイアログリソースにスクロールバーを付けましたが、
押しても上から移動しません。
276デフォルトの名無しさん:2005/04/13(水) 12:42:39
そうです。
277デフォルトの名無しさん:2005/04/13(水) 13:00:17
工工エエエ(´Д`;)エエエ工工

スクロールバーの活かし方教えて下さいでつ。
278デフォルトの名無しさん:2005/04/13(水) 13:02:20
スクロールバーが活きるようなコードを書きなさい
279デフォルトの名無しさん:2005/04/13(水) 13:25:37
スクロールバーが動かない、ことはなかったでつ。
マウスでバーの位置を動かして、マウスがスクロールバーを離すと、
また初期値(0の位置?)に戻ってしまいます。
ダイアログリソースのスクロールバーを使うのは難しいのかな?
280デフォルトの名無しさん:2005/04/13(水) 13:48:18
スクロールバーを置く
クラスを初期化する
イベントを取得してイベントに沿ったコードを書く

これらをやってやんないとダメよ。
スクロールバー置いたからって勝手になんでもスクロールしちゃ困るっしょ?
281デフォルトの名無しさん:2005/04/13(水) 15:39:18
ダイアログのリソースのプロパティでスクロールバーするより、
スクロールバーコントロールを置いた方が無難でつか。

ところで、マウスでスクロールバー動かしても位置が戻っちゃうのは、
やっぱ不思議じゃないですか?
282デフォルトの名無しさん:2005/04/13(水) 16:17:05
動作が設定されてないんだから初期値に戻るしかないでしょう。
283デフォルトの名無しさん:2005/04/13(水) 17:19:46
クラスウィザードでスクロール・イベント作ろうにも、
関数の追加がディセイブルになってる。
スクロール1個に1クラス追加してからイベント追加なのかなぁ?
284デフォルトの名無しさん:2005/04/13(水) 18:25:05
CDialogのプロパティ設定でスクロールを付けたら、
それのイベントハンドラを作ることは出来ました。
でも相変わらずスクロールは元に戻るし、CScrollBarに初期設定でも要るのかな?
285デフォルトの名無しさん:2005/04/13(水) 18:38:26
あんたの日記帳じゃないんだからもう少し自分で調べてから質問するなり成果発表するなりしてくれ。
286デフォルトの名無しさん:2005/04/13(水) 18:52:40
というか、長時間ググリながらコード直したり実行したりしてんでつが。
287デフォルトの名無しさん:2005/04/13(水) 18:57:29
そもそもスクロールバーコントロールが何なのかわかっていないに一票
288デフォルトの名無しさん:2005/04/13(水) 19:11:29
いや、別にスクロールバーコントロールが何なのかわかっていなくても、
CDialogの領域をスクロールしたい、という目的を果たせれば良いんだが、
楽に出来ないものか。
289デフォルトの名無しさん:2005/04/13(水) 19:13:38
分かる分からない以前に、CDialogのプロパティで表示させたスクロールバーが、
マウス移動で移動後マウスから離すと元に戻るというのデフォルトとして変杉。
そんなアプリ無いよ。
290デフォルトの名無しさん:2005/04/13(水) 19:21:23
ダメだこりゃ
291デフォルトの名無しさん:2005/04/13(水) 19:25:34
質問タタキで盛り上がってもダメだ罠
292デフォルトの名無しさん:2005/04/13(水) 19:29:14
CDialogに、
::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
イベントハンドラを作ったけど、
このpScrollBarがNULLのみ、というのは何でだろう。

CDialogのプロパティでスクロールバー作って、イベントハンドラ足して、
というスタンダードな操作だと思うんだが。
293デフォルトの名無しさん:2005/04/13(水) 19:54:21
ダイアログにスクロールバー置くこと自体がスタンダードでない
294デフォルトの名無しさん:2005/04/13(水) 20:09:13
>>293
WinWord
295デフォルトの名無しさん:2005/04/13(水) 20:10:00
ダイアログのCScrollBarを取得しようとして、
this->GetScrollBarCtrl(SB_VERT);
しましたが、NULLですね。
296デフォルトの名無しさん:2005/04/13(水) 20:35:28
MFC 使ってるんだから、自前でスクロールのハンドリングなんて面倒なことしないで
SDI に FormView でも張れば良いと思うのは変かな・・・
297デフォルトの名無しさん:2005/04/13(水) 22:28:09
ダイアログをスクロールさせなきゃいけない時点で設計間違ってるだろ。
298デフォルトの名無しさん:2005/04/13(水) 23:07:12
Office系って、Windowsの標準インターフェイス仕様を真っ先に覆す代表アプリケーションだったわけで。
299デフォルトの名無しさん:2005/04/13(水) 23:52:15
CListViewで、左クリックをするとアイテムが選択されますが(当たり前)
右クリックでも選択されるようにするにはどうすればいいのでしょうか?

素人考えながら、右クリックのイベントハンドラ(OnRButtonDown()だった
ような・・)を設けて、
SendMessage(WM_RButtonDown(だったような・・), 0, 0) と
メッセージを投げてもダメでした。(根本的に違うことやってますか?)
300デフォルトの名無しさん:2005/04/14(木) 00:04:18
>>299
右ボタンダウンを投げちゃダメだろ。
素直に選択メソッド呼んだら?
301299:2005/04/14(木) 00:40:20
コメントありがとうございます。>>300
すみません。右クリックのハンドラで投げた
メッセージはご指摘のとおりRButtonDownじゃなくて
LButtonDownだったのでした。

でもって、OnRButtonDown()でGetHotItem()で
カーソル位置のアイテムのインデックスを取得して
SetHotItem()したら、期待通りのことができました。

いただいたコメントのおかげです。どうもありがとうございました!
302デフォルトの名無しさん:2005/04/14(木) 09:59:20
だからスクロールバーの処理ってのは自分でやろうとすると見た目以上にメンドクサイんだって。
コントロールがデフォで持ってるなら意識する必要がないけど。
303デフォルトの名無しさん:2005/04/14(木) 10:56:14
うむ、ダイアログにスクロールバーをつけるような設計するのが悪い。
304デフォルトの名無しさん:2005/04/14(木) 11:08:16
CToolBarのSetButtonTextで、ツールバーのボタンにテキストを表示する事ができますが
これを改行することって出来るのでしょうか?

CToolBarCtrlのSetDrawTextFlagsを使って、センターや、\tの展開なんかは出来るのですが、
\nで改行してくれないのです。
305デフォルトの名無しさん:2005/04/14(木) 11:17:15
>>304 \r\n
306304:2005/04/14(木) 14:38:19
>>305
済みません言葉が足りませんでした。
\r\nも試しています。

改行が許可されていない部分でのエスケープ文字は、
"・"とかゴミが残ると思っていたんですが、ツールバー上では
そんなゴミも残らず完全にスルーされている感じです。

何か他にコツ等ありましたら、お願いします。
307デフォルトの名無しさん:2005/04/14(木) 15:59:37
ボタン上にテキストを表示するには、GetButtonText を呼び出してボタンに表示するテキストを取得し、その後 SetButtonText を呼び出してテキストを設定します。

308デフォルトの名無しさん:2005/04/14(木) 16:23:44
CDialog中の初期処理で、CDialogをCreate(IDD_〜, this)としてます。
CDialog終了時に何かしなきゃならないんでしょうか?

といいますのは、VC++のデバッグ実行が終了しなくなって、
半フリーズな感じなんですが、終了処理とか開放を忘れてるのかなと思いまして。
309デフォルトの名無しさん:2005/04/14(木) 17:06:07
そもそもCDialogって自分でいちいちCreateするもんだっけ?
310デフォルトの名無しさん:2005/04/14(木) 17:26:29
>>309
モードレスなら必要。
>>308
OnClose の中で DestroyWindow()。
311デフォルトの名無しさん:2005/04/14(木) 17:48:19
モードレスダイアログでEndDialogしてるというオチでは?
312デフォルトの名無しさん:2005/04/14(木) 18:58:59
ダイアログなんかのヘッダーファイルをイジルと必ずコンパイルエラーになって、
毎回リビルドしてまつ。
回避方法キボンユ
313デフォルトの名無しさん:2005/04/14(木) 19:11:36
>>312
ヘッダーファイルをいじらない。
314デフォルトの名無しさん:2005/04/14(木) 19:31:34
というかエラーの内容くらい書いてくれ
315デフォルトの名無しさん:2005/04/14(木) 22:22:56
>>313で解決だと思うが
316デフォルトの名無しさん:2005/04/14(木) 23:41:58
>>312
「コンパイル済みヘッダを使用しない」設定に。
317デフォルトの名無しさん:2005/04/15(金) 08:41:04
コンポーネントの色付けがプロパティになってない、
というか、コーディングがやたら中途半端じゃないでつか?
318デフォルトの名無しさん:2005/04/15(金) 09:39:55
GroupBoxには色付けできないみたいなんでつが、これはMFCの欠陥でつか?
319デフォルトの名無しさん:2005/04/15(金) 10:23:32
ハァ?
320デフォルトの名無しさん:2005/04/15(金) 10:40:13
>>319
キタネーレスでスレ汚すな。
321デフォルトの名無しさん:2005/04/15(金) 10:49:14
>320は汚くないのかな?
322デフォルトの名無しさん:2005/04/15(金) 10:51:49
−−−−−−−−−−−−−−−−−−−−−−−−−−
俺様用しおり
  ∧_∧   
 ( ・∀・)< 一旦仕切り直し
−−−−−−−−−−−−−−−−−−−−−−−−−−
323デフォルトの名無しさん:2005/04/15(金) 16:32:14
>error C2504: 'CRichEditDoc' : 定義されていない基本クラスが宣言されています。
古いソース組み込んだらエラーになります多。
どうしたら回避で期末か?
324デフォルトの名無しさん:2005/04/15(金) 17:00:56
>>323
CRichEditDocを定義しているファイルを探してインクルードする。
325デフォルトの名無しさん:2005/04/15(金) 17:25:55
#include <afxrich.h>
326デフォルトの名無しさん:2005/04/15(金) 20:23:47
CTreeViewについて質問があります。
現在TVS_SINGLEEXPANDのスタイルを設定して
展開されるノードを一つだけにしています。

しかし、Ctrlキーを押しながら左クリック
又はキーボードの矢印キーを使った時に
複数ノードが展開されてしまいます。

複数のノードを展開しないようにしたいのですが
誰かいい方法を知らないでしょうか?

教えて、エロイ人。
327デフォルトの名無しさん:2005/04/16(土) 00:06:08
ヒント:HitTest
328デフォルトの名無しさん:2005/04/16(土) 22:25:21
とあるモードレスダイアログが、MessageBoxで
メッセージボックスのモーダルループにはいっているとして、

外部から、このようなモーダルループの状態かどうかを
判断することってできますか?

どなたか、、
329デフォルトの名無しさん:2005/04/17(日) 01:35:26
>>328
どうにかやればできそうな気がするが、果てしなく面倒なことになりそう。
330デフォルトの名無しさん:2005/04/17(日) 10:15:43
>>328
pとあるモードレスダイアログ->IsWindowEnabled()

でいいんじゃない?
ダイアログを意図的にEnableWindow(FALSE)してる場合と見分けがつかないけど、
そんなことあんまりしないだろう。
331デフォルトの名無しさん:2005/04/17(日) 22:43:25
ダイアログベースでリッチテキストコントロールを配置すると実行してもダイアログが表示されなくなるのはなぜ?
332デフォルトの名無しさん:2005/04/17(日) 23:06:11
立地エディットは使う前に初期化しないといけません。
これに失敗してダイアログが表示されなくなりマンモス。
詳しくはMSDNに出てます。
AfxなんとかというのをInitInstanceかどこかに加えれば
良かった。
333デフォルトの名無しさん:2005/04/17(日) 23:19:02
そーだったのか
ありがとうございマンンコモス
334デフォルトの名無しさん:2005/04/17(日) 23:27:25
MFCでpingみたいなネットワークの接続確認とか調べる方法ってどうやるのが良いのでしょう?
ヒント的なものでも良いので。
335デフォルトの名無しさん:2005/04/18(月) 09:35:42
>>331-333
実際の解決コードきぼんピー
336デフォルトの名無しさん:2005/04/18(月) 11:50:17
msdnでafx云々を検索
出てきたものからそれらしいものを一個選んで書くだけ
解決コードにもならんレベルのものだぞ
337デフォルトの名無しさん:2005/04/18(月) 13:15:58
リッチテキストコントロールを配置程度でM$DNを検索してさらに、
コードを足すなんてmfcって変だなー。

ふつーのGUIライブラリならペタペタ貼るだけちゃうんかと。
338デフォルトの名無しさん:2005/04/18(月) 13:17:19
リッチテキストコントロールはいろいろと問題があるからなー
339デフォルトの名無しさん:2005/04/18(月) 13:38:34
クラスライブラリ側が、特殊なコードとかパラメタをコンストラクタとかメソッド内に隠すべきでわ?
340デフォルトの名無しさん:2005/04/18(月) 14:53:24
どんな問題があるのか調べてそんなこと言ってるのか?
341デフォルトの名無しさん:2005/04/18(月) 15:00:58
>>331-333 みたいな会話が必要になること自体、超問題。
それらをうまくラップで隠せるのがクラスライブラリ。

さらに >>340 は、それらのふつーの感覚や考える頭が破壊されて不憫だ。
342デフォルトの名無しさん:2005/04/18(月) 16:10:31
MFCがマトモじゃないのは周知の通り。
だがそれはそれとして >>337 は VB でもやっとけ。
343デフォルトの名無しさん:2005/04/18(月) 16:17:33
344デフォルトの名無しさん:2005/04/18(月) 16:25:33
>>341
俺の質問に答えてくれよぅ
とりあえず問題ありなリッチテキストコントロールは使わない。
もし使う場面が来たら自分でラップ出来ますのでお構いなく。

ってか今からならM$はMFCでラップ出来るはず
時の流れ(による問題)を調べロッテ
345デフォルトの名無しさん:2005/04/18(月) 16:28:35
344は統合失調でつか?
346デフォルトの名無しさん:2005/04/18(月) 18:47:18
AfxInitRichEdit

MFCがおかしいんじゃなくて
この程度が自分で調べられないのがおかしい
347デフォルトの名無しさん:2005/04/18(月) 22:14:43
CString型に格納されているJISコード文字列をSJISに変換するには
どうすればいい?unsigned long型のを変換できるライブラリは
見つけたんだけど・・・。
348デフォルトの名無しさん:2005/04/18(月) 22:30:19
CStringにJISコード???
349デフォルトの名無しさん:2005/04/18(月) 22:43:47
msdn
no
cruntime
kannsuu
de
dekiruyo

350デフォルトの名無しさん:2005/04/18(月) 23:18:13
>>346
プロセスごとのコンテキスト見て RICHED32.DLL ロードするだけの処理を
アプリケーションから態々呼び出さなきゃいけないなんてのは
設計の失敗としか思えないけどな。
351デフォルトの名無しさん:2005/04/19(火) 00:08:31
プロセスのコンテキストがRICHED32.DLLとどのような関係があるのか説明して欲しいものだ。
352デフォルトの名無しさん:2005/04/19(火) 08:23:21
>>351
MFC のソース嫁。
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回連続で呼ばれてしまうです
原因、対処方法教えてください
よろしくおねがいします
355デフォルトの名無しさん:2005/04/20(水) 03:13:49
原因:二回呼ばれるように書いている。
対処法:一回だけ呼ばれるように書き直す。
356デフォルトの名無しさん:2005/04/20(水) 10:05:46
デバッガで何処で呼ばれているかをチェックしてみたら?
357デフォルトの名無しさん:2005/04/20(水) 10:52:04
CRichEditCtrlとCRichEditCtrlは同じものでつか?
358357:2005/04/20(水) 10:56:33
唐突に、「GetRichEditCtrl()」をコールしてるコードがあるんですが、
これはMFCの標準関数でつか?
359デフォルトの名無しさん:2005/04/20(水) 11:12:31
>>357
どこをどうみても同じものにしか見えないが。
CRichEditViewとCRichEditCtrlでは?

>>358
CRichEditViewのメンバ関数
360デフォルトの名無しさん:2005/04/20(水) 11:17:46
サンクツ>>359

MFC超スペシャル初心者なんですが、
IMPLEMENT_DYNCREATE(C???View, CRichEditView)
というステートメントは何なんでしょう。

唐突にViewとCRichEditViewが出てきますが、
これはMFCのフレームワークであり、
ふーん、ViewとRichEditはデフォルトで定義されるんだな、
と読んどけば良いのかな。
361360:2005/04/20(水) 11:20:46
もう一つ、教えて下さい。

別のプロジェクトでコンパイル通すために、
CRichEditViewを用意しようと思いますが、
CDialogのリソースに「リッチ エディット」を貼っとけば良いのですか?
362デフォルトの名無しさん:2005/04/20(水) 11:23:20
超スペシャル初心者がいきなりCRichEditViewですか
363デフォルトの名無しさん:2005/04/20(水) 11:38:14
>>360
IMPLEMENT_DYNCREATEは単なるマクロだが
ちゃんと理解したければMFCのソースを読む必要があるよ

>>361
ダイアログで使いたければ貼っとけばいいけど
それはViewクラスではないよ

ヘルプ(MSDNライブラリ)インストールしてない?
364360:2005/04/20(水) 11:39:52
>>363

>それはViewクラスではないよ
では、CRichEditViewをnewして、CDialogに貼れば良いですか?

>ヘルプ(MSDNライブラリ)インストールしてない?
了解でつ。今からインストールしますです。
365デフォルトの名無しさん:2005/04/20(水) 12:04:24
教える前に教えてわかるか相手かどうか考えよう
366デフォルトの名無しさん:2005/04/20(水) 13:16:07
つか、人を選ぶような人は匿名掲示板に入って頂く必要ありません。
367デフォルトの名無しさん:2005/04/20(水) 13:46:04
−−−−−−−−−−−−−−−−−−−−−−−−−−
  ∧_∧   
 ( ・∀・)< CRichEditViewをnewして、CDialogに貼るコード教えてキボン
−−−−−−−−−−−−−−−−−−−−−−−−−−
368367:2005/04/20(水) 13:54:40
もしくは、
ダイアログにリッチエディットを貼っておけば、
CRichEditCtrl *cre=(CRichEditCtrl *)GetDlgItem(IDC_RICHEDIT1);
で、クラスとして使えますか?
369デフォルトの名無しさん:2005/04/20(水) 14:48:21
CRichEditCtrlクラスって文字の入出力や描画を行うクラスだから、
まさか文字入出力メソッドが無くてコントロールにSendMessageしなきゃならないんて筈はないよね?
370デフォルトの名無しさん:2005/04/20(水) 14:59:26
Editコントロールさえ使ったことなさそうなふいんき
371デフォルトの名無しさん:2005/04/20(水) 15:00:27
CStringの文字列のポインタの取り方教えて下さいでつ。
372デフォルトの名無しさん:2005/04/20(水) 15:03:01
>>370
SetWindowText(value)出来ます田。
でも、追記はできないんでつね?
373デフォルトの名無しさん:2005/04/20(水) 15:14:08
>>371
CString foo = "bar";
const char * p = static_cast<const char *>(foo);
374デフォルトの名無しさん:2005/04/20(水) 15:47:22
>>372 もヨロ
375デフォルトの名無しさん:2005/04/20(水) 15:53:13
>>374
>372だけ見ても、何を知りたいのか判らないのだが。
376372:2005/04/20(水) 16:30:14
RichEditCtrl->SetWindowText("aaa")
で、文字を設定することは出来ましたが、
次に、
RichEditCtrl->SetWindowText("bbb")
とすると、
前の文字が消えてしまいます。
どうか追記の方法教えて頂けないでしょうか?
377デフォルトの名無しさん:2005/04/20(水) 16:40:22
aaaの後ろにカーソルを置いて
キーボードの b のキーを3回押してみ
378デフォルトの名無しさん:2005/04/20(水) 16:52:47
>>376
GetWindowText()で取得して、自前で追加、SetWindowText()で設定。
或いは、SetSel()で末尾を選択、ReplaceSel()で置換。
つーか、MSDNをちっとは読めや。
379デフォルトの名無しさん:2005/04/20(水) 16:55:28
つーかまずCEdit辺りから始めた方が良いんじゃないかい?
380デフォルトの名無しさん:2005/04/20(水) 17:19:02
MFCが一通り使えるようになるまで
ずっとここで逐一質問し続ける気だろうか…
381デフォルトの名無しさん:2005/04/20(水) 17:22:13
逐一回答お願いします
382デフォルトの名無しさん:2005/04/20(水) 17:25:27
だから、教える前に教えてわかるか相手かどうか考えよう
383デフォルトの名無しさん:2005/04/20(水) 17:37:02
一人が質問し続けようが、大勢の質問が殺到しようが、関係ないべ。

つーか382は不気味なレスやめれ。
384デフォルトの名無しさん:2005/04/20(水) 22:12:05
383みたいなバカが出てくるとスレが止まっていいな。
385デフォルトの名無しさん:2005/04/21(木) 09:28:20
そうだね、スレストのオカゲで静かになって良かったね。

ってヴぁか?
386デフォルトの名無しさん:2005/04/21(木) 13:05:27
とにかくなんでも質問、ドンとこーい


自分で何が解かってないのが解かってないような質問は勘弁だけどな
387デフォルトの名無しさん:2005/04/21(木) 13:07:44
質問が明確になったときには既に回答出てんだよ。
オマ、ふよー>>386
388デフォルトの名無しさん:2005/04/21(木) 18:59:36
何も塗りつぶさないブラシを作りたいのですが,

CBrush nullbrush;
nullbrush.CreateSolidObject(NULL_BRUSH);

で出来ることはわかったのですが,

これを

CBrush nullbrush(NULL_BRUSH); //黒で塗りつぶされて失敗

みたいに初期化の時に出来る方法はありませんか?
389デフォルトの名無しさん:2005/04/21(木) 19:01:45
失礼
× nullbrush.CreateSolidObject(NULL_BRUSH);
○ nullbrush.GetStockObject(NULL_BRUSH);
でした.
390デフォルトの名無しさん:2005/04/21(木) 20:33:32
二度間違えるなよ
391デフォルトの名無しさん:2005/04/22(金) 00:51:07
VC.NETのプロパティウィンドウみたいな、リストになっていて
右側には文字列を入力できるコントロールはどう作ればいいんでしょうか?
392デフォルトの名無しさん:2005/04/22(金) 00:52:01
一生懸命
393デフォルトの名無しさん:2005/04/22(金) 01:47:39
リストの項目をクリックしたら
文字列を入力出来るようにエディットコントロールを
サイズ合わせてぴったり重ね、
別のところをクリックしたら入力された文字列をリストに転送して
エディットコントロールを隠す。
みたいな感じ
394デフォルトの名無しさん:2005/04/22(金) 06:57:37
ListCtrlのカラム編集機能を使って、編集前と編集後のメッセージをトラップして頑張る。
#但し、その場合プロパティのようにコンボボックスにはできないけれど。
395389:2005/04/22(金) 16:39:10
うは,さらに間違えてる.

nullbrush.CreateStockObject(NULL_BRUSH);

だ.
で,これを初期化の時に実現するにはどうしたらいいんですか?
396デフォルトの名無しさん:2005/04/22(金) 16:58:07
>>395
ない。
どうしてもやりたかったら、CBrushから派生させたクラスを作って好きにすればいい。
397デフォルトの名無しさん:2005/04/24(日) 11:40:14
質問なのですが、アプリがバックグラウンド状態の時にキー入力を受けるにはどうすればいいのでしょうか?
具体的にはキー入力を監視したいのです。
398デフォルトの名無しさん:2005/04/24(日) 14:26:08
>>397
フック
399デフォルトの名無しさん:2005/04/24(日) 16:05:50
リッチエディットコントロールでマウスポインタが CFE_LINK 属性を
もったテキストの上に来たことを知るには、イベントマスク EM_SETEVENTMASK に
ENM_LINK を設定しておけば、EN_LINK メッセージとして通知してもらえると
思いますが、そのマウスポインタが CFE_LINK 属性のテキストの上から
外れたことはどのようにすれば知ることが出来るのでしょうか・・?
400デフォルトの名無しさん:2005/04/24(日) 17:33:13
>>398
ありがとうございます。参考になりました
401デフォルトの名無しさん:2005/04/25(月) 13:54:08
処理クラス(画面無し)でタイマー処理行いたいんですが、
タイマークラスみたいなのは使えるのでしょうか?
402デフォルトの名無しさん:2005/04/25(月) 14:36:06
もしかして、MFCのCWnd::Timerってクラスとかに閉じるような用途では使い難い?
403デフォルトの名無しさん:2005/04/25(月) 15:22:53
MFCだろうがSDKだろうがタイマーがやってることは同じ
ウインドウのタイマーイベント
404デフォルトの名無しさん:2005/04/25(月) 16:11:44
VCLならTTimerアイコンぽとぺたしてプロパティ設定するだけだし、
画面無い場合なら、ソースコードでTTimerをnewしたり、派生したり、
ふつーに使えるじゃん。
405デフォルトの名無しさん:2005/04/25(月) 17:07:32
マルチメディアタイマ
406デフォルトの名無しさん:2005/04/25(月) 17:39:49
メッセージ処理と同期して動かないとバカがバグ作る原因になるから、
WM_TIMERベースの方がいいと思う。
407デフォルトの名無しさん:2005/04/25(月) 19:00:04
すみません、ビットマップをダイアログに描画したいのですが、
どのイベントかメソッドでBitBltしてやれば良いか、
エライ人教えて下さい。
408デフォルトの名無しさん:2005/04/25(月) 19:03:11
画面なしやって言うてるのに。>406
…じゃなんで MFC 使うかな、ってのは置いといて、
>>401
Win2000 以降限定なら CreateWaitableTimer っちゅう API 使う手も。
409デフォルトの名無しさん:2005/04/25(月) 20:09:14
407
WM_PAINTかOnPaint
410デフォルトの名無しさん:2005/04/25(月) 23:28:56
デバッグ版では普通に動くプログラムが、リリース版では落ちまくり
ってのは、どんな原因が考えられるかな?
411デフォルトの名無しさん:2005/04/25(月) 23:37:45
>>410
バグがある
412デフォルトの名無しさん:2005/04/26(火) 00:06:01
漏れはその逆の挙動を示すプログラムのバグ潰しを今日してたよ。
413デフォルトの名無しさん:2005/04/26(火) 01:56:22
ポインタがNULLであるかどうかをチェックしていないとか
414デフォルトの名無しさん:2005/04/26(火) 10:02:58
変数の初期化漏れとか
415デフォルトの名無しさん:2005/04/26(火) 13:08:55
>>409
サンクスでつ。クラスウィザードで、WM_PAINT→OnPaint内で処理入れたらおkでした。

で、さらにWM_PAINTを発生させるメソッドなんかありますでしょうか?
まさかメッセージでWM_PAINT送るなんてしたら、作り方変だし。
416デフォルトの名無しさん:2005/04/26(火) 13:11:59
Invalidate
417デフォルトの名無しさん:2005/04/26(火) 14:10:17
モーダルウィンドウで、自分を閉じたいだけなんですが、
CloseWindow()するとアイコンになっちゃうし、
DestroyWindow()するとエラー画面でるし、
結構難しいですね。
418デフォルトの名無しさん:2005/04/26(火) 14:37:57
そうですね
419デフォルトの名無しさん:2005/04/26(火) 15:18:40
>>417
PostQuitMessage()ではどうだろう。
420417:2005/04/26(火) 15:25:58
工工エエエ(´Д`;)エエエ工工

MFCでの書き方お願いします。
421デフォルトの名無しさん:2005/04/26(火) 15:29:44
( ´д)ヒソ(´д`)ヒソ(д` )
422デフォルトの名無しさん:2005/04/26(火) 17:29:23
SetTimer(1, 500, NULL)でデバッガが止まっちゃうんですが、
タイマー壊れたのかな。
423デフォルトの名無しさん:2005/04/26(火) 18:51:31
SetTimerの最初の引数は、プログラム全体で固有値じゃないとダメですか?
424デフォルトの名無しさん:2005/04/26(火) 19:03:37
なんでもええんちゃうん
425デフォルトの名無しさん:2005/04/26(火) 19:25:52
ウィンドウ内でユニークであればいい
ということがMSDNに書いてあるではないか。
426デフォルトの名無しさん:2005/04/26(火) 21:43:23
CString temp;
〜〜
temp.SetAt(j , '\x20');

この処理でランタイムエラーが出るんだけど、何がいけないの?
427426:2005/04/26(火) 21:44:06
失礼。jはint型ね。
428デフォルトの名無しさん:2005/04/26(火) 21:49:05
マニュアルを読まないのがいけない
429デフォルトの名無しさん:2005/04/27(水) 09:39:36
>>422
タイマーイベントの溜まり杉じゃないかと。
ブレークポイント設定してない?
430デフォルトの名無しさん:2005/04/27(水) 13:27:36
>>426
jが文字列の長さ以上なんだと思う。
431デフォルトの名無しさん:2005/04/27(水) 17:44:59
SetAtは確か
デバックバージョンは文字列の長さチェックしてるけど
リリースバージョンではチェックしてないとかだった気がする
432デフォルトの名無しさん:2005/04/27(水) 17:45:02
文字列がセットされていないからアクセス違反
433426:2005/04/28(木) 01:39:22
>>432
それだった。tempが空だったからね。

下らない質問してしまった。
答えてくれた人たち、ありがとう。
434デフォルトの名無しさん:2005/04/28(木) 01:45:44
ありがちな「解決した気になってる」パターンやね。
435デフォルトの名無しさん:2005/04/28(木) 02:07:29
馬鹿だ、お前は
436デフォルトの名無しさん:2005/05/01(日) 02:26:06
タイプライブラリを使って他アプリを操作したく思ってます。(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を取得できまつか?
438デフォルトの名無しさん:2005/05/02(月) 12:36:49
>>437
CPaintDCはCDCから派生してるんだよ。
439437:2005/05/02(月) 13:04:01
thx!>>438

dc.m_hDCでつね。
「m_」っていつも見落としちゃいますね。
440デフォルトの名無しさん:2005/05/02(月) 13:46:56
>>436
1.COleDispatchDriverのクラス定義とデストラクタ見れ、明示的なReleaseはたぶんクラス破棄しないでインターフェイスだけ取り替えたい時だけっぽい
2.COle(ry作る時だけでいいんじゃね?
3.そんなのはしらんが、ActiveX関連なんかでも探してみれ

ちなみに俺はたいして詳しくない
441デフォルトの名無しさん:2005/05/02(月) 16:44:08
コンボボックスに自分でパスとかを入力した場合に
それをリストに追加するのは可能ですか
できるならどのようにすればよい?
教えてください
442デフォルトの名無しさん:2005/05/02(月) 16:45:45
エディットコントロールの部分に入力したものを
リストに追加するということ?
443441:2005/05/02(月) 16:49:10
>442
コンボボックスの右のタグ(?)が伸びてる状態で
一番上のエディット部分に入力・・・
たぶんそうだと思います
444デフォルトの名無しさん:2005/05/02(月) 16:59:02
追加するトリガさえ何とかすればテキストとってAddStringとか
445441:2005/05/02(月) 17:09:18
>444
キリ番おめです(ぉ

トリガっていうと「追加」ボタンとかを付けて押されたら
エディットに入った文字列を読んでAddString
って感じでしょうか?
446デフォルトの名無しさん:2005/05/02(月) 17:30:40
でなければEnterキーが押されたら追加とか。
ブラウザのアドレス入力なんかはこの形式だよね。
447デフォルトの名無しさん:2005/05/02(月) 17:33:24
入力した文字を普通は読むだろうから
そのときついでに
448デフォルトの名無しさん:2005/05/02(月) 17:40:00
>>445
イエース
449441:2005/05/02(月) 17:43:30
>446
>でなければEnterキーが押されたら追加とか。
>ブラウザのアドレス入力なんかはこの形式だよね。
む、確かにそうですね
Enterで追加となるとどうすればよいですかね
450441:2005/05/02(月) 18:37:15
結局、ボタンを使ってできました
お早い対応ありがとうございました<(_ _)>
451デフォルトの名無しさん:2005/05/02(月) 22:26:27
441は女
452デフォルトの名無しさん:2005/05/02(月) 23:05:30
唐突に質問です。
CString の文字列を数値に変換したいのですが、
なにかいい方法はありますか?
CString str = "13.2345";
この文字列をlong型などに変換して数値データとして扱いたいのです。
453デフォルトの名無しさん:2005/05/02(月) 23:24:15
>>452
atol
454デフォルトの名無しさん:2005/05/02(月) 23:25:24
>>452
atof,atoiとかは?
455デフォルトの名無しさん:2005/05/02(月) 23:29:31
その場合、CString型のままではだめですよね?
CStringからcharへと変換するのでしょうか?
456デフォルトの名無しさん:2005/05/02(月) 23:38:47
>>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
461デフォルトの名無しさん:2005/05/03(火) 00:28:22
%lfなのになんでlongなの?
462デフォルトの名無しさん:2005/05/03(火) 00:39:59
・キャストはいらん
・使うなら、_tstol
463デフォルトの名無しさん:2005/05/03(火) 00:47:18
_tstol 定義されていない識別子です・・。
464デフォルトの名無しさん:2005/05/03(火) 00:59:54
どうもlongだとうまくいかないので、全部dobuleにしましたところ、
なんとかうまくいきました。お騒がせしました。
465デフォルトの名無しさん:2005/05/03(火) 01:09:29
なんでそうなるのかよく理解しといた方がいいよ。
466デフォルトの名無しさん:2005/05/03(火) 08:09:26
>>463
#include <tchar.h>

>>464
なんだかatolの戻り値をdouble型の変数で受けていそうだ。
467デフォルトの名無しさん:2005/05/06(金) 09:36:05
そういえば、MFCで(=Win32API直呼びでなくて)ポップアップメニューって作れるんでつか?
468デフォルトの名無しさん:2005/05/06(金) 11:45:43
>>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
http://YahooBB219026012201.bbtec.net/

うぇwwwっ
おkwwwwwwwwwwwwwwwwwwwww
おkwwwうぇwwwっっっ
wwwwwwwwwwww
おkwwwwwwっうぇうはっwww
471デフォルトの名無しさん:2005/05/09(月) 02:03:45
タスクトレイのアイコンからメニュー処理したいのですが、
メッセージハンドラ(右クリック後)の先頭に
SetForegroundWindow();
SetFocus();
TrackPopupMenu
最後にPostMessage(WM_NULL);

という定説の流れでうまく表示はできるんですが、クリックすると数回に一回
OSそのもののメニューが同時に表示されます
理由、解決方法教えてください
よろしくおねがいします
472デフォルトの名無しさん:2005/05/09(月) 11:29:23
>>471
よくわからんが、TrackPopupMenuの前にWM_CANCELMODEでも
Postしてみたらどうだろう。
473471: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フォームを閉じたいときは、
どう書けばよいでつか?
475デフォルトの名無しさん:2005/05/09(月) 18:53:22
>>474
モーダルかモードレスかで変わる。
476474:2005/05/09(月) 19:58:21
モーダルの場合を教えて下さい。
477デフォルトの名無しさん:2005/05/09(月) 20:29:16
>>476
EndDialog
478デフォルトの名無しさん:2005/05/09(月) 21:52:52
モードレスダイアログを閉じるにはDestroyWindow()だけで
いいんですか?deleteしなくていいんですか?
479デフォルトの名無しさん:2005/05/09(月) 22:24:41
>>478
モーダルの場合大抵
CMyDialog dlg;
if( dlg.DoModal()==IDOK ){ ... }
みたいにスタック上に割り当てて使う
480デフォルトの名無しさん:2005/05/09(月) 22:29:21
そうだね
481479:2005/05/09(月) 22:38:54
読み違えちったスマソ。
>>479はモーダルの場合

モードレスダイアログでdeleteを呼ぶべきかどうかは作成の仕方による。
new CMyDialog() を使っている場合に対してdeleteが必要
482デフォルトの名無しさん:2005/05/10(火) 18:17:50
ダイアログの淵に色付けしたいのですが、簡単に書く方法ありまつか?
483デフォルトの名無しさん:2005/05/10(火) 18:48:46
ダイアログをサブクラス化してWM_NCPAINTの処理を追加
簡単には説明できないが今ならもっといい方法があるかも
484デフォルトの名無しさん:2005/05/10(火) 18:55:36
逆にXP対応が面倒な罠。
485デフォルトの名無しさん:2005/05/11(水) 00:16:54
CRichEditCtrlで固定幅フォント(MS ゴシック)をフォントサイズ固定で
使っていますが、boldにしても固定幅がキープされる素敵な方法は
ないでしょうか。当たり前ですが、boldにするとその分微妙にズレて
しまうのです。orz
486471:2005/05/11(水) 04:29:32
471ですが、ここ数日 試行錯誤しているのですが
解決できません。
ご教授よろしくおねがいします
487デフォルトの名無しさん:2005/05/11(水) 04:46:25
>>471
MS製品の動作を調べてみると、押した瞬間でなく離した瞬間にメニュー表示してる模様。

WM_*BUTTONDOWNの直後は
SetActiveWindow(hWnd);
のみ

WM_*BUTTONUPの方で
TrackPopupMenu
メニューを表示したらよいと思われ.
488デフォルトの名無しさん:2005/05/11(水) 04:57:47
>>487
こんな時間にレスするなんてよほど暇で絶望的だな
489デフォルトの名無しさん:2005/05/11(水) 09:26:32
DrawTextで45度回転させた文字を書くことってできますか?
フォントで回転を指定しても、階段状に表示されるだけでフォント自体は回転されないんですが…。
490デフォルトの名無しさん:2005/05/11(水) 10:16:50
>>482
取り敢えずで良いならOnPaintで枠を描くって手もある。
491デフォルトの名無しさん:2005/05/11(水) 11:13:55
>>489
user.dllの関数にそんな描画を期待するなよ。
TextOut系でやるべし。
492デフォルトの名無しさん:2005/05/11(水) 11:34:52
>>491
そうすると、クリップ処理とか自分でやれってことですかねぇ?
改行とか面倒臭そう…。

まぁ、出来ないのであれば仕方ないですけど。
493471:2005/05/11(水) 14:15:36
>>487
あなたは髪ですね
無事解決しました ありがとうございます!
494デフォルトの名無しさん:2005/05/12(木) 09:44:21
ダイアログベースで作ってるんですが
モードレスダイアログを作るにはどうすればよいんですか?
495デフォルトの名無しさん:2005/05/12(木) 11:37:23
適当にインスタンスを確保したら、CreateWindow()してShowWindow()。
496494:2005/05/12(木) 13:09:11
何とか出せました
ありがとうございます

ShowWindow()をやってないのですが表示できたのは
ダイアログプロパティで可視にチェックを入れたから、であってますかね?
497495:2005/05/12(木) 13:48:31
>>496
ああそうか、私は予めCreateしておいて後でShowするから意識してなかった。
498デフォルトの名無しさん:2005/05/12(木) 20:03:35
リストビューの中のデータの編集方法がヘルプ見ても分かりません。

ご教授お願いします。
499デフォルトの名無しさん:2005/05/12(木) 21:29:45
教授はできないが、ユーザに編集させたいのなら生半可な手間じゃないので覚悟が必要。
500デフォルトの名無しさん:2005/05/12(木) 23:26:48
ダイアログベースにエディットボックスを貼り付けたのですが、
Ctrl+A(全て選択)が出来ません。
Ctrl+C(コピー)やCtrl+V(ペースト)は出来ています。
また右クリックでコンテキストメニューからの「すべて選択」は機能します。

Ctrl+Aを機能させる方法を教えてください。
501デフォルトの名無しさん:2005/05/13(金) 00:20:35
>>500
自分でキーイベント拾って処理。
502デフォルトの名無しさん:2005/05/13(金) 05:58:31
メニューにCtrl+A(全て選択)を追加
503デフォルトの名無しさん:2005/05/13(金) 13:47:00
時間の掛かる計算処理中にキャンセルボタンが押されたら中断するようにしたいのですが、
普通にボタンを押しただけではループが終わるまでボタンのクリックが発生しません。
VBでいうところのDoEventsみたいな処理はMFCではどうしたらいいでしょうか?
504デフォルトの名無しさん:2005/05/13(金) 13:52:29
スッドレ
505503:2005/05/13(金) 14:12:11
スレッドですか。
敷居が高そうで勉強してなかったんだけど、
いい機会なんでちょっと調べてみます。
ありがとうございました。
506デフォルトの名無しさん:2005/05/13(金) 15:21:32 BE:29115353-#
>>503
MSDNで「アイドル ループ処理」を検索。
最も単純なのは、「時間のかかる処理」の最中にメッセージループを埋め込む。
507デフォルトの名無しさん:2005/05/13(金) 16:13:38
こんなんでいいのかな?
for (MSG msg; PeekMessage(& msg, NULL, 0, 0, PM_NOREMOVE); AfxGetThread()->PumpMessage());
508デフォルトの名無しさん:2005/05/13(金) 16:25:47 BE:104814869-#
>>507
MSDNのサンプルでは、PumpMessage()の戻り値の評価と、ループ終了後に
CMyApp->OnIdle()の明示的な呼び出しがある。
OnIdleを呼ばないと、コマンドインターフェースの更新が行われない気がする。
509デフォルトの名無しさん:2005/05/15(日) 10:33:00
MFCベースで、自分で作ったGUI部品をGUI開発環境で使いまわすための方法っていうと、
COM/ActiveX以外に何かあります?
510デフォルトの名無しさん:2005/05/16(月) 09:18:13
>>509
確かコンポーネントの追加かなんか(COMオブジェクトを追加する奴)で、
他プロジェクトからクラス単位でコピーを追加できるので、GUI部品を
CButtonとかCStatic とか適当ななもののサブクラスとして作成しておけば、
ダイアログエディタでCStaticとかを張って、
ウィザードでそのコントロールに当該のクラスの変数を追加、
ってな手順で再利用できます。

この場合そのクラス独自の初期化 OnSubclass あたりでやることになる。
511デフォルトの名無しさん:2005/05/16(月) 18:59:10
>>510
どうもです。
コンポーネント ギャラリ って機能でしょうか。
Class Viewでのクラスの右クリックから「ギャラリへ追加」すると
クラス単位で部品化してくれるようですね。

ところでデフォルトで用意されてるコンポーネントは、
挿入時にダイアログが表示されて、いくつか設定が可能だったりしますが、
自前のクラスではそういう事はできないのでしょうか。
512デフォルトの名無しさん:2005/05/16(月) 21:11:41
ありがとう。ここで聞こうとして、ソース見てたら間違いを見つけたよ。
ごめん。
513デフォルトの名無しさん:2005/05/16(月) 22:40:33
CDialogとSetWindowPos( &wndTopMost...について質問〜

二つのCDialog?.Create( CDialog?::IDD, 0 )で作ったモードレスダイアログA,Bがあるとして、
Aで最前面にすると、取りあえず最前面になります。
そして、Bで最前面にすると、両方最前面になります

で、問題はここからなんですが、
Bの最前面を解除すると、勝手にAの最前面も解けるんです。
何故でしょーか・・・

Spy++で見たところ、オーナーウィンドウが有るのが怪しいと思うのですが、
オーナーウィンドウ無しで作る方法が分からない…
514513:2005/05/16(月) 23:20:36
解決しますた。お騒がせしてすんません。
515デフォルトの名無しさん:2005/05/17(火) 16:29:35
SDIで作ってるのですが
エクスプローラーみたいにウィンドウ全体にリストコントロールが
表示されるようにするにはどうすればいいのですか?
コントロールだからリソースにダイアログを作ってリストビューを貼り付けるのですか?
516デフォルトの名無しさん:2005/05/17(火) 16:45:08
>>515
View を ListViewにすればいいんじゃない?
517515:2005/05/17(火) 17:18:12
ListViewにしてみました
が、どこでリストビューコントロールを作ればいいのかわかりません
申し訳ないですが教えてください
518デフォルトの名無しさん:2005/05/17(火) 17:52:15
>>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() ); <- 上手くいきます
521デフォルトの名無しさん:2005/05/17(火) 18:31:09
エラーがでます
522デフォルトの名無しさん:2005/05/17(火) 20:28:14
アサートが出た場合は、それがどこで出たのかが重要なのだ。
523500:2005/05/17(火) 23:43:56
亀ですみません。
>>501-502
ありがとうございます。
501氏の方法で解決しました。
524デフォルトの名無しさん:2005/05/18(水) 10:02:32
多分標準ライブラリみたいですが、
>ビルド : 警告 : ビルドに失敗しました (またはビルドの方法がわかりません) '〜\tabstrip.cpp'
みたいな、エラーの消し方教えて下さい。
525デフォルトの名無しさん:2005/05/18(水) 10:05:37
それはMFCじゃなくてVCかIDEの問題な気がしないでもないが
526デフォルトの名無しさん:2005/05/18(水) 12:37:59
WindowsXPで2画面のプログラムを作っているのですが、
MoveWindowで(0,0)に移動しようとすると2画面目に行ってしまいます。
(1,1)ですと1画面目に移動するのですが…。
これってやりかたが悪いんでしょうか。
ちなみに、SXGAで(1280,0)とすると、正しく2画面目に表示されるんですが。

うまいこと(0,0)に移動させる方法はないですか?
527デフォルトの名無しさん:2005/05/18(水) 14:10:12
>>526
よくわからんのだが、、、
こっちで試した限りじゃ、0,0でプライマリの左上にちゃんといくが・・・
528デフォルトの名無しさん:2005/05/18(水) 14:36:02
ドライバのバグだったりして。
529デフォルトの名無しさん:2005/05/18(水) 18:30:32
>526
ドライバのバグって前提で考えると、
SetWindowPos使ってみるとか、直前に(1,1)に移動してからやってみるとか。
530>487:2005/05/19(木) 19:55:03
便乗質問ですが、
ポップアップメニューが出るときに、
SetForegroundWindowしてるために、画面が最前面に出てきます。
これを防ぐにはどうしたらいいんでしょう?
531デフォルトの名無しさん:2005/05/19(木) 20:24:07
>>530
SetForegroundWindowしない
532デフォルトの名無しさん:2005/05/20(金) 13:08:38
>>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です。
533デフォルトの名無しさん:2005/05/20(金) 13:32:43
APIスレの方がよくねえか?
534デフォルトの名無しさん:2005/05/20(金) 13:44:35
マイナーな話題は適当な所で切り上げてください。
他の人には関係ない話題だし
535デフォルトの名無しさん:2005/05/20(金) 15:57:44
そうだな。
しかもビデオディスプレイ付属のドライバの
専用ユーティリティのオプション設定な気がする
536532:2005/05/20(金) 19:14:41
そうですかぁ。
もし良かったら誘導お願いします。<すれ違い

ちなみに、
Intel845G+MATROX G400の2画面
MATROX G400の2画面
MATROX G450の2画面
で同様の動きをするので、ビデオドライバーとは関係ないのかなぁ?って気が
するんですけどね…。

一応、付属CDのドライバとダウンロードした最新ドライバも使ってみました。
537デフォルトの名無しさん:2005/05/20(金) 19:35:17
その時にSpy++で見るとWindow位置どうなってるのさ
538530:2005/05/20(金) 20:17:11
>531
いや、SetForegroundWindowしないとポップアップが消えないんですけど。
SetForegroundWindowはポップアップを消すために必要なのかと。
539デフォルトの名無しさん:2005/05/20(金) 21:19:22
トレーアイコンに直結したウィンドウは透明にしとけ
そして別のやつを見えるように出しとけ
540デフォルトの名無しさん:2005/05/20(金) 21:36:33
こ こ は M F C ス レ だ
541デフォルトの名無しさん:2005/05/21(土) 01:30:53
カスな質問ですが、AppWizardの最後の基本クラスの設定で
CListView
CTreeView
CScrollView
の3つはCViewと何が違うんでしょうか・・・?
542デフォルトの名無しさん:2005/05/21(土) 03:25:02
その質問を書き込んだソフトに全部あるんじゃないのか
543デフォルトの名無しさん:2005/05/21(土) 09:10:50
>>541
MSDNに書いてある
それでわからないなら本買え
544デフォルトの名無しさん:2005/05/21(土) 19:34:24
mfc70.dll とか mfc71.dll って、
マイクロソフト社(US/JP)のダウンロードセンターには置いてないんですか?
いちおう検索かけてみたのですが見つかりませんでした。

VS2003 で作ったソフトを配布したのですが、
スタティックリンクでビルドしなかったので、
ユーザー環境で起動不能が続出し、集中砲火を浴びてしまいました。
( 配布してから気づいた... )
545デフォルトの名無しさん:2005/05/21(土) 19:50:22
>>544
自分で配布したら?
546デフォルトの名無しさん:2005/05/21(土) 20:02:56
>>545
うーむ、たしかにそれはそうなのですが。

別に、配布手段が無いとか、配布コストがかかるとか、
インストーラ作るのがめんどくさいとか、
そういう問題は、まったくありません。

ただ、MFCのようなライブラリは、
マイクロソフトから手にいれてもらうと、
ユーザーさん達が「ちょっとだけ安心」かな、
と、思ったのですよ。

リビルドしようかな,,,
547デフォルトの名無しさん:2005/05/21(土) 20:08:09
544=546です。
VC6とかのときは、普通に MFC42.dll があるから、
ダイナミックリンクでビルドしておりましたが、

VS2002 とか VS2003 の VC だと、
スタティックリンクしてビルドするのが常識なのですか??
548デフォルトの名無しさん:2005/05/21(土) 20:16:16
>>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のバグらしく,
フォルダ名末尾の「表」という文字に「\\」と同じコードが含まれているのが
原因らしいのですが,どのように解決したらいいのでしょうか.

よろしくお願いします.
550デフォルトの名無しさん:2005/05/21(土) 20:27:27
>>549
MFCのソースついてるから自分で好きなように
551549: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;
〜省略〜
}
552549:2005/05/21(土) 21:19:29

改変したmfcのライブラリってプログラムに同梱配布してもいいのでしょうか?
改変したライブラリなしでは,配布先のWindowsにおいて正しい挙動を望めませんよね・・・
553549:2005/05/21(土) 21:24:35
すいません.>>552の疑問については自己解決です.
改変MFCライブラリをスタティックリンクすればいいのですね.

>>551の疑問は解けていないので,わかる方はよろしくお願いします.
554デフォルトの名無しさん:2005/05/21(土) 21:30:15
継承とか知らないんだろうか?
ソース見るとm_strRootから作ってるから
CFileFind::GetRoot呼べばなんとかなるでしょう。
555549:2005/05/21(土) 21:41:27
>>554
他のプログラムでも同じクラスを使う可能性を考えていたので,
モトから正すことばかり考えていました.

とりあえず,自前ソースに同等の処理を書くことにします.
ありがとうございました.
556デフォルトの名無しさん:2005/05/22(日) 00:53:27
持ってきた文字列を自分で処理すればいいのに
なんでライブラリのせいにするかね・・・
557デフォルトの名無しさん:2005/05/22(日) 05:32:46
でも知らずに使ってるとはまるから
バグは報告してもらうと助かる
558デフォルトの名無しさん:2005/05/22(日) 06:54:32
ごみ箱を空にする方法を教えてください
559デフォルトの名無しさん:2005/05/22(日) 08:16:50
SHEmptyRecycleBin
560デフォルトの名無しさん:2005/05/22(日) 12:03:30
system32にあるiphlpapi.dllっていうIP使用に関するライブラリを使いたいんだけど、
どうやってリンクすればいいんでしょうか?
\MFC\Libにあるライブラリじゃないから、設定のリンクでiphlpapi.dllを
加える事は出来ないのでしょうか?
561デフォルトの名無しさん:2005/05/22(日) 12:40:27
>>560
>\MFC\Libにあるライブラリじゃないから
それが解っていてこのスレで訊く理由は?
562デフォルトの名無しさん:2005/05/22(日) 13:34:25
>>560
インポートライブラリをリンクすればいいだけ
563デフォルトの名無しさん:2005/05/22(日) 13:51:41
MFC で SDI スタイルの印刷アプリを作っています。

現在のメインウインドウの状態が、
普通のウインドウか、印刷プレビューのウインドウ
どちらなのかを、知る方法はありますでしょうか?

目的はといいますと、
通常は、ファイルのドラッグアンドドロップを受け付けて、
印刷プレビューの場合は、それを受け付けないようなアプリを作りたいのです。
564デフォルトの名無しさん:2005/05/22(日) 14:49:43
ダイアログベースアプリで、本体の部分をドラッグ&ドロップ
することによってウィンドウを移動させたいのですが、
どうすればいいのでしょうか?
565デフォルトの名無しさん:2005/05/22(日) 16:04:59
現在IEで開いているページのアドレスの取得方法を教えてください
566デフォルトの名無しさん:2005/05/22(日) 18:47:08
>>564
クライアント領域をつかんでウィンドウを移動したいってこと?

WindowProcをオーバーライドして↓
ttp://www.hidecnet.ne.jp/~sinzan/tips/win/win_tip2b.htm
567デフォルトの名無しさん:2005/05/22(日) 19:55:21
IEで開いているというのはIEのコンポーネントを使った自作の
アプリケーションのこと?それともIEそのもの?
568デフォルトの名無しさん:2005/05/22(日) 20:53:02
>>566
ありがとうございます。
OnNcHitTestでググって↓のをコピペでてきました。
ttp://www.alpha-net.ne.jp/users2/uk413/vc/VCT_WNDドラッグ移動.html
569デフォルトの名無しさん:2005/05/23(月) 05:09:48
IEそのものです。
570デフォルトの名無しさん:2005/05/23(月) 08:47:59
IEからアプリへURLをD&Dじゃだめなんだろうか?
それかIEを右クリックでコンテキストメニューとか
571デフォルトの名無しさん:2005/05/23(月) 15:46:18
>>565
IE URL 取得でググれ。
572デフォルトの名無しさん:2005/05/24(火) 17:20:17
IEのウィンドウハンドル取って、(もしくは自分でIE開いてプロセスIDからウィンドウハンドル取って)
その下層にあるExplorer_server取得。
Explorer_serverからIWebBrowser2Ptr取得して、
GetLocationURLでOK
573572:2005/05/24(火) 17:21:15
アンカー忘れた
>>565
574デフォルトの名無しさん:2005/05/24(火) 19:22:37
IWebBrowser2Ptrを得るなら、SHDocVw::IShellWindowsPtrからの方が
簡単だと思うけど。その代わり、IEとエクスプローラの区別が必要だけど
575530:2005/05/24(火) 19:44:19
>539

やってみましたが、残念ながらだめでした。
画面の構成が悪いんでしょうか?

A(非表示)→B(モーダル、表示)

C(モードレス、非表示)

Cでポップアップの処理をしてます。
Create(IDD_xxx,NULL)でCダイアログを作っています。
Cをモーダルにもしましたが、
どうしてもBが前面に出てきます。
576デフォルトの名無しさん:2005/05/24(火) 20:40:09
>>575
Windowに親子関係があっちゃだめ
577デフォルトの名無しさん:2005/05/24(火) 21:47:44
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

長くなってスイマセン。
一体どこを直せばいいのか考えて、息詰まってます。
助言お願いします。
578デフォルトの名無しさん:2005/05/24(火) 21:52:28
>>577
気になった点を2つ。
・GetLastErrorは何を返すか。
・typedef DWORD (WINAPI *SENDFUNC)(HANDLE , IPAddr , LPVOID ,
 WORD , PIP_OPTION_INFORMATION , LPVOID , DWORD , DWORD);
 ではないのか。
579577:2005/05/24(火) 23:08:41
>>578
例の関数呼び出しエラーが出るコードの直後、GetLastError()は
何故か正常終了の0を返します。
関数定義でWINAPIを入れても、同様に関数呼び出しエラーが出ます。

一晩寝て、明日また考えてみます。
580575:2005/05/24(火) 23:21:00
>576

Create(IDD_xxx,NULL)でも親子関係があるってことですよね。
(NULLを指定すればいいのかと思っていました)
親子関係なしのダイアログはどうやってつくればいいんでしょう?
CreateWindow?
581デフォルトの名無しさん:2005/05/24(火) 23:44:12
>>580
なるほど、MFCだとNULLいれると親が確定するのか。
Create(IDD_xxx, GetDesktopWindow()) でどう?
582デフォルトの名無しさん:2005/05/25(水) 02:50:52
クリックとダブルクリックを識別する方法を教えてください
583デフォルトの名無しさん:2005/05/25(水) 05:00:59
XP+MFC+VC6

ツールバーにコンボボックスを載せる方法を教えてください。
ググッて
http://park17.wakwak.com/~dragoon/toolbar2.htm
を見つけましたが分からない事があります。

・セパレータの位置
 セパレータが複数ある場合はどうすれば?

・コマンドID
 リソースエディタで入力する ID_xxx の事でしょうか?
 
・コンボのコントロールID
 リソースエディタで入力する値の事でしょうか?
584デフォルトの名無しさん:2005/05/25(水) 07:07:42
>>583
何がわからないんだ。

ペインの大きさ指定で

そう

そう
585デフォルトの名無しさん:2005/05/25(水) 08:48:46
>>582
メッセージが違う
ダブルクリックが来る時はその前に
シングルクリックも一回来るのはわかるよな?
586デフォルトの名無しさん:2005/05/25(水) 09:13:24
クリックというメッセージは無いけどね
587584:2005/05/25(水) 11:23:50
>>583

リンク先を見るまで質問を勘違いしていた
そのリンク先に対しての質問なのね。

左から数えて何番目という指定だから
複数も何もない。
コマンドIDは押したときに来るIDだから自分で決める
コントロールIDも自分で決める、他と重複しないようにすればいい
両方ともリソースIDで先に番号振っておけばID_xxが使える
588デフォルトの名無しさん:2005/05/25(水) 19:48:17
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();
}
589デフォルトの名無しさん:2005/05/25(水) 20:09:20
>>588
ユーザー定義メッセージの型やメッセージマップの書き方が正しくないんじゃない?
590デフォルトの名無しさん:2005/05/25(水) 20:13:06
×ユーザー定義メッセージの型
○ユーザー定義メッセージハンドラの型
591575:2005/05/25(水) 20:24:48
>581

できました!!
どうもです!!
592588: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 をリンク?するようにしたら動作するので。
593デフォルトの名無しさん:2005/05/25(水) 20:32:54
>>592
ON_MESSAGE に渡すパラメータは
LRESULT f(WPARAM, LPARAM);
のシグネチャを持たなければいけない。
void f() を渡したいときは
ON_MESSAGE_VOID を使いなされ。
594588,592:2005/05/25(水) 21:06:15
>>593
ON_MESSAGE_VOIDを使用したところ
void func();のメッセージハンドラが無事作れました。
重ねがさね、どうもありがとう。

ところでこういうのってどうやって検索してますか?
ヘルプにも記載されてないみたいだし
(なもんで、afxpriv.hのインクルードがなかなか解らなかった)、
ON_MESSAGE_VOIDでずばりググっても3件しかヒットしないんですが。
面倒ならスルーしてください。
595デフォルトの名無しさん:2005/05/25(水) 22:25:48
>>594
ON_MESSAGEの定義を見れば受け取れる型はわかるのでその時点で諦めてメソッドのシグネチャを修正する。
長ったらしいON_MESSAGEを入力するのが面倒なのでON_Mまで入力して後補完させると幸運にもON_MESSAGE_VOIDが出てくるのでなんじゃいなと思って調べる。
運に頼らずこれを見つけられるやつはそうそういないだろう。
596583:2005/05/25(水) 23:00:31
>>587

>両方ともリソースIDで先に番号振って
先に決めるとありますが、コンボボックスのIDはいつどこで決めるんですか?

後、セパレータの位置はどうやって求めるんでしょうか?
597594:2005/05/25(水) 23:01:37
>>595
なるほど。そういうのもありますね。
参考になりました。
598デフォルトの名無しさん:2005/05/26(木) 05:17:40
COMまわりのことです。
ClassWizardのオートメーションタブにタイプライブラリのヘッダを作ってもらった
のですが、定数に関する宣言が無いのです。
「#import に作ってもらった時はenumしてくれてたのになあ・・・」と思ったら
ttp://www.athomejp.com/goldfish/mfc/ole/excelexec2.asp
にも同様な記述がありました。

#import してできた .tlh から定数部分だけ拝借すればとりあえずは良いのですが、
あまりスマートな方法に思えません。どう対処するのが正統な方法なのでしょうか?
599デフォルトの名無しさん:2005/05/26(木) 10:18:18
AppWizardで基本クラスをCListViewにしてSDIアプリを作ったのですが
カラムのヘッダをクリックしてソートしたいのですが
ダイアログにListCtrlを貼り付けた場合はClassWizardでメンバ関数を作れますけど
今回の場合オブジェクトがないので作れません(と思う)
基本クラスをCListViewにした時OnColumnclickみたいなメンバ関数はどうすれば作れるのですか?
600デフォルトの名無しさん:2005/05/26(木) 11:07:07
>>599
OnNotify
601600:2005/05/26(木) 11:16:40
>>599
ごめん、IDEはどれ?
2003だと普通にLVN_COLUMNCLICK とか選択して
メンバー作れるわ・・
602599:2005/05/26(木) 11:28:16
OnNotifyで登録しようとしてもコントロールの子の識別子に入れるべき
オブジェクトIDが存在しない(と思う)ので入れられないのです
当方VC++6.0です
603デフォルトの名無しさん:2005/05/26(木) 11:35:21
自分で呼べばいいじゃん
クラスウィザードにやらせたいってこと?
604デフォルトの名無しさん:2005/05/26(木) 11:42:34
CListView ってListViewコントロールそのものじゃなかったっけ。
だったら ON_NOTIFY_REFLECT で自分が発行する Notify を
処理できそうな気がする。
605599:2005/05/26(木) 11:53:19
あ、勘違いでした OnNotifyじゃなくてON_NOTIFYでした

>603
いえ、自分で呼べばいいのですがよく分からなかったです

けっきょく>604のおっしゃるようにON_NOTIFY_REFLECTでできました

ありがとうございました
606デフォルトの名無しさん:2005/05/26(木) 14:00:53
関連づけられているファイルやフォルダのアイコンの取得方法を教えてください
607デフォルトの名無しさん:2005/05/26(木) 18:31:12
マルチポスト
608デフォルトの名無しさん:2005/05/26(木) 20:58:24
こんばんわ
質問ですが、

MFCで.xlsファイルを作成・操作する方法はどのようにすればいいのでしょうか?
一般的にどのような方法が使われていますか?
609デフォルトの名無しさん:2005/05/26(木) 22:23:11
.netから6.0に移植したいのですが、
リソースの移行は可能でしょうか?
とりあえずrcファイルをコピーしてみましたが駄目でした。
clw(だっけ?)などを一度削除してみようかなと思っています。

.netはバグが多すぎませんか?嫌になりました。
610609:2005/05/26(木) 22:47:46
とりあえず6.0同士ではできました。
プロジェクト名を変えて、clw等を消して再読み込み?しました。

.netでは月曜に試してみます。
注意点あればお願いします。
611デフォルトの名無しさん:2005/05/26(木) 22:56:08
internal error でコンパイルできないのは2003で減ったけどなあ
612デフォルトの名無しさん:2005/05/27(金) 11:01:04
VC++6でつが、トグルボタンはありまつか?
613デフォルトの名無しさん:2005/05/27(金) 11:03:33
>>608
ClassWizard から EXCEL9.OLB を開いて Excel クラスを作成。
でも、バージョンも何も書かずに訊いて回答が得られると思う人には
無理でしょうから、.csv でも書いとけ。
614デフォルトの名無しさん:2005/05/27(金) 11:05:34
チェックボックス(CButton)では如何?
615デフォルトの名無しさん:2005/05/27(金) 11:12:59
BS_PUSHLIKEなチェックボックスやラジオボタンでどうか
616デフォルトの名無しさん:2005/05/27(金) 11:31:32
VC++.netですが、私もトグルボタン超ほしいです
普通のボタンでSetState()を使ってみましたが、
上手くトグルしてくれませんでした・・・
617デフォルトの名無しさん:2005/05/27(金) 11:34:54
全然上のレス見てないのか・・・
618616:2005/05/27(金) 11:44:52
まことにすみませんでした・・・
回答出てるとは気づきませんで・・・
619612:2005/05/27(金) 13:05:22
トグルボタンがあるということでつか?
620デフォルトの名無しさん:2005/05/27(金) 13:17:05
ODBCでmdbファイルをCRecordsetクラスで扱ってるのですが、
mdbファイルの位置を固定しなければなりません。
可変にするにはどうしたらいいんでしょう?
レジストリに登録でしょうか?

また、CRecordsetよりもCDaoRecordsetの方が便利ですが、
Microsoft Jet データベース エンジンとやらがない環境でも動くんでしょうか?
621デフォルトの名無しさん:2005/05/27(金) 13:29:33
622612:2005/05/27(金) 13:35:53
チェックボックスやラジオボタンじゃイヤン
623デフォルトの名無しさん:2005/05/27(金) 13:44:46
BS_PUSHLIKE入れてやってみたのかよ
624デフォルトの名無しさん:2005/05/27(金) 14:06:39
I_LIKE_ENKA
625デフォルトの名無しさん:2005/05/27(金) 15:40:04
>>620
| mdbファイルの位置を固定しなければなりません。
固定しなくてもいい。
lpszConnectでいろいろ指定できる。

| Microsoft Jet データベース エンジンとやらがない環境でも動くんでしょうか?
無いと絶対動かない。
626620:2005/05/27(金) 16:02:09
>625
>lpszConnectでいろいろ指定できる。

確かにそうですが、質問の意図はアプリ実行時にlpszConnectで指定したところに
mdbを固定しないといけないですよね?という意味です。

それに対する回答でしょうか?
627デフォルトの名無しさん:2005/05/27(金) 17:28:03
CStaticのクリックイベントって発生しないんでつか?
628デフォルトの名無しさん:2005/05/27(金) 17:35:41
>>627
なんでそう思うの
629デフォルトの名無しさん:2005/05/27(金) 17:46:12
SS_NOTIFY 入れてないとか
630デフォルトの名無しさん:2005/05/27(金) 17:49:05
って、ここはMFCスレか。
SS_NOTIFY (VC++のリソースエディタなら通知をtrue)
にすれば来ると思うよ
631620:2005/05/27(金) 18:47:40
>625

私はあらかじめデータソースをコンパネで作って、
ClassWizardでそのデータソースを指定してCRecordsetクラスを作っています。

cppファイルのほうには、
CString rs2::GetDefaultConnect()
{
return _T("ODBC;DSN=testDs");
}
632620:2005/05/27(金) 18:56:23
(つづき)
となります。

データソース作成時にmdbの位置を指定して作成するので、
おそらくそのせいでmdbファイルの位置が指定されてしまうのだと思います。

データソースをいじらないといけないのでしょうか?
それとも他の方法が?
633デフォルトの名無しさん:2005/05/27(金) 18:58:15
ゆーずーきかんやっちゃな
634デフォルトの名無しさん:2005/05/27(金) 19:23:14
CComboBoxで、プロパティでリスト足しても実行時に追加されないんでつね。
中々分かり難いでつ。
635634:2005/05/27(金) 19:37:50
あれ、CComboBoxにAddStringしてもドロップダウンしない...
クリック時に自分でドロップダウンしてやる必要あるのか?????
636デフォルトの名無しさん:2005/05/27(金) 19:42:15
超FAQの予感
637デフォルトの名無しさん:2005/05/27(金) 20:14:59
ConnectStr.Format(_T("ODBC;DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=%s"), nullpo);
638620:2005/05/27(金) 20:41:24
>637
なるほど。
あとはmdbファイルの位置を取得すればいいわけですね。
ありがとうございます。
639620:2005/05/27(金) 22:45:41
さらに質問で恐縮ですが、
ファイル検索で目的のmdbファイルのパスを取得するつもりですが、
予備などの理由で同名のファイルが他に存在する場合、判別できないですよね。

なるべく置き場所に制約をつけたくないのですが、
他に同名のファイルがある可能性を考えると、
フォルダ名などで区別できるようにしないといけないのかなぁと思っています。

一般的にこういう場合はどうするんでしょう?
レジストリに登録でしょうか。レジストリにあまり触れたことがないのですが。
640デフォルトの名無しさん:2005/05/27(金) 22:50:04
>>639
明らかにMFCの問題じゃないのでどっか行ってください。
そういう外部仕様的な問題は各解決方法の利点欠点を洗い出して関係者で話し合って決める事。
641デフォルトの名無しさん:2005/05/28(土) 03:36:09
>>639
どうでもいいが、あんたホンットにレジストリ好きだな。
642デフォルトの名無しさん:2005/05/28(土) 09:49:05
>>634-635

の超FAQもヨロ

拡張タブのドロップダウンを許可する、をオンにしてもダメでつぅ
643デフォルトの名無しさん:2005/05/28(土) 10:16:48
>>642
ダイアログエディタ上でリストのサイズを設定したか?

[       ▼] 
       ↑
       クリック
644639:2005/05/28(土) 10:27:34
>640
そうですね。すみません。いろいろ教えて頂いてありがとうございました。
645デフォルトの名無しさん:2005/05/28(土) 13:17:40
今、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 が発生してしまいます。

最悪英語でも良いのですが、良い方法をご存じの方が居ましたら教えてください。
よろしく御願いします。
646デフォルトの名無しさん:2005/05/28(土) 17:12:50
Lを外す
647デフォルトの名無しさん:2005/05/29(日) 04:03:26
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の段階で既に問題が起こっている様子。
デバッグ実行すると、アクセスバイオレーション。

多分、自分がどこかで見落としているのでしょうが、どうにも原因が分かりません。
何か気付いた点があれば、ご教授下さい。宜しくお願いします。
648デフォルトの名無しさん:2005/05/29(日) 08:54:54
インテリセンスと実行時エラーにはなんの関係も無い。
649デフォルトの名無しさん:2005/05/29(日) 09:16:49
>>647
プロジェクトコピーして作るとよくそういうエラーが出る。
原因不明のエラーの場合は中間ファイル消してリビルドだな
650647:2005/05/29(日) 10:53:56
>>648
あれが出ない時って、大抵定義段階でミスって認識されていない
変数を使おうとしている場合、だと勝手に思ってました。
勉強不足でした。

>>649
指摘通り、USBでコピーしたプロジェクトでした。
その方法で無事に解決し、実行出来ました。
ありがとうございました。
651デフォルトの名無しさん:2005/05/29(日) 13:10:08
時々ピンポイントな解決策を提示する人が居る時は、ああこのスレ役に立ってるんだなと思う
652デフォルトの名無しさん:2005/05/29(日) 16:29:34
ある変数を一時的にシリアライズ化し、後で元に戻したいのですが
うまくいきません。
int x = 1234,y = 0;
CMemFilemem;
{
CArchivearS1( &mem, CArchive::store );
arS1 << x;
}
// ここで処理いろいろ
{
CArchivearL1( &mem, CArchive::load );
arL1 >> y;
}
↑の処理実行後にy=1234となってほしいのですが、実際は
「無題のファイルの末尾以降にアクセスしようとしました」
とエラー表示してしまいます。
一体何処がいけないのでしょうか?
653デフォルトの名無しさん:2005/05/29(日) 16:33:38
書き込み後にmemのSeekしなきゃ、
ファイルポインタがファイル末尾のまんまだと思う。

と日記には書いておこう。
654デフォルトの名無しさん:2005/05/29(日) 16:40:19
シリアライズ化・・・?
655652:2005/05/29(日) 17:54:55
>> 653
ありがとうございます、↓で解決しました。
mem.Seek( 0, CFile::begin);
CArchive自身がポインタもってるわけではなく、ただのラッパーだったのね。
>> 654
本当はこれはフレームがビューを切り替える時に、ある程度の情報を引き継ぐ
のが真の目的でしたが、質問しやすいように簡略化させて頂きました。
本当は↓こんな感じです
arS << x; → pOldView->Serialize(arS);
arL1 >> y; → pNewView->Serialize(arL);
656デフォルトの名無しさん:2005/05/29(日) 18:32:46
試してないけどソース見たら
CArchive::Flushでもよさそうな気がする。
657デフォルトの名無しさん:2005/05/29(日) 23:12:17
VC6.0でエディットボックスを作成する際、キー入力を半角英数に固定することってできるんですか。
大文字固定にはできるんですが。
658デフォルトの名無しさん:2005/05/29(日) 23:15:37
VC6.0じゃなくたって出来るよ。
659デフォルトの名無しさん:2005/05/29(日) 23:35:22
>>658
どうするんですか。教えてください。
660デフォルトの名無しさん:2005/05/29(日) 23:37:44
不要なキー入力を弾く。
661デフォルトの名無しさん:2005/05/29(日) 23:59:05
エディットボックスのプロパティから大文字固定はできますが、不要なキー入力をはじくってのもプロパティからできるのかな。
662デフォルトの名無しさん:2005/05/30(月) 00:01:49
プロパティだけに頼らなきゃ何も出来ないなら、今すぐプログラムなんかやめちまえ
663デフォルトの名無しさん:2005/05/30(月) 00:56:04
コピペにはなかなか勝てないんだけどな
664デフォルトの名無しさん:2005/05/30(月) 01:36:32
プロパンティ
665デフォルトの名無しさん:2005/05/30(月) 02:27:40
>>662
これからはオブジェクトをポトペタしてプロパティを設定することをプログラミングというのですよ。
いつの間にか日本人にとって寿司=回転寿司になってしまったように。
666デフォルトの名無しさん:2005/05/30(月) 09:22:30
キー入力をはじいてもコピペされるだろう。
あとIMEで日本語入力はどうなる?
667デフォルトの名無しさん:2005/05/30(月) 10:38:40
プロパティってのはIDEのものだけを指すのでなく、クラスの属性だろ?
662は今すぐプログラムなんかやめちまえ
668デフォルトの名無しさん:2005/05/30(月) 10:44:02
脳味噌のしわが無い667は人間なんかやめちまえ
669デフォルトの名無しさん:2005/05/30(月) 11:06:30
( ゚д゚) …
670デフォルトの名無しさん:2005/05/30(月) 11:25:26
ユーザー拡張機能

デフォルトの 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でサイズ設定でつか?
672デフォルトの名無しさん:2005/05/30(月) 13:00:10
コンボボックス びろーん の検索結果 約 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 - キャッシュ - 関連ページ
673デフォルトの名無しさん:2005/05/30(月) 13:03:17
デキマスタ, thx!>>672
674デフォルトの名無しさん:2005/05/30(月) 13:06:19
ビローンワラタ
675デフォルトの名無しさん:2005/05/30(月) 16:20:50
CComboBoxにSetEnabledは無いんでしか?
676デフォルトの名無しさん:2005/05/30(月) 16:22:41
はい。
677デフォルトの名無しさん:2005/06/01(水) 18:29:09
質問です。
ダイアログベースのWizardで作成。

CxxxDlg::PreTranslateMessage{
     if(F1が押されたら){
           何やら処理
           return TRUE;
     }

としても、ヘルプが起動してしまいます。
「何やら処理」は動いているので、if文は通ってるみたいです。
もちろんOnHelpInfoとかを、
何もしないような処理にすれば良いかと思いますが、
そもそもPreTranslateMessageでTRUEを返してるのに、
ヘルプが起動してしまう理由って何でしょうか?
678デフォルトの名無しさん:2005/06/01(水) 18:56:28
アクセラレータ
679デフォルトの名無しさん:2005/06/02(木) 17:20:09
OnRButtonDown(UINT nFlags, CPoint point)

のpointをダイアログ座標にする方法教えてでつぅ。
680デフォルトの名無しさん:2005/06/02(木) 17:34:30
ScreenToClient()

ダイアログ座標って言うのがよくわからんが
681デフォルトの名無しさん:2005/06/02(木) 17:37:38
もしかしてダイアログ単位のこと?
システムフォントの幅と高さによる
682679:2005/06/02(木) 18:13:09
サンクツ>>680-
ポップアップメニュー用の座標が欲しかったのですが、
ClientScreenTo() でうまくいきますた。
683デフォルトの名無しさん:2005/06/02(木) 18:19:19
684677:2005/06/02(木) 22:01:56
要するに、アクセラレータはディスパッチする前に
起動するっちゅうことでokでしょうか?
685デフォルトの名無しさん:2005/06/03(金) 11:43:11
自力描画でエディタを作っています。
CScrollViewを使っているのですが行番号表示を実装しようとした処で詰まりました。
Viewの中に「スクロールしない領域」のようなモノを作る方法はありますか?
行番号の表示領域は(Viewと兄弟、もしくは子の)別のウィンドウにした方が良いのでしょうか。
環境はvc++.net2003です。
686デフォルトの名無しさん:2005/06/03(金) 23:15:24
俺が作ったときは、知らないうちにスクロールされるよりはと
別Windowにしたなあ
687デフォルトの名無しさん:2005/06/04(土) 21:50:20
IPアドレスのボックスか、エディットボックスを2個用意して、
片方にIPアドレスを、もう一方にサブネットマスクを入力させる。
で、そのネットワーク内のアドレスを全て抽出したい。
例えば、「192.168.0.1」・「24」と入力すると、「192.168.0.1」〜「192.168.0.255」と。

どうすればスマートに出来るでしょう?
無理矢理、2進数10進数の変換とかをやっていくしか無いでしょうか。
688デフォルトの名無しさん:2005/06/04(土) 22:13:09
>>687
・それってサブネットマスクって言うの?
・「2進数10進数の変換」を無理矢理、ってどんなことを想定している?
689デフォルトの名無しさん:2005/06/04(土) 22:24:43
>>687
マスクすればいい
690デフォルトの名無しさん:2005/06/04(土) 22:26:16
MFCと関係ないな
691687:2005/06/04(土) 22:30:29
>>688
・ネットワークアドレス長、って言うのでしょうか。
 サブネットマスクが「255.255.255.0」ならば24。

・10進数のIPアドレスを2進数32ビットに変換して、
 右側「32 - ネットワークアドレス長」分全てを0にしたもの〜全て1にしたものを
 出して、10進数のIPアドレスに戻す、って作業を考えてます。
 ただ、面倒なので何か方法があるのでは・・・と思って相談しました。
692デフォルトの名無しさん:2005/06/04(土) 23:14:06
質問ですが、CRichEditのメンバを見たところ、文字列の設定などができないみたいです。
あるのは、StreamInという回りくどい方法でテキストかリッチファイルを入れていくだけ。

どうしてこんな変な仕様なんですか?
SetText(char* p);みたいなものを用意してくれればいいと思うのですが。
693デフォルトの名無しさん:2005/06/04(土) 23:30:24
>>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))
696デフォルトの名無しさん:2005/06/06(月) 22:11:29
>>694さらに訂正
> addr = (addr+1) & addr_mask;
>} while (addr != addr_base);
 addr++;
} while ((addr & addr_mask) == addr_base);
697デフォルトの名無しさん:2005/06/06(月) 22:15:13
ひとつもMFC使ってないのが泣ける
698デフォルトの名無しさん:2005/06/06(月) 22:18:33
CString str;
str.Format("addr=%s", inet_ntoa(ad));
printf("%s", str);
699デフォルトの名無しさん:2005/06/07(火) 07:24:50
VC++6.0を使ってます。

僕に彼女が出来るにはどうしたら良いですか?
700デフォルトの名無しさん:2005/06/07(火) 10:05:32
CreateKanojo
701デフォルトの名無しさん:2005/06/07(火) 11:01:38
IntersectRect(698, Kanojo) = 0
702デフォルトの名無しさん:2005/06/08(水) 11:58:59
こんにちは
質問ですが

CStdioFile fout("myfile\\diary.txt",CFile::modeCreate|CFile::modeWrite);

.exeファイルはmyfileと同じフォルダ階層にあるのに、
なぜか、無効なパス名ということで例外が出ます。
どうしてなのでしょうか?
703デフォルトの名無しさん:2005/06/08(水) 12:34:46
>>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
です。
706デフォルトの名無しさん:2005/06/08(水) 18:49:37
EM_SETSELは自分でセットするときに使う
通知関係は、EN_ だろう
707704-705:2005/06/08(水) 23:21:59
ありがとうございます。やってみます。
708704-705:2005/06/09(木) 10:14:44
あれ、でもEN_SETSELっていうのはないですよね。
自分でも調べていますが、どういうメッセージで取れるのかわかりません。
709デフォルトの名無しさん:2005/06/09(木) 10:33:44
まずメッセージをとる方法が変
選択が解除というのがよくわからんが、
マウスやキーのメッセージが来るたびに
選択範囲をチェックして、自分でUSERメッセージを送ってみたら
710704-705:2005/06/09(木) 11:42:44
エディットボックス内に表示されている文字列を
マウスドラッグやshiftキーを押しながら矢印キーで範囲選択された
タイミングで処理を行いたいのです。
>709が一番いいのかなぁ。ちょっとよくわかりませんがやってみます。
711704-705:2005/06/10(金) 13:51:39
およそ>709のようなことで何とかなりました。
もうひとつ質問です。
エディットボックス内で右クリックして表示されたポップアップメニューの
コマンドが選択されたことを取るにはどうしたらいいでしょう?
712デフォルトの名無しさん:2005/06/10(金) 15:42:56
spy++等で調べるといろいろわかるよ
713デフォルトの名無しさん:2005/06/10(金) 15:45:50
ちょっと見てみたけど、
WM_MENUSELECTとかWM_CONTEXTMENUとか来てるなあ・・
714704-705:2005/06/10(金) 18:44:06
なんとかなりました。
>713のところではなくて、切り取りとか貼り付けの決定時がよかったので
WM_CUTやWM_COPYなどなどをとりました。
とりあえずありがとうございました。
それにしても私、PreTranslateMessageとDefWindowProcの違いがわかってません・・・
715デフォルトの名無しさん:2005/06/12(日) 00:18:00
javaからC++(MFC)に移行しようとしている者です。
ダイアログで得られた値をメインで反映させるためにグローバルな変数を
使うのでは無く、ダイアログのクラスとメインのクラスでデータを共有す
るクラスを作って参照をそれぞれのメンバにセットするというjavaっぽい
プログラミン手法はよくやられるのでしょうか?
716デフォルトの名無しさん:2005/06/12(日) 01:54:54
>715
DDX(Dialog Data eXchange)を使うのが一般的。
DDXとはダイアログボックスに貼り付けられたコントロールの設定値を
クラスのメンバ変数で操作できる仕組み。
717デフォルトの名無しさん:2005/06/13(月) 10:32:36
>>715
簡単なダイアログなら、ダイアログのクラス自体をデータクラスと
割り切って、コントロールに関連付けされたメンバをpublicにして
しまうのもありだと思う。
718デフォルトの名無しさん:2005/06/14(火) 17:29:28
パレットにCBitmapButtonが無いんですが、
どうやってポトペタしたら良いでつか?
719718:2005/06/14(火) 17:47:19
Microsoft Forms 2.0 ToggleButtonだと、
ビットマップが設定できますね。

でも、トグルじゃないボタンが欲しい...
720718:2005/06/14(火) 17:55:39
ToggleButtonがグループボックスの下に入っちゃうけど、
何で?
721デフォルトの名無しさん:2005/06/14(火) 18:56:17
>>718
ボタン貼ってスタイル変更すればいいじゃない。
722デフォルトの名無しさん:2005/06/15(水) 10:31:22
コントロールの親ダイアログを実行時に差し替えることはできまつか?
723デフォルトの名無しさん:2005/06/15(水) 13:33:50
>>722
できる
724デフォルトの名無しさん:2005/06/15(水) 13:49:27
ダイアログの中にダイアログ表示して、それを途中でDoModalしたり、
と、工夫しようと思ったが、
MFCで変わったことするとエラーが激しいな。
725デフォルトの名無しさん:2005/06/15(水) 14:04:40
>ダイアログ表示して、それを途中でDoModalしたり
>MFCで変わったことするとエラーが激しいな
そりゃぁ、馬鹿なことすりゃぁね。
726デフォルトの名無しさん:2005/06/15(水) 14:12:28
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
エラーになってしまいます。

対処方法キボンッユ
728デフォルトの名無しさん:2005/06/15(水) 19:35:51
Createするな。
729デフォルトの名無しさん:2005/06/15(水) 21:15:52
>727
>Dlg.Create(IDD_DIALOG,this);
>Dlg.DoModal();
アホ?
すげーレベル低い
Modal DialogとModeless Dialogの違いわかってる?
それぞれのMFCでの作成方法わかってる?
730デフォルトの名無しさん:2005/06/15(水) 21:37:41
>>729
下がってよいぞ
731デフォルトの名無しさん:2005/06/15(水) 22:00:53
>>729
解説サイト木本
732727: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がうまく分かりません。
教えていただけませんか
734デフォルトの名無しさん:2005/06/16(木) 10:27:40
俺もうまくわからん。
735727:2005/06/16(木) 11:16:24
MyDlg Dlg(this);
Dlg.MyProcess();
Dlg.DoModal();

としてますが、DoModalの前に、「DoDataExchange(CDataExchange* pDX)」で
セットされるべき、画面コントロールプロパティがNULLになってます。

これを回避する方法はありますか?

というより、「DoDataExchange」とは何者なんでしょ。
736727:2005/06/16(木) 11:17:26
「DoDataExchange」を外からコールしようにも、
「CDataExchange* pDX」に何をセットすれば良いのやら?
737デフォルトの名無しさん:2005/06/16(木) 11:35:55
調べもせずにここで訊いて
教えてもらっても礼もなく
再び、調べもせずここで訊く、か…
MSDN 全文音読の刑 >>727
738デフォルトの名無しさん:2005/06/16(木) 12:40:39
>>737
下がってよいぞ
739デフォルトの名無しさん:2005/06/16(木) 13:00:59
MFCって色んな癖を覚えないと使えないわけ?
740デフォルトの名無しさん:2005/06/16(木) 13:08:37
そりゃまあね・・・独自の癖みたいなものに気付くと一気に習得速度が上がる
741デフォルトの名無しさん:2005/06/16(木) 13:09:42
その逆に、
その癖で躓いてるという相談があったら、
どこを嫁、
とヒント出そうぜ!
742デフォルトの名無しさん:2005/06/16(木) 13:19:35
APIで躓いてるならAPIの上でF1を押せ。
その他で躓いてるならそれをキーワードにしてぐぐれ。
それでも分からなければ質問掲示板等のサイトの
過去ログを検索しろ。

こんなもんじゃないかね?
それ以前の基礎がわからなければここで質問しても
理解は難しいと思う。
743デフォルトの名無しさん:2005/06/16(木) 13:24:58
答えない人が相談室に居る必要は無い
744デフォルトの名無しさん:2005/06/16(木) 13:26:16
相談室に質問者の存在は許される。
答えない回答者は存在自体が否定される。

それだけ。
745デフォルトの名無しさん:2005/06/16(木) 13:31:47
まあ要はここで質問するより他所でした方が確実って事だw
746デフォルトの名無しさん:2005/06/16(木) 13:34:27
オマ,フヨー>>745
747727:2005/06/16(木) 13:41:31
// ダイアログ データ
//{{AFX_DATA(CExamDlg)
enum { IDD = IDD_MY_DIALOG };
CSpinButtonCtrlm_MySpinButton;
//}}AFX_DATA


ヘッダーファイルのこのメンバにアサインされるのはいつなのか、
また、DoModal前にアサインする方法が知りたいのですが、
定石は無いのでしょうか?
748737:2005/06/16(木) 14:26:39
なんか答えるまで居座りそうだな、こいつ…
DoModal() を呼び出すだけで
  1. ダイアログが作成される
  2. OnInitDialog() 呼び出し
  3. UpdateData() 呼び出し
  4. DoDataExchange() 呼び出し
が行われる。DoDataExchange() をオーバーライドし、そこで
  DDX_Control(pDX, コントロールのID, メンバ変数);
と呼び出せば、メンバ変数が設定される。
で、音読したか?>>727
749デフォルトの名無しさん:2005/06/16(木) 14:54:08
>>747
コントロールをメンバ変数に割り当てているわけなので、ウィンドウが作成される前
(≒DoModal前) にはそのコントロールは存在しません。なのでアサイン不可能です。

定石1.簡単なものの場合
クラスウィザードで、コントロールじゃなくて値に対するメンバ変数を追加して、
自動生成されるDDXに任せる。

定石2.面倒なものの場合
適切にメンバ変数を設定して、OnInitDialog で独自にコントロールにあれこれする。
コントロール側が操作された場合の処理も適切に自前で行う。

定石3.MFC原理主義の人の場合
自前のDDX関数を作成して、コントロールの初期化とメンバ変数への書き戻しは
DoDataExchangeに任せる。

定石以前に、まずは付属ドキュメントのチュートリアルとか読んだ方が時間も
掛からず効率が良いと思います。
750727:2005/06/16(木) 14:54:24
ヽ(*´∀`)ノ∴゜。* I>>748

751737:2005/06/16(木) 15:04:31
ゎ-ぃ10円ヵョ
752デフォルトの名無しさん:2005/06/16(木) 17:19:32
つS >>749
       |
   \  __  /
   _ (m) _ピコーン
      |ミ|
   /  .`´  \
     ∧_∧  
    ( *・∀・)∩  いいことを思いついた!
    (つ  丿    
    ⊂_ ノ     
      (_)

DoModalのアトに処理走らせれば良いんだ。
753デフォルトの名無しさん:2005/06/16(木) 17:23:03
面白くもない冗談だな。
754デフォルトの名無しさん:2005/06/17(金) 09:49:57
上がってよいぞ
755デフォルトの名無しさん:2005/06/17(金) 11:37:33
ダイアログをDoModalする前にダイアログ・オブジェクトの外からプロパティ設定したい場合は、どうすんだろ?
756デフォルトの名無しさん:2005/06/17(金) 11:45:15
>>755
ダイアログクラスにI/Fを用意する。
757デフォルトの名無しさん:2005/06/17(金) 18:34:28
フロッピードライヴにディスクを入れた,
というイベントをつかむ方法はありますか?
USBメモリを指すとメッセージが飛び,
それでわかるのですが,フロッピーのディスクで
同様のことはできないのでしょうか?
758デフォルトの名無しさん:2005/06/17(金) 18:47:38
無いってAPIスレで言っただろ。
759デフォルトの名無しさん:2005/06/17(金) 18:55:16
>>758
そこをなんとか
760デフォルトの名無しさん:2005/06/17(金) 18:59:41
空のプロジェクトでウィンドウを表示させるだけのプログラムを書きたいんだけど
リンク中に見慣れないエラーが出た

>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をインクルードしても直らないし
誰か直し方教えて
761デフォルトの名無しさん:2005/06/17(金) 19:03:41
/MT
762デフォルトの名無しさん:2005/06/17(金) 19:06:34
スレッドを作成して定期的にドライブ情報を取得すれば?
763デフォルトの名無しさん:2005/06/17(金) 19:09:09
>>762
それは考えたけど
FD が実際にはいってるかどうかなんてわかんのか?
764デフォルトの名無しさん:2005/06/17(金) 19:13:43
FDにアクセスすれば判るっちゃ判るけどいい迷惑だな。
765デフォルトの名無しさん:2005/06/17(金) 19:33:38
>>761
thx!
なぜか知らんが通った
766デフォルトの名無しさん:2005/06/17(金) 20:31:18
1つのリソース・ダイアログに1つのCDialog派生クラスがクッツイテまつ。
そのリソースに、別のCDialog派生クラスをクッツケルのは可能ですか?

そういうことやってても、開発中に意味不明なエラーで悩まされたりせず、楽に作業できますか?

それともクラスウィザードがエラー起すかな?
767デフォルトの名無しさん:2005/06/17(金) 21:32:05
>>764
FDからもブートするようにBIOSで設定すると、
起動時にFDアクセスして調べるよね。
768デフォルトの名無しさん:2005/06/17(金) 21:39:23
それがどうかしたのかカス
769デフォルトの名無しさん:2005/06/17(金) 21:40:54
昔の話でスレ違いになるが
PC9801で暴走したときにキーボード押しながらフロッピーを入れると割り込みが入って
自動的にリセットしてくれるソフトが在ったな。

Windowsだとそういうの出来ないのか,セキュリティ対策にも使えそうなネタだったのに。
770デフォルトの名無しさん:2005/06/18(土) 00:12:47
>>759
ピコワロス
771デフォルトの名無しさん:2005/06/18(土) 01:06:16
>>762-764
確かWindows3.0か3.1ではそんなことしてたはず(OSが)
772デフォルトの名無しさん:2005/06/18(土) 08:40:01
766もヨロ
773デフォルトの名無しさん:2005/06/18(土) 09:16:00
>>766
クッツケルの>可能。問題ない。
楽に作業できるか>知らない。IDEのヴァージョンにもよるでしょう。クラスウィザードは*.hのIDDの定義みて動いてる。
774デフォルトの名無しさん:2005/06/18(土) 11:13:32
>>757
コールバック関数(WindowProc)内で WM_FLOPPYENTER を監視する。
775デフォルトの名無しさん:2005/06/18(土) 18:56:44
>>774
えっマジ?
そんな都合がいいメッセージがあるん?
776デフォルトの名無しさん:2005/06/18(土) 19:27:02
バカじゃねーの
777デフォルトの名無しさん:2005/06/19(日) 21:24:52
分割ウインドウを使って、ウインドウA(リストビュー)に表示させたものを
選択することによって、ウインドウB(エディットビュー)にそれに応じた
情報を表示する、というようなプログラムを作っています。
丁度、2chブラウザでスレ一覧からスレを選択する事で、その内容を
表示させるように。

何か参考になるサンプルが載っているHPを探しているのですが、
期待するようなものが見つかりません。
ご存知でしたら、紹介してください。
778デフォルトの名無しさん:2005/06/19(日) 21:37:50
リストビューで選択されたアイテムの番号を取得。
その取得に応じた情報を取得。
それをエディットビューに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
すまん。あの日はちょっとムシャクシャしてたんだ。
許してくで。
782デフォルトの名無しさん:2005/06/20(月) 20:00:09
自演警報発生
783デフォルトの名無しさん:2005/06/20(月) 20:00:51
>>781
ありがとうございます
784774:2005/06/21(火) 13:49:55
>>783
いえいえ。礼にはおよびませんよ。
785デフォルトの名無しさん:2005/06/21(火) 18:37:41
もともとPCはフロッピー入れてもなにも信号が発生しないからなぁ
無理やり読みに行ってみるしか手がない
786デフォルトの名無しさん:2005/06/21(火) 20:56:03
>>785
そだっけ?
抜くと割り込みが発生したような記憶があるんだけど気のせいかな?
787デフォルトの名無しさん:2005/06/21(火) 22:05:07
>>786
太古のPC-9801系とかはその辺の信号があった。
いわゆる PC-AT 系には無い。
788デフォルトの名無しさん:2005/06/22(水) 19:52:02
一度に描画できるデバイスコンテキストが5個までだったら
ゲームとか作るんだったらまったく向いてないと思うのですが。
背景とか含めて5個しかないと何も作れませんよ。
789デフォルトの名無しさん:2005/06/22(水) 19:54:03
>>788
790デフォルトの名無しさん:2005/06/22(水) 20:04:07
意味がワカラン
791デフォルトの名無しさん:2005/06/22(水) 20:07:55
5個以上描画できないってことじゃないんですか?
792デフォルトの名無しさん:2005/06/22(水) 20:35:53
デバイスコンテキストに対する認識が根本から間違っている。
793デフォルトの名無しさん:2005/06/22(水) 20:48:22
WindowDCについて 何かでチラッと見た程度の知識か うんこ
794デフォルトの名無しさん:2005/06/22(水) 21:41:10
誤爆だろ。脈絡無杉
795デフォルトの名無しさん:2005/06/22(水) 22:46:34
だって描画するものが一度に5個しか出せないんですよ?
インベーダーゲームで言ったら
敵3体と味方の機体一体表示したら弾一個しか出ないじゃないですか。
796デフォルトの名無しさん:2005/06/22(水) 22:49:25
スプライト≠デバイスコンテキスト
797デフォルトの名無しさん:2005/06/22(水) 23:22:21
>>795 デバイスコンテキスト使ったことねーだろお前
798デフォルトの名無しさん:2005/06/23(木) 00:52:42
>>797
プログラム自体あんまりやったことないので詳しいことはわかりません。
しかし、一生懸命勉強していくつもりです。
でも、3DゲームとかはMFCじゃできないんだろうなぁ…。
799デフォルトの名無しさん:2005/06/23(木) 01:28:05
>>798
んなことねーだろ。アホか。

あーあ。VC++ネイテブでGDI+使えたらなー
800デフォルトの名無しさん:2005/06/23(木) 11:45:08
使えるよ
801デフォルトの名無しさん:2005/06/23(木) 15:26:50
特殊なメッセージを受信するために
前もって

RegisterDeviceNotification

というので登録するのですが,
Windows プロジェクトではこれが使用できるのですが
MFCプロジェクトだとこれを知らないというエラーがでます
winuser.h に定義されている,とあるので,

#include <winuser.h>

しても結果は同じです
どうしたら使えるようになるのでしょうか?
802デフォルトの名無しさん:2005/06/23(木) 17:41:24
#define WINVER 0x0500
#include <DBT.H>
803801:2005/06/24(金) 18:10:53
>>802

#include <dbt.h>

が必要なのは承知しておりましたので
すでにしていたのですが

#define WINVER 0x0500

をしたみたところ
やはり結果変わらずです
804デフォルトの名無しさん:2005/06/24(金) 18:22:30
ウィザードが作成した.cppで
#include "stdafx.h"
#define WINVER 0x0500
#include <DBT.H>
・・・
 DEV_BROADCAST_HDR dbhdr;
 ・・・
 RegisterDeviceNotification();
・・・
としたらコンパイル通って動くけど。
ちなみにVC6 sp6。
805803: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 です
806デフォルトの名無しさん:2005/06/24(金) 19:47:01
VS.Net 2003なんだけど、

#define 「下のincludeファイル内で必要な定義」
#include <hogehoge.h>

のdefineがたまに無視されることがある。
VS起動し直したりすれば直るんだが、なんだか変というかすごく不便
807デフォルトの名無しさん:2005/06/24(金) 20:54:13
ドドネトが手元にないからよく判らんけど
stadafx.hの先頭行あたりに
#define WINVER 0x0500
をもってくるとか

「プロジェクトの設定」の「プリプロセッサの定義」に
WIN32, ・・・ ,WINVER=0x0500
を追加する(これが本筋かも)。
808デフォルトの名無しさん:2005/06/25(土) 01:47:35
アプリケーションにシリアル番号「1111」を入れ、コンパイルします。
このシリアル番号を「2222」へ変えるためには再度コンパイルしなければならないと
思っていましたが、アップデートTOOL(アプリ)のようなもので使って
更新しているものを見ました。
どのようにすれば再コンパイル無しにアプリの中の値を変更することができるのでしょうか。
809デフォルトの名無しさん:2005/06/25(土) 02:01:20
もうねぇ(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を妄信してる実装担当が回りに多くて
激しく鬱になって・・・
810デフォルトの名無しさん:2005/06/25(土) 02:09:10
恐ろしいコードだな。
811デフォルトの名無しさん:2005/06/25(土) 02:49:18
Document-View構造を使ってビットマップを表示させたいのですが、
SelectObjectでビットマップを表示させる場合
一つのビットマップしま表示できないです。

複数のビットマップを表示するにはどうすればよいのでしょうううか
812デフォルトの名無しさん:2005/06/25(土) 08:35:08
>>811
複数のCBitmapを用意しろ

とりあえず、ソースどんなん?
813デフォルトの名無しさん:2005/06/25(土) 22:47:29
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 をする方法もあるが、
なんかシロウトっぽくてイヤだ。
814デフォルトの名無しさん:2005/06/26(日) 16:27:16
うわあ、シロウトだ。
815デフォルトの名無しさん:2005/06/27(月) 14:21:41
>>808
リソース内の値を書き換えたのでは。
816デフォルトの名無しさん:2005/06/27(月) 15:52:12
MFCでよい書籍を教えてください。

開発環境:VS.NET 2003
817デフォルトの名無しさん:2005/06/27(月) 18:11:39
ここ数年はMFCの新刊なんてほとんど出てないんじゃない?
書店でも全然見かけなくなったし
818デフォルトの名無しさん:2005/06/27(月) 18:21:58
VC6の時に出てたMFCの本は?
標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング Programmer’s SELECTION
819デフォルトの名無しさん:2005/06/27(月) 19:07:45
>>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);

しかし、このようにすると確かに表示はされるのですが、ダイアログがアクティブに
なりません。(ダイアログの上の青い部分が薄いまま) マウスでなんとか移動はで
きるのですが、アクティブになってスムーズに移動することはできません。何が原因
なのでしょうか?
821デフォルトの名無しさん:2005/06/27(月) 20:33:18
pDlg->Create(IDD_DIALOG1,NULL);
822デフォルトの名無しさん:2005/06/27(月) 23:36:28
>>820
親がデスクトップなので、デスクトップが非アクティブになると
ダイアログも非アクティブになるという動作です。

親をdllを呼び出している側のメインウィンドウ(?)にして
アクティブとかそこらへんの関係を適切にしたいなら、
dll の関数に親ウィンドウの HWND を渡してもらうか、
メインウィンドウらしきものを自力で探すしかないです。
823デフォルトの名無しさん:2005/06/28(火) 11:23:30
>>820
pDlg->Create(IDD_DIALOG1,::GetDesktopWindow() ); でもだめ?
824デフォルトの名無しさん:2005/06/28(火) 14:03:57
>823

pDlg->Create(IDD_DIALOG1,::GetDesktopWindow() );
はビルド時にエラーが出ます。

>822
なるほど分かりました。もとは親のハンドルを受け取るようにしていたのですが、それだとうまく
表示されなかったので親をデスクトップにしてみたのです。
親のハンドルに設定していると子ダイアログが親ウィンドウ内に表示され
てしまったり画像が移ってしまったりとうまく描画できなかったのでしか
たなく親をデスクトップにしてみたのですが。
825デフォルトの名無しさん:2005/06/28(火) 15:10:26
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にて名前空間をエクスポート可能なのでしょうか。
可能でしたら方法を教えていただけないでしょうか。
826デフォルトの名無しさん:2005/06/28(火) 15:58:44
名前空間てダイナミックにできちゃうのか?プリプロッセッサがあぼんするんじゃ
827デフォルトの名無しさん:2005/06/28(火) 16:34:05
>>825
使う側にもこれは書かないとだめじゃない?
namespace hoge{
  class CHoge;
}
828デフォルトの名無しさん:2005/06/28(火) 18:24:20
使う側はヘッダファイルを#includeしてるので
書いてるのと同じ状態です。
インテリセンスでの補完も働くようです。

しかしコンパイル通らず、、、

名前空間 jp::somewhere のクラス CComoplex と
名前空間無しのクラス CSimple のコンストラクタ(多分)は

??0CComplex@somewhere@jp@@QAE@XZ
??0CSimple@@QAE@XZ

上記のような名前付けになっていて、@の被る位置の判断とかがアレなのかな。
829デフォルトの名無しさん:2005/06/28(火) 18:41:37
>>828
>> fuga.cpp(xxx): error C2653: 'hoge'' : 識別子がクラス名でも名前空間名でもありません。

このエラーはどう見てもそんな高尚な話ではなく、単なる文法違反なわけで。
なにかのポカミスだと思います。
830デフォルトの名無しさん:2005/06/28(火) 21:11:01
>>824
> 親のハンドルに設定していると子ダイアログが親ウィンドウ内に表示され
WS_CHILD が指定されているとこうなるよ。
831デフォルトの名無しさん:2005/06/28(火) 23:01:08
CListCtrlのCtrl+Shiftクリックに対するデフォルトの選択方式を
Ctrlクリックと同じ選択方式に変更する方法はあるのでしょうか?
832デフォルトの名無しさん:2005/06/29(水) 06:11:54
いまのモニターの状況を取得する関数ないでしょうか?
Printscreenみたいな感じのものです。
833デフォルトの名無しさん:2005/06/29(水) 10:35:47
画面をキャプチャしたいんなら、デスクトップのDCを取得してメモリDCなりにBitBlt。
834デフォルトの名無しさん:2005/06/29(水) 19:12:20
時分秒を数字で表示するだけの時計プログラムなのに動かないの
最初に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);
}
835デフォルトの名無しさん:2005/06/29(水) 19:31:28
>>834
OnTimer() では Invalidate() するだけでいいんじゃ?
836834:2005/06/29(水) 19:37:21
やってみたけど変わらなかった
昼からずっと 9: 0: 0のまま
837デフォルトの名無しさん:2005/06/29(水) 20:05:31
CClientDC dc(this);
838デフォルトの名無しさん:2005/06/29(水) 20:08:52
>>834
tmOldTimeはどこで更新している?
見たところ、0のままで1970/1/1 9:0:0を指しているような気がするのだけれど。
839834: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();
}
840デフォルトの名無しさん:2005/06/29(水) 22:01:26
>>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);
}

じゃ駄目なのか?
841834:2005/06/29(水) 22:26:02
駄目も何も思いつかなかったんだもん
やっぱり 9: 0: 0で止まってチラつくだけだった
842デフォルトの名無しさん:2005/06/29(水) 22:58:18
>>841

デバッグモードにしてる?
リリースモードでもデバッグ情報を埋め込むことはできるが、煩雑?なので。
843834:2005/06/29(水) 23:11:43
勿論
844デフォルトの名無しさん:2005/06/29(水) 23:32:49
tmCurTime.GetCurrentTime();ってやっても、tmCurTimeには現在時刻は代入されない希ガス。
CTime tmCurTime = CTime::GetCurrentTime();
845デフォルトの名無しさん:2005/06/29(水) 23:34:16
>>844
俺も今同じこと書こうとした。
CTime::GetCurrentTime()はスタティック関数だな。
846834:2005/06/29(水) 23:44:13
おお!動いた!
なんでtmCurTime.GetCurrentTime()はダメなの?
847デフォルトの名無しさん:2005/06/29(水) 23:45:44
C++の勉強をやりなおしましょう
848デフォルトの名無しさん:2005/06/30(木) 00:19:05
MSDNくらい読もうや。
CTimeクラスの説明で、GetCurrentTime()は静的関数とあるぞ。
849デフォルトの名無しさん:2005/06/30(木) 08:23:51
だから静的関数だったら何なの?
850838:2005/06/30(木) 08:46:46
>>849
つまりそれは、クラスの名前空間に束縛されている只の静的関数。
メンバが更新されるのではなく、戻り値として戻されるだけ。
851834:2005/06/30(木) 09:21:27
全く以て意味不明
time.GetCurrentTime()とCTime::GetCurrentTime()はどう違うの?
どっちも現在時刻を取得する関数じゃないの?
852デフォルトの名無しさん:2005/06/30(木) 09:25:39
>>851
これだけ書かれても、それ以上自分で調べることもしないで思考停止に陥ってるなら
プログラミングなんて止めて自動販売機の空き缶いれでも探ってる方がいいよ。
853デフォルトの名無しさん:2005/06/30(木) 09:36:08
>>851
2つとも同じだ。同じなので>839は↓これと同じだ。 tmCurTime に値が入るわけ無いだろ。
afx_msg void CMainWnd::OnTimer(UINT ID)
{
  CTime tmCurTime;
  CTime::GetCurrentTime();
854834:2005/06/30(木) 09:41:39
ああなるほど
現在時刻を取得したけどそれをどこにも代入してなかったわけだ
よくわかったありがとう
855デフォルトの名無しさん:2005/06/30(木) 09:43:44
>>854
これぐらいドキュメント見てわかるようになれよ。
856834:2005/06/30(木) 09:45:29
がんばる
静的メンバ関数はもう間違えない
857デフォルトの名無しさん:2005/06/30(木) 11:45:15
静的メンバ関数を普通のメンバ関数のように 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です
859デフォルトの名無しさん:2005/06/30(木) 20:37:26
試してみたが、クリックする時のマウスボタン押し下げの
動作がうまく伝わらないみたいだね。クリックはマウスボタンを
押して上げるという動作だからCListCtrlの派生クラスを
作ってWM_L(R)BUTTONDOWNのメッセージを処理すればうまく行く。
ただ、この時はマウスポインタを動かすとドラッグ操作みたいに
四角い枠が出てしまうことがあるので、その派生クラスの中で
適切に処置してあげないといけない。
860デフォルトの名無しさん:2005/06/30(木) 21:30:11
ありがとうございました
861デフォルトの名無しさん:2005/06/30(木) 22:18:41
DeleteAllItems()の後に再度InsertItem()を行うと
何も表示されなくなります。解決法ありませんか?
862デフォルトの名無しさん:2005/06/30(木) 22:49:28
>>861
ListCtrlですか?

InsertItem()する前に構造体のアイテムとサブアイテムに正しく番号
ふっておかないと表示されないです。
アイテム:0 サブアイテム:0 のときはInsertItem()、
アイテム:0 サブアイテム:1〜のときはSetItem()、
で入れないと正しく表示されません。この辺は大丈夫ですか?
863デフォルトの名無しさん:2005/06/30(木) 23:45:27
>>862
CTreeCtrlです。
書いたつもりが書いてませんでした。
864デフォルトの名無しさん:2005/07/01(金) 01:44:42
.NETをつい最近使い出しました。

VC6 のMFCクラスウィザートのように、自分の作ったクラスのオブジェクトに対し、
メッセージや変数を追加したいのですが、どうも見つかりません。
関数のオーバーライドや、ダイアログコントロールに対して変数を設定するのに
重宝していたのですが・・・
友人から本体部分だけ貰ったんで、MSDNがないんです。^^;
サイトのMSDNで調べても要領を得ないんで、こちらに来てみました。よろしくお願いします。

Visual Stdio .NET 2003
VC++ .NET 7 です
865デフォルトの名無しさん:2005/07/01(金) 02:02:04
クラスのプロパティから行ってください
866デフォルトの名無しさん:2005/07/01(金) 02:05:31
867575:2005/07/01(金) 02:07:31
865さん、速攻のRESありがとうございます。
無事、オーバーライドできました。
868864,867:2005/07/01(金) 02:16:05
嬉しさのあまり名前欄の番号間違えてるし・・・しかも全然違う 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が帰ってきます。これは
なぜなのでしょうか?
871デフォルトの名無しさん:2005/07/01(金) 19:38:15
末尾のレコードに移動してカウント
だめならSQLをちがうのにかえてみる。
872デフォルトの名無しさん:2005/07/01(金) 19:51:01
>871
どうやって末尾にいどうすればいいのですか?
873デフォルトの名無しさん:2005/07/01(金) 20:01:44
ムーヴラスト
874デフォルトの名無しさん:2005/07/01(金) 20:03:57
875デフォルトの名無しさん:2005/07/01(金) 20:05:18
ムーブラストでも駄目でした。
876デフォルトの名無しさん:2005/07/01(金) 20:42:32
↓MSDN
MoveLast 関数を呼び出してもレコード数は更新されません。
ユーザーが独自にレコード数を数えるには、IsEOF が 0 以外を返すまで
MoveNext を繰り返し呼び出します。
877デフォルトの名無しさん:2005/07/01(金) 20:56:31
あれ? CRecordsetはそうだったのか。
MoveNextなんか繰り返し呼んでると、場合(DBMSとかレコードセットの種類とか)によっては
ものすごく時間がかかるので、count(MFCじゃないぞ)でも使った方がいいな。
878デフォルトの名無しさん:2005/07/01(金) 21:04:27
>876

あなたの言うとうりでした。
解決しました
879デフォルトの名無しさん:2005/07/01(金) 23:24:29
theAppを直接使うのはイケナイ子のすることですか?
880デフォルトの名無しさん:2005/07/02(土) 02:28:43
>>879

イケナイ子かどうかは判らん。
でも大抵AfxGetApp()で間に合ってる。おいらの場合。
881デフォルトの名無しさん:2005/07/02(土) 03:38:18
>>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しないといけないということでしょうか?
883デフォルトの名無しさん:2005/07/03(日) 15:00:15
yes
884832:2005/07/03(日) 15:10:15
それだと、リソースダイアログの場合、モードレスではコントロールを配置させる意味が無いんですね。
あくまでリソースダイアログはモーダルのときのみと。
885デフォルトの名無しさん:2005/07/03(日) 15:14:54
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");
886デフォルトの名無しさん:2005/07/03(日) 15:23:38
>>882
IDC_STATIC が重複してるだけ。
各 control にちゃんと固有の ID 付けること。
当然 dialog resource template で作って modeless で動く。
887832: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なので。
888デフォルトの名無しさん:2005/07/03(日) 15:27:12
>>882
それから 885 の指摘は prgDlg object の寿命のことを言っている。
modal じゃないのだから function 内の寿命ではダメだ。
modeless なら 885 のように free store 内に作るか、static な寿命にすること。
889832: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");
890デフォルトの名無しさん:2005/07/03(日) 15:34:44
>>889
>(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
>では、まだNULLのままです。
じゃあダメにきまってる。

>IDC_STATICというIDも間違ってません。
resource editor で IDC_STATIC じゃなくて何か固有の ID 作ること。
891デフォルトの名無しさん:2005/07/03(日) 15:35:14
Windowsプログラム実行時にシステムの表示可能色数の設定を調べる事はできるんでしょうか?
コントロールパネルの画面設定でやる256色とかHighColorとかTrueColorとかの現在の設定を知りたいんです。
スレ違いだったらゴメンなさい。
892832:2005/07/03(日) 15:37:32
>>890
解決しました。
他のダイアログリソースとIDが重複していたみたいです。
他のダイアログリソースは同じ会社の人が作ったものでしたが、気がつきませんでした。

皆様、ありがとうございました。
893882:2005/07/03(日) 15:38:07
832→882
894デフォルトの名無しさん:2005/07/03(日) 15:40:43
>>892
「IDC_STATIC」はデフォルト値として特別な意味を持ってるんだよ。
他のリソースと重複していることが問題の本質ではない。
895882:2005/07/03(日) 15:44:45
>>894
そうなんですか。。。
IDはダイアログリソース単位での管理でいいんですね。
大変失礼しました&ありがとうございました。
896デフォルトの名無しさん:2005/07/03(日) 15:48:09
>>894
別に特別な意味はないでしょ。MFC が reserve してるだけで。
892 の問題は dialog control ID の重複であなく dialog ID の重複という
落ちだったらしいし。ほっとけばいい。
897882:2005/07/03(日) 15:50:11
いえ、dialog control IDの重複でした。
IDC_STATIC以外は問題なかったので。
898デフォルトの名無しさん:2005/07/03(日) 15:51:25
>>896
IDC_STATICは編集できないって基本だろ
899デフォルトの名無しさん:2005/07/03(日) 15:57:25
ほっとけないよぉ〜♪
900デフォルトの名無しさん:2005/07/03(日) 15:59:45
>>897
>いえ、dialog control IDの重複でした。
>>892
>他のダイアログリソースとIDが重複していたみたいです。
て言うからさ。

しかし dialog control ID の重複なら >>889
>(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
>では、まだNULLのままです。
てことはないだろう。意図した control は取れないが何か取れるはずだ。
901デフォルトの名無しさん:2005/07/03(日) 16:01:09
>>898
編集って何を指してる?
SetWindowText() はできるよ。
902デフォルトの名無しさん:2005/07/03(日) 16:04:47
NULLぽにSetWindowTextはできないだろ
903デフォルトの名無しさん:2005/07/03(日) 16:07:48
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が飛ばないようにするためには
どうすればいいのでしょうか?

よろしくお願いします。
905デフォルトの名無しさん:2005/07/04(月) 10:42:08
>>904
OnOKをoverrideしたmethod作って、実装は空にするとか。
Escapeで閉じないようにするには、OnCancelに同じ事を。

タイトルバーの×ボタンを押したらダイアログを閉じるようにするには、
WM_CLOSEメッセージを捕まえたOnCloseハンドラで、CloseDialogとか
呼べばOKだったような希ガス
906デフォルトの名無しさん:2005/07/04(月) 10:42:29
エディットボックスのIME制御ってどうやるのですか?

フォーカスをあわせると日本語入力のモードに切り替わるようにしたいのですが
907デフォルトの名無しさん:2005/07/04(月) 12:45:27
IMEのON/OFFはsetfocusのとき
ImmGetContext();
ImmSetOpenStatus(, TRUE);
killfocusのとき
ImmSetOpenStatus(, FALSE);
ImmReleaseContext();

日本語モードの制御は
ImmSetConversionStatus();
908デフォルトの名無しさん:2005/07/04(月) 22:11:20
>>904
Returnキーでダイアログが閉じるのは当たり前の挙動だけど、
それを敢えてそうさせたくない理由は?
909デフォルトの名無しさん:2005/07/04(月) 22:32:54
>>908
Returnキーでダイアログが閉じるのを敢えて容認している理由は?
910デフォルトの名無しさん:2005/07/04(月) 22:35:46
Returnキーでダイアログ閉じたっけ?
OKボタンにフォーカスがある状態で押しただけじゃないの?
911デフォルトの名無しさん:2005/07/04(月) 22:42:50
>>909
そうなるのが一般的なダイアログだと思っているから。
個人的にもそうでないダイアログはうざい。
912デフォルトの名無しさん:2005/07/04(月) 22:47:39
パスワードとか誤って入力してreturn押したりしたらそれで
確定出来ちゃうダイアログ最高!
913デフォルトの名無しさん:2005/07/04(月) 22:49:24
ESCでキャンセルはデフォだけど、リターンは場合によるな。
914デフォルトの名無しさん:2005/07/04(月) 22:50:46
激しく厨の香りがする>>909がいるスレはここですか?
915デフォルトの名無しさん:2005/07/04(月) 22:59:46
>>910
BS_DEFPUSHBUTTON スタイルのボタンが押されたことになるのが、
Windows でのお作法。

このスタイル、「OK」ボタンにあるダイアログも多いけど、
検索ダイアログの類だと「次を検索」あたりにあることが多いか。
916デフォルトの名無しさん:2005/07/04(月) 23:00:07
>>905も禿しく厨くさいわけだが
917デフォルトの名無しさん:2005/07/04(月) 23:03:50
まちがった。orzzzz
914のは>>911向け
918デフォルトの名無しさん:2005/07/04(月) 23:06:57
>>917
だよね。おかしいと思った。
919デフォルトの名無しさん:2005/07/04(月) 23:13:18
で、>>904は何がしたいのだろう?
そのdialogはOKとCancelのある普通のmodal dialogだという前提で話が進んでいるようだが。
この前提が違ったら意味ないね。>>915の書いてるような検索のmodeless dialogとか。
920デフォルトの名無しさん:2005/07/04(月) 23:16:29
仮にOKとCancelのある普通のmodal dialogだとして、
OKやCancelボタンにフォーカスがあるときにReturn押してもOKやCanelせずに
閉じないdialogはやめたほうがいい。
921920:2005/07/04(月) 23:19:16
でもそうしたいなら勝手だよね。すまんかった。
922デフォルトの名無しさん:2005/07/04(月) 23:22:43
Enterはともかく、ESCで消えないダイアログは絶対許さん。
923デフォルトの名無しさん:2005/07/04(月) 23:23:49
キーボード ユーザー インターフェイス設計のガイドライン
http://www.microsoft.com/japan/msdn/accessibility/general/ATG_KeyboardShortcuts.asp
UI設計に関わる人間は必読です。全部守るのは大変だけど。
924デフォルトの名無しさん:2005/07/04(月) 23:26:58
>904は単にダイアログ上のエディットコントロールなどでReturn Keyを押しても
BS_DEFPUSHBUTTONがPUSHされる動作をやめさせたいだけじゃないの?
結構、そういう要望はあると思うが

不「可視」、「無効」属性でダミーの「標準のボタン」を作っておけばいいんでは
「」はVC6での表記、VC7は知らん
925デフォルトの名無しさん:2005/07/04(月) 23:27:00
>>923
・可能な場合、ダイアログ ボックスの既定のアクションに Enter キーを使用する。
・操作の中止またはキャンセルに Esc キーを使用する。

「可能な場合」ってのがポイントだな。
926デフォルトの名無しさん:2005/07/05(火) 00:44:32
ダイアログベースのアプリケーションだと
OKやCancelで閉じたくないとは思いませんかそうですか俺だけですか
927デフォルトの名無しさん:2005/07/05(火) 00:53:24
馬鹿は来るな
928926:2005/07/05(火) 11:22:25
間違え寺…
×OKやCancelで
○EnterやEscで
929デフォルトの名無しさん:2005/07/05(火) 12:14:50
馬鹿は来るな
930デフォルトの名無しさん:2005/07/05(火) 12:22:52
パシャッ    パシャッ
   パシャッ
      ∧_∧ パシャッ   >>926
パシャッ (   )】Σ
.     /  /┘   パシャッ
    ノ ̄ゝ
931デフォルトの名無しさん:2005/07/05(火) 19:49:48
真実は常に時と場合によりけり。
932デフォルトの名無しさん:2005/07/06(水) 20:27:41
親ダイアログのボタンを押すと子ダイアログが出るようにして
その子ダイアログの背景色を変えたいのですが、どのようにすれば
いいでしょうか?ネットで色々調べてみてるのですが、いまい
ち分かりません。具体的に教えていただけないでしょうか?
933デフォルトの名無しさん:2005/07/06(水) 20:41:15
親ダイアログから子ダイアログの背景色を変更できるようにしたいのか、
ただ単にダイアログの背景色を変更したいのか、どちらでしょうか。

あと、今どこまで出来てるのかも記した方が良いと思います。
(ダイアログの作り方から聞いてるのか、そうでないのかが分からない。)
934デフォルトの名無しさん:2005/07/06(水) 20:59:17
>933
すいませんでした。説明不足でした。
ボタンを押して子ダイアログを表示するとこまではできています。
あとはその子ダイアログの色を変えたいのです。
簡単なことのようですがわかりません。
935デフォルトの名無しさん:2005/07/06(水) 21:01:28
あとMFCを使っていて、子ダイアログは
CDialogクラスでモーダレスダイアログとして作っています。
936デフォルトの名無しさん:2005/07/06(水) 22:02:06
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になってしまう)場合があり困っています。
原因、対処方法、もしくは、上記以外の実現方法がわかる方
いらっしゃいましたら教えてください。

よろしくおねがいします。
939デフォルトの名無しさん:2005/07/07(木) 22:13:48
940デフォルトの名無しさん:2005/07/07(木) 22:45:26
>>939
さすがマイクロソフトの自動翻訳はクオリティ高いなw
とりあえず英語の原文
http://support.microsoft.com/kb/194124/en-us
941デフォルトの名無しさん:2005/07/09(土) 22:17:49
フォトショップのツールボックスみたいなダイアログはbitmapで作ってるわ
けですか?
942デフォルトの名無しさん:2005/07/09(土) 23:23:56
>>936
それじゃ GDI リソースがリークするのでまずいでしょ。
943デフォルトの名無しさん:2005/07/09(土) 23:36:54
>>941
そうかもしれんしそうじゃないかもしれん。
ツールボックスの造りによってどうにでもできる。
944デフォルトの名無しさん:2005/07/10(日) 08:33:00
VC.NET2003日本語版をマルチバイトでコンパイルしてるのですが、
このバイナリを他の言語のOSで起動すると
ロケールは変更されるのでしょうかか?(テスト環境がないもので...)
MFCをスタティックリンクした場合、ダイナミックリンクした場合でも変わるのでしょうか?
よろしくお願いします。
945944:2005/07/10(日) 08:33:56
VC++.NET2003日本語版で
の間違いです...
946デフォルトの名無しさん:2005/07/10(日) 13:16:04
こんばんわ

CString::Findの逆検索をおこなうメソッドはないのでしょうか?
947デフォルトの名無しさん:2005/07/10(日) 13:30:59
>>946
MSDN で"CString クラス メンバ"を調べれ。
948デフォルトの名無しさん:2005/07/10(日) 13:35:08
知ってるなら答え書けよバカ
949デフォルトの名無しさん:2005/07/10(日) 13:38:58
答えよりも答えにたどり着く方法のほうが重要。
950946:2005/07/10(日) 13:41:12
>>みなさん

いえ、ReverseFindなら知ってるんですが、
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfcstringtreversefind.asp

これだと特定の位置からの検索ができないですよね。
Findだと位置の指定ができるのに。

なので、別の逆検索メンバがあるのかと思い、お聞きしたまでです。
951デフォルトの名無しさん:2005/07/10(日) 13:44:59
>>950
>別の逆検索メンバがあるのかと思い
意味不明だが? CStringのメンバは調べたんだよね?
952デフォルトの名無しさん:2005/07/10(日) 13:50:05
>950
ソース見ろ
汚いソースだが、目的の物があるかないか(非公開でも)はわかるはず
953デフォルトの名無しさん:2005/07/10(日) 14:14:40
m_string.ReverseFind(cp,pos);

error C2660: 'ReverseFind' : 関数が不正な 2 個の実引数をともなって呼び出されました。
954デフォルトの名無しさん:2005/07/10(日) 15:55:28
VC++初心者です
VC2005 Express edition beta2を使っていますが、MFCは使えないのでしょうか?
どうしたら使えるようになりますか?
955デフォルトの名無しさん:2005/07/10(日) 16:12:17
Professional以上を使って下さい
956デフォルトの名無しさん:2005/07/10(日) 16:14:04
やはりそういうことですかorz
957デフォルトの名無しさん:2005/07/11(月) 13:43:34
>>939-940
938です。
ありがとうございます。
リンク先を見る限り仕様と言う事みたいですね。
EXCELシートのセルを全て文字列に指定できるかどうか
相手に聞いてみます。
958デフォルトの名無しさん:2005/07/11(月) 16:35:33
リソースのダイアログ開いて、
MFC ClassWizardを開いて、
クラスと結びつけるを選択したのですが、
CDialogから派生したダイアログクラスが出てきません。
作り方も、VC++の「新規フォーム」機能で作った正規物なんだけどなー?????
959デフォルトの名無しさん:2005/07/11(月) 16:38:05
CListCtrlで、あるitemを選択状態にしたい場合はどのメソッドを使えばいいのでしょうか?
MSDNを見たのですが、妥当なものがありません。

よろしくねがいます。
960デフォルトの名無しさん:2005/07/11(月) 16:41:11
961デフォルトの名無しさん:2005/07/11(月) 16:43:27
>>959
SetItemState(n, LVIS_SELECTED, LVIS_SELECTED)
962デフォルトの名無しさん:2005/07/11(月) 16:44:56
>>958 もヨロ
963958:2005/07/11(月) 17:01:47
ついでに教えて欲しいのですが、
クラスとダイアログリソースとの結びつきは、
ソースファイル(?)のどこに書かれてるのでしょうか?
964デフォルトの名無しさん:2005/07/11(月) 17:17:06
>>963
もっと具体的に質問してくれたまえ。
#つーか、***_dlg.cpp, ***_dlg.h, ***.rc, resource.hを眺めれば判るだろ。
965958:2005/07/11(月) 17:23:28
具体的な質問は >>958 でつ。
966958:2005/07/11(月) 17:26:20
あきらめて新規クラスとソースファイルを作り直そうとしたら、
「新規クラス "C〜Dlg"のためのファイル(〜.h, 〜.cpp)はそのクラスの残りを含んでいます」
というイミプーなエラーメッセージ。

ちょっと手詰まり。
967958:2005/07/11(月) 17:37:11
ダイアログのヘッダーには、以下のように書かれてて、
ダイアログリソースのプロパティのIDと合致してるんですが、
ClassWizardではクラスと結びついてないおかしいですね。

// ダイアログ データ
//{{AFX_DATA(C〜Dlg)
enum { IDD = IDD_〜_DIALOG };
// メモ: ClassWizard はこの位置にデータ メンバを追加します。
//}}AFX_DATA
968デフォルトの名無しさん:2005/07/11(月) 17:40:00
*.clwあたり
969958:2005/07/11(月) 17:42:05
>>968
そのclwファイルはどうやったら更新されるんですか?
リビルドしても上記症状が変わらないんです。
970デフォルトの名無しさん:2005/07/11(月) 17:48:42
>>969
捨てろ。
971デフォルトの名無しさん:2005/07/11(月) 19:00:58
1つのダイアログリソースに、
別のCDialog派生クラスを作成しようとしたんですが、
「ダイアログ ID」欄に既存IDが出てきません。
1つのダイアログリソースには、基本的に1つのクラスが良いのかな?
972デフォルトの名無しさん:2005/07/11(月) 19:06:37
>>971
Wizardが受け付けないだけなので、自分で書く
973958:2005/07/11(月) 19:15:18
clwに登録されないファイルを指定して追加する方法教えて下さいでつ。
974デフォルトの名無しさん:2005/07/11(月) 19:47:53
>>973
>>970

ファイル捨ててから Wizard 起動したら「作り直す?」って訊いて来ない?
975970:2005/07/11(月) 23:09:16
>>974
私に振るな。
976デフォルトの名無しさん:2005/07/11(月) 23:18:13
>>975
>>974は「>>973へのレスが>>970」という意味だと思う
977974:2005/07/12(火) 00:21:49
ごめん解り難かった。orz
>>976 の言う通り。
978958:2005/07/12(火) 09:12:49
>>974
thx、聞いてきます。
が、何か中途半端に作られて、あるクラスが登録されたり登録されなかったり、、、


で、1ファイルだけ足したいなーと。
979デフォルトの名無しさん:2005/07/12(火) 11:25:59
ビルド通れば問題ないから
そんなのいちいち気にしない。
980デフォルトの名無しさん:2005/07/12(火) 11:31:29
CDialogの2つのサイズを同じにしようとおもったら、
SetWindowRectもSetWidth/Heigthもありませんが、
どうすれば良いでつか?
981980:2005/07/12(火) 11:40:10
やりたいことは、
Dialogのま上にDialogを同じ大きさで開きたいだけですが、
一番簡単な方法教えて下さい。

リソースを同じにするのは大変そう...
982デフォルトの名無しさん:2005/07/12(火) 11:46:13
リソースで合わせる方が簡単なんだが。
983デフォルトの名無しさん:2005/07/12(火) 12:00:44
継承知らんのか?
984デフォルトの名無しさん:2005/07/12(火) 12:06:10
北斗神拳なら継承しましたが
985デフォルトの名無しさん:2005/07/12(火) 13:14:51
というかクラスライブラリなんだから、
Form1->Height = Form2->Height;
Form1->Width = Form2->Width;
くらい書けないの、
おかしくない?
986デフォルトの名無しさん:2005/07/12(火) 13:21:26
とりあえず超能力者の登場を待とう
987デフォルトの名無しさん:2005/07/12(火) 13:23:05
CDialogのカラーもプロパティになってないし、
何のためのクラスライブラリだよ、
とか思うこと無い?
988デフォルトの名無しさん:2005/07/12(火) 13:45:02
※※※※※※※※※※※※※※※※※※※※
※※※※※ キチガイ発生中 ※※※※※※
※※※※※※※※※※※※※※※※※※※※
989デフォルトの名無しさん:2005/07/12(火) 14:35:08
>>987
カラーを言うならフォントも。つか、MFCなんてその程度だ。
で、解決策はいいのか?
サイズ変更は CDialog の基底クラスであるところの CWnd の機能だが。
990デフォルトの名無しさん:2005/07/12(火) 20:03:17
CDialogを派生しまくっても問題発生しませんか?
991990:2005/07/12(火) 20:08:52
具体的には派生しまくったクラスをクラスウィザードが扱えるのか知りたいでつぅ。
992デフォルトの名無しさん:2005/07/12(火) 20:16:04
>>991
>派生しまくった
とは?
俺語を使わず説明しなさい。
993デフォルトの名無しさん:2005/07/12(火) 23:16:10
予想するとVB厨だな。
994デフォルトの名無しさん:2005/07/12(火) 23:16:58
>>991
よく解らんが、暮らすウィザードが吐く/認識するコメント行さえ維持していれば。
995デフォルトの名無しさん:2005/07/13(水) 00:06:18
抽象クラスをMFCで継承するにはどうしたらいい?
996デフォルトの名無しさん:2005/07/13(水) 00:13:32
さん付けで呼んでみれば?
997デフォルトの名無しさん:2005/07/13(水) 04:10:40
998デフォルトの名無しさん:2005/07/13(水) 05:29:10
999デフォルトの名無しさん:2005/07/13(水) 05:52:35
1000デフォルトの名無しさん:2005/07/13(水) 06:00:01
6時です
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。