トップページ⇒tech
1001コメント288KB

■MFC相談室 mfc13d.dll■

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん05/03/07 16:19:56
Microsoft Foundation Classライブラリ専用スレです。

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

過去ログは >>2-5 の辺り。
0002デフォルトの名無しさん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
0003デフォルトの名無しさん05/03/07 19:27:22
レジストリエディタ(regedit.exe)のようなUIのアプリを作ろうとしています。
つまり、スプリッタで左右2つのViewを持ち、
左がTreeViewで右がListViewです。

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

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

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

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

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

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

このへん説明してるいいwebとかないっすかね?
0021デフォルトの名無しさん05/03/15 20:32:02
画像ファイルを読み込むときってCImageとか使わないで自分でオープンソースのライブラリから作るメリットってありますか?
0022デフォルトの名無しさん05/03/15 21:13:39
>>21
そのオープンソースのライブラリによる
0023デフォルトの名無しさん05/03/16 04:53:41
CRichEditViewで、例えばメニューのボタンを押したらエディタに「あああ」とか出るような方法で、
直接あああと出せる方法ってありますか?
今はクリップボードに「あああ」をコピーさせて出しているんですが・・・
0024デフォルトの名無しさん05/03/16 05:17:25
GetRichEditCtrl().ReplaceSel
00252305/03/16 05:41:33
うおおおお!!できました ありがとうざいます!
0026デフォルトの名無しさん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より上位に持ってきました。

他に設定する項目はあるのでしょうか?
よろしくお願い致します。
0027デフォルトの名無しさん05/03/16 19:35:12
mshtml.h, mshtml.idl
mshtml.dll
0028デフォルトの名無しさん05/03/16 19:54:59
BITMAPリソースにある画像を絶対座標で最善面に表示したいのですが、やり方、あるいは参考になるサイトってあるでしょうか?
0029デフォルトの名無しさん05/03/16 20:03:37
>>28
絶対座標ってなんの座標?
最善面に表示ってどこの最前面?
0030デフォルトの名無しさん05/03/16 20:14:42
デスクトップの絶対座標と全てのアプリの最前面です。WndTopMostみたいなやつでしょうか
0031デフォルトの名無しさん05/03/16 20:27:52
>>30
ビットマップリソース表示と、最前面表示を別々にググればたくさん出てくるよ。
0032デフォルトの名無しさん05/03/16 20:29:20
それじゃ意味がないんです
0033デフォルトの名無しさん05/03/16 21:01:15
ていうか>>30で激しく正解が出ているわけだが。
0034デフォルトの名無しさん05/03/16 21:34:40
>>32
ビットマップリソース表示と最前面表示の方法がわかれば
あとはそれらを組み合わせるだけじゃん。
0035デフォルトの名無しさん05/03/16 21:45:49
因みに>>32は別人です。
もっと色々やってみます。ありがとうでした
00361805/03/17 11:13:35
誰か、教えて・・・
0037デフォルトの名無しさん05/03/17 12:01:54
だからアクティブにしたくなかったら
アクティブにすればいいんだよ
0038デフォルトの名無しさん05/03/17 18:55:21
リストビューの項目をセンタリングしたい場合どうしたらよいのでしょうか?
0039デフォルトの名無しさん05/03/18 10:38:09
http://forums.belution.com/ja/vc/000/164/06s.shtml
0040デフォルトの名無しさん05/03/18 13:21:46
>>39ありがとうございますm(__)m
0041デフォルトの名無しさん05/03/20 19:00:17
exeと同じ階層に設定ファイルを置いているんですが、
開くファイル?を右クリック⇒プログラムから開く、でやるとその開くファイルと同じ階層から設定ファイルを開こうとしているようなんです
どうすれば常にexeと同じ階層から設定ファイル開くようにできるんでしょうか?
0042デフォルトの名無しさん05/03/20 19:26:47
>>41
実行モジュールのあるディレクトリにある設定ファイルを開けばいい。
つまり、GetModuleFileName()で取得できたファイル名の'\\'から後を捨てて得られたディレクトリに
移動してから設定ファイルを開けばいい。
00434105/03/20 20:09:10
ありがとうございます、できました
0044デフォルトの名無しさん05/03/20 21:55:02
mfc最高!
0045ゆん05/03/20 23:17:49
検索サイトエンジンを作ってみたい><
あれってCGIでできてるの??
誰かつくり方しってますかー????


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

>>48
解決したので自己レス。
ttp://wg-web.ics.teikyo-u.ac.jp/usage/VC/vwchange.html
の中の各フォームビューの切り替え時に、
OnInitialUpdateを明示的に呼んであげたら直りました。
上記のサンプルコードだと、うまくイニシャライズされてないのかなという感じ。
0053携帯から2005/03/22(火) 16:17:45
ダイレクトにカキコ
0054デフォルトの名無しさん2005/03/22(火) 20:23:25
VSのようなドッキングウインドウが使いたいのだが、
みんなそういう時どうしてる?
何かいいものあるかい?
0055デフォルトの名無しさん2005/03/22(火) 20:44:14
CodeGuruから拾ってきたりダイアログバーを無理やり着飾ったり。
0056デフォルトの名無しさん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って言うのが気になるんだが、
使ったことある人いる?
0057デフォルトの名無しさん2005/03/22(火) 21:17:41
MFCじゃないけどWTLにあったような希ガス
0058492005/03/23(水) 11:35:29
ありがとうございます
あれから頑張ってみたんですが、TABとSHIFT+TABは比較的すぐできました
しかし複数UNDOが難しすぎます・・・
UNDOされている内容を別のところに保存する、ということはできないんでしょうか?
0059492005/03/23(水) 11:36:58
UNDOされている内容ってorz
UNDO用のデータ?ですかね・・・
0060デフォルトの名無しさん2005/03/23(水) 17:48:28
newが投げる例外についての質問です。
std::bad_alloc前提で作った非MFCライブラリを
MFCプロジェクトで使うことはできるのでしょうか?

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

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

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

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

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

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

MFCやめたい_| ̄|○
0068デフォルトの名無しさん2005/03/24(木) 12:52:35
普通にやっても、固定サイズになったよ
UINT nStyle = ToolBar.GetButtonStyle(index);
ToolBar.SetButtonStyle(index, nStyle ^ TBBS_AUTOSIZE);
0069612005/03/24(木) 13:21:43
うーん、どうも何かの条件で TBSTYLE_AUTOSIZE が適用されているようです。
そのタイミングがOnCreate後に来ているようで、
OnCreate内で SetSizes() や SetButtonStyle()をコールしても無視されてしまう模様。
多分私の造り方に問題があるのだと思いますが・・・

荒っぽいやり方ですが、Notify メッセージで毎回SetSizes()をコールしたら固定になりました。
とりあえずコレで放置しておきます。

尚、引き続き原因と思われる箇所は募集させてください。
ツールバー関連のソースは、>>61のリンク先に書いたものが全てです。
まだ何も書いていません^^;
0070デフォルトの名無しさん2005/03/24(木) 17:20:38
質問です。現在vc.net2003です。
動的にエディットボックスのReadonlyを設定解除するにはどうしたら良いでしょうか?
CWndのクラスにそれらしいものがみあたらないのですが。
Enableだとグレーアウトしてしまうので、やりたいことと違うのです。
以上、よろしくお願いします。
0071デフォルトの名無しさん2005/03/24(木) 17:23:53
スタイルいじって更新すればいいんでないか?
0072デフォルトの名無しさん2005/03/24(木) 17:24:08
>>70
read MSDN.

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

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

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

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

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

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

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

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

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

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

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

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

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

なにか変なことやってるかもなので気づいたら
教えてもらえると嬉しいです。
0109デフォルトの名無しさん2005/03/30(水) 05:49:38
ビットマップリソースをデスクトップの絶対座標で表示したいのですが、どうすればよいのでしょうか?
BitBltだとウィンドウ内にしか表示されなくて・・・
詳細に言うと、ダイアログベースで、計算結果のデスクトップ座標にリソースのビットマップを印として置きたいのです。
前にも似たような質問あったみたいですが、それ見ても分からなくてOTL
0110デフォルトの名無しさん2005/03/30(水) 09:12:28
Desktopのハンドル取得して、以下同文。
0111デフォルトの名無しさん2005/03/30(水) 23:17:31
質問です
Viewの基本クラスをCRichEditViewにしてエディターを作っているのですが
これで作成するとデフォルトでテキストが右端で自動で折り返されてしまいます
これを回避しようと
ViewのPreCreateWIndowでcs.styleに
ES_AUTOHSCROLLとWS_HSCROLLフラグを追加してみましたが
オートスクロールはするようになったのですが今度は改行がされません
じゃあってことで
ES_MULTILINEとES_WANTRETURNをさらに追加してみると
デフォルトの動作と全く一緒になってしまいます
どこか根本的に間違ってるきもするのですが知恵を貸してください
0112デフォルトの名無しさん2005/03/30(水) 23:40:46
ダイアログベースで作成しています。
コントロールのメンバ変数を追加してほかのクラスからこのメンバ変数を参照するにはどうすればいいですか?
01131112005/03/30(水) 23:55:37
済みません、自己解決です
m_nWordWrapを変更するだけでよかったみたいです
0114デフォルトの名無しさん2005/03/31(木) 00:22:57
IEコンポーネントを使ったソフトを作りたいんですが、
IWebBrowser2に相当するクラスはCHtmlViewがあるのでいいですが、
IHTMLDocumentやらIHTMLElement等に相当するクラスがないので
なんかすごく不便です。
文字列型もBSTRだし、CStringとの橋渡しが面倒。
IEコンポーネント用の便利なクラスライブラリってないですかね。
0115デフォルトの名無しさん2005/03/31(木) 17:21:08
>112
)ノ AfxGetMainWnd
0116デフォルトの名無しさん2005/03/31(木) 23:21:54
エクスプローラのファイル名変更のように、
CListCtrlのラベル編集で同名の項目がある場合などに
メッセージを表示して再び編集状態にするにはどうしたらよいでしょう?
OnEndlabeledit関数で SendMessage(LVN_ENDLABELEDIT) や EditLabel してもだめでした。
0117デフォルトの名無しさん2005/03/31(木) 23:31:19
メッセージじゃない物をSendMessageしてもなあ
0118デフォルトの名無しさん皇紀2665/04/01(金) 03:31:18
SetFocus();
GetListCtrl().EditLabel(pDispInfo->item.iItem);
0119デフォルトの名無しさん皇紀2665/04/01(金) 10:34:02
>>117
メッセージの一覧に出てきてもメッセージじゃないものがあるんですね。
自分まだまだ精進が足りないっす。

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

0126デフォルトの名無しさんNGNG
>>125
ON_UPDATE_COMMAND_UI を調べろ
0127デフォルトの名無しさんNGNG
>>126
サンクス、解決しました
0128デフォルトの名無しさんNGNG
CDialog::DoModalってプロセスに対してモーダルじゃなくてスレッドに対してモーダルなの?
モードレスのダイアログとマルチスレッドのモーダルダイアログって何が違うの?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

厨房こぃ!
01601582005/04/05(火) 21:30:18
ちなみに、今のところテキストボックスがフォーカスを持っているかで判定しています。
問題無ければこれで行こうと思ってるんですが。
0161デフォルトの名無しさん2005/04/05(火) 22:52:02
リストボックスを複数選択可能にして選択されているアイテムを全て取得するにはどうすればいいですか?
0162デフォルトの名無しさん2005/04/05(火) 23:42:39
>>161
MSDNを見ようよ。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_clistbox_class_members.asp
0163デフォルトの名無しさん2005/04/06(水) 14:26:50
>>151
CMapはインチキくさいの? std::mapはつかえないんだわ。
コンテナで、mapは、Dllの引数などにつかえないらしくってさ。
http://support.microsoft.com/default.aspx?scid=kb;JA;168958
0164デフォルトの名無しさん2005/04/06(水) 16:00:28
intの値を、文字列数値としてCStringに入れるにはどうしたら良いで塚?
0165デフォルトの名無しさん2005/04/06(水) 16:07:16
>>164
CString::Format()
0166デフォルトの名無しさん2005/04/06(水) 16:07:38
>>164
see CString::Format
0167デフォルトの名無しさん2005/04/06(水) 16:21:37
int i=100;
CString str;
str.Format("%d",i);
if(str=="100")
printf("OK\n");
else
printf("ゴルア\n");
0168デフォルトの名無しさん2005/04/06(水) 16:53:15
いつからココは凄い勢いで答えるスレになりましたか
0169デフォルトの名無しさん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");
0170デフォルトの名無しさん2005/04/06(水) 18:12:09
CMapおせーてよ
0171デフォルトの名無しさん2005/04/06(水) 18:15:45
>>169
20の根拠は?
0172デフォルトの名無しさん2005/04/06(水) 18:21:07
>>171
んなもん根拠ないでしょ。一例なだけで。
0173デフォルトの名無しさん2005/04/06(水) 18:36:26
実行Exeのファイルパス取れますか?
0174デフォルトの名無しさん2005/04/06(水) 18:38:15
20桁くらいのサイズなら2^32までの数字は文字列に
収まるだろう。char a[4]とかだと数字の1000000は
文字列として格納出来ない
0175デフォルトの名無しさん2005/04/06(水) 18:39:41
>>174
GetCurrentDirectory
0176デフォルトの名無しさん2005/04/06(水) 18:42:03
>>175
それって、実行時のフォルダ変えられたら変わるんでないの?
0177デフォルトの名無しさん2005/04/06(水) 18:49:25
>>176
そりゃそうだ
0178デフォルトの名無しさん2005/04/06(水) 20:20:12
GetModuleFileName
0179デフォルトの名無しさん2005/04/07(木) 00:09:33
Win32APIの質問ばかり。。。
0180デフォルトの名無しさん2005/04/07(木) 10:21:07
ちっちゃいテストアプリ作りたいんですが、
AppWizardすると巨大なファイル&コード郡が...

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

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

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

でもまんどくせ
0200デフォルトの名無しさん2005/04/07(木) 23:44:06
まんどくせ
0201デフォルトの名無しさん2005/04/08(金) 02:26:11
駄目だ。やっぱりbitmapリソースの最前面表示が出来ないorz
誰か教えてください。・゚・(ノд`)・゚・。
0202デフォルトの名無しさん2005/04/08(金) 02:28:36
お前のプログラム如きが最前面に表示される価値は無い。
0203デフォルトの名無しさん2005/04/08(金) 02:43:01
煽るならもっと面白い事書いてやれよ
0204デフォルトの名無しさん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 ); // 全て選択
}

ってことをやってみたのですが、
マウスボタンを押した直後には全て選択されるものの、
ボタンを離すまでは範囲選択状態のままのようで、
文字列の先頭から、マウスボタンを離した場所までの選択になってしまいました。
0205デフォルトの名無しさん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日悩んでます。。。
02062052005/04/08(金) 14:38:57
すいません。
環境忘れてました。
・Win2000
・VC6
・Win32 Console Application
0207デフォルトの名無しさん2005/04/08(金) 15:43:23
>>205
stdafx.hの後にマクロ定義してもダメ。
プロジェクトの設定のマクロのところで定義するか
stdafx.h内でwindows.hやafx〜.hをincludeする前に定義する。
02082052005/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>

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

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

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

public:
CModDlg *m_mod;

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

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

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

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

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

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

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

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

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

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

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

並べた後は親に合わせてチャイルドが動いてくれるんですね。
ま、もし動かなかったら自分で動くコード入れれば良いか。
0253デフォルトの名無しさん2005/04/11(月) 19:29:09
>>252
>並べた後は親に合わせてチャイルドが動いてくれるんですね。
ぅおぃ!
「親ダイアログの OnSize() をオーバーライドして
>>251 のコード書かないとダメよ」って事スよ。
0254デフォルトの名無しさん2005/04/11(月) 20:08:20
非アクティブ状態のメインウインドウで、ジョイパッド
の状態を取得したいのですが、わかりません。
ちなみにアクティブ状態ならジョイパッドを使用できる
状況にあります。
0255デフォルトの名無しさん2005/04/11(月) 22:58:14
>>254
Win32APIスレで聞いたほうがはやいんじゃ?
DirectInput使うのが早いとは思うけどね
0256デフォルトの名無しさん2005/04/11(月) 22:59:25
RegisterHotkeyでホットキーを設定して
メインフレームのウィンドウプロシージャの中で
WM_HOTKEYを受け取りSetFocusしているのですが、
フォーカスが他のアプリにあるとき、自アプリに
フォーカスが移ってくれないんです。
自アプリにフォーカスを持たせるにはどうしたらいいんでしょうか?
0257デフォルトの名無しさん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を作ってみないか!!
0258デフォルトの名無しさん2005/04/12(火) 14:22:22
CListCtrlでエクスプローラ風のアプリを作っています。
DeleteAllItems()、及びCImageList のDeleteImageList() を
表示切替のたびに毎回コールしているのですが、
タスクマネージャのコミットチャージが増え続け、
操作を続けると数ギガ単位まで膨れ上がります。

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

VC++6.0/Win2k MFCで作成しています。
02592582005/04/12(火) 14:40:01
ごめんなさい、今試したらCImageList に貼り付けている
GDI+の Image の解放がNGだったようです。
シツレイシマシタ
0260デフォルトの名無しさん2005/04/12(火) 15:44:18
グループボックスの座標が欲しくて、
CWnd* hStatic = GetDlgItem(IDC_STATIC);
としていますが、NULLが帰ってきます。
どうしたら良いですか?
02612602005/04/12(火) 15:55:44
もしかして、グループボックスをダイアログクラスのメンバ変数に割当できるんでしょうか?
0262デフォルトの名無しさん2005/04/12(火) 16:28:07
IDC_STATICってあんたなに参照してるの?
0263デフォルトの名無しさんNGNG
>>260
IDC_STATICの定義を見よ。
#define IDC_STATIC (-1)

なので、IDC_STATICのままではGetDlgItemもメンバ変数化もできない。

グループボックスのコントロールIDを適切に定義した値にしてやれば>>260-261の方法で
取得できる。
0264デフォルトの名無しさん2005/04/12(火) 16:58:54
つまりは、スタティックコントロールは全部デフォルトでは
IDC_STATICで同じなんですのよ。ですから、個別にメンバ変数とか
設定したい場合は、IDC_STATとか、別のIDにしてあげないと
いけないのですわ。
02652602005/04/12(火) 17:21:08
>>262-264
うまく逝きました。有難うございました。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0350デフォルトの名無しさん2005/04/18(月) 23:18:13
>>346
プロセスごとのコンテキスト見て RICHED32.DLL ロードするだけの処理を
アプリケーションから態々呼び出さなきゃいけないなんてのは
設計の失敗としか思えないけどな。
0351デフォルトの名無しさん2005/04/19(火) 00:08:31
プロセスのコンテキストがRICHED32.DLLとどのような関係があるのか説明して欲しいものだ。
0352デフォルトの名無しさん2005/04/19(火) 08:23:21
>>351
MFC のソース嫁。
0353デフォルトの名無しさん2005/04/19(火) 12:18:30
>>347
COM で MultiLanguage オブジェクト(CLSID_CMultiLanguage ) 作って、
IMultiLanguage を QueryInterface で取得して、
IMultiLanguage::ConvertString で変換する。
0354デフォルトの名無しさん2005/04/20(水) 03:06:01
ポップアップメニューのイベント処理を
OnCmdMsgで処理しているのですが、選択した項目が2回連続で呼ばれてしまうです
原因、対処方法教えてください
よろしくおねがいします
0355デフォルトの名無しさん2005/04/20(水) 03:13:49
原因:二回呼ばれるように書いている。
対処法:一回だけ呼ばれるように書き直す。
0356デフォルトの名無しさん2005/04/20(水) 10:05:46
デバッガで何処で呼ばれているかをチェックしてみたら?
0357デフォルトの名無しさん2005/04/20(水) 10:52:04
CRichEditCtrlとCRichEditCtrlは同じものでつか?
03583572005/04/20(水) 10:56:33
唐突に、「GetRichEditCtrl()」をコールしてるコードがあるんですが、
これはMFCの標準関数でつか?
0359デフォルトの名無しさん2005/04/20(水) 11:12:31
>>357
どこをどうみても同じものにしか見えないが。
CRichEditViewとCRichEditCtrlでは?

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

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

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

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

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

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

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

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

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

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


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

CBrush nullbrush;
nullbrush.CreateSolidObject(NULL_BRUSH);

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

これを

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

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

nullbrush.CreateStockObject(NULL_BRUSH);

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

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

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

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

下らない質問してしまった。
答えてくれた人たち、ありがとう。
0434デフォルトの名無しさん2005/04/28(木) 01:45:44
ありがちな「解決した気になってる」パターンやね。
0435デフォルトの名無しさん2005/04/28(木) 02:07:29
馬鹿だ、お前は
0436デフォルトの名無しさん2005/05/01(日) 02:26:06
タイプライブラリを使って他アプリを操作したく思ってます。(COMのクライアントを作りたい)
ClassWizardのオートメーションにラッパクラスを作ってもらい、オブジェクト宣言後に
なんか必要ぽいからCreateDispatchし、何とかメソッドが実行できた、というのが現状です。そこで・・・
(1) 明示的なReleaseDispatchも必要か?
(2) new, delete も併用すべきなのか?
(3) 「VCによるクライアント作製」に重きを置いた、良いCOM文献は無いか?
の3点で悩んでいる次第です。(3)に関しては、「COMとは」「COMコンポーネントを作る」
みたいな解説は幾つか見つけたのですが、「VCでクライアント作ろうぜ」てな感じの詳しい解説は
見つけられなかったのです。かろうじてMSDNのサンプルくらいでしょうか。

この辺りの事情に詳しい方、御教示願えますでしょうか?
0437デフォルトの名無しさん2005/05/02(月) 11:45:42
CPaintDC dc(this)のdcから、HDCを取得できまつか?
0438デフォルトの名無しさん2005/05/02(月) 12:36:49
>>437
CPaintDCはCDCから派生してるんだよ。
04394372005/05/02(月) 13:04:01
thx!>>438

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

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

トリガっていうと「追加」ボタンとかを付けて押されたら
エディットに入った文字列を読んでAddString
って感じでしょうか?
0446デフォルトの名無しさん2005/05/02(月) 17:30:40
でなければEnterキーが押されたら追加とか。
ブラウザのアドレス入力なんかはこの形式だよね。
0447デフォルトの名無しさん2005/05/02(月) 17:33:24
入力した文字を普通は読むだろうから
そのときついでに
0448デフォルトの名無しさん2005/05/02(月) 17:40:00
>>445
イエース
04494412005/05/02(月) 17:43:30
>446
>でなければEnterキーが押されたら追加とか。
>ブラウザのアドレス入力なんかはこの形式だよね。
む、確かにそうですね
Enterで追加となるとどうすればよいですかね
04504412005/05/02(月) 18:37:15
結局、ボタンを使ってできました
お早い対応ありがとうございました<(_ _)>
0451デフォルトの名無しさん2005/05/02(月) 22:26:27
441は女
0452デフォルトの名無しさん2005/05/02(月) 23:05:30
唐突に質問です。
CString の文字列を数値に変換したいのですが、
なにかいい方法はありますか?
CString str = "13.2345";
この文字列をlong型などに変換して数値データとして扱いたいのです。
0453デフォルトの名無しさん2005/05/02(月) 23:24:15
>>452
atol
0454デフォルトの名無しさん2005/05/02(月) 23:25:24
>>452
atof,atoiとかは?
0455デフォルトの名無しさん2005/05/02(月) 23:29:31
その場合、CString型のままではだめですよね?
CStringからcharへと変換するのでしょうか?
0456デフォルトの名無しさん2005/05/02(月) 23:38:47
>>455
LPCTSTRにキャスト
atol((LPCTSTR)str)
0457デフォルトの名無しさん2005/05/02(月) 23:44:27
strtol
strtoul
StrToInt
0458デフォルトの名無しさん2005/05/03(火) 00:02:58
str = "62.707317073171";
const char * csp = atol((LPCSTR)str);
そしてTRACE("%lf\n",csp);で
0.000000
と表示されます。なぜでしょうか?
0459デフォルトの名無しさん2005/05/03(火) 00:07:24
str = "62.707317073171";
long x= atol((LPCSTR)str);
TRACE("%lf\n",x);
0460デフォルトの名無しさん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
0461デフォルトの名無しさん2005/05/03(火) 00:28:22
%lfなのになんでlongなの?
0462デフォルトの名無しさん2005/05/03(火) 00:39:59
・キャストはいらん
・使うなら、_tstol
0463デフォルトの名無しさん2005/05/03(火) 00:47:18
_tstol 定義されていない識別子です・・。
0464デフォルトの名無しさん2005/05/03(火) 00:59:54
どうもlongだとうまくいかないので、全部dobuleにしましたところ、
なんとかうまくいきました。お騒がせしました。
0465デフォルトの名無しさん2005/05/03(火) 01:09:29
なんでそうなるのかよく理解しといた方がいいよ。
0466デフォルトの名無しさん2005/05/03(火) 08:09:26
>>463
#include <tchar.h>

>>464
なんだかatolの戻り値をdouble型の変数で受けていそうだ。
0467デフォルトの名無しさん2005/05/06(金) 09:36:05
そういえば、MFCで(=Win32API直呼びでなくて)ポップアップメニューって作れるんでつか?
0468デフォルトの名無しさん2005/05/06(金) 11:45:43
>>467
CMenu のインスタンス作って
CMenu::LoadMenu() でリソース読んで
マウスの右ボタン押されたら
CMenu::TrackPopupMenu() で表示。
0469デフォルトの名無しさん2005/05/07(土) 01:00:42
CEditやCRichEditCtrlの中に記入されている文字列に対して
ツールチップを表示するのはどうやっているのでしょうか。
イメージとしては、Visual Studio のソース・エディタの
なかで、任意の文字列にマウス・カーソルをあてると、
変数の型とか関数の引数とかがツールチップとして出てくる
アレを想定しているのですが。。

ひとつひとつのツールチップ表示対象位置に AddTool() して
いる・・?んでしょうか?
0470デフォルトの名無しさん2005/05/07(土) 01:12:39
http://YahooBB219026012201.bbtec.net/

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

という定説の流れでうまく表示はできるんですが、クリックすると数回に一回
OSそのもののメニューが同時に表示されます
理由、解決方法教えてください
よろしくおねがいします
0472デフォルトの名無しさん2005/05/09(月) 11:29:23
>>471
よくわからんが、TrackPopupMenuの前にWM_CANCELMODEでも
Postしてみたらどうだろう。
04734712005/05/09(月) 16:04:06
>472
だめでした
どうやら最初の
SetForegroundWindowが悪さをしているようなんですが
これを消すと、OSのタスクメニューがでないかわりに、アプリのメニューが
消えない現象がおこります。



0474デフォルトの名無しさん2005/05/09(月) 17:58:20
class CMyDialog : public CDialog
{
  void close();
}
だとして、
そのCMyDialogのcloseメソッドからCMyDialogフォームを閉じたいときは、
どう書けばよいでつか?
0475デフォルトの名無しさん2005/05/09(月) 18:53:22
>>474
モーダルかモードレスかで変わる。
04764742005/05/09(月) 19:58:21
モーダルの場合を教えて下さい。
0477デフォルトの名無しさん2005/05/09(月) 20:29:16
>>476
EndDialog
0478デフォルトの名無しさん2005/05/09(月) 21:52:52
モードレスダイアログを閉じるにはDestroyWindow()だけで
いいんですか?deleteしなくていいんですか?
0479デフォルトの名無しさん2005/05/09(月) 22:24:41
>>478
モーダルの場合大抵
CMyDialog dlg;
if( dlg.DoModal()==IDOK ){ ... }
みたいにスタック上に割り当てて使う
0480デフォルトの名無しさん2005/05/09(月) 22:29:21
そうだね
04814792005/05/09(月) 22:38:54
読み違えちったスマソ。
>>479はモーダルの場合

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

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

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

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

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

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

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

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

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

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

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

Spy++で見たところ、オーナーウィンドウが有るのが怪しいと思うのですが、
オーナーウィンドウ無しで作る方法が分からない…
05145132005/05/16(月) 23:20:36
解決しますた。お騒がせしてすんません。
0515デフォルトの名無しさん2005/05/17(火) 16:29:35
SDIで作ってるのですが
エクスプローラーみたいにウィンドウ全体にリストコントロールが
表示されるようにするにはどうすればいいのですか?
コントロールだからリソースにダイアログを作ってリストビューを貼り付けるのですか?
0516デフォルトの名無しさん2005/05/17(火) 16:45:08
>>515
View を ListViewにすればいいんじゃない?
05175152005/05/17(火) 17:18:12
ListViewにしてみました
が、どこでリストビューコントロールを作ればいいのかわかりません
申し訳ないですが教えてください
0518デフォルトの名無しさん2005/05/17(火) 17:52:15
>>517
ListViewならもう貼ってあるんじゃない?
GetListCtrlつかって操作できるよ。

手動でやりたいなら、CWndのメンバーに、CListCtrlを
置いて、OnCreate 内でCreateすればいい。
大きさは適当でいいよ。
そして、OnSize 内で、MoveWindowかSetWindowPosで
クライアント領域いっぱいにリサイズする。
0519デフォルトの名無しさん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() ); <- 上手くいきます
0520デフォルトの名無しさん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() ); <- 上手くいきます
0521デフォルトの名無しさん2005/05/17(火) 18:31:09
エラーがでます
0522デフォルトの名無しさん2005/05/17(火) 20:28:14
アサートが出た場合は、それがどこで出たのかが重要なのだ。
05235002005/05/17(火) 23:43:56
亀ですみません。
>>501-502
ありがとうございます。
501氏の方法で解決しました。
0524デフォルトの名無しさん2005/05/18(水) 10:02:32
多分標準ライブラリみたいですが、
>ビルド : 警告 : ビルドに失敗しました (またはビルドの方法がわかりません) '〜\tabstrip.cpp'
みたいな、エラーの消し方教えて下さい。
0525デフォルトの名無しさん2005/05/18(水) 10:05:37
それはMFCじゃなくてVCかIDEの問題な気がしないでもないが
0526デフォルトの名無しさん2005/05/18(水) 12:37:59
WindowsXPで2画面のプログラムを作っているのですが、
MoveWindowで(0,0)に移動しようとすると2画面目に行ってしまいます。
(1,1)ですと1画面目に移動するのですが…。
これってやりかたが悪いんでしょうか。
ちなみに、SXGAで(1280,0)とすると、正しく2画面目に表示されるんですが。

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

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

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

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

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

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

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

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

よろしくお願いします.
0550デフォルトの名無しさん2005/05/21(土) 20:27:27
>>549
MFCのソースついてるから自分で好きなように
05515492005/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;
〜省略〜
}
05525492005/05/21(土) 21:19:29
あ
改変したmfcのライブラリってプログラムに同梱配布してもいいのでしょうか?
改変したライブラリなしでは,配布先のWindowsにおいて正しい挙動を望めませんよね・・・
05535492005/05/21(土) 21:24:35
すいません.>>552の疑問については自己解決です.
改変MFCライブラリをスタティックリンクすればいいのですね.

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

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

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

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

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

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

A(非表示)→B(モーダル、表示)
↓
C(モードレス、非表示)

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

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

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

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

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

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

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

ペインの大きさ指定で

そう

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

の超FAQもヨロ

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

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

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

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

>>649
指摘通り、USBでコピーしたプロジェクトでした。
その方法で無事に解決し、実行出来ました。
ありがとうございました。
0651デフォルトの名無しさん2005/05/29(日) 13:10:08
時々ピンポイントな解決策を提示する人が居る時は、ああこのスレ役に立ってるんだなと思う
0652デフォルトの名無しさん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となってほしいのですが、実際は
「無題のファイルの末尾以降にアクセスしようとしました」
とエラー表示してしまいます。
一体何処がいけないのでしょうか?
0653デフォルトの名無しさん2005/05/29(日) 16:33:38
書き込み後にmemのSeekしなきゃ、
ファイルポインタがファイル末尾のまんまだと思う。

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

SetWindowPosでサイズ設定でつか?
0672デフォルトの名無しさん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 - キャッシュ - 関連ページ
0673デフォルトの名無しさん2005/05/30(月) 13:03:17
デキマスタ, thx!>>672
0674デフォルトの名無しさん2005/05/30(月) 13:06:19
ビローンワラタ
0675デフォルトの名無しさん2005/05/30(月) 16:20:50
CComboBoxにSetEnabledは無いんでしか?
0676デフォルトの名無しさん2005/05/30(月) 16:22:41
はい。
0677デフォルトの名無しさん2005/06/01(水) 18:29:09
質問です。
ダイアログベースのWizardで作成。

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

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

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

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

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

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

どうしてこんな変な仕様なんですか?
SetText(char* p);みたいなものを用意してくれればいいと思うのですが。
0693デフォルトの名無しさん2005/06/04(土) 23:30:24
>>692
長くてしかも書式付きのテキストを扱うんだから
仕方ないのでは?

うろ覚えだが、単純に中身全部を置き換えるなら
SetWindowText()つかえるんじゃなかったか
0694デフォルトの名無しさん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);
0695デフォルトの名無しさん2005/06/06(月) 22:09:48
>>694訂正
>printf("addr=", inet_ntoa(ad);
↑
printf("addr=%s", inet_ntoa(ad))
0696デフォルトの名無しさん2005/06/06(月) 22:11:29
>>694さらに訂正
> addr = (addr+1) & addr_mask;
>} while (addr != addr_base);
 addr++;
} while ((addr & addr_mask) == addr_base);
0697デフォルトの名無しさん2005/06/06(月) 22:15:13
ひとつもMFC使ってないのが泣ける
0698デフォルトの名無しさん2005/06/06(月) 22:18:33
CString str;
str.Format("addr=%s", inet_ntoa(ad));
printf("%s", str);
0699デフォルトの名無しさん2005/06/07(火) 07:24:50
VC++6.0を使ってます。

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

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

.exeファイルはmyfileと同じフォルダ階層にあるのに、
なぜか、無効なパス名ということで例外が出ます。
どうしてなのでしょうか?
0703デフォルトの名無しさん2005/06/08(水) 12:34:46
>>702
カレントディレクトリ基準であってEXEのあるディレクトリが基準ではない。
0704デフォルトの名無しさん2005/06/08(水) 17:37:27
エディットボックスの文字選択が解除されたときに処理を追加したいのですが
以下のコードではメッセージが取れないです。
どうしたらいいですか?

BOOL CMyEdit::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_SETSEL){
   if(pMsg->wParam == -1){
//処理
}
}
return CEdit::PreTranslateMessage(pMsg);
}
0705デフォルトの名無しさん2005/06/08(水) 17:45:44
あ、まちがえました。
×WM_SETSEL
○EM_SETSEL
です。
0706デフォルトの名無しさん2005/06/08(水) 18:49:37
EM_SETSELは自分でセットするときに使う
通知関係は、EN_ だろう
0707704-7052005/06/08(水) 23:21:59
ありがとうございます。やってみます。
0708704-7052005/06/09(木) 10:14:44
あれ、でもEN_SETSELっていうのはないですよね。
自分でも調べていますが、どういうメッセージで取れるのかわかりません。
0709デフォルトの名無しさん2005/06/09(木) 10:33:44
まずメッセージをとる方法が変
選択が解除というのがよくわからんが、
マウスやキーのメッセージが来るたびに
選択範囲をチェックして、自分でUSERメッセージを送ってみたら
0710704-7052005/06/09(木) 11:42:44
エディットボックス内に表示されている文字列を
マウスドラッグやshiftキーを押しながら矢印キーで範囲選択された
タイミングで処理を行いたいのです。
>709が一番いいのかなぁ。ちょっとよくわかりませんがやってみます。
0711704-7052005/06/10(金) 13:51:39
およそ>709のようなことで何とかなりました。
もうひとつ質問です。
エディットボックス内で右クリックして表示されたポップアップメニューの
コマンドが選択されたことを取るにはどうしたらいいでしょう?
0712デフォルトの名無しさん2005/06/10(金) 15:42:56
spy++等で調べるといろいろわかるよ
0713デフォルトの名無しさん2005/06/10(金) 15:45:50
ちょっと見てみたけど、
WM_MENUSELECTとかWM_CONTEXTMENUとか来てるなあ・・
0714704-7052005/06/10(金) 18:44:06
なんとかなりました。
>713のところではなくて、切り取りとか貼り付けの決定時がよかったので
WM_CUTやWM_COPYなどなどをとりました。
とりあえずありがとうございました。
それにしても私、PreTranslateMessageとDefWindowProcの違いがわかってません・・・
0715デフォルトの名無しさん2005/06/12(日) 00:18:00
javaからC++(MFC)に移行しようとしている者です。
ダイアログで得られた値をメインで反映させるためにグローバルな変数を
使うのでは無く、ダイアログのクラスとメインのクラスでデータを共有す
るクラスを作って参照をそれぞれのメンバにセットするというjavaっぽい
プログラミン手法はよくやられるのでしょうか?
0716デフォルトの名無しさん2005/06/12(日) 01:54:54
>715
DDX(Dialog Data eXchange)を使うのが一般的。
DDXとはダイアログボックスに貼り付けられたコントロールの設定値を
クラスのメンバ変数で操作できる仕組み。
0717デフォルトの名無しさん2005/06/13(月) 10:32:36
>>715
簡単なダイアログなら、ダイアログのクラス自体をデータクラスと
割り切って、コントロールに関連付けされたメンバをpublicにして
しまうのもありだと思う。
0718デフォルトの名無しさん2005/06/14(火) 17:29:28
パレットにCBitmapButtonが無いんですが、
どうやってポトペタしたら良いでつか?
07197182005/06/14(火) 17:47:19
Microsoft Forms 2.0 ToggleButtonだと、
ビットマップが設定できますね。

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

対処方法キボンッユ
0728デフォルトの名無しさん2005/06/15(水) 19:35:51
Createするな。
0729デフォルトの名無しさん2005/06/15(水) 21:15:52
>727
>Dlg.Create(IDD_DIALOG,this);
>Dlg.DoModal();
アホ?
すげーレベル低い
Modal DialogとModeless Dialogの違いわかってる?
それぞれのMFCでの作成方法わかってる?
0730デフォルトの名無しさん2005/06/15(水) 21:37:41
>>729
下がってよいぞ
0731デフォルトの名無しさん2005/06/15(水) 22:00:53
>>729
解説サイト木本
07327272005/06/16(木) 08:56:25
MyDlg Dlg(this);
Dlg.DoModal();

でおk?
0733デフォルトの名無しさん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がうまく分かりません。
教えていただけませんか
0734デフォルトの名無しさん2005/06/16(木) 10:27:40
俺もうまくわからん。
07357272005/06/16(木) 11:16:24
MyDlg Dlg(this);
Dlg.MyProcess();
Dlg.DoModal();

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

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

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

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

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

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

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

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

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

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

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

DoModalのアトに処理走らせれば良いんだ。
0753デフォルトの名無しさん2005/06/16(木) 17:23:03
面白くもない冗談だな。
0754デフォルトの名無しさん2005/06/17(金) 09:49:57
上がってよいぞ
0755デフォルトの名無しさん2005/06/17(金) 11:37:33
ダイアログをDoModalする前にダイアログ・オブジェクトの外からプロパティ設定したい場合は、どうすんだろ?
0756デフォルトの名無しさん2005/06/17(金) 11:45:15
>>755
ダイアログクラスにI/Fを用意する。
0757デフォルトの名無しさん2005/06/17(金) 18:34:28
フロッピードライヴにディスクを入れた,
というイベントをつかむ方法はありますか?
USBメモリを指すとメッセージが飛び,
それでわかるのですが,フロッピーのディスクで
同様のことはできないのでしょうか?
0758デフォルトの名無しさん2005/06/17(金) 18:47:38
無いってAPIスレで言っただろ。
0759デフォルトの名無しさん2005/06/17(金) 18:55:16
>>758
そこをなんとか
0760デフォルトの名無しさん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をインクルードしても直らないし
誰か直し方教えて
0761デフォルトの名無しさん2005/06/17(金) 19:03:41
/MT
0762デフォルトの名無しさん2005/06/17(金) 19:06:34
スレッドを作成して定期的にドライブ情報を取得すれば?
0763デフォルトの名無しさん2005/06/17(金) 19:09:09
>>762
それは考えたけど
FD が実際にはいってるかどうかなんてわかんのか?
0764デフォルトの名無しさん2005/06/17(金) 19:13:43
FDにアクセスすれば判るっちゃ判るけどいい迷惑だな。
0765デフォルトの名無しさん2005/06/17(金) 19:33:38
>>761
thx!
なぜか知らんが通った
0766デフォルトの名無しさん2005/06/17(金) 20:31:18
1つのリソース・ダイアログに1つのCDialog派生クラスがクッツイテまつ。
そのリソースに、別のCDialog派生クラスをクッツケルのは可能ですか?

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

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

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

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

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

RegisterDeviceNotification

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

#include <winuser.h>

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

#include <dbt.h>

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

#define WINVER 0x0500

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Visual Stdio .NET 2003
VC++ .NET 7 です
0865デフォルトの名無しさん2005/07/01(金) 02:02:04
クラスのプロパティから行ってください
0866デフォルトの名無しさん2005/07/01(金) 02:05:31
>>864
http://www.microsoft.com/japan/msdn/library/ja/vccore/html/vcgrfWhereIsClassWizardInVisualCNET.asp
08675752005/07/01(金) 02:07:31
865さん、速攻のRESありがとうございます。
無事、オーバーライドできました。
0868864,8672005/07/01(金) 02:16:05
嬉しさのあまり名前欄の番号間違えてるし・・・しかも全然違う orz
>866さん、リンクありがとうございます。私の探し方が甘すぎの模様です。
0869デフォルトの名無しさん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 );//選択項目(点線の枠)を解除
をすることで、処理できます。
ひとつ勉強になりました。ありがとうございました。
0870デフォルトの名無しさん2005/07/01(金) 19:26:08
ODBC接続で

RCS.Open( CSimDBAc::snapshot,
 _T( "select * from table where POINT > 50"),CRecordset::readOnly );
とした後GetRecordCount()でレコード数を受け取ろうとしたのですが、
POINT>50 であるレコードはいくつもあるのに1が帰ってきます。これは
なぜなのでしょうか?
0871デフォルトの名無しさん2005/07/01(金) 19:38:15
末尾のレコードに移動してカウント
だめならSQLをちがうのにかえてみる。
0872デフォルトの名無しさん2005/07/01(金) 19:51:01
>871
どうやって末尾にいどうすればいいのですか?
0873デフォルトの名無しさん2005/07/01(金) 20:01:44
ムーヴラスト
0874デフォルトの名無しさん2005/07/01(金) 20:03:57
まぁこのあたり
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_crecordset_class_members.asp
0875デフォルトの名無しさん2005/07/01(金) 20:05:18
ムーブラストでも駄目でした。
0876デフォルトの名無しさん2005/07/01(金) 20:42:32
↓MSDN
MoveLast 関数を呼び出してもレコード数は更新されません。
ユーザーが独自にレコード数を数えるには、IsEOF が 0 以外を返すまで
MoveNext を繰り返し呼び出します。
0877デフォルトの名無しさん2005/07/01(金) 20:56:31
あれ? CRecordsetはそうだったのか。
MoveNextなんか繰り返し呼んでると、場合(DBMSとかレコードセットの種類とか)によっては
ものすごく時間がかかるので、count(MFCじゃないぞ)でも使った方がいいな。
0878デフォルトの名無しさん2005/07/01(金) 21:04:27
>876

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

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

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

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

しかし dialog control ID の重複なら >>889 で
>(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
>では、まだNULLのままです。
てことはないだろう。意図した control は取れないが何か取れるはずだ。
0901デフォルトの名無しさん2005/07/03(日) 16:01:09
>>898
編集って何を指してる?
SetWindowText() はできるよ。
0902デフォルトの名無しさん2005/07/03(日) 16:04:47
NULLぽにSetWindowTextはできないだろ
0903デフォルトの名無しさん2005/07/03(日) 16:07:48
dialog 上に IDC_STATIC である dialog control が 1 つしかなければ
それを GetDlgItem(IDC_STATIC) で意図どおり取得できるし、
なおかつそれが static control だったら SetWindowText() もできる
って言ってるのさ。
0904デフォルトの名無しさん2005/07/04(月) 10:07:38
MFCでresource dialogを作ったのですが、
returnキーを押すとWM_CLOSEが飛ぶようで、returnキーを押してもWM_CLOSEが飛ばないようにするためには
どうすればいいのでしょうか?

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

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

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

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

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

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

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

あと、今どこまで出来てるのかも記した方が良いと思います。
(ダイアログの作り方から聞いてるのか、そうでないのかが分からない。)
0934デフォルトの名無しさん2005/07/06(水) 20:59:17
>933
すいませんでした。説明不足でした。
ボタンを押して子ダイアログを表示するとこまではできています。
あとはその子ダイアログの色を変えたいのです。
簡単なことのようですがわかりません。
0935デフォルトの名無しさん2005/07/06(水) 21:01:28
あとMFCを使っていて、子ダイアログは
CDialogクラスでモーダレスダイアログとして作っています。
0936デフォルトの名無しさん2005/07/06(水) 22:02:06
WM_CTLCOLOR

HBRUSH hbr=::CreateSolidBrush(RGB(255,0,0));
return hbr;
0937デフォルトの名無しさん2005/07/07(木) 11:35:59
>936
ありがとうございます。
できました。
0938デフォルトの名無しさん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になってしまう)場合があり困っています。
原因、対処方法、もしくは、上記以外の実現方法がわかる方
いらっしゃいましたら教えてください。

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

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

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

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

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

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

よろしくねがいます。
0960デフォルトの名無しさん2005/07/11(月) 16:41:11
>>959
http://www.google.co.jp/search?hl=ja&inlang=ja&c2coff=1&q=CListCtrl+%E9%81%B8%E6%8A%9E%E7%8A%B6%E6%85%8B&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0961デフォルトの名無しさん2005/07/11(月) 16:43:27
>>959
SetItemState(n, LVIS_SELECTED, LVIS_SELECTED)
0962デフォルトの名無しさん2005/07/11(月) 16:44:56
>>958 もヨロ
09639582005/07/11(月) 17:01:47
ついでに教えて欲しいのですが、
クラスとダイアログリソースとの結びつきは、
ソースファイル(?)のどこに書かれてるのでしょうか?
0964デフォルトの名無しさん2005/07/11(月) 17:17:06
>>963
もっと具体的に質問してくれたまえ。
#つーか、***_dlg.cpp, ***_dlg.h, ***.rc, resource.hを眺めれば判るだろ。
09659582005/07/11(月) 17:23:28
具体的な質問は >>958 でつ。
09669582005/07/11(月) 17:26:20
あきらめて新規クラスとソースファイルを作り直そうとしたら、
「新規クラス "C〜Dlg"のためのファイル(〜.h, 〜.cpp)はそのクラスの残りを含んでいます」
というイミプーなエラーメッセージ。

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

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

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


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

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

http://pc8.2ch.net/test/read.cgi/tech/1065535118/
0998デフォルトの名無しさん2005/07/13(水) 05:29:10
次スレたてました。
http://pc8.2ch.net/test/read.cgi/tech/1121200124/
0999デフォルトの名無しさん2005/07/13(水) 05:52:35
■MFC相談室 mfc14d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1121200124/
1000デフォルトの名無しさん2005/07/13(水) 06:00:01
6時です
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。