■MFC相談室 mfc13d.dll■
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
05/03/07 16:19:56前スレ
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
過去ログは >>2-5 の辺り。
0002デフォルトの名無しさん
05/03/07 16:20:50過去スレ
■ 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つまり、スプリッタで左右2つのViewを持ち、
左がTreeViewで右がListViewです。
そこで、ListView側に関する質問です。
これまたレジストリエディタにように、アイテムをダブルクリックしたら
値を表示したりするようなダイアログを開くようにしたいのです。
それには、どのようなオーバーライド関数や、メッセージで
引っ掛ければいいのでしょうか?
0004デフォルトの名無しさん
05/03/07 19:58:57ダブルクリック
00053
05/03/07 20:52:25あぁ… なるほど… アイテムがハイライト状態になったりするのはListViewの
デフォルトの機能だから、ダブルクリックのメッセージで引っ掛ける。
あとは、そのときのマウスカーソルの位置で対象のアイテムを特定
すればいいということでしょうか?
0006デフォルトの名無しさん
05/03/08 11:25:460007デフォルトの名無しさん
05/03/09 11:17:58どうもありがとうございました。
こんな感じになりました。あとは、↓ではメッセージボックスで
表示しているのをダイアログにして、表示内容を充実させるだけになりました。
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:10CreateDispatchで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黄色いビットマップのリソースでも張り付けてやればええんジャマイカ?
0011デフォルトの名無しさん
05/03/12 10:41:33HBitmap hBitmap;
/* hBitmap作成 */
pBitmap->FromHandle(hBitmap); //HBITMAPからCBitmapを得る
/* 処理 */
のようにHBITMAPからCBitmapを得て、処理後にDeleteObjectしようとしたのですが
pBitmap->DeleteObject(); はダメで
DeleteObject(hBitmap); なら開放できました
どうしてもDeleteObject(hBitmap);を使わないで開放したいのですが、何か方法は無いでしょうか?
0012デフォルトの名無しさん
05/03/12 11:05:51FromHandle使うんじゃなくてAttachしたらどうか。
001311
05/03/12 12:05:29ありがとうございます
0014デフォルトの名無しさん
05/03/13 12:11:50スクロールバーのつまみのサイズを変えるにはどうしたらいいでしょうか。
0015デフォルトの名無しさん
05/03/13 20:59:38リストボックスの背景を動的に変える方法を
知ってる方がいましたら教えて頂けないでしょうか?
0016デフォルトの名無しさん
05/03/13 21:39:36SCROLLINFO::nPage
0017デフォルトの名無しさん
05/03/14 21:03:48ありがとう。
0018デフォルトの名無しさん
05/03/15 09:38:16タブブラウザの「リンクを開くときにアクティブにしない」と同じような動作にしたいのですが。
0019デフォルトの名無しさん
05/03/15 12:13:12アクティブにする
0020デフォルトの名無しさん
05/03/15 20:03:04大雑把に機能を言うと、リクエスト(ActiveXメソッド)があったら、
AfxBeginThreadでワーカースレッドを起こして、
そのスレッド内でとある機器とソケット通信を行って、
終わったら通信終了ということで、
そのスレッドからActiveXイベントを投げたいわけです。
まず、スレッドに発生元であるコントロール自身のポインタを渡して、
スレッド中からFireEventを呼んでみたら失敗。
まあ、これはスレッドとコントロール自身が別スレッド空間だからなあと思いつつ、
じゃあしゃあないPostMessageするかと思ったら、
WindowsLessだから当然hWndを持ってないわけです。
こういう場合、どうやって別スレッドからActiveXコントロールのFireをしてやればいいんでしょ?
少し調べてマーシャリングというものを行えば良いらしいというとこまでは行き着いたのですが、
ググった程度ではサンプル等にまではぶち当たることができませんでした。
このへん説明してるいいwebとかないっすかね?
0021デフォルトの名無しさん
05/03/15 20:32:020022デフォルトの名無しさん
05/03/15 21:13:39そのオープンソースのライブラリによる
0023デフォルトの名無しさん
05/03/16 04:53:41直接あああと出せる方法ってありますか?
今はクリップボードに「あああ」をコピーさせて出しているんですが・・・
0024デフォルトの名無しさん
05/03/16 05:17:25002523
05/03/16 05:41:330026デフォルトの名無しさん
05/03/16 11:58:04DIID_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:12mshtml.dll
0028デフォルトの名無しさん
05/03/16 19:54:590029デフォルトの名無しさん
05/03/16 20:03:37絶対座標ってなんの座標?
最善面に表示ってどこの最前面?
0030デフォルトの名無しさん
05/03/16 20:14:420031デフォルトの名無しさん
05/03/16 20:27:52ビットマップリソース表示と、最前面表示を別々にググればたくさん出てくるよ。
0032デフォルトの名無しさん
05/03/16 20:29:200033デフォルトの名無しさん
05/03/16 21:01:150034デフォルトの名無しさん
05/03/16 21:34:40ビットマップリソース表示と最前面表示の方法がわかれば
あとはそれらを組み合わせるだけじゃん。
0035デフォルトの名無しさん
05/03/16 21:45:49もっと色々やってみます。ありがとうでした
003618
05/03/17 11:13:350037デフォルトの名無しさん
05/03/17 12:01:54アクティブにすればいいんだよ
0038デフォルトの名無しさん
05/03/17 18:55:210039デフォルトの名無しさん
05/03/18 10:38:090040デフォルトの名無しさん
05/03/18 13:21:460041デフォルトの名無しさん
05/03/20 19:00:17開くファイル?を右クリック⇒プログラムから開く、でやるとその開くファイルと同じ階層から設定ファイルを開こうとしているようなんです
どうすれば常にexeと同じ階層から設定ファイル開くようにできるんでしょうか?
0042デフォルトの名無しさん
05/03/20 19:26:47実行モジュールのあるディレクトリにある設定ファイルを開けばいい。
つまり、GetModuleFileName()で取得できたファイル名の'\\'から後を捨てて得られたディレクトリに
移動してから設定ファイルを開けばいい。
004341
05/03/20 20:09:100044デフォルトの名無しさん
05/03/20 21:55:020045ゆん
05/03/20 23:17:49あれってCGIでできてるの??
誰かつくり方しってますかー????
0046デフォルトの名無しさん
05/03/20 23:31:440047デフォルトの名無しさん
2005/03/21(月) 06:24:54.net+Win32SDKとかにならないよね?
0048デフォルトの名無しさん
2005/03/21(月) 19:57:23と
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とか、CTRL+Zで何十回も戻れたりする動作は自分でコーディングしないといけないんでしょうか?
それとも簡単にできるものなんでしょうか?
0050デフォルトの名無しさん
2005/03/21(月) 21:20:19VisualStudioのテキストエディタの、インデントの話かな?
かなり自分で書かないとダメッしょ。
0051デフォルトの名無しさん
2005/03/21(月) 22:44:48エディットコントロールに頼る様ではダメ。
005248
2005/03/22(火) 16:12:20>>48
解決したので自己レス。
ttp://wg-web.ics.teikyo-u.ac.jp/usage/VC/vwchange.html
の中の各フォームビューの切り替え時に、
OnInitialUpdateを明示的に呼んであげたら直りました。
上記のサンプルコードだと、うまくイニシャライズされてないのかなという感じ。
0053携帯から
2005/03/22(火) 16:17:450054デフォルトの名無しさん
2005/03/22(火) 20:23:25みんなそういう時どうしてる?
何かいいものあるかい?
0055デフォルトの名無しさん
2005/03/22(火) 20:44:140056デフォルトの名無しさん
2005/03/22(火) 20:59:09難しそうだな。
拾ってくるとしたらお勧めってある?
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:41005849
2005/03/23(水) 11:35:29あれから頑張ってみたんですが、TABとSHIFT+TABは比較的すぐできました
しかし複数UNDOが難しすぎます・・・
UNDOされている内容を別のところに保存する、ということはできないんでしょうか?
005949
2005/03/23(水) 11:36:58UNDO用のデータ?ですかね・・・
0060デフォルトの名無しさん
2005/03/23(水) 17:48:28std::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自分で文字数計算して切り捨て
006361
2005/03/24(木) 11:42:45文字切り捨ては最終手段と考えています。
どうも横幅の64のみが無視されるようで、
例えば32ピクセル分のテキストを全てのボタンに当てた場合、
今度は32*64のボタンになってしまうのです。
画像にテキストを埋め込む手段も考えてはいますが…
もっとスマートに変えられないものでしょうか。
0064デフォルトの名無しさん
2005/03/24(木) 11:55:00文字切捨てを避けたい理由は?
その方がスマートだと思うけど。
後は、メモリDC使ってテキストを描画して、それを貼るとか。
0065デフォルトの名無しさん
2005/03/24(木) 12:20:34手元のソースで
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訂正、最後の行は高さが64のせいで、バージョンが変わっても問題なし。
006761
2005/03/24(木) 12:50:05デザインの都合上、ボタンサイズを64*64で固定させたいので、
64未満になってもらっても困るのです。
どうも私の環境だと、幅64の指定が無視されまくるようで・・・
テキスト切捨てで解決できるのならば、それでも良いのですが。
>>65
TBSTYLE_AUTOSIZEは意図的に下ろしてもNGでした。
念のためもう一度確認してみます。
MFCやめたい_| ̄|○
0068デフォルトの名無しさん
2005/03/24(木) 12:52:35UINT nStyle = ToolBar.GetButtonStyle(index);
ToolBar.SetButtonStyle(index, nStyle ^ TBBS_AUTOSIZE);
006961
2005/03/24(木) 13:21:43そのタイミングがOnCreate後に来ているようで、
OnCreate内で SetSizes() や SetButtonStyle()をコールしても無視されてしまう模様。
多分私の造り方に問題があるのだと思いますが・・・
荒っぽいやり方ですが、Notify メッセージで毎回SetSizes()をコールしたら固定になりました。
とりあえずコレで放置しておきます。
尚、引き続き原因と思われる箇所は募集させてください。
ツールバー関連のソースは、>>61のリンク先に書いたものが全てです。
まだ何も書いていません^^;
0070デフォルトの名無しさん
2005/03/24(木) 17:20:38動的にエディットボックスのReadonlyを設定解除するにはどうしたら良いでしょうか?
CWndのクラスにそれらしいものがみあたらないのですが。
Enableだとグレーアウトしてしまうので、やりたいことと違うのです。
以上、よろしくお願いします。
0071デフォルトの名無しさん
2005/03/24(木) 17:23:530072デフォルトの名無しさん
2005/03/24(木) 17:24:08read MSDN.
CEdit::SetReadOnly()
007370
2005/03/24(木) 17:30:09おらこっぱずかしいです!
ありがとうございました。
0074デフォルトの名無しさん
2005/03/24(木) 20:17:430075デフォルトの名無しさん
2005/03/24(木) 21:31:380076デフォルトの名無しさん
2005/03/24(木) 22:18:350077デフォルトの名無しさん
2005/03/24(木) 22:23:160078デフォルトの名無しさん
2005/03/25(金) 01:00:180079デフォルトの名無しさん
2005/03/25(金) 08:06:31しまった!
サブクラスってのは派生クラスに直したんだけど・・・
って、C++はメソッドって言わないんだっけ?
0080デフォルトの名無しさん
2005/03/25(金) 08:55:50MSDNにメソッドと書いてあるか?
0081デフォルトの名無しさん
2005/03/25(金) 10:21:200082デフォルトの名無しさん
2005/03/25(金) 11:23:060083デフォルトの名無しさん
2005/03/25(金) 12:39:47MSDN を規範にするのもどうかと思うが…
まあ C++ のメンバ関数を「メソッド」と呼ぶのが誤りなのは確かだな。
ActiveX のメソッドと紛らわしいし。
0084デフォルトの名無しさん
2005/03/25(金) 12:53:140085デフォルトの名無しさん
2005/03/25(金) 13:52:52MSDNで調べる話だからでしょ。
008661
2005/03/25(金) 13:53:05上がってきたデザインがツールバーそのものだったんですよ。
ボタンの真ん中に画像、その下にテキストつきです。
ダイアログのボタン操作になれていなかったので、ツールバーを使ったのですが・・・
今思えばダイアログの方が苦しまずに済んだかもです。
少々結果報告を。
Notify で苦し紛れをしていましたが、
今度はOnUpdatexxx() でSetCheck() をいじったところ、
ボタンを押すだけでまたサイズが変化する現象が発生しました。
SetCheck() の後に SetSizes() をボタン数分コールして汚いソースになってきまして、
更にツールバーが度重なる画面更新でちらつきまで発生して、
結局テキストをぶった切って対処しましたとさ。
;y=ー( ゚д゚)・∵. ターン
008761
2005/03/25(金) 14:02:42ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200503/05030050.txt
(´・ω:;.:...
0088デフォルトの名無しさん
2005/03/25(金) 14:23:31・InsertColumn()でラベルを貼り付けてカラム数を確保
・InsertItem()で行を追加
・SetItemText()などで項目をセット
この要領で問題なくできると思うけど?
008961
2005/03/25(金) 14:34:01(´:;....::;.:. :::;.. .....
0090デフォルトの名無しさん
2005/03/26(土) 06:04:41そのライブラリを、あるMFCプロジェクトで使うとします。
最終的な実行ファイルにMFCをスタティックリンクしたい場合、
AもMFCをスタティックリンクする設定にしないとダメですか?
0091デフォルトの名無しさん
2005/03/26(土) 19:55:27VCでダイアログベースのexeを作成しています。
CWinAppのコンストラクタの中の、
ASSERT(AfxGetThread() == this);
でAssertが発生するのですが、原因がわからなくて困っています。
どうしたら解決できるのでしょうか。
どなたかご存知の方、よろしくお願いします。
0092デフォルトの名無しさん
2005/03/26(土) 20:53:08CWinAppのコンストラクタはMFCの初期化前に走る。(グローバルにあるので)
初期化前なのでAfxGetThread()が正常な値を返していないのだろう。
0093デフォルトの名無しさん
2005/03/26(土) 23:03:440094デフォルトの名無しさん
2005/03/26(土) 23:06:460095デフォルトの名無しさん
2005/03/26(土) 23:14:23と同じ症状で困っています。
原因は、ウィザードで作成された class をnamespaceで区切ったことに
あるとおもうのですが、これを迂回する方法があれば教えて下さい。
0096デフォルトの名無しさん
2005/03/27(日) 16:50:14対処法を教えてください
0097デフォルトの名無しさん
2005/03/27(日) 16:58:19VSを一旦終了して.clwというファイルを削除
VSを起動してクラスウィザードを起動すると
クラス情報が無いから既存のファイルから作るかとか聞かれるので
承諾する。これでクラス情報は作り直せる。
0098デフォルトの名無しさん
2005/03/27(日) 18:53:000099デフォルトの名無しさん
2005/03/27(日) 21:53:30改行して改行消して保存とか。
0100デフォルトの名無しさん
2005/03/29(火) 10:52:01mainはMFC内にあるんでしたっけ?
プログラム側の開始はどこにあるか、どう読めば良いでしょう?
ダイアログはリソースになってますが、起動時の画面はリソース定義されてないみたい。
で100ゲト
0101デフォルトの名無しさん
2005/03/29(火) 11:28:490102デフォルトの名無しさん
2005/03/29(火) 11:41:21見れたけど、
CWinThread::Run()
AfxWinMain
WinMain
くらいしかナカタ
0103デフォルトの名無しさん
2005/03/29(火) 11:59:300104デフォルトの名無しさん
2005/03/29(火) 12:04:04どんなのかよくわからんが CWinApp の派生クラスがあるなら
派生クラス::InitInstance() あたり
0105100
2005/03/29(火) 12:11:58CWinAppとInitInstanceの両方ありますた。
0106デフォルトの名無しさん
2005/03/29(火) 19:12:50(以下、激しく becky をイメージした説明&質問になってます。
すみません。。)
3ウィンドウを作るには、CSplitterWnd でまず二分割して
一方をさらに入れ子にして二分割する。でもって、左側の
ビューはCTreeView、右上のビューはCListView、右下の
ビューはCEditViewあたりから派生させてやればいいと思いました。
で、疑問なのですが、右上のメールリストと右下のメール本文
表示ビューとの間にある、メールタイトルなどがでている部分は
MFC的にはどのように実装されているのでしょうか。
0107デフォルトの名無しさん
2005/03/29(火) 19:28:530108106
2005/03/29(火) 22:14:59右下のビューをCFormViewから派生させて
リソース・エディタで適当にコントロールを配置。
あと、ウィンドウのサイズ変更に備えて、WM_SIZEに
対するOnSize関数をオーバーライドしてMoveWindow()で
各コントロールのサイズ調整する、って感じでうまく
いきそうです。
なにか変なことやってるかもなので気づいたら
教えてもらえると嬉しいです。
0109デフォルトの名無しさん
2005/03/30(水) 05:49:38BitBltだとウィンドウ内にしか表示されなくて・・・
詳細に言うと、ダイアログベースで、計算結果のデスクトップ座標にリソースのビットマップを印として置きたいのです。
前にも似たような質問あったみたいですが、それ見ても分からなくてOTL
0110デフォルトの名無しさん
2005/03/30(水) 09:12:280111デフォルトの名無しさん
2005/03/30(水) 23:17:31Viewの基本クラスをCRichEditViewにしてエディターを作っているのですが
これで作成するとデフォルトでテキストが右端で自動で折り返されてしまいます
これを回避しようと
ViewのPreCreateWIndowでcs.styleに
ES_AUTOHSCROLLとWS_HSCROLLフラグを追加してみましたが
オートスクロールはするようになったのですが今度は改行がされません
じゃあってことで
ES_MULTILINEとES_WANTRETURNをさらに追加してみると
デフォルトの動作と全く一緒になってしまいます
どこか根本的に間違ってるきもするのですが知恵を貸してください
0112デフォルトの名無しさん
2005/03/30(水) 23:40:46コントロールのメンバ変数を追加してほかのクラスからこのメンバ変数を参照するにはどうすればいいですか?
0113111
2005/03/30(水) 23:55:37m_nWordWrapを変更するだけでよかったみたいです
0114デフォルトの名無しさん
2005/03/31(木) 00:22:57IWebBrowser2に相当するクラスはCHtmlViewがあるのでいいですが、
IHTMLDocumentやらIHTMLElement等に相当するクラスがないので
なんかすごく不便です。
文字列型もBSTRだし、CStringとの橋渡しが面倒。
IEコンポーネント用の便利なクラスライブラリってないですかね。
0115デフォルトの名無しさん
2005/03/31(木) 17:21:08)ノ AfxGetMainWnd
0116デフォルトの名無しさん
2005/03/31(木) 23:21:54CListCtrlのラベル編集で同名の項目がある場合などに
メッセージを表示して再び編集状態にするにはどうしたらよいでしょう?
OnEndlabeledit関数で SendMessage(LVN_ENDLABELEDIT) や EditLabel してもだめでした。
0117デフォルトの名無しさん
2005/03/31(木) 23:31:190118デフォルトの名無しさん
皇紀2665/04/01(金) 03:31:18GetListCtrl().EditLabel(pDispInfo->item.iItem);
0119デフォルトの名無しさん
皇紀2665/04/01(金) 10:34:02メッセージの一覧に出てきてもメッセージじゃないものがあるんですね。
自分まだまだ精進が足りないっす。
>>118
できました!ありがとうございます。
0120デフォルトの名無しさん
皇紀2665/04/01(金) 10:57:17LVN_ENDLABELEDITはWM_NOTIFYに乗せられてやってくる。
0121デフォルトの名無しさん
皇紀2665/04/01(金) 11:30:590122デフォルトの名無しさん
皇紀2665/04/01(金) 17:14:12オナードローにして楕円の絵を描き、リージョンの設定も行って
実際触れられるのは丸い領域になっているのですが、背景に
元の四角形の大きさで灰色の部分が残ってしまいます。
(楕円の絵の後ろに灰色の四角があるような状態です)
これを消すと言うか最初から描かない方法はありますか?
0123デフォルトの名無しさん
NGNG描かないとその部分だけおもしろいことになる
0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNGこの場合ドキュメントの種類ごとにメニューが変わりますよね?
メニューの状態を動的に変化(例えばチェックを入れる)させたいのですが
現在セットされてるメニューの状態しか変化させられません
デフォルトで作られる「表示>ツールバーを表示」のチェックみたいに
メニューが切り替わっても状態の同期をとることはできないのでしょうか?
0126デフォルトの名無しさん
NGNGON_UPDATE_COMMAND_UI を調べろ
0127デフォルトの名無しさん
NGNGサンクス、解決しました
0128デフォルトの名無しさん
NGNGモードレスのダイアログとマルチスレッドのモーダルダイアログって何が違うの?
後ひとつ質問、CDialogのクラス名ってどこで決まるの?
::GetClassNameで取得してみると「#32770」なんて出るんだけど???
0129デフォルトの名無しさん
NGNG前半。
メッセージの処理のされ方が違う。
0130デフォルトの名無しさん
2005/04/03(日) 00:17:00下のコードはコンパイルできますが、
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:02CStringArrayにはoperator=がないから。
CArray::Addのソース見てみればわかるが、拡張した要素に引数を代入してる。
0132デフォルトの名無しさん
2005/04/03(日) 00:46:25ありがとうございました。
operator=をサポートしているオブジェクトしかCArrayは使えないんですね。
勉強のためにCArray::Addのソースを見ておこうと思います。
0133130
2005/04/03(日) 01:08:06operator=をサポートしていないオブジェクトの場合は
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>とかやった場合、CArrayのバッファが壊れたりしないか不安。
なんで?
0135130
2005/04/03(日) 01:37:10何となくですが、CArrayの配列を確保したあとに
配列要素のオブジェクトサイズが増えると
メモリをオーバーライトしそうな気がしたので。。
しかしそんな訳ないですね。
0136デフォルトの名無しさん
2005/04/03(日) 11:29:080137デフォルトの名無しさん
2005/04/03(日) 11:44:110138デフォルトの名無しさん
2005/04/03(日) 11:50:430139デフォルトの名無しさん
2005/04/03(日) 13:35:35class A
{
HOGE a, b;
HOGE* p;
public:
A(bool f) : p(f ? &a : &b) {}
};
なんてクラスだと、再確保されたとたんおかしくなる。
あとコピーコンストラクタも使ってないから要素を追加すると
デフォルトコンストラクタ→operator=となる。
0140デフォルトの名無しさん
2005/04/03(日) 14:24:02なんか、勉強するのがマジで嫌になってきた・・・
質問なんだけど、みんなクラスウイザードつかってクラス作ってるの?
今、Win32アプリケーション−空のプロジェクトから作ってるんだけど
マクロが使いにくくて辛い・・・
ウイザードを我慢して使う?
ウイザードを使わない?
ウイザードが吐いたコードを修正して使う?
どれが方針として正しいの?
0141デフォルトの名無しさん
2005/04/03(日) 15:18:03私は、MFCのクラスを継承するときだけクラスウィザードを使った。
後は普通にエディタで書くからねぇ。
0142デフォルトの名無しさん
2005/04/03(日) 19:49:38MFC入門の本はいろいろ出てますが、
お勧めや買っちゃいけないものはありますか?
CやC++の基本はわかってるつもりです。
0143デフォルトの名無しさん
2005/04/03(日) 20:44:410144デフォルトの名無しさん
2005/04/03(日) 20:53:31http://www.kumei.ne.jp/c_lang/indexmfc.html
0145デフォルトの名無しさん
2005/04/04(月) 09:16:33描かない事自体が出来ない感じです・・・DrawItemをすぐにreturnで返しても
灰色の四角が残っているような状態です。
>>124
描画処理の所ではクリップして転送してるのですがダメなんですよね・・・。
灰色の部分は最初から背景に描かれてるような感じです。
0146デフォルトの名無しさん
2005/04/04(月) 11:55:510147デフォルトの名無しさん
2005/04/04(月) 19:31:390148デフォルトの名無しさん
2005/04/05(火) 11:28:320149デフォルトの名無しさん
2005/04/05(火) 11:44:460150デフォルトの名無しさん
2005/04/05(火) 13:16:410151デフォルトの名無しさん
2005/04/05(火) 13:38:20インチキ臭い CMap など使わず、std::map 使え。
0152デフォルトの名無しさん
2005/04/05(火) 14:52:22なんででしょう。
0153デフォルトの名無しさん
2005/04/05(火) 15:48:32「うまく動きません」を説明するところから始めようか。
0154152
2005/04/05(火) 16:38:49そうですね。
まず、LoadBitmapsをオーバーライドしてファイルのビットマップを
開くようにしています。
で、LoadImageしたハンドルをそれぞれm_bitmap、m_bitmapSel、
m_bitmapFocus、m_bitmapDisabledにアタッチします。
この時に、ついでにm_bitmapに割り当てるビットマップを使って
リージョンを作成し、SetWindowRgnしています。
DrawItemでは、CBitmapButton::DrawItem(lpDrawItemStruct)をした
後に自分で文字乗せをしています。
この状態で走らせると、ボタンの押下とかでちゃんとリージョンが
効いている事が確認出来るのですが、表示の方はリージョンで切り
取られず、元の四角いビットマップ画像が出てしまいます。
画像の描画をリージョン内に止めるにはどうすればいいのでしょう。
0155デフォルトの名無しさん
2005/04/05(火) 17:09:33WS_CLIPSIBLINGS
0156デフォルトの名無しさん
2005/04/05(火) 17:14:12この前から何度も質問しているんだから、もう少し質問の仕方巧くなろうよ…
0157デフォルトの名無しさん
2005/04/05(火) 17:36:30期待する動作を得ることができました。
ありがとうございます。
>>156
質問、初めてなんですけどねw
確かに質問の仕方は悪かったですね。
以後気を付けるようにします。
0158デフォルトの名無しさん
2005/04/05(火) 21:21:08その入力補助みたいなことをやりたいのです。
エディットボックスの変更によってEN_CHANGEが送られてきたときに、
それがユーザによるものなのか、プログラム自身によるものなのかを見分けるには
どうするのが定番なのでしょうか?
0159デフォルトの名無しさん
2005/04/05(火) 21:26:44小規模板にある、MMO製作プロジェクトぉ
厨房こぃ!
0160158
2005/04/05(火) 21:30:18問題無ければこれで行こうと思ってるんですが。
0161デフォルトの名無しさん
2005/04/05(火) 22:52:020162デフォルトの名無しさん
2005/04/05(火) 23:42:39MSDNを見ようよ。
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:50CMapはインチキくさいの? std::mapはつかえないんだわ。
コンテナで、mapは、Dllの引数などにつかえないらしくってさ。
http://support.microsoft.com/default.aspx?scid=kb;JA;168958
0164デフォルトの名無しさん
2005/04/06(水) 16:00:280165デフォルトの名無しさん
2005/04/06(水) 16:07:16CString::Format()
0166デフォルトの名無しさん
2005/04/06(水) 16:07:38see CString::Format
0167デフォルトの名無しさん
2005/04/06(水) 16:21:37CString str;
str.Format("%d",i);
if(str=="100")
printf("OK\n");
else
printf("ゴルア\n");
0168デフォルトの名無しさん
2005/04/06(水) 16:53:150169デフォルトの名無しさん
2005/04/06(水) 18:01:25char 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:090171デフォルトの名無しさん
2005/04/06(水) 18:15:4520の根拠は?
0172デフォルトの名無しさん
2005/04/06(水) 18:21:07んなもん根拠ないでしょ。一例なだけで。
0173デフォルトの名無しさん
2005/04/06(水) 18:36:260174デフォルトの名無しさん
2005/04/06(水) 18:38:15収まるだろう。char a[4]とかだと数字の1000000は
文字列として格納出来ない
0175デフォルトの名無しさん
2005/04/06(水) 18:39:41GetCurrentDirectory
0176デフォルトの名無しさん
2005/04/06(水) 18:42:03それって、実行時のフォルダ変えられたら変わるんでないの?
0177デフォルトの名無しさん
2005/04/06(水) 18:49:25そりゃそうだ
0178デフォルトの名無しさん
2005/04/06(水) 20:20:120179デフォルトの名無しさん
2005/04/07(木) 00:09:330180デフォルトの名無しさん
2005/04/07(木) 10:21:07AppWizardすると巨大なファイル&コード郡が...
自分でWinMainして中の人にMFCクラスをnewさせた方が良いのかなぁ?
0181デフォルトの名無しさん
2005/04/07(木) 10:50:350182180
2005/04/07(木) 11:04:10で、CWinApp派生させて処理起動すんのか。
0183180
2005/04/07(木) 11:19:25ダイアログ単位のファイル/クラスを共有させたいんですが、
RCファイル1個に全ダイアログ入れなきゃならないんでしょうか?
0184180
2005/04/07(木) 11:25:19他はイジラナイ方が良いんだろうかね?
CWinAppに全処理入れたら、巨大な1クラスアプリになっちゃうし。
0185180
2005/04/07(木) 11:34:12アプリのrcファイルとダイアログと切り離し可能でつか?
0186デフォルトの名無しさん
2005/04/07(木) 12:11:490187ほれ
2005/04/07(木) 12:32:05#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;
}
0188180
2005/04/07(木) 13:02:02ダイアログ単位にクラスライブラリ化する方法も教えてキボンニュ
0189180
2005/04/07(木) 14:18:34とメンドクなぁい?
0190デフォルトの名無しさん
2005/04/07(木) 15:00:03それなら、どうあればいいと思うのだ?
つーか、最期のコンパイルエラーとは何だ。
0191180
2005/04/07(木) 15:18:40もちろんDocクラスは自作しますが、IDEに作って貰う必要はナサゲ。
0192180
2005/04/07(木) 15:54:300193180
2005/04/07(木) 16:15:02MFCって画面に弱くない?
0194デフォルトの名無しさん
2005/04/07(木) 16:19:58【XP/2000 VC++6.0】
0195デフォルトの名無しさん
2005/04/07(木) 16:21:57弱いのはあんたの頭。
0196180
2005/04/07(木) 16:28:060197180
2005/04/07(木) 17:03:44何のリンク情報が抜けてたんだろう?
0198デフォルトの名無しさん
2005/04/07(木) 18:17:040199デフォルトの名無しさん
2005/04/07(木) 23:39:00でもまんどくせ
0200デフォルトの名無しさん
2005/04/07(木) 23:44:060201デフォルトの名無しさん
2005/04/08(金) 02:26:11誰か教えてください。・゚・(ノд`)・゚・。
0202デフォルトの名無しさん
2005/04/08(金) 02:28:360203デフォルトの名無しさん
2005/04/08(金) 02:43:010204デフォルトの名無しさん
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日悩んでます。。。
0206205
2005/04/08(金) 14:38:57環境忘れてました。
・Win2000
・VC6
・Win32 Console Application
0207デフォルトの名無しさん
2005/04/08(金) 15:43:23stdafx.hの後にマクロ定義してもダメ。
プロジェクトの設定のマクロのところで定義するか
stdafx.h内でwindows.hやafx〜.hをincludeする前に定義する。
0208205
2005/04/08(金) 16:13:30返答ありがとうございます。
通りました。。。(;;
ありがとうございました。
順番でしたか、、、
こんなので悩むのは私だけでしょうが、解決したソースを記述しておきます。
[ 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:220210デフォルトの名無しさん
2005/04/08(金) 18:09:28今、MFCを使わないでコンソール用のプログラムを作ってる。
構造体の名前でCButtonとかCDialogといったMFCのクラスと同じ名前を使うと
構造体のメンバ補完の場面で自作構造体のメンバが候補に出てこないで
MFCのメンバが候補に出てくるんだが、これを正しい候補が出るようにするには
どうしたらいいんだ?
VC6です。
0211デフォルトの名無しさん
2005/04/08(金) 18:16:11C〜って名前にするのをやめればいい。
0212デフォルトの名無しさん
2005/04/08(金) 18:19:34ちょっとやってみたがちゃんと自分のクラスが表示されたぞ。
まぁインテリセンスがまともに機能しないのは仕様だから諦めるしかないんじゃね?
0213デフォルトの名無しさん
2005/04/09(土) 18:36:370214デフォルトの名無しさん
2005/04/09(土) 19:10:29See MSDN.
0215デフォルトの名無しさん
2005/04/09(土) 20:49:13public:
CModDlg *m_mod;
このようにデータメンバーを追加したのですが、この行で
error C2143: 構文エラー : ';' が '*' の前に必要です。
error C2501: 'CModDlg' : 識別名を宣言するのに、型が指定されていません。
error C2501: 'm_mod' : 識別名を宣言するのに、型が指定されていません。
と、エラーが出てしまいます。
原因分かる方いらっしゃらないでしょうか?
0216デフォルトの名無しさん
2005/04/09(土) 20:52:51>識別名を宣言するのに、型が指定されていません。
の通りなんだが。
0217デフォルトの名無しさん
2005/04/09(土) 21:23:41つ【#include "ModDlg.h"】
0219デフォルトの名無しさん
2005/04/10(日) 04:26:59ためしにやってみたけど
それで問題なく動くと思うけど?
マウス押してから離すまでの間にマウス動かしたりしてない?
もしくはおまいさんのマウスがおかしくなってて動かしてないのに
ぷるぷる動いてる状態になってるとか
0220デフォルトの名無しさん
2005/04/10(日) 10:19:580221204
2005/04/10(日) 18:59:58どうクリックしても、クリック位置までの選択になってしまいます。
仮にマウスが動いていたとしても、IEなんかの場合、
マウスをどう動かそうと全部選択になりますよね?
テスト用に簡単なソースと実行ファイルです。
試してみてもらえないでしょうか?
ttp://www.uplo.net/www/vip4916.zip
0222デフォルトの名無しさん
2005/04/10(日) 19:15:070223204
2005/04/10(日) 19:47:45とりあえず正攻法じゃ無いですよねコレ
0224デフォルトの名無しさん
2005/04/10(日) 21:39:36普通にクリックしても全部選択されたよ???
VC6, Windows XP SP2
0226デフォルトの名無しさん
2005/04/10(日) 22:30:23あなたと同じ環境だけど必ずでは無いけど確かになるね。
・・・と思ったらクリックした後にちょっとマウスカーソルが
動くとなるみたいだな。光学式のマウスとか使ってない?
0227デフォルトの名無しさん
2005/04/10(日) 22:31:360228204
2005/04/10(日) 23:39:33ズバリ光学式です。
少なくとも画面上ではカーソルは動いてないんですけどね。
むしろ上手く選択されない方がレアケース?
とはいえ、IEのアドレスバーの方はきちんと動作してますしねー
0229224
2005/04/10(日) 23:41:29WM_SETFOCUSとWM_LBUTTONUPの間に、どんなメッセージが来てるか、SPYで監視してみれば。
原因はよく分からないけど、WM_MOUSEMOVEが同時に送られているんだと思う。
当たり前だけど、左ボタンを押したまま、マウスを動かすと選択範囲がカーソルまでになる。
これはエディットボックスのデフォルトの仕様。
IEのURLボックスは、そうならないように別途処理しているはず。
ボタンが押されている間は、WM_MOUSEMOVEを無視するようにすれば、最初の問題も解決するのでは?
0230デフォルトの名無しさん
2005/04/10(日) 23:56:20あと言っておくけど
IEのバーはエディットボックスじゃなくコンボボックスだ
複数行じゃなくてもいいなら
コンボボックスにしてドロップダウンのサイズを0にして
タイプを標準にするっていうのはどうだろう?
正攻法ではないがこれで難なく望む動作が得られると思うが
0231204
2005/04/10(日) 23:58:37マウスがヘタレなんでしょうか?
WM_MOUSEMOVE無視で、めでたく全部選択されました。
どうもありがとうございました。>付き合って下さった方々
0233デフォルトの名無しさん
2005/04/11(月) 16:24:43実行時にダイアログにグループボックスを貼り付けるには、
どんなコードになるんでしょうか?
0234233
2005/04/11(月) 16:56:020235233
2005/04/11(月) 16:59:40教えてキボンニュ
0236デフォルトの名無しさん
2005/04/11(月) 17:09:44スマン
おまいさんの言いたいことがさっぱりわからん
0237233
2005/04/11(月) 17:13:57その部品をクラスにするじゃないですか?
その場合、どのリソースをクラスにするんでしょ?
グループボックスなのか、ダイアログのチャイルドなのか、
また、貼るときのコード教えて下さい。
0238デフォルトの名無しさん
2005/04/11(月) 17:18:190239233
2005/04/11(月) 17:19:43わかりますか?
0240デフォルトの名無しさん
2005/04/11(月) 17:37:57俺はそんなことしないなぁ
0241233
2005/04/11(月) 17:40:04MFCのクラス流儀でいけば、
ダイアログクラスに実行時生成したオブジェクトをペタペタ貼るのがふつー。
0242デフォルトの名無しさん
2005/04/11(月) 17:42:330243233
2005/04/11(月) 17:48:38┃ダイアログクラス
┣━━━━━━
┃
┗━━━━━━
┏━━━━━━
┃ダイアログの中身クラス
┗━━━━━━
実行時に、ダイアログが中身を生成して、
┏━━━━━━
┃ダイアログ
┣━━━━━━
┃┏━━━━━
┃┃中身
┃┗━━━━━
┗━━━━━━
メデタシ。
0244デフォルトの名無しさん
2005/04/11(月) 18:02:190245233
2005/04/11(月) 18:09:14ダイアログの中にダイアログを入れる、で良いのか?
0246デフォルトの名無しさん
2005/04/11(月) 18:25:41自己レスとかいらないから
0248デフォルトの名無しさん
2005/04/11(月) 18:56:04リソースエディタでダイアログ作って枠なし・CHILDにチェック入れて
クラスウィザードでCDialogと結びつけて
好きなだけCreateすればいいんじゃね?
0249233
2005/04/11(月) 19:01:24そのやり方でやります。
ところで、ダイアログと枠無しダイアログの位置あわせはどうやったら良いですか?
VCLだと、
ChildForm->Parent = Form1->PanelForPosition; //Form1のパネルの上にチャイルド
ChildForm->Align = alClient; //チャイルドはパネル一杯に描画
なんて書けたんですけど。
0250デフォルトの名無しさん
2005/04/11(月) 19:09:09どんな風に配置したいのか知らんが
GetClientRectとかMoveWindowとか駆使して自前で並べるとか
CSplitterWndとか
0251デフォルトの名無しさん
2005/04/11(月) 19:16:39親ダイアログの OnSize() で、自分で並べるしか。
CRect r;
GetClientRect(r);
子.MoveWindow(r); // クライアント領域いっぱいに
0252233
2005/04/11(月) 19:17:59並べた後は親に合わせてチャイルドが動いてくれるんですね。
ま、もし動かなかったら自分で動くコード入れれば良いか。
0253デフォルトの名無しさん
2005/04/11(月) 19:29:09>並べた後は親に合わせてチャイルドが動いてくれるんですね。
ぅおぃ!
「親ダイアログの OnSize() をオーバーライドして
>>251 のコード書かないとダメよ」って事スよ。
0254デフォルトの名無しさん
2005/04/11(月) 20:08:20の状態を取得したいのですが、わかりません。
ちなみにアクティブ状態ならジョイパッドを使用できる
状況にあります。
0255デフォルトの名無しさん
2005/04/11(月) 22:58:14Win32APIスレで聞いたほうがはやいんじゃ?
DirectInput使うのが早いとは思うけどね
0256デフォルトの名無しさん
2005/04/11(月) 22:59:25メインフレームのウィンドウプロシージャの中で
WM_HOTKEYを受け取りSetFocusしているのですが、
フォーカスが他のアプリにあるとき、自アプリに
フォーカスが移ってくれないんです。
自アプリにフォーカスを持たせるにはどうしたらいいんでしょうか?
0257デフォルトの名無しさん
2005/04/11(月) 23:14:38http://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:22DeleteAllItems()、及びCImageList のDeleteImageList() を
表示切替のたびに毎回コールしているのですが、
タスクマネージャのコミットチャージが増え続け、
操作を続けると数ギガ単位まで膨れ上がります。
このメモリをどうやったら解放できるようになるのでしょうか?
VC++6.0/Win2k MFCで作成しています。
0259258
2005/04/12(火) 14:40:01GDI+の Image の解放がNGだったようです。
シツレイシマシタ
0260デフォルトの名無しさん
2005/04/12(火) 15:44:18CWnd* hStatic = GetDlgItem(IDC_STATIC);
としていますが、NULLが帰ってきます。
どうしたら良いですか?
0261260
2005/04/12(火) 15:55:440262デフォルトの名無しさん
2005/04/12(火) 16:28:070263デフォルトの名無しさん
NGNGIDC_STATICの定義を見よ。
#define IDC_STATIC (-1)
なので、IDC_STATICのままではGetDlgItemもメンバ変数化もできない。
グループボックスのコントロールIDを適切に定義した値にしてやれば>>260-261の方法で
取得できる。
0264デフォルトの名無しさん
2005/04/12(火) 16:58:54IDC_STATICで同じなんですのよ。ですから、個別にメンバ変数とか
設定したい場合は、IDC_STATとか、別のIDにしてあげないと
いけないのですわ。
0265260
2005/04/12(火) 17:21:08うまく逝きました。有難うございました。
ところで、グループボックスのClientRectのRECT.TOPを0にしてますが、
相当上に余白がありますね。
このBottomを下のコントロールのTopにセットしてMoveWindowしてますが、
非常に重なります。
何かテクニックが要りますか?
0266デフォルトの名無しさん
2005/04/12(火) 17:23:33ClientRectはあくまでそのグループボックスのRECTであって
ダイアロルの中の位置ではないぞ?
0267260
2005/04/12(火) 18:07:59GetWindowRectだとデスクトップ座標だし。
0268デフォルトの名無しさん
2005/04/12(火) 18:15:31いくらなんでも甘えすぎ
そうやって一個躓くごとにここで質問してくのか?
それくらい自分で調べような
0269デフォルトの名無しさん
2005/04/12(火) 18:31:18ソウデスネ
>hStatic->GetWindowRect(&rStatic);
>ScreenToClient(&rStatic);
でウゴキマスタ
0270デフォルトの名無しさん
2005/04/13(水) 10:56:34急にMFCを使ったプログラミングを強いられる状況になってしまったのですが、
VBでいうところのApp.Pathと同等の結果はどうやれば得られますか?
0271デフォルトの名無しさん
2005/04/13(水) 11:15:200272270
2005/04/13(水) 11:37:57CWinAppのGetProfile系やWriteProfile系で使用するiniファイルの保存場所を
アプリケーションと同じフォルダに変更(デフォはWindowsフォルダ)したいので、
実行中のアプリケーションがあるフォルダのパスを取得したかったんです。
0273デフォルトの名無しさん
2005/04/13(水) 11:41:22MFC に関係なく、API 呼び出し。
GetModuleFileName
0274270
2005/04/13(水) 11:54:38てっきりどこかのクラスに同様の機能が潜んでるのかと思ってました。
GetModuleFileNameで無事取得できました。
ありがとうございました。
0275デフォルトの名無しさん
2005/04/13(水) 12:01:23押しても上から移動しません。
0276デフォルトの名無しさん
2005/04/13(水) 12:42:390277デフォルトの名無しさん
2005/04/13(水) 13:00:17スクロールバーの活かし方教えて下さいでつ。
0278デフォルトの名無しさん
2005/04/13(水) 13:02:200279デフォルトの名無しさん
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:050283デフォルトの名無しさん
2005/04/13(水) 17:19:46関数の追加がディセイブルになってる。
スクロール1個に1クラス追加してからイベント追加なのかなぁ?
0284デフォルトの名無しさん
2005/04/13(水) 18:25:05それのイベントハンドラを作ることは出来ました。
でも相変わらずスクロールは元に戻るし、CScrollBarに初期設定でも要るのかな?
0285デフォルトの名無しさん
2005/04/13(水) 18:38:260286デフォルトの名無しさん
2005/04/13(水) 18:52:400287デフォルトの名無しさん
2005/04/13(水) 18:57:290288デフォルトの名無しさん
2005/04/13(水) 19:11:29CDialogの領域をスクロールしたい、という目的を果たせれば良いんだが、
楽に出来ないものか。
0289デフォルトの名無しさん
2005/04/13(水) 19:13:38マウス移動で移動後マウスから離すと元に戻るというのデフォルトとして変杉。
そんなアプリ無いよ。
0290デフォルトの名無しさん
2005/04/13(水) 19:21:230291デフォルトの名無しさん
2005/04/13(水) 19:25:340292デフォルトの名無しさん
2005/04/13(水) 19:29:14::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
イベントハンドラを作ったけど、
このpScrollBarがNULLのみ、というのは何でだろう。
CDialogのプロパティでスクロールバー作って、イベントハンドラ足して、
というスタンダードな操作だと思うんだが。
0293デフォルトの名無しさん
2005/04/13(水) 19:54:210294デフォルトの名無しさん
2005/04/13(水) 20:09:13WinWord
0295デフォルトの名無しさん
2005/04/13(水) 20:10:00this->GetScrollBarCtrl(SB_VERT);
しましたが、NULLですね。
0296デフォルトの名無しさん
2005/04/13(水) 20:35:28SDI に FormView でも張れば良いと思うのは変かな・・・
0297デフォルトの名無しさん
2005/04/13(水) 22:28:090298デフォルトの名無しさん
2005/04/13(水) 23:07:120299デフォルトの名無しさん
2005/04/13(水) 23:52:15右クリックでも選択されるようにするにはどうすればいいのでしょうか?
素人考えながら、右クリックのイベントハンドラ(OnRButtonDown()だった
ような・・)を設けて、
SendMessage(WM_RButtonDown(だったような・・), 0, 0) と
メッセージを投げてもダメでした。(根本的に違うことやってますか?)
0300デフォルトの名無しさん
2005/04/14(木) 00:04:18右ボタンダウンを投げちゃダメだろ。
素直に選択メソッド呼んだら?
0301299
2005/04/14(木) 00:40:20すみません。右クリックのハンドラで投げた
メッセージはご指摘のとおりRButtonDownじゃなくて
LButtonDownだったのでした。
でもって、OnRButtonDown()でGetHotItem()で
カーソル位置のアイテムのインデックスを取得して
SetHotItem()したら、期待通りのことができました。
いただいたコメントのおかげです。どうもありがとうございました!
0302デフォルトの名無しさん
2005/04/14(木) 09:59:20コントロールがデフォで持ってるなら意識する必要がないけど。
0303デフォルトの名無しさん
2005/04/14(木) 10:56:140304デフォルトの名無しさん
2005/04/14(木) 11:08:16これを改行することって出来るのでしょうか?
CToolBarCtrlのSetDrawTextFlagsを使って、センターや、\tの展開なんかは出来るのですが、
\nで改行してくれないのです。
0305デフォルトの名無しさん
2005/04/14(木) 11:17:150306304
2005/04/14(木) 14:38:19済みません言葉が足りませんでした。
\r\nも試しています。
改行が許可されていない部分でのエスケープ文字は、
"・"とかゴミが残ると思っていたんですが、ツールバー上では
そんなゴミも残らず完全にスルーされている感じです。
何か他にコツ等ありましたら、お願いします。
0307デフォルトの名無しさん
2005/04/14(木) 15:59:370308デフォルトの名無しさん
2005/04/14(木) 16:23:44CDialog終了時に何かしなきゃならないんでしょうか?
といいますのは、VC++のデバッグ実行が終了しなくなって、
半フリーズな感じなんですが、終了処理とか開放を忘れてるのかなと思いまして。
0309デフォルトの名無しさん
2005/04/14(木) 17:06:070310デフォルトの名無しさん
2005/04/14(木) 17:26:29モードレスなら必要。
>>308
OnClose の中で DestroyWindow()。
0311デフォルトの名無しさん
2005/04/14(木) 17:48:190312デフォルトの名無しさん
2005/04/14(木) 18:58:59毎回リビルドしてまつ。
回避方法キボンユ
0313デフォルトの名無しさん
2005/04/14(木) 19:11:36ヘッダーファイルをいじらない。
0314デフォルトの名無しさん
2005/04/14(木) 19:31:340315デフォルトの名無しさん
2005/04/14(木) 22:22:560316デフォルトの名無しさん
2005/04/14(木) 23:41:58「コンパイル済みヘッダを使用しない」設定に。
0317デフォルトの名無しさん
2005/04/15(金) 08:41:04というか、コーディングがやたら中途半端じゃないでつか?
0318デフォルトの名無しさん
2005/04/15(金) 09:39:550319デフォルトの名無しさん
2005/04/15(金) 10:23:320320デフォルトの名無しさん
2005/04/15(金) 10:40:13キタネーレスでスレ汚すな。
0321デフォルトの名無しさん
2005/04/15(金) 10:49:140322デフォルトの名無しさん
2005/04/15(金) 10:51:49俺様用しおり
∧_∧
( ・∀・)< 一旦仕切り直し
−−−−−−−−−−−−−−−−−−−−−−−−−−
0323デフォルトの名無しさん
2005/04/15(金) 16:32:14古いソース組み込んだらエラーになります多。
どうしたら回避で期末か?
0324デフォルトの名無しさん
2005/04/15(金) 17:00:56CRichEditDocを定義しているファイルを探してインクルードする。
0325デフォルトの名無しさん
2005/04/15(金) 17:25:550326デフォルトの名無しさん
2005/04/15(金) 20:23:47現在TVS_SINGLEEXPANDのスタイルを設定して
展開されるノードを一つだけにしています。
しかし、Ctrlキーを押しながら左クリック
又はキーボードの矢印キーを使った時に
複数ノードが展開されてしまいます。
複数のノードを展開しないようにしたいのですが
誰かいい方法を知らないでしょうか?
教えて、エロイ人。
0327デフォルトの名無しさん
2005/04/16(土) 00:06:080328デフォルトの名無しさん
2005/04/16(土) 22:25:21メッセージボックスのモーダルループにはいっているとして、
外部から、このようなモーダルループの状態かどうかを
判断することってできますか?
どなたか、、
0329デフォルトの名無しさん
2005/04/17(日) 01:35:26どうにかやればできそうな気がするが、果てしなく面倒なことになりそう。
0330デフォルトの名無しさん
2005/04/17(日) 10:15:43pとあるモードレスダイアログ->IsWindowEnabled()
でいいんじゃない?
ダイアログを意図的にEnableWindow(FALSE)してる場合と見分けがつかないけど、
そんなことあんまりしないだろう。
0331デフォルトの名無しさん
2005/04/17(日) 22:43:250332デフォルトの名無しさん
2005/04/17(日) 23:06:11これに失敗してダイアログが表示されなくなりマンモス。
詳しくはMSDNに出てます。
AfxなんとかというのをInitInstanceかどこかに加えれば
良かった。
0333デフォルトの名無しさん
2005/04/17(日) 23:19:02ありがとうございマンンコモス
0334デフォルトの名無しさん
2005/04/17(日) 23:27:25ヒント的なものでも良いので。
0335デフォルトの名無しさん
2005/04/18(月) 09:35:42実際の解決コードきぼんピー
0336デフォルトの名無しさん
2005/04/18(月) 11:50:17出てきたものからそれらしいものを一個選んで書くだけ
解決コードにもならんレベルのものだぞ
0337デフォルトの名無しさん
2005/04/18(月) 13:15:58コードを足すなんてmfcって変だなー。
ふつーのGUIライブラリならペタペタ貼るだけちゃうんかと。
0338デフォルトの名無しさん
2005/04/18(月) 13:17:190339デフォルトの名無しさん
2005/04/18(月) 13:38:340340デフォルトの名無しさん
2005/04/18(月) 14:53:240341デフォルトの名無しさん
2005/04/18(月) 15:00:58それらをうまくラップで隠せるのがクラスライブラリ。
さらに >>340 は、それらのふつーの感覚や考える頭が破壊されて不憫だ。
0342デフォルトの名無しさん
2005/04/18(月) 16:10:31だがそれはそれとして >>337 は VB でもやっとけ。
0343デフォルトの名無しさん
2005/04/18(月) 16:17:33ttp://pc8.2ch.net/test/read.cgi/pcnews/1110896083/
0344デフォルトの名無しさん
2005/04/18(月) 16:25:33俺の質問に答えてくれよぅ
とりあえず問題ありなリッチテキストコントロールは使わない。
もし使う場面が来たら自分でラップ出来ますのでお構いなく。
ってか今からならM$はMFCでラップ出来るはず
時の流れ(による問題)を調べロッテ
0345デフォルトの名無しさん
2005/04/18(月) 16:28:350346デフォルトの名無しさん
2005/04/18(月) 18:47:18MFCがおかしいんじゃなくて
この程度が自分で調べられないのがおかしい
0347デフォルトの名無しさん
2005/04/18(月) 22:14:43どうすればいい?unsigned long型のを変換できるライブラリは
見つけたんだけど・・・。
0348デフォルトの名無しさん
2005/04/18(月) 22:30:190349デフォルトの名無しさん
2005/04/18(月) 22:43:47no
cruntime
kannsuu
de
dekiruyo
0350デフォルトの名無しさん
2005/04/18(月) 23:18:13プロセスごとのコンテキスト見て RICHED32.DLL ロードするだけの処理を
アプリケーションから態々呼び出さなきゃいけないなんてのは
設計の失敗としか思えないけどな。
0351デフォルトの名無しさん
2005/04/19(火) 00:08:310352デフォルトの名無しさん
2005/04/19(火) 08:23:21MFC のソース嫁。
0353デフォルトの名無しさん
2005/04/19(火) 12:18:30COM で MultiLanguage オブジェクト(CLSID_CMultiLanguage ) 作って、
IMultiLanguage を QueryInterface で取得して、
IMultiLanguage::ConvertString で変換する。
0354デフォルトの名無しさん
2005/04/20(水) 03:06:01OnCmdMsgで処理しているのですが、選択した項目が2回連続で呼ばれてしまうです
原因、対処方法教えてください
よろしくおねがいします
0355デフォルトの名無しさん
2005/04/20(水) 03:13:49対処法:一回だけ呼ばれるように書き直す。
0356デフォルトの名無しさん
2005/04/20(水) 10:05:460357デフォルトの名無しさん
2005/04/20(水) 10:52:040358357
2005/04/20(水) 10:56:33これはMFCの標準関数でつか?
0359デフォルトの名無しさん
2005/04/20(水) 11:12:31どこをどうみても同じものにしか見えないが。
CRichEditViewとCRichEditCtrlでは?
>>358
CRichEditViewのメンバ関数
0360デフォルトの名無しさん
2005/04/20(水) 11:17:46MFC超スペシャル初心者なんですが、
IMPLEMENT_DYNCREATE(C???View, CRichEditView)
というステートメントは何なんでしょう。
唐突にViewとCRichEditViewが出てきますが、
これはMFCのフレームワークであり、
ふーん、ViewとRichEditはデフォルトで定義されるんだな、
と読んどけば良いのかな。
0361360
2005/04/20(水) 11:20:46別のプロジェクトでコンパイル通すために、
CRichEditViewを用意しようと思いますが、
CDialogのリソースに「リッチ エディット」を貼っとけば良いのですか?
0362デフォルトの名無しさん
2005/04/20(水) 11:23:200363デフォルトの名無しさん
2005/04/20(水) 11:38:14IMPLEMENT_DYNCREATEは単なるマクロだが
ちゃんと理解したければMFCのソースを読む必要があるよ
>>361
ダイアログで使いたければ貼っとけばいいけど
それはViewクラスではないよ
ヘルプ(MSDNライブラリ)インストールしてない?
0364360
2005/04/20(水) 11:39:52>それはViewクラスではないよ
では、CRichEditViewをnewして、CDialogに貼れば良いですか?
>ヘルプ(MSDNライブラリ)インストールしてない?
了解でつ。今からインストールしますです。
0365デフォルトの名無しさん
2005/04/20(水) 12:04:240366デフォルトの名無しさん
2005/04/20(水) 13:16:070367デフォルトの名無しさん
2005/04/20(水) 13:46:04∧_∧
( ・∀・)< CRichEditViewをnewして、CDialogに貼るコード教えてキボン
−−−−−−−−−−−−−−−−−−−−−−−−−−
0368367
2005/04/20(水) 13:54:40ダイアログにリッチエディットを貼っておけば、
CRichEditCtrl *cre=(CRichEditCtrl *)GetDlgItem(IDC_RICHEDIT1);
で、クラスとして使えますか?
0369デフォルトの名無しさん
2005/04/20(水) 14:48:21まさか文字入出力メソッドが無くてコントロールにSendMessageしなきゃならないんて筈はないよね?
0370デフォルトの名無しさん
2005/04/20(水) 14:59:260371デフォルトの名無しさん
2005/04/20(水) 15:00:270372デフォルトの名無しさん
2005/04/20(水) 15:03:01SetWindowText(value)出来ます田。
でも、追記はできないんでつね?
0373デフォルトの名無しさん
2005/04/20(水) 15:14:08CString foo = "bar";
const char * p = static_cast<const char *>(foo);
0374デフォルトの名無しさん
2005/04/20(水) 15:47:220375デフォルトの名無しさん
2005/04/20(水) 15:53:13>372だけ見ても、何を知りたいのか判らないのだが。
0376372
2005/04/20(水) 16:30:14で、文字を設定することは出来ましたが、
次に、
RichEditCtrl->SetWindowText("bbb")
とすると、
前の文字が消えてしまいます。
どうか追記の方法教えて頂けないでしょうか?
0377デフォルトの名無しさん
2005/04/20(水) 16:40:22キーボードの b のキーを3回押してみ
0378デフォルトの名無しさん
2005/04/20(水) 16:52:47GetWindowText()で取得して、自前で追加、SetWindowText()で設定。
或いは、SetSel()で末尾を選択、ReplaceSel()で置換。
つーか、MSDNをちっとは読めや。
0379デフォルトの名無しさん
2005/04/20(水) 16:55:280380デフォルトの名無しさん
2005/04/20(水) 17:19:02ずっとここで逐一質問し続ける気だろうか…
0381デフォルトの名無しさん
2005/04/20(水) 17:22:130382デフォルトの名無しさん
2005/04/20(水) 17:25:270383デフォルトの名無しさん
2005/04/20(水) 17:37:02つーか382は不気味なレスやめれ。
0384デフォルトの名無しさん
2005/04/20(水) 22:12:050385デフォルトの名無しさん
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:36CBrush 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:320391デフォルトの名無しさん
2005/04/22(金) 00:51:07右側には文字列を入力できるコントロールはどう作ればいいんでしょうか?
0392デフォルトの名無しさん
2005/04/22(金) 00:52:010393デフォルトの名無しさん
2005/04/22(金) 01:47:39文字列を入力出来るようにエディットコントロールを
サイズ合わせてぴったり重ね、
別のところをクリックしたら入力された文字列をリストに転送して
エディットコントロールを隠す。
みたいな感じ
0394デフォルトの名無しさん
2005/04/22(金) 06:57:37#但し、その場合プロパティのようにコンボボックスにはできないけれど。
0395389
2005/04/22(金) 16:39:10nullbrush.CreateStockObject(NULL_BRUSH);
だ.
で,これを初期化の時に実現するにはどうしたらいいんですか?
0396デフォルトの名無しさん
2005/04/22(金) 16:58:07ない。
どうしてもやりたかったら、CBrushから派生させたクラスを作って好きにすればいい。
0397デフォルトの名無しさん
2005/04/24(日) 11:40:14具体的にはキー入力を監視したいのです。
0398デフォルトの名無しさん
2005/04/24(日) 14:26:08フック
0399デフォルトの名無しさん
2005/04/24(日) 16:05:50もったテキストの上に来たことを知るには、イベントマスク EM_SETEVENTMASK に
ENM_LINK を設定しておけば、EN_LINK メッセージとして通知してもらえると
思いますが、そのマウスポインタが CFE_LINK 属性のテキストの上から
外れたことはどのようにすれば知ることが出来るのでしょうか・・?
0400デフォルトの名無しさん
2005/04/24(日) 17:33:13ありがとうございます。参考になりました
0401デフォルトの名無しさん
2005/04/25(月) 13:54:08タイマークラスみたいなのは使えるのでしょうか?
0402デフォルトの名無しさん
2005/04/25(月) 14:36:060403デフォルトの名無しさん
2005/04/25(月) 15:22:53ウインドウのタイマーイベント
0404デフォルトの名無しさん
2005/04/25(月) 16:11:44画面無い場合なら、ソースコードでTTimerをnewしたり、派生したり、
ふつーに使えるじゃん。
0405デフォルトの名無しさん
2005/04/25(月) 17:07:320406デフォルトの名無しさん
2005/04/25(月) 17:39:49WM_TIMERベースの方がいいと思う。
0407デフォルトの名無しさん
2005/04/25(月) 19:00:04どのイベントかメソッドでBitBltしてやれば良いか、
エライ人教えて下さい。
0408デフォルトの名無しさん
2005/04/25(月) 19:03:11…じゃなんで MFC 使うかな、ってのは置いといて、
>>401
Win2000 以降限定なら CreateWaitableTimer っちゅう API 使う手も。
0409デフォルトの名無しさん
2005/04/25(月) 20:09:14WM_PAINTかOnPaint
0410デフォルトの名無しさん
2005/04/25(月) 23:28:56ってのは、どんな原因が考えられるかな?
0411デフォルトの名無しさん
2005/04/25(月) 23:37:45バグがある
0412デフォルトの名無しさん
2005/04/26(火) 00:06:010413デフォルトの名無しさん
2005/04/26(火) 01:56:220414デフォルトの名無しさん
2005/04/26(火) 10:02:580415デフォルトの名無しさん
2005/04/26(火) 13:08:55サンクスでつ。クラスウィザードで、WM_PAINT→OnPaint内で処理入れたらおkでした。
で、さらにWM_PAINTを発生させるメソッドなんかありますでしょうか?
まさかメッセージでWM_PAINT送るなんてしたら、作り方変だし。
0416デフォルトの名無しさん
2005/04/26(火) 13:11:590417デフォルトの名無しさん
2005/04/26(火) 14:10:17CloseWindow()するとアイコンになっちゃうし、
DestroyWindow()するとエラー画面でるし、
結構難しいですね。
0418デフォルトの名無しさん
2005/04/26(火) 14:37:570419デフォルトの名無しさん
2005/04/26(火) 15:18:40PostQuitMessage()ではどうだろう。
0420417
2005/04/26(火) 15:25:58MFCでの書き方お願いします。
0421デフォルトの名無しさん
2005/04/26(火) 15:29:440422デフォルトの名無しさん
2005/04/26(火) 17:29:23タイマー壊れたのかな。
0423デフォルトの名無しさん
2005/04/26(火) 18:51:310424デフォルトの名無しさん
2005/04/26(火) 19:03:370425デフォルトの名無しさん
2005/04/26(火) 19:25:52ということがMSDNに書いてあるではないか。
0426デフォルトの名無しさん
2005/04/26(火) 21:43:23〜〜
temp.SetAt(j , '\x20');
この処理でランタイムエラーが出るんだけど、何がいけないの?
0427426
2005/04/26(火) 21:44:060428デフォルトの名無しさん
2005/04/26(火) 21:49:050429デフォルトの名無しさん
2005/04/27(水) 09:39:36タイマーイベントの溜まり杉じゃないかと。
ブレークポイント設定してない?
0430デフォルトの名無しさん
2005/04/27(水) 13:27:36jが文字列の長さ以上なんだと思う。
0431デフォルトの名無しさん
2005/04/27(水) 17:44:59デバックバージョンは文字列の長さチェックしてるけど
リリースバージョンではチェックしてないとかだった気がする
0432デフォルトの名無しさん
2005/04/27(水) 17:45:020434デフォルトの名無しさん
2005/04/28(木) 01:45:440435デフォルトの名無しさん
2005/04/28(木) 02:07:290436デフォルトの名無しさん
2005/05/01(日) 02:26:06ClassWizardのオートメーションにラッパクラスを作ってもらい、オブジェクト宣言後に
なんか必要ぽいからCreateDispatchし、何とかメソッドが実行できた、というのが現状です。そこで・・・
(1) 明示的なReleaseDispatchも必要か?
(2) new, delete も併用すべきなのか?
(3) 「VCによるクライアント作製」に重きを置いた、良いCOM文献は無いか?
の3点で悩んでいる次第です。(3)に関しては、「COMとは」「COMコンポーネントを作る」
みたいな解説は幾つか見つけたのですが、「VCでクライアント作ろうぜ」てな感じの詳しい解説は
見つけられなかったのです。かろうじてMSDNのサンプルくらいでしょうか。
この辺りの事情に詳しい方、御教示願えますでしょうか?
0437デフォルトの名無しさん
2005/05/02(月) 11:45:420438デフォルトの名無しさん
2005/05/02(月) 12:36:49CPaintDCはCDCから派生してるんだよ。
0440デフォルトの名無しさん
2005/05/02(月) 13:46:561.COleDispatchDriverのクラス定義とデストラクタ見れ、明示的なReleaseはたぶんクラス破棄しないでインターフェイスだけ取り替えたい時だけっぽい
2.COle(ry作る時だけでいいんじゃね?
3.そんなのはしらんが、ActiveX関連なんかでも探してみれ
ちなみに俺はたいして詳しくない
0441デフォルトの名無しさん
2005/05/02(月) 16:44:08それをリストに追加するのは可能ですか
できるならどのようにすればよい?
教えてください
0442デフォルトの名無しさん
2005/05/02(月) 16:45:45リストに追加するということ?
0443441
2005/05/02(月) 16:49:10コンボボックスの右のタグ(?)が伸びてる状態で
一番上のエディット部分に入力・・・
たぶんそうだと思います
0444デフォルトの名無しさん
2005/05/02(月) 16:59:020445441
2005/05/02(月) 17:09:18キリ番おめです(ぉ
トリガっていうと「追加」ボタンとかを付けて押されたら
エディットに入った文字列を読んでAddString
って感じでしょうか?
0446デフォルトの名無しさん
2005/05/02(月) 17:30:40ブラウザのアドレス入力なんかはこの形式だよね。
0447デフォルトの名無しさん
2005/05/02(月) 17:33:24そのときついでに
0448デフォルトの名無しさん
2005/05/02(月) 17:40:00イエース
0449441
2005/05/02(月) 17:43:30>でなければEnterキーが押されたら追加とか。
>ブラウザのアドレス入力なんかはこの形式だよね。
む、確かにそうですね
Enterで追加となるとどうすればよいですかね
0450441
2005/05/02(月) 18:37:15お早い対応ありがとうございました<(_ _)>
0451デフォルトの名無しさん
2005/05/02(月) 22:26:270452デフォルトの名無しさん
2005/05/02(月) 23:05:30CString の文字列を数値に変換したいのですが、
なにかいい方法はありますか?
CString str = "13.2345";
この文字列をlong型などに変換して数値データとして扱いたいのです。
0453デフォルトの名無しさん
2005/05/02(月) 23:24:15atol
0454デフォルトの名無しさん
2005/05/02(月) 23:25:24atof,atoiとかは?
0455デフォルトの名無しさん
2005/05/02(月) 23:29:31CStringからcharへと変換するのでしょうか?
0456デフォルトの名無しさん
2005/05/02(月) 23:38:47LPCTSTRにキャスト
atol((LPCTSTR)str)
0457デフォルトの名無しさん
2005/05/02(月) 23:44:27strtoul
StrToInt
0458デフォルトの名無しさん
2005/05/03(火) 00:02:58const char * csp = atol((LPCSTR)str);
そしてTRACE("%lf\n",csp);で
0.000000
と表示されます。なぜでしょうか?
0459デフォルトの名無しさん
2005/05/03(火) 00:07:24long x= atol((LPCSTR)str);
TRACE("%lf\n",x);
0460デフォルトの名無しさん
2005/05/03(火) 00:17:34str = "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:220462デフォルトの名無しさん
2005/05/03(火) 00:39:59・使うなら、_tstol
0463デフォルトの名無しさん
2005/05/03(火) 00:47:180464デフォルトの名無しさん
2005/05/03(火) 00:59:54なんとかうまくいきました。お騒がせしました。
0465デフォルトの名無しさん
2005/05/03(火) 01:09:290466デフォルトの名無しさん
2005/05/03(火) 08:09:26#include <tchar.h>
>>464
なんだかatolの戻り値をdouble型の変数で受けていそうだ。
0467デフォルトの名無しさん
2005/05/06(金) 09:36:050468デフォルトの名無しさん
2005/05/06(金) 11:45:43CMenu のインスタンス作って
CMenu::LoadMenu() でリソース読んで
マウスの右ボタン押されたら
CMenu::TrackPopupMenu() で表示。
0469デフォルトの名無しさん
2005/05/07(土) 01:00:42ツールチップを表示するのはどうやっているのでしょうか。
イメージとしては、Visual Studio のソース・エディタの
なかで、任意の文字列にマウス・カーソルをあてると、
変数の型とか関数の引数とかがツールチップとして出てくる
アレを想定しているのですが。。
ひとつひとつのツールチップ表示対象位置に AddTool() して
いる・・?んでしょうか?
0470デフォルトの名無しさん
2005/05/07(土) 01:12:39うぇ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よくわからんが、TrackPopupMenuの前にWM_CANCELMODEでも
Postしてみたらどうだろう。
0473471
2005/05/09(月) 16:04:06だめでした
どうやら最初の
SetForegroundWindowが悪さをしているようなんですが
これを消すと、OSのタスクメニューがでないかわりに、アプリのメニューが
消えない現象がおこります。
0474デフォルトの名無しさん
2005/05/09(月) 17:58:20{
void close();
}
だとして、
そのCMyDialogのcloseメソッドからCMyDialogフォームを閉じたいときは、
どう書けばよいでつか?
0475デフォルトの名無しさん
2005/05/09(月) 18:53:22モーダルかモードレスかで変わる。
0476474
2005/05/09(月) 19:58:210477デフォルトの名無しさん
2005/05/09(月) 20:29:16EndDialog
0478デフォルトの名無しさん
2005/05/09(月) 21:52:52いいんですか?deleteしなくていいんですか?
0479デフォルトの名無しさん
2005/05/09(月) 22:24:41モーダルの場合大抵
CMyDialog dlg;
if( dlg.DoModal()==IDOK ){ ... }
みたいにスタック上に割り当てて使う
0480デフォルトの名無しさん
2005/05/09(月) 22:29:210481479
2005/05/09(月) 22:38:54>>479はモーダルの場合
モードレスダイアログでdeleteを呼ぶべきかどうかは作成の仕方による。
new CMyDialog() を使っている場合に対してdeleteが必要
0482デフォルトの名無しさん
2005/05/10(火) 18:17:500483デフォルトの名無しさん
2005/05/10(火) 18:48:46簡単には説明できないが今ならもっといい方法があるかも
0484デフォルトの名無しさん
2005/05/10(火) 18:55:360485デフォルトの名無しさん
2005/05/11(水) 00:16:54使っていますが、boldにしても固定幅がキープされる素敵な方法は
ないでしょうか。当たり前ですが、boldにするとその分微妙にズレて
しまうのです。orz
0486471
2005/05/11(水) 04:29:32解決できません。
ご教授よろしくおねがいします
0487デフォルトの名無しさん
2005/05/11(水) 04:46:25MS製品の動作を調べてみると、押した瞬間でなく離した瞬間にメニュー表示してる模様。
WM_*BUTTONDOWNの直後は
SetActiveWindow(hWnd);
のみ
WM_*BUTTONUPの方で
TrackPopupMenu
メニューを表示したらよいと思われ.
0488デフォルトの名無しさん
2005/05/11(水) 04:57:47こんな時間にレスするなんてよほど暇で絶望的だな
0489デフォルトの名無しさん
2005/05/11(水) 09:26:32フォントで回転を指定しても、階段状に表示されるだけでフォント自体は回転されないんですが…。
0490デフォルトの名無しさん
2005/05/11(水) 10:16:50取り敢えずで良いならOnPaintで枠を描くって手もある。
0491デフォルトの名無しさん
2005/05/11(水) 11:13:55user.dllの関数にそんな描画を期待するなよ。
TextOut系でやるべし。
0492デフォルトの名無しさん
2005/05/11(水) 11:34:52そうすると、クリップ処理とか自分でやれってことですかねぇ?
改行とか面倒臭そう…。
まぁ、出来ないのであれば仕方ないですけど。
0493471
2005/05/11(水) 14:15:36あなたは髪ですね
無事解決しました ありがとうございます!
0494デフォルトの名無しさん
2005/05/12(木) 09:44:21モードレスダイアログを作るにはどうすればよいんですか?
0495デフォルトの名無しさん
2005/05/12(木) 11:37:230496494
2005/05/12(木) 13:09:11ありがとうございます
ShowWindow()をやってないのですが表示できたのは
ダイアログプロパティで可視にチェックを入れたから、であってますかね?
0498デフォルトの名無しさん
2005/05/12(木) 20:03:35ご教授お願いします。
0499デフォルトの名無しさん
2005/05/12(木) 21:29:450500デフォルトの名無しさん
2005/05/12(木) 23:26:48Ctrl+A(全て選択)が出来ません。
Ctrl+C(コピー)やCtrl+V(ペースト)は出来ています。
また右クリックでコンテキストメニューからの「すべて選択」は機能します。
Ctrl+Aを機能させる方法を教えてください。
0501デフォルトの名無しさん
2005/05/13(金) 00:20:35自分でキーイベント拾って処理。
0502デフォルトの名無しさん
2005/05/13(金) 05:58:310503デフォルトの名無しさん
2005/05/13(金) 13:47:00普通にボタンを押しただけではループが終わるまでボタンのクリックが発生しません。
VBでいうところのDoEventsみたいな処理はMFCではどうしたらいいでしょうか?
0504デフォルトの名無しさん
2005/05/13(金) 13:52:290505503
2005/05/13(金) 14:12:11敷居が高そうで勉強してなかったんだけど、
いい機会なんでちょっと調べてみます。
ありがとうございました。
0506デフォルトの名無しさん
NGNGMSDNで「アイドル ループ処理」を検索。
最も単純なのは、「時間のかかる処理」の最中にメッセージループを埋め込む。
0507デフォルトの名無しさん
2005/05/13(金) 16:13:38for (MSG msg; PeekMessage(& msg, NULL, 0, 0, PM_NOREMOVE); AfxGetThread()->PumpMessage());
0508デフォルトの名無しさん
NGNGMSDNのサンプルでは、PumpMessage()の戻り値の評価と、ループ終了後に
CMyApp->OnIdle()の明示的な呼び出しがある。
OnIdleを呼ばないと、コマンドインターフェースの更新が行われない気がする。
0509デフォルトの名無しさん
2005/05/15(日) 10:33:00COM/ActiveX以外に何かあります?
0510デフォルトの名無しさん
2005/05/16(月) 09:18:13確かコンポーネントの追加かなんか(COMオブジェクトを追加する奴)で、
他プロジェクトからクラス単位でコピーを追加できるので、GUI部品を
CButtonとかCStatic とか適当ななもののサブクラスとして作成しておけば、
ダイアログエディタでCStaticとかを張って、
ウィザードでそのコントロールに当該のクラスの変数を追加、
ってな手順で再利用できます。
この場合そのクラス独自の初期化 OnSubclass あたりでやることになる。
0511デフォルトの名無しさん
2005/05/16(月) 18:59:10どうもです。
コンポーネント ギャラリ って機能でしょうか。
Class Viewでのクラスの右クリックから「ギャラリへ追加」すると
クラス単位で部品化してくれるようですね。
ところでデフォルトで用意されてるコンポーネントは、
挿入時にダイアログが表示されて、いくつか設定が可能だったりしますが、
自前のクラスではそういう事はできないのでしょうか。
0512デフォルトの名無しさん
2005/05/16(月) 21:11:41ごめん。
0513デフォルトの名無しさん
2005/05/16(月) 22:40:33二つのCDialog?.Create( CDialog?::IDD, 0 )で作ったモードレスダイアログA,Bがあるとして、
Aで最前面にすると、取りあえず最前面になります。
そして、Bで最前面にすると、両方最前面になります
で、問題はここからなんですが、
Bの最前面を解除すると、勝手にAの最前面も解けるんです。
何故でしょーか・・・
Spy++で見たところ、オーナーウィンドウが有るのが怪しいと思うのですが、
オーナーウィンドウ無しで作る方法が分からない…
0514513
2005/05/16(月) 23:20:360515デフォルトの名無しさん
2005/05/17(火) 16:29:35エクスプローラーみたいにウィンドウ全体にリストコントロールが
表示されるようにするにはどうすればいいのですか?
コントロールだからリソースにダイアログを作ってリストビューを貼り付けるのですか?
0516デフォルトの名無しさん
2005/05/17(火) 16:45:08View を ListViewにすればいいんじゃない?
0517515
2005/05/17(火) 17:18:12が、どこでリストビューコントロールを作ればいいのかわかりません
申し訳ないですが教えてください
0518デフォルトの名無しさん
2005/05/17(火) 17:52:15ListViewならもう貼ってあるんじゃない?
GetListCtrlつかって操作できるよ。
手動でやりたいなら、CWndのメンバーに、CListCtrlを
置いて、OnCreate 内でCreateすればいい。
大きさは適当でいいよ。
そして、OnSize 内で、MoveWindowかSetWindowPosで
クライアント領域いっぱいにリサイズする。
0519デフォルトの名無しさん
2005/05/17(火) 18:07:50クラスのメンバ変数に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クラスのメンバ変数に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:090522デフォルトの名無しさん
2005/05/17(火) 20:28:140524デフォルトの名無しさん
2005/05/18(水) 10:02:32>ビルド : 警告 : ビルドに失敗しました (またはビルドの方法がわかりません) '〜\tabstrip.cpp'
みたいな、エラーの消し方教えて下さい。
0525デフォルトの名無しさん
2005/05/18(水) 10:05:370526デフォルトの名無しさん
2005/05/18(水) 12:37:59MoveWindowで(0,0)に移動しようとすると2画面目に行ってしまいます。
(1,1)ですと1画面目に移動するのですが…。
これってやりかたが悪いんでしょうか。
ちなみに、SXGAで(1280,0)とすると、正しく2画面目に表示されるんですが。
うまいこと(0,0)に移動させる方法はないですか?
0527デフォルトの名無しさん
2005/05/18(水) 14:10:12よくわからんのだが、、、
こっちで試した限りじゃ、0,0でプライマリの左上にちゃんといくが・・・
0528デフォルトの名無しさん
2005/05/18(水) 14:36:020529デフォルトの名無しさん
2005/05/18(水) 18:30:32ドライバのバグって前提で考えると、
SetWindowPos使ってみるとか、直前に(1,1)に移動してからやってみるとか。
0530>487
2005/05/19(木) 19:55:03ポップアップメニューが出るときに、
SetForegroundWindowしてるために、画面が最前面に出てきます。
これを防ぐにはどうしたらいいんでしょう?
0531デフォルトの名無しさん
2005/05/19(木) 20:24:07SetForegroundWindowしない
0532デフォルトの名無しさん
2005/05/20(金) 13:08:38こちらでやっているのは、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:430534デフォルトの名無しさん
2005/05/20(金) 13:44:35他の人には関係ない話題だし
0535デフォルトの名無しさん
2005/05/20(金) 15:57:44しかもビデオディスプレイ付属のドライバの
専用ユーティリティのオプション設定な気がする
0536532
2005/05/20(金) 19:14:41もし良かったら誘導お願いします。<すれ違い
ちなみに、
Intel845G+MATROX G400の2画面
MATROX G400の2画面
MATROX G450の2画面
で同様の動きをするので、ビデオドライバーとは関係ないのかなぁ?って気が
するんですけどね…。
一応、付属CDのドライバとダウンロードした最新ドライバも使ってみました。
0537デフォルトの名無しさん
2005/05/20(金) 19:35:170538530
2005/05/20(金) 20:17:11いや、SetForegroundWindowしないとポップアップが消えないんですけど。
SetForegroundWindowはポップアップを消すために必要なのかと。
0539デフォルトの名無しさん
2005/05/20(金) 21:19:22そして別のやつを見えるように出しとけ
0540デフォルトの名無しさん
2005/05/20(金) 21:36:330541デフォルトの名無しさん
2005/05/21(土) 01:30:53CListView
CTreeView
CScrollView
の3つはCViewと何が違うんでしょうか・・・?
0542デフォルトの名無しさん
2005/05/21(土) 03:25:020543デフォルトの名無しさん
2005/05/21(土) 09:10:50MSDNに書いてある
それでわからないなら本買え
0544デフォルトの名無しさん
2005/05/21(土) 19:34:24マイクロソフト社(US/JP)のダウンロードセンターには置いてないんですか?
いちおう検索かけてみたのですが見つかりませんでした。
VS2003 で作ったソフトを配布したのですが、
スタティックリンクでビルドしなかったので、
ユーザー環境で起動不能が続出し、集中砲火を浴びてしまいました。
( 配布してから気づいた... )
0545デフォルトの名無しさん
2005/05/21(土) 19:50:22自分で配布したら?
0546デフォルトの名無しさん
2005/05/21(土) 20:02:56うーむ、たしかにそれはそうなのですが。
別に、配布手段が無いとか、配布コストがかかるとか、
インストーラ作るのがめんどくさいとか、
そういう問題は、まったくありません。
ただ、MFCのようなライブラリは、
マイクロソフトから手にいれてもらうと、
ユーザーさん達が「ちょっとだけ安心」かな、
と、思ったのですよ。
リビルドしようかな,,,
0547デフォルトの名無しさん
2005/05/21(土) 20:08:09VC6とかのときは、普通に MFC42.dll があるから、
ダイナミックリンクでビルドしておりましたが、
VS2002 とか VS2003 の VC だと、
スタティックリンクしてビルドするのが常識なのですか??
0548デフォルトの名無しさん
2005/05/21(土) 20:16:16スタティックリンクじゃなくて、スタティックライブラリだった。
0549デフォルトの名無しさん
2005/05/21(土) 20:18:50メンバ関数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:27MFCのソースついてるから自分で好きなように
0551549
2005/05/21(土) 21:13:09ソースが付属されているとは知りませんでした.ありがとうございます.
\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;
〜省略〜
}
0552549
2005/05/21(土) 21:19:29改変したmfcのライブラリってプログラムに同梱配布してもいいのでしょうか?
改変したライブラリなしでは,配布先のWindowsにおいて正しい挙動を望めませんよね・・・
0553549
2005/05/21(土) 21:24:35改変MFCライブラリをスタティックリンクすればいいのですね.
>>551の疑問は解けていないので,わかる方はよろしくお願いします.
0554デフォルトの名無しさん
2005/05/21(土) 21:30:15ソース見るとm_strRootから作ってるから
CFileFind::GetRoot呼べばなんとかなるでしょう。
0555549
2005/05/21(土) 21:41:27他のプログラムでも同じクラスを使う可能性を考えていたので,
モトから正すことばかり考えていました.
とりあえず,自前ソースに同等の処理を書くことにします.
ありがとうございました.
0556デフォルトの名無しさん
2005/05/22(日) 00:53:27なんでライブラリのせいにするかね・・・
0557デフォルトの名無しさん
2005/05/22(日) 05:32:46バグは報告してもらうと助かる
0558デフォルトの名無しさん
2005/05/22(日) 06:54:320559デフォルトの名無しさん
2005/05/22(日) 08:16:500560デフォルトの名無しさん
2005/05/22(日) 12:03:30どうやってリンクすればいいんでしょうか?
\MFC\Libにあるライブラリじゃないから、設定のリンクでiphlpapi.dllを
加える事は出来ないのでしょうか?
0561デフォルトの名無しさん
2005/05/22(日) 12:40:27>\MFC\Libにあるライブラリじゃないから
それが解っていてこのスレで訊く理由は?
0562デフォルトの名無しさん
2005/05/22(日) 13:34:25インポートライブラリをリンクすればいいだけ
0563デフォルトの名無しさん
2005/05/22(日) 13:51:41現在のメインウインドウの状態が、
普通のウインドウか、印刷プレビューのウインドウ
どちらなのかを、知る方法はありますでしょうか?
目的はといいますと、
通常は、ファイルのドラッグアンドドロップを受け付けて、
印刷プレビューの場合は、それを受け付けないようなアプリを作りたいのです。
0564デフォルトの名無しさん
2005/05/22(日) 14:49:43することによってウィンドウを移動させたいのですが、
どうすればいいのでしょうか?
0565デフォルトの名無しさん
2005/05/22(日) 16:04:590566デフォルトの名無しさん
2005/05/22(日) 18:47:08クライアント領域をつかんでウィンドウを移動したいってこと?
WindowProcをオーバーライドして↓
ttp://www.hidecnet.ne.jp/~sinzan/tips/win/win_tip2b.htm
0567デフォルトの名無しさん
2005/05/22(日) 19:55:21アプリケーションのこと?それともIEそのもの?
0568デフォルトの名無しさん
2005/05/22(日) 20:53:02ありがとうございます。
OnNcHitTestでググって↓のをコピペでてきました。
ttp://www.alpha-net.ne.jp/users2/uk413/vc/VCT_WNDドラッグ移動.html
0569デフォルトの名無しさん
2005/05/23(月) 05:09:480570デフォルトの名無しさん
2005/05/23(月) 08:47:59それかIEを右クリックでコンテキストメニューとか
0571デフォルトの名無しさん
2005/05/23(月) 15:46:18IE URL 取得でググれ。
0572デフォルトの名無しさん
2005/05/24(火) 17:20:17その下層にあるExplorer_server取得。
Explorer_serverからIWebBrowser2Ptr取得して、
GetLocationURLでOK
0573572
2005/05/24(火) 17:21:15>>565
0574デフォルトの名無しさん
2005/05/24(火) 19:22:37簡単だと思うけど。その代わり、IEとエクスプローラの区別が必要だけど
0575530
2005/05/24(火) 19:44:19やってみましたが、残念ながらだめでした。
画面の構成が悪いんでしょうか?
A(非表示)→B(モーダル、表示)
↓
C(モードレス、非表示)
Cでポップアップの処理をしてます。
Create(IDD_xxx,NULL)でCダイアログを作っています。
Cをモーダルにもしましたが、
どうしてもBが前面に出てきます。
0576デフォルトの名無しさん
2005/05/24(火) 20:40:09Windowに親子関係があっちゃだめ
0577デフォルトの名無しさん
2005/05/24(火) 21:47:44↑ここを参考に、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気になった点を2つ。
・GetLastErrorは何を返すか。
・typedef DWORD (WINAPI *SENDFUNC)(HANDLE , IPAddr , LPVOID ,
WORD , PIP_OPTION_INFORMATION , LPVOID , DWORD , DWORD);
ではないのか。
0579577
2005/05/24(火) 23:08:41例の関数呼び出しエラーが出るコードの直後、GetLastError()は
何故か正常終了の0を返します。
関数定義でWINAPIを入れても、同様に関数呼び出しエラーが出ます。
一晩寝て、明日また考えてみます。
0580575
2005/05/24(火) 23:21:00Create(IDD_xxx,NULL)でも親子関係があるってことですよね。
(NULLを指定すればいいのかと思っていました)
親子関係なしのダイアログはどうやってつくればいいんでしょう?
CreateWindow?
0581デフォルトの名無しさん
2005/05/24(火) 23:44:12なるほど、MFCだとNULLいれると親が確定するのか。
Create(IDD_xxx, GetDesktopWindow()) でどう?
0582デフォルトの名無しさん
2005/05/25(水) 02:50:520583デフォルトの名無しさん
2005/05/25(水) 05:00:59ツールバーにコンボボックスを載せる方法を教えてください。
ググッて
http://park17.wakwak.com/~dragoon/toolbar2.htm
を見つけましたが分からない事があります。
・セパレータの位置
セパレータが複数ある場合はどうすれば?
・コマンドID
リソースエディタで入力する ID_xxx の事でしょうか?
・コンボのコントロールID
リソースエディタで入力する値の事でしょうか?
0584デフォルトの名無しさん
2005/05/25(水) 07:07:42何がわからないんだ。
ペインの大きさ指定で
そう
そう
0585デフォルトの名無しさん
2005/05/25(水) 08:48:46メッセージが違う
ダブルクリックが来る時はその前に
シングルクリックも一回来るのはわかるよな?
0586デフォルトの名無しさん
2005/05/25(水) 09:13:240587584
2005/05/25(水) 11:23:50リンク先を見るまで質問を勘違いしていた
そのリンク先に対しての質問なのね。
左から数えて何番目という指定だから
複数も何もない。
コマンドIDは押したときに来るIDだから自分で決める
コントロールIDも自分で決める、他と重複しないようにすればいい
両方ともリソースIDで先に番号振っておけばID_xxが使える
0588デフォルトの名無しさん
2005/05/25(水) 19:48:17組んだんですが、デバッグ時には動くのですが
リリース時に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ユーザー定義メッセージの型やメッセージマップの書き方が正しくないんじゃない?
0590デフォルトの名無しさん
2005/05/25(水) 20:13:06○ユーザー定義メッセージハンドラの型
0591575
2005/05/25(水) 20:24:48できました!!
どうもです!!
0592588
2005/05/25(水) 20:26:50afx_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:54ON_MESSAGE に渡すパラメータは
LRESULT f(WPARAM, LPARAM);
のシグネチャを持たなければいけない。
void f() を渡したいときは
ON_MESSAGE_VOID を使いなされ。
0594588,592
2005/05/25(水) 21:06:15ON_MESSAGE_VOIDを使用したところ
void func();のメッセージハンドラが無事作れました。
重ねがさね、どうもありがとう。
ところでこういうのってどうやって検索してますか?
ヘルプにも記載されてないみたいだし
(なもんで、afxpriv.hのインクルードがなかなか解らなかった)、
ON_MESSAGE_VOIDでずばりググっても3件しかヒットしないんですが。
面倒ならスルーしてください。
0595デフォルトの名無しさん
2005/05/25(水) 22:25:48ON_MESSAGEの定義を見れば受け取れる型はわかるのでその時点で諦めてメソッドのシグネチャを修正する。
長ったらしいON_MESSAGEを入力するのが面倒なのでON_Mまで入力して後補完させると幸運にもON_MESSAGE_VOIDが出てくるのでなんじゃいなと思って調べる。
運に頼らずこれを見つけられるやつはそうそういないだろう。
0596583
2005/05/25(水) 23:00:31>両方ともリソースIDで先に番号振って
先に決めるとありますが、コンボボックスのIDはいつどこで決めるんですか?
後、セパレータの位置はどうやって求めるんでしょうか?
0598デフォルトの名無しさん
2005/05/26(木) 05:17:40ClassWizardのオートメーションタブにタイプライブラリのヘッダを作ってもらった
のですが、定数に関する宣言が無いのです。
「#import に作ってもらった時はenumしてくれてたのになあ・・・」と思ったら
ttp://www.athomejp.com/goldfish/mfc/ole/excelexec2.asp
にも同様な記述がありました。
#import してできた .tlh から定数部分だけ拝借すればとりあえずは良いのですが、
あまりスマートな方法に思えません。どう対処するのが正統な方法なのでしょうか?
0599デフォルトの名無しさん
2005/05/26(木) 10:18:18カラムのヘッダをクリックしてソートしたいのですが
ダイアログにListCtrlを貼り付けた場合はClassWizardでメンバ関数を作れますけど
今回の場合オブジェクトがないので作れません(と思う)
基本クラスをCListViewにした時OnColumnclickみたいなメンバ関数はどうすれば作れるのですか?
0600デフォルトの名無しさん
2005/05/26(木) 11:07:07OnNotify
0602599
2005/05/26(木) 11:28:16オブジェクトIDが存在しない(と思う)ので入れられないのです
当方VC++6.0です
0603デフォルトの名無しさん
2005/05/26(木) 11:35:21クラスウィザードにやらせたいってこと?
0604デフォルトの名無しさん
2005/05/26(木) 11:42:34だったら ON_NOTIFY_REFLECT で自分が発行する Notify を
処理できそうな気がする。
0605599
2005/05/26(木) 11:53:19>603
いえ、自分で呼べばいいのですがよく分からなかったです
けっきょく>604のおっしゃるようにON_NOTIFY_REFLECTでできました
ありがとうございました
0606デフォルトの名無しさん
2005/05/26(木) 14:00:530607デフォルトの名無しさん
2005/05/26(木) 18:31:120608デフォルトの名無しさん
2005/05/26(木) 20:58:24質問ですが、
MFCで.xlsファイルを作成・操作する方法はどのようにすればいいのでしょうか?
一般的にどのような方法が使われていますか?
0609デフォルトの名無しさん
2005/05/26(木) 22:23:11リソースの移行は可能でしょうか?
とりあえずrcファイルをコピーしてみましたが駄目でした。
clw(だっけ?)などを一度削除してみようかなと思っています。
.netはバグが多すぎませんか?嫌になりました。
0610609
2005/05/26(木) 22:47:46プロジェクト名を変えて、clw等を消して再読み込み?しました。
.netでは月曜に試してみます。
注意点あればお願いします。
0611デフォルトの名無しさん
2005/05/26(木) 22:56:080612デフォルトの名無しさん
2005/05/27(金) 11:01:040613デフォルトの名無しさん
2005/05/27(金) 11:03:33ClassWizard から EXCEL9.OLB を開いて Excel クラスを作成。
でも、バージョンも何も書かずに訊いて回答が得られると思う人には
無理でしょうから、.csv でも書いとけ。
0614デフォルトの名無しさん
2005/05/27(金) 11:05:340615デフォルトの名無しさん
2005/05/27(金) 11:12:590616デフォルトの名無しさん
2005/05/27(金) 11:31:32普通のボタンでSetState()を使ってみましたが、
上手くトグルしてくれませんでした・・・
0617デフォルトの名無しさん
2005/05/27(金) 11:34:540618616
2005/05/27(金) 11:44:52回答出てるとは気づきませんで・・・
0619612
2005/05/27(金) 13:05:220620デフォルトの名無しさん
2005/05/27(金) 13:17:05mdbファイルの位置を固定しなければなりません。
可変にするにはどうしたらいいんでしょう?
レジストリに登録でしょうか?
また、CRecordsetよりもCDaoRecordsetの方が便利ですが、
Microsoft Jet データベース エンジンとやらがない環境でも動くんでしょうか?
0621デフォルトの名無しさん
2005/05/27(金) 13:29:33>>614-615
0622612
2005/05/27(金) 13:35:530623デフォルトの名無しさん
2005/05/27(金) 13:44:460624デフォルトの名無しさん
2005/05/27(金) 14:06:390625デフォルトの名無しさん
2005/05/27(金) 15:40:04| mdbファイルの位置を固定しなければなりません。
固定しなくてもいい。
lpszConnectでいろいろ指定できる。
| Microsoft Jet データベース エンジンとやらがない環境でも動くんでしょうか?
無いと絶対動かない。
0626620
2005/05/27(金) 16:02:09>lpszConnectでいろいろ指定できる。
確かにそうですが、質問の意図はアプリ実行時にlpszConnectで指定したところに
mdbを固定しないといけないですよね?という意味です。
それに対する回答でしょうか?
0627デフォルトの名無しさん
2005/05/27(金) 17:28:030628デフォルトの名無しさん
2005/05/27(金) 17:35:41なんでそう思うの
0629デフォルトの名無しさん
2005/05/27(金) 17:46:120630デフォルトの名無しさん
2005/05/27(金) 17:49:05SS_NOTIFY (VC++のリソースエディタなら通知をtrue)
にすれば来ると思うよ
0631620
2005/05/27(金) 18:47:40私はあらかじめデータソースをコンパネで作って、
ClassWizardでそのデータソースを指定してCRecordsetクラスを作っています。
cppファイルのほうには、
CString rs2::GetDefaultConnect()
{
return _T("ODBC;DSN=testDs");
}
0632620
2005/05/27(金) 18:56:23となります。
データソース作成時にmdbの位置を指定して作成するので、
おそらくそのせいでmdbファイルの位置が指定されてしまうのだと思います。
データソースをいじらないといけないのでしょうか?
それとも他の方法が?
0633デフォルトの名無しさん
2005/05/27(金) 18:58:150634デフォルトの名無しさん
2005/05/27(金) 19:23:14中々分かり難いでつ。
0635634
2005/05/27(金) 19:37:50クリック時に自分でドロップダウンしてやる必要あるのか?????
0636デフォルトの名無しさん
2005/05/27(金) 19:42:150637デフォルトの名無しさん
2005/05/27(金) 20:14:590638620
2005/05/27(金) 20:41:24なるほど。
あとはmdbファイルの位置を取得すればいいわけですね。
ありがとうございます。
0639620
2005/05/27(金) 22:45:41ファイル検索で目的のmdbファイルのパスを取得するつもりですが、
予備などの理由で同名のファイルが他に存在する場合、判別できないですよね。
なるべく置き場所に制約をつけたくないのですが、
他に同名のファイルがある可能性を考えると、
フォルダ名などで区別できるようにしないといけないのかなぁと思っています。
一般的にこういう場合はどうするんでしょう?
レジストリに登録でしょうか。レジストリにあまり触れたことがないのですが。
0640デフォルトの名無しさん
2005/05/27(金) 22:50:04明らかにMFCの問題じゃないのでどっか行ってください。
そういう外部仕様的な問題は各解決方法の利点欠点を洗い出して関係者で話し合って決める事。
0641デフォルトの名無しさん
2005/05/28(土) 03:36:09どうでもいいが、あんたホンットにレジストリ好きだな。
0642デフォルトの名無しさん
2005/05/28(土) 09:49:05の超FAQもヨロ
拡張タブのドロップダウンを許可する、をオンにしてもダメでつぅ
0643デフォルトの名無しさん
2005/05/28(土) 10:16:48ダイアログエディタ上でリストのサイズを設定したか?
[ ▼]
↑
クリック
0644639
2005/05/28(土) 10:27:34そうですね。すみません。いろいろ教えて頂いてありがとうございました。
0645デフォルトの名無しさん
2005/05/28(土) 13:17:40.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:500647デフォルトの名無しさん
2005/05/29(日) 04:03:26を真似て、タブコントロールを使ったプログラムを書いてます。
今まで、タブページを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:540649デフォルトの名無しさん
2005/05/29(日) 09:16:49プロジェクトコピーして作るとよくそういうエラーが出る。
原因不明のエラーの場合は中間ファイル消してリビルドだな
0650647
2005/05/29(日) 10:53:56あれが出ない時って、大抵定義段階でミスって認識されていない
変数を使おうとしている場合、だと勝手に思ってました。
勉強不足でした。
>>649
指摘通り、USBでコピーしたプロジェクトでした。
その方法で無事に解決し、実行出来ました。
ありがとうございました。
0651デフォルトの名無しさん
2005/05/29(日) 13:10:080652デフォルトの名無しさん
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ファイルポインタがファイル末尾のまんまだと思う。
と日記には書いておこう。
0654デフォルトの名無しさん
2005/05/29(日) 16:40:190655652
2005/05/29(日) 17:54:55ありがとうございます、↓で解決しました。
mem.Seek( 0, CFile::begin);
CArchive自身がポインタもってるわけではなく、ただのラッパーだったのね。
>> 654
本当はこれはフレームがビューを切り替える時に、ある程度の情報を引き継ぐ
のが真の目的でしたが、質問しやすいように簡略化させて頂きました。
本当は↓こんな感じです
arS << x; → pOldView->Serialize(arS);
arL1 >> y; → pNewView->Serialize(arL);
0656デフォルトの名無しさん
2005/05/29(日) 18:32:46CArchive::Flushでもよさそうな気がする。
0657デフォルトの名無しさん
2005/05/29(日) 23:12:17大文字固定にはできるんですが。
0658デフォルトの名無しさん
2005/05/29(日) 23:15:370659デフォルトの名無しさん
2005/05/29(日) 23:35:22どうするんですか。教えてください。
0660デフォルトの名無しさん
2005/05/29(日) 23:37:440661デフォルトの名無しさん
2005/05/29(日) 23:59:050662デフォルトの名無しさん
2005/05/30(月) 00:01:490663デフォルトの名無しさん
2005/05/30(月) 00:56:040664デフォルトの名無しさん
2005/05/30(月) 01:36:320665デフォルトの名無しさん
2005/05/30(月) 02:27:40これからはオブジェクトをポトペタしてプロパティを設定することをプログラミングというのですよ。
いつの間にか日本人にとって寿司=回転寿司になってしまったように。
0666デフォルトの名無しさん
2005/05/30(月) 09:22:30あとIMEで日本語入力はどうなる?
0667デフォルトの名無しさん
2005/05/30(月) 10:38:40662は今すぐプログラムなんかやめちまえ
0668デフォルトの名無しさん
2005/05/30(月) 10:44:020669デフォルトの名無しさん
2005/05/30(月) 11:06:300670デフォルトの名無しさん
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:59IDEでリストのサイズを設定できるとこ無いですが...
SetWindowPosでサイズ設定でつか?
0672デフォルトの名無しさん
2005/05/30(月) 13:00:10ありがち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:170674デフォルトの名無しさん
2005/05/30(月) 13:06:190675デフォルトの名無しさん
2005/05/30(月) 16:20:500676デフォルトの名無しさん
2005/05/30(月) 16:22:410677デフォルトの名無しさん
2005/06/01(水) 18:29:09ダイアログベースのWizardで作成。
CxxxDlg::PreTranslateMessage{
if(F1が押されたら){
何やら処理
return TRUE;
}
としても、ヘルプが起動してしまいます。
「何やら処理」は動いているので、if文は通ってるみたいです。
もちろんOnHelpInfoとかを、
何もしないような処理にすれば良いかと思いますが、
そもそもPreTranslateMessageでTRUEを返してるのに、
ヘルプが起動してしまう理由って何でしょうか?
0678デフォルトの名無しさん
2005/06/01(水) 18:56:280679デフォルトの名無しさん
2005/06/02(木) 17:20:09のpointをダイアログ座標にする方法教えてでつぅ。
0680デフォルトの名無しさん
2005/06/02(木) 17:34:30ダイアログ座標って言うのがよくわからんが
0681デフォルトの名無しさん
2005/06/02(木) 17:37:38システムフォントの幅と高さによる
0682679
2005/06/02(木) 18:13:09ポップアップメニュー用の座標が欲しかったのですが、
ClientScreenTo() でうまくいきますた。
0683デフォルトの名無しさん
2005/06/02(木) 18:19:190684677
2005/06/02(木) 22:01:56起動するっちゅうことでokでしょうか?
0685デフォルトの名無しさん
2005/06/03(金) 11:43:11CScrollViewを使っているのですが行番号表示を実装しようとした処で詰まりました。
Viewの中に「スクロールしない領域」のようなモノを作る方法はありますか?
行番号の表示領域は(Viewと兄弟、もしくは子の)別のウィンドウにした方が良いのでしょうか。
環境はvc++.net2003です。
0686デフォルトの名無しさん
2005/06/03(金) 23:15:24別Windowにしたなあ
0687デフォルトの名無しさん
2005/06/04(土) 21:50:20片方にIPアドレスを、もう一方にサブネットマスクを入力させる。
で、そのネットワーク内のアドレスを全て抽出したい。
例えば、「192.168.0.1」・「24」と入力すると、「192.168.0.1」〜「192.168.0.255」と。
どうすればスマートに出来るでしょう?
無理矢理、2進数10進数の変換とかをやっていくしか無いでしょうか。
0688デフォルトの名無しさん
2005/06/04(土) 22:13:09・それってサブネットマスクって言うの?
・「2進数10進数の変換」を無理矢理、ってどんなことを想定している?
0689デフォルトの名無しさん
2005/06/04(土) 22:24:43マスクすればいい
0690デフォルトの名無しさん
2005/06/04(土) 22:26:160691687
2005/06/04(土) 22:30:29・ネットワークアドレス長、って言うのでしょうか。
サブネットマスクが「255.255.255.0」ならば24。
・10進数のIPアドレスを2進数32ビットに変換して、
右側「32 - ネットワークアドレス長」分全てを0にしたもの〜全て1にしたものを
出して、10進数のIPアドレスに戻す、って作業を考えてます。
ただ、面倒なので何か方法があるのでは・・・と思って相談しました。
0692デフォルトの名無しさん
2005/06/04(土) 23:14:06あるのは、StreamInという回りくどい方法でテキストかリッチファイルを入れていくだけ。
どうしてこんな変な仕様なんですか?
SetText(char* p);みたいなものを用意してくれればいいと思うのですが。
0693デフォルトの名無しさん
2005/06/04(土) 23:30:24長くてしかも書式付きのテキストを扱うんだから
仕方ないのでは?
うろ覚えだが、単純に中身全部を置き換えるなら
SetWindowText()つかえるんじゃなかったか
0694デフォルトの名無しさん
2005/06/06(月) 22:09:05面倒じゃないよ。
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>printf("addr=", inet_ntoa(ad);
↑
printf("addr=%s", inet_ntoa(ad))
0696デフォルトの名無しさん
2005/06/06(月) 22:11:29> addr = (addr+1) & addr_mask;
>} while (addr != addr_base);
addr++;
} while ((addr & addr_mask) == addr_base);
0697デフォルトの名無しさん
2005/06/06(月) 22:15:130698デフォルトの名無しさん
2005/06/06(月) 22:18:33str.Format("addr=%s", inet_ntoa(ad));
printf("%s", str);
0699デフォルトの名無しさん
2005/06/07(火) 07:24:50僕に彼女が出来るにはどうしたら良いですか?
0700デフォルトの名無しさん
2005/06/07(火) 10:05:320701デフォルトの名無しさん
2005/06/07(火) 11:01:380702デフォルトの名無しさん
2005/06/08(水) 11:58:59質問ですが
CStdioFile fout("myfile\\diary.txt",CFile::modeCreate|CFile::modeWrite);
.exeファイルはmyfileと同じフォルダ階層にあるのに、
なぜか、無効なパス名ということで例外が出ます。
どうしてなのでしょうか?
0703デフォルトの名無しさん
2005/06/08(水) 12:34:46カレントディレクトリ基準であって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通知関係は、EN_ だろう
0707704-705
2005/06/08(水) 23:21:590708704-705
2005/06/09(木) 10:14:44自分でも調べていますが、どういうメッセージで取れるのかわかりません。
0709デフォルトの名無しさん
2005/06/09(木) 10:33:44選択が解除というのがよくわからんが、
マウスやキーのメッセージが来るたびに
選択範囲をチェックして、自分でUSERメッセージを送ってみたら
0710704-705
2005/06/09(木) 11:42:44マウスドラッグやshiftキーを押しながら矢印キーで範囲選択された
タイミングで処理を行いたいのです。
>709が一番いいのかなぁ。ちょっとよくわかりませんがやってみます。
0711704-705
2005/06/10(金) 13:51:39もうひとつ質問です。
エディットボックス内で右クリックして表示されたポップアップメニューの
コマンドが選択されたことを取るにはどうしたらいいでしょう?
0712デフォルトの名無しさん
2005/06/10(金) 15:42:560713デフォルトの名無しさん
2005/06/10(金) 15:45:50WM_MENUSELECTとかWM_CONTEXTMENUとか来てるなあ・・
0714704-705
2005/06/10(金) 18:44:06>713のところではなくて、切り取りとか貼り付けの決定時がよかったので
WM_CUTやWM_COPYなどなどをとりました。
とりあえずありがとうございました。
それにしても私、PreTranslateMessageとDefWindowProcの違いがわかってません・・・
0715デフォルトの名無しさん
2005/06/12(日) 00:18:00ダイアログで得られた値をメインで反映させるためにグローバルな変数を
使うのでは無く、ダイアログのクラスとメインのクラスでデータを共有す
るクラスを作って参照をそれぞれのメンバにセットするというjavaっぽい
プログラミン手法はよくやられるのでしょうか?
0716デフォルトの名無しさん
2005/06/12(日) 01:54:54DDX(Dialog Data eXchange)を使うのが一般的。
DDXとはダイアログボックスに貼り付けられたコントロールの設定値を
クラスのメンバ変数で操作できる仕組み。
0717デフォルトの名無しさん
2005/06/13(月) 10:32:36簡単なダイアログなら、ダイアログのクラス自体をデータクラスと
割り切って、コントロールに関連付けされたメンバをpublicにして
しまうのもありだと思う。
0718デフォルトの名無しさん
2005/06/14(火) 17:29:28どうやってポトペタしたら良いでつか?
0719718
2005/06/14(火) 17:47:19ビットマップが設定できますね。
でも、トグルじゃないボタンが欲しい...
0720718
2005/06/14(火) 17:55:39何で?
0721デフォルトの名無しさん
2005/06/14(火) 18:56:17ボタン貼ってスタイル変更すればいいじゃない。
0722デフォルトの名無しさん
2005/06/15(水) 10:31:220723デフォルトの名無しさん
2005/06/15(水) 13:33:50できる
0724デフォルトの名無しさん
2005/06/15(水) 13:49:27と、工夫しようと思ったが、
MFCで変わったことするとエラーが激しいな。
0725デフォルトの名無しさん
2005/06/15(水) 14:04:40>MFCで変わったことするとエラーが激しいな
そりゃぁ、馬鹿なことすりゃぁね。
0726デフォルトの名無しさん
2005/06/15(水) 14:12:28MFCは実行時エラーダイアログからしてイマイチ。
0727デフォルトの名無しさん
2005/06/15(水) 19:33:45Dlg.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:510729デフォルトの名無しさん
2005/06/15(水) 21:15:52>Dlg.Create(IDD_DIALOG,this);
>Dlg.DoModal();
アホ?
すげーレベル低い
Modal DialogとModeless Dialogの違いわかってる?
それぞれのMFCでの作成方法わかってる?
0730デフォルトの名無しさん
2005/06/15(水) 21:37:41下がってよいぞ
0731デフォルトの名無しさん
2005/06/15(水) 22:00:53解説サイト木本
0732727
2005/06/16(木) 08:56:25Dlg.DoModal();
でおk?
0733デフォルトの名無しさん
2005/06/16(木) 10:15:45extern "C" __declspec(dllexport) void add(int *a,int *b,int *c)
{
*c=*a+*b;
}
というようにdllを作ったのですが、作ったdllがうまく分かりません。
教えていただけませんか
0734デフォルトの名無しさん
2005/06/16(木) 10:27:400735727
2005/06/16(木) 11:16:24Dlg.MyProcess();
Dlg.DoModal();
としてますが、DoModalの前に、「DoDataExchange(CDataExchange* pDX)」で
セットされるべき、画面コントロールプロパティがNULLになってます。
これを回避する方法はありますか?
というより、「DoDataExchange」とは何者なんでしょ。
0736727
2005/06/16(木) 11:17:26「CDataExchange* pDX」に何をセットすれば良いのやら?
0737デフォルトの名無しさん
2005/06/16(木) 11:35:55教えてもらっても礼もなく
再び、調べもせずここで訊く、か…
MSDN 全文音読の刑 >>727
0738デフォルトの名無しさん
2005/06/16(木) 12:40:39下がってよいぞ
0739デフォルトの名無しさん
2005/06/16(木) 13:00:590740デフォルトの名無しさん
2005/06/16(木) 13:08:370741デフォルトの名無しさん
2005/06/16(木) 13:09:42その癖で躓いてるという相談があったら、
どこを嫁、
とヒント出そうぜ!
0742デフォルトの名無しさん
2005/06/16(木) 13:19:35その他で躓いてるならそれをキーワードにしてぐぐれ。
それでも分からなければ質問掲示板等のサイトの
過去ログを検索しろ。
こんなもんじゃないかね?
それ以前の基礎がわからなければここで質問しても
理解は難しいと思う。
0743デフォルトの名無しさん
2005/06/16(木) 13:24:580744デフォルトの名無しさん
2005/06/16(木) 13:26:16答えない回答者は存在自体が否定される。
それだけ。
0745デフォルトの名無しさん
2005/06/16(木) 13:31:470746デフォルトの名無しさん
2005/06/16(木) 13:34:270747727
2005/06/16(木) 13:41:31//{{AFX_DATA(CExamDlg)
enum { IDD = IDD_MY_DIALOG };
CSpinButtonCtrlm_MySpinButton;
//}}AFX_DATA
↑
ヘッダーファイルのこのメンバにアサインされるのはいつなのか、
また、DoModal前にアサインする方法が知りたいのですが、
定石は無いのでしょうか?
0748737
2005/06/16(木) 14:26:39DoModal() を呼び出すだけで
1. ダイアログが作成される
2. OnInitDialog() 呼び出し
3. UpdateData() 呼び出し
4. DoDataExchange() 呼び出し
が行われる。DoDataExchange() をオーバーライドし、そこで
DDX_Control(pDX, コントロールのID, メンバ変数);
と呼び出せば、メンバ変数が設定される。
で、音読したか?>>727
0749デフォルトの名無しさん
2005/06/16(木) 14:54:08コントロールをメンバ変数に割り当てているわけなので、ウィンドウが作成される前
(≒DoModal前) にはそのコントロールは存在しません。なのでアサイン不可能です。
定石1.簡単なものの場合
クラスウィザードで、コントロールじゃなくて値に対するメンバ変数を追加して、
自動生成されるDDXに任せる。
定石2.面倒なものの場合
適切にメンバ変数を設定して、OnInitDialog で独自にコントロールにあれこれする。
コントロール側が操作された場合の処理も適切に自前で行う。
定石3.MFC原理主義の人の場合
自前のDDX関数を作成して、コントロールの初期化とメンバ変数への書き戻しは
DoDataExchangeに任せる。
定石以前に、まずは付属ドキュメントのチュートリアルとか読んだ方が時間も
掛からず効率が良いと思います。
0751737
2005/06/16(木) 15:04:310752デフォルトの名無しさん
2005/06/16(木) 17:19:32|
\ __ /
_ (m) _ピコーン
|ミ|
/ .`´ \
∧_∧
( *・∀・)∩ いいことを思いついた!
(つ 丿
⊂_ ノ
(_)
DoModalのアトに処理走らせれば良いんだ。
0753デフォルトの名無しさん
2005/06/16(木) 17:23:030754デフォルトの名無しさん
2005/06/17(金) 09:49:570755デフォルトの名無しさん
2005/06/17(金) 11:37:330756デフォルトの名無しさん
2005/06/17(金) 11:45:15ダイアログクラスにI/Fを用意する。
0757デフォルトの名無しさん
2005/06/17(金) 18:34:28というイベントをつかむ方法はありますか?
USBメモリを指すとメッセージが飛び,
それでわかるのですが,フロッピーのディスクで
同様のことはできないのでしょうか?
0758デフォルトの名無しさん
2005/06/17(金) 18:47:380759デフォルトの名無しさん
2005/06/17(金) 18:55:16そこをなんとか
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:410762デフォルトの名無しさん
2005/06/17(金) 19:06:340763デフォルトの名無しさん
2005/06/17(金) 19:09:09それは考えたけど
FD が実際にはいってるかどうかなんてわかんのか?
0764デフォルトの名無しさん
2005/06/17(金) 19:13:430765デフォルトの名無しさん
2005/06/17(金) 19:33:38thx!
なぜか知らんが通った
0766デフォルトの名無しさん
2005/06/17(金) 20:31:18そのリソースに、別のCDialog派生クラスをクッツケルのは可能ですか?
そういうことやってても、開発中に意味不明なエラーで悩まされたりせず、楽に作業できますか?
それともクラスウィザードがエラー起すかな?
0767デフォルトの名無しさん
2005/06/17(金) 21:32:05FDからもブートするようにBIOSで設定すると、
起動時にFDアクセスして調べるよね。
0768デフォルトの名無しさん
2005/06/17(金) 21:39:230769デフォルトの名無しさん
2005/06/17(金) 21:40:54PC9801で暴走したときにキーボード押しながらフロッピーを入れると割り込みが入って
自動的にリセットしてくれるソフトが在ったな。
Windowsだとそういうの出来ないのか,セキュリティ対策にも使えそうなネタだったのに。
0770デフォルトの名無しさん
2005/06/18(土) 00:12:47ピコワロス
0771デフォルトの名無しさん
2005/06/18(土) 01:06:16確かWindows3.0か3.1ではそんなことしてたはず(OSが)
0772デフォルトの名無しさん
2005/06/18(土) 08:40:010773デフォルトの名無しさん
2005/06/18(土) 09:16:00クッツケルの>可能。問題ない。
楽に作業できるか>知らない。IDEのヴァージョンにもよるでしょう。クラスウィザードは*.hのIDDの定義みて動いてる。
0774デフォルトの名無しさん
2005/06/18(土) 11:13:32コールバック関数(WindowProc)内で WM_FLOPPYENTER を監視する。
0775デフォルトの名無しさん
2005/06/18(土) 18:56:44えっマジ?
そんな都合がいいメッセージがあるん?
0776デフォルトの名無しさん
2005/06/18(土) 19:27:020777デフォルトの名無しさん
2005/06/19(日) 21:24:52選択することによって、ウインドウB(エディットビュー)にそれに応じた
情報を表示する、というようなプログラムを作っています。
丁度、2chブラウザでスレ一覧からスレを選択する事で、その内容を
表示させるように。
何か参考になるサンプルが載っているHPを探しているのですが、
期待するようなものが見つかりません。
ご存知でしたら、紹介してください。
0778デフォルトの名無しさん
2005/06/19(日) 21:37:50その取得に応じた情報を取得。
それをエディットビューにSetWindowText()でよゐのでわ。
0779デフォルトの名無しさん
2005/06/20(月) 00:25:10VC++のチュートリアルでいいのでは?
0780デフォルトの名無しさん
2005/06/20(月) 09:09:24そんなメッセージはないやんけ!
ウソこくな!
0781デフォルトの名無しさん
2005/06/20(月) 18:51:11すまん。あの日はちょっとムシャクシャしてたんだ。
許してくで。
0782デフォルトの名無しさん
2005/06/20(月) 20:00:090783デフォルトの名無しさん
2005/06/20(月) 20:00:51ありがとうございます
0784774
2005/06/21(火) 13:49:55いえいえ。礼にはおよびませんよ。
0785デフォルトの名無しさん
2005/06/21(火) 18:37:41無理やり読みに行ってみるしか手がない
0786デフォルトの名無しさん
2005/06/21(火) 20:56:03そだっけ?
抜くと割り込みが発生したような記憶があるんだけど気のせいかな?
0787デフォルトの名無しさん
2005/06/21(火) 22:05:07太古のPC-9801系とかはその辺の信号があった。
いわゆる PC-AT 系には無い。
0788デフォルトの名無しさん
2005/06/22(水) 19:52:02ゲームとか作るんだったらまったく向いてないと思うのですが。
背景とか含めて5個しかないと何も作れませんよ。
0789デフォルトの名無しさん
2005/06/22(水) 19:54:03?
0790デフォルトの名無しさん
2005/06/22(水) 20:04:070791デフォルトの名無しさん
2005/06/22(水) 20:07:550792デフォルトの名無しさん
2005/06/22(水) 20:35:530793デフォルトの名無しさん
2005/06/22(水) 20:48:220794デフォルトの名無しさん
2005/06/22(水) 21:41:100795デフォルトの名無しさん
2005/06/22(水) 22:46:34インベーダーゲームで言ったら
敵3体と味方の機体一体表示したら弾一個しか出ないじゃないですか。
0796デフォルトの名無しさん
2005/06/22(水) 22:49:250797デフォルトの名無しさん
2005/06/22(水) 23:22:210798デフォルトの名無しさん
2005/06/23(木) 00:52:42プログラム自体あんまりやったことないので詳しいことはわかりません。
しかし、一生懸命勉強していくつもりです。
でも、3DゲームとかはMFCじゃできないんだろうなぁ…。
0799デフォルトの名無しさん
2005/06/23(木) 01:28:05んなことねーだろ。アホか。
あーあ。VC++ネイテブでGDI+使えたらなー
0800デフォルトの名無しさん
2005/06/23(木) 11:45:080801デフォルトの名無しさん
2005/06/23(木) 15:26:50前もって
RegisterDeviceNotification
というので登録するのですが,
Windows プロジェクトではこれが使用できるのですが
MFCプロジェクトだとこれを知らないというエラーがでます
winuser.h に定義されている,とあるので,
#include <winuser.h>
しても結果は同じです
どうしたら使えるようになるのでしょうか?
0802デフォルトの名無しさん
2005/06/23(木) 17:41:24#include <DBT.H>
0803801
2005/06/24(金) 18:10:53#include <dbt.h>
が必要なのは承知しておりましたので
すでにしていたのですが
#define WINVER 0x0500
をしたみたところ
やはり結果変わらずです
0804デフォルトの名無しさん
2005/06/24(金) 18:22:30#include "stdafx.h"
#define WINVER 0x0500
#include <DBT.H>
・・・
DEV_BROADCAST_HDR dbhdr;
・・・
RegisterDeviceNotification();
・・・
としたらコンパイル通って動くけど。
ちなみにVC6 sp6。
0805803
2005/06/24(金) 18:32:31おかしいですね
空の 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#define 「下のincludeファイル内で必要な定義」
#include <hogehoge.h>
のdefineがたまに無視されることがある。
VS起動し直したりすれば直るんだが、なんだか変というかすごく不便
0807デフォルトの名無しさん
2005/06/24(金) 20:54:13stadafx.hの先頭行あたりに
#define WINVER 0x0500
をもってくるとか
「プロジェクトの設定」の「プリプロセッサの定義」に
WIN32, ・・・ ,WINVER=0x0500
を追加する(これが本筋かも)。
0808デフォルトの名無しさん
2005/06/25(土) 01:47:35このシリアル番号を「2222」へ変えるためには再度コンパイルしなければならないと
思っていましたが、アップデートTOOL(アプリ)のようなもので使って
更新しているものを見ました。
どのようにすれば再コンパイル無しにアプリの中の値を変更することができるのでしょうか。
0809デフォルトの名無しさん
2005/06/25(土) 02:01:20// 三次元配列
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:100811デフォルトの名無しさん
2005/06/25(土) 02:49:18SelectObjectでビットマップを表示させる場合
一つのビットマップしま表示できないです。
複数のビットマップを表示するにはどうすればよいのでしょうううか
0812デフォルトの名無しさん
2005/06/25(土) 08:35:08複数のCBitmapを用意しろ
とりあえず、ソースどんなん?
0813デフォルトの名無しさん
2005/06/25(土) 22:47:29HBITMAP 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:160815デフォルトの名無しさん
2005/06/27(月) 14:21:41リソース内の値を書き換えたのでは。
0816デフォルトの名無しさん
2005/06/27(月) 15:52:12開発環境:VS.NET 2003
0817デフォルトの名無しさん
2005/06/27(月) 18:11:39書店でも全然見かけなくなったし
0818デフォルトの名無しさん
2005/06/27(月) 18:21:58標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング Programmer’s SELECTION
0819デフォルトの名無しさん
2005/06/27(月) 19:07:45まともなMFC本と言ったらそれくらいかね
0820デフォルトの名無しさん
2005/06/27(月) 19:53:00呼び出し側から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:180822デフォルトの名無しさん
2005/06/27(月) 23:36:28親がデスクトップなので、デスクトップが非アクティブになると
ダイアログも非アクティブになるという動作です。
親をdllを呼び出している側のメインウィンドウ(?)にして
アクティブとかそこらへんの関係を適切にしたいなら、
dll の関数に親ウィンドウの HWND を渡してもらうか、
メインウィンドウらしきものを自力で探すしかないです。
0823デフォルトの名無しさん
2005/06/28(火) 11:23:30pDlg->Create(IDD_DIALOG1,::GetDesktopWindow() ); でもだめ?
0824デフォルトの名無しさん
2005/06/28(火) 14:03:57pDlg->Create(IDD_DIALOG1,::GetDesktopWindow() );
はビルド時にエラーが出ます。
>822
なるほど分かりました。もとは親のハンドルを受け取るようにしていたのですが、それだとうまく
表示されなかったので親をデスクトップにしてみたのです。
親のハンドルに設定していると子ダイアログが親ウィンドウ内に表示され
てしまったり画像が移ってしまったりとうまく描画できなかったのでしか
たなく親をデスクトップにしてみたのですが。
0825デフォルトの名無しさん
2005/06/28(火) 15:10:26異なるようでしたら適切な場所を教えてください。
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:440827デフォルトの名無しさん
2005/06/28(火) 16:34:05使う側にもこれは書かないとだめじゃない?
namespace hoge{
class CHoge;
}
0828デフォルトの名無しさん
2005/06/28(火) 18:24:20書いてるのと同じ状態です。
インテリセンスでの補完も働くようです。
しかしコンパイル通らず、、、
名前空間 jp::somewhere のクラス CComoplex と
名前空間無しのクラス CSimple のコンストラクタ(多分)は
??0CComplex@somewhere@jp@@QAE@XZ
??0CSimple@@QAE@XZ
上記のような名前付けになっていて、@の被る位置の判断とかがアレなのかな。
0829デフォルトの名無しさん
2005/06/28(火) 18:41:37>> fuga.cpp(xxx): error C2653: 'hoge'' : 識別子がクラス名でも名前空間名でもありません。
このエラーはどう見てもそんな高尚な話ではなく、単なる文法違反なわけで。
なにかのポカミスだと思います。
0830デフォルトの名無しさん
2005/06/28(火) 21:11:01> 親のハンドルに設定していると子ダイアログが親ウィンドウ内に表示され
WS_CHILD が指定されているとこうなるよ。
0831デフォルトの名無しさん
2005/06/28(火) 23:01:08Ctrlクリックと同じ選択方式に変更する方法はあるのでしょうか?
0832デフォルトの名無しさん
2005/06/29(水) 06:11:54Printscreenみたいな感じのものです。
0833デフォルトの名無しさん
2005/06/29(水) 10:35:470834デフォルトの名無しさん
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:28OnTimer() では Invalidate() するだけでいいんじゃ?
0836834
2005/06/29(水) 19:37:21昼からずっと 9: 0: 0のまま
0837デフォルトの名無しさん
2005/06/29(水) 20:05:310838デフォルトの名無しさん
2005/06/29(水) 20:08:52tmOldTimeはどこで更新している?
見たところ、0のままで1970/1/1 9:0:0を指しているような気がするのだけれど。
0839834
2005/06/29(水) 21:48:12数字は進まないけど画面がチラつくようになった
>>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すげぇ素朴な疑問なんだが、何故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);
}
じゃ駄目なのか?
0841834
2005/06/29(水) 22:26:02やっぱり 9: 0: 0で止まってチラつくだけだった
0842デフォルトの名無しさん
2005/06/29(水) 22:58:18デバッグモードにしてる?
リリースモードでもデバッグ情報を埋め込むことはできるが、煩雑?なので。
0843834
2005/06/29(水) 23:11:430844デフォルトの名無しさん
2005/06/29(水) 23:32:49CTime tmCurTime = CTime::GetCurrentTime();
0845デフォルトの名無しさん
2005/06/29(水) 23:34:16俺も今同じこと書こうとした。
CTime::GetCurrentTime()はスタティック関数だな。
0846834
2005/06/29(水) 23:44:13なんでtmCurTime.GetCurrentTime()はダメなの?
0847デフォルトの名無しさん
2005/06/29(水) 23:45:440848デフォルトの名無しさん
2005/06/30(木) 00:19:05CTimeクラスの説明で、GetCurrentTime()は静的関数とあるぞ。
0849デフォルトの名無しさん
2005/06/30(木) 08:23:510851834
2005/06/30(木) 09:21:27time.GetCurrentTime()とCTime::GetCurrentTime()はどう違うの?
どっちも現在時刻を取得する関数じゃないの?
0852デフォルトの名無しさん
2005/06/30(木) 09:25:39これだけ書かれても、それ以上自分で調べることもしないで思考停止に陥ってるなら
プログラミングなんて止めて自動販売機の空き缶いれでも探ってる方がいいよ。
0853デフォルトの名無しさん
2005/06/30(木) 09:36:082つとも同じだ。同じなので>839は↓これと同じだ。 tmCurTime に値が入るわけ無いだろ。
afx_msg void CMainWnd::OnTimer(UINT ID)
{
CTime tmCurTime;
CTime::GetCurrentTime();
0854834
2005/06/30(木) 09:41:39現在時刻を取得したけどそれをどこにも代入してなかったわけだ
よくわかったありがとう
0855デフォルトの名無しさん
2005/06/30(木) 09:43:44これぐらいドキュメント見てわかるようになれよ。
0856834
2005/06/30(木) 09:45:29静的メンバ関数はもう間違えない
0857デフォルトの名無しさん
2005/06/30(木) 11:45:15呼び出せてしまうC++の文法は個人的にあまり好きじゃない。
thisポインタが渡されるわけじゃないのに紛らわしい。
0858デフォルトの名無しさん
2005/06/30(木) 19:58:11両方に「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:110861デフォルトの名無しさん
2005/06/30(木) 22:18:41何も表示されなくなります。解決法ありませんか?
0862デフォルトの名無しさん
2005/06/30(木) 22:49:28ListCtrlですか?
InsertItem()する前に構造体のアイテムとサブアイテムに正しく番号
ふっておかないと表示されないです。
アイテム:0 サブアイテム:0 のときはInsertItem()、
アイテム:0 サブアイテム:1〜のときはSetItem()、
で入れないと正しく表示されません。この辺は大丈夫ですか?
0863デフォルトの名無しさん
2005/06/30(木) 23:45:27CTreeCtrlです。
書いたつもりが書いてませんでした。
0864デフォルトの名無しさん
2005/07/01(金) 01:44:42VC6 のMFCクラスウィザートのように、自分の作ったクラスのオブジェクトに対し、
メッセージや変数を追加したいのですが、どうも見つかりません。
関数のオーバーライドや、ダイアログコントロールに対して変数を設定するのに
重宝していたのですが・・・
友人から本体部分だけ貰ったんで、MSDNがないんです。^^;
サイトのMSDNで調べても要領を得ないんで、こちらに来てみました。よろしくお願いします。
Visual Stdio .NET 2003
VC++ .NET 7 です
0865デフォルトの名無しさん
2005/07/01(金) 02:02:040866デフォルトの名無しさん
2005/07/01(金) 02:05:31http://www.microsoft.com/japan/msdn/library/ja/vccore/html/vcgrfWhereIsClassWizardInVisualCNET.asp
0867575
2005/07/01(金) 02:07:31無事、オーバーライドできました。
0868864,867
2005/07/01(金) 02:16:05>866さん、リンクありがとうございます。私の探し方が甘すぎの模様です。
0869デフォルトの名無しさん
2005/07/01(金) 17:23:56858です。
問題はリストコントロールのプロパティで「フォーカスを持たないときでも
項目を選択」みたいなやつをTRUE(リストとフォーカスの関係を無視する)
にすることで解決しました。フォーカスの存在は盲点でした。
リストのOnNMClickListイベントは自分自身のフォーカスを持ってないと反応
しないらしく、2度クリックしないと反応しない原因は、1度目のクリックで
リストのフォーカスを取得。2度目のクリックでOnNMClickList反応という流れ
のようです。ですので↑にあるプロパティ項目の変更で、1クリックで
直接OnNMClickListようにする必要があるみたいです。
この変更をした場合、以前に選択した項目が薄いグレーで見えてしまうので、
必要ないときは
SetItemState( -1, 0, LVNI_SELECTED );//選択項目(グレーの部分)を解除
SetItemState( -1, 0, LVNI_FOCUSED );//選択項目(点線の枠)を解除
をすることで、処理できます。
ひとつ勉強になりました。ありがとうございました。
0870デフォルトの名無しさん
2005/07/01(金) 19:26:08RCS.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どうやって末尾にいどうすればいいのですか?
0873デフォルトの名無しさん
2005/07/01(金) 20:01:440874デフォルトの名無しさん
2005/07/01(金) 20:03:57ttp://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:180876デフォルトの名無しさん
2005/07/01(金) 20:42:32MoveLast 関数を呼び出してもレコード数は更新されません。
ユーザーが独自にレコード数を数えるには、IsEOF が 0 以外を返すまで
MoveNext を繰り返し呼び出します。
0877デフォルトの名無しさん
2005/07/01(金) 20:56:31MoveNextなんか繰り返し呼んでると、場合(DBMSとかレコードセットの種類とか)によっては
ものすごく時間がかかるので、count(MFCじゃないぞ)でも使った方がいいな。
0878デフォルトの名無しさん
2005/07/01(金) 21:04:27あなたの言うとうりでした。
解決しました
0879デフォルトの名無しさん
2005/07/01(金) 23:24:290880デフォルトの名無しさん
2005/07/02(土) 02:28:43イケナイ子かどうかは判らん。
でも大抵AfxGetApp()で間に合ってる。おいらの場合。
0881デフォルトの名無しさん
2005/07/02(土) 03:38:18theAppを直接使うのは泣きべそで弱虫のするすることだ。
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:150884832
2005/07/03(日) 15:10:15あくまでリソースダイアログはモーダルのときのみと。
0885デフォルトの名無しさん
2005/07/03(日) 15:14:54prgDlg->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:38IDC_STATIC が重複してるだけ。
各 control にちゃんと固有の ID 付けること。
当然 dialog resource template で作って modeless で動く。
0887832
2005/07/03(日) 15:26:13それでも例外になりました。
ちなみに、
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それから 885 の指摘は prgDlg object の寿命のことを言っている。
modal じゃないのだから function 内の寿命ではダメだ。
modeless なら 885 のように free store 内に作るか、static な寿命にすること。
0889832
2005/07/03(日) 15:29:01失礼しました。
(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>(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
>では、まだNULLのままです。
じゃあダメにきまってる。
>IDC_STATICというIDも間違ってません。
resource editor で IDC_STATIC じゃなくて何か固有の ID 作ること。
0891デフォルトの名無しさん
2005/07/03(日) 15:35:14コントロールパネルの画面設定でやる256色とかHighColorとかTrueColorとかの現在の設定を知りたいんです。
スレ違いだったらゴメンなさい。
0892832
2005/07/03(日) 15:37:32解決しました。
他のダイアログリソースとIDが重複していたみたいです。
他のダイアログリソースは同じ会社の人が作ったものでしたが、気がつきませんでした。
皆様、ありがとうございました。
0893882
2005/07/03(日) 15:38:070894デフォルトの名無しさん
2005/07/03(日) 15:40:43「IDC_STATIC」はデフォルト値として特別な意味を持ってるんだよ。
他のリソースと重複していることが問題の本質ではない。
0896デフォルトの名無しさん
2005/07/03(日) 15:48:09別に特別な意味はないでしょ。MFC が reserve してるだけで。
892 の問題は dialog control ID の重複であなく dialog ID の重複という
落ちだったらしいし。ほっとけばいい。
0897882
2005/07/03(日) 15:50:11IDC_STATIC以外は問題なかったので。
0898デフォルトの名無しさん
2005/07/03(日) 15:51:25IDC_STATICは編集できないって基本だろ
0899デフォルトの名無しさん
2005/07/03(日) 15:57:250900デフォルトの名無しさん
2005/07/03(日) 15:59:45>いえ、dialog control IDの重複でした。
>>892 で
>他のダイアログリソースとIDが重複していたみたいです。
て言うからさ。
しかし dialog control ID の重複なら >>889 で
>(CStatic*)(prgDlg->GetDlgItem(IDC_STATIC));
>では、まだNULLのままです。
てことはないだろう。意図した control は取れないが何か取れるはずだ。
0901デフォルトの名無しさん
2005/07/03(日) 16:01:09編集って何を指してる?
SetWindowText() はできるよ。
0902デフォルトの名無しさん
2005/07/03(日) 16:04:470903デフォルトの名無しさん
2005/07/03(日) 16:07:48それを GetDlgItem(IDC_STATIC) で意図どおり取得できるし、
なおかつそれが static control だったら SetWindowText() もできる
って言ってるのさ。
0904デフォルトの名無しさん
2005/07/04(月) 10:07:38returnキーを押すとWM_CLOSEが飛ぶようで、returnキーを押してもWM_CLOSEが飛ばないようにするためには
どうすればいいのでしょうか?
よろしくお願いします。
0905デフォルトの名無しさん
2005/07/04(月) 10:42:08OnOKをoverrideしたmethod作って、実装は空にするとか。
Escapeで閉じないようにするには、OnCancelに同じ事を。
タイトルバーの×ボタンを押したらダイアログを閉じるようにするには、
WM_CLOSEメッセージを捕まえたOnCloseハンドラで、CloseDialogとか
呼べばOKだったような希ガス
0906デフォルトの名無しさん
2005/07/04(月) 10:42:29フォーカスをあわせると日本語入力のモードに切り替わるようにしたいのですが
0907デフォルトの名無しさん
2005/07/04(月) 12:45:27ImmGetContext();
ImmSetOpenStatus(, TRUE);
killfocusのとき
ImmSetOpenStatus(, FALSE);
ImmReleaseContext();
日本語モードの制御は
ImmSetConversionStatus();
0908デフォルトの名無しさん
2005/07/04(月) 22:11:20Returnキーでダイアログが閉じるのは当たり前の挙動だけど、
それを敢えてそうさせたくない理由は?
0909デフォルトの名無しさん
2005/07/04(月) 22:32:54Returnキーでダイアログが閉じるのを敢えて容認している理由は?
0910デフォルトの名無しさん
2005/07/04(月) 22:35:46OKボタンにフォーカスがある状態で押しただけじゃないの?
0911デフォルトの名無しさん
2005/07/04(月) 22:42:50そうなるのが一般的なダイアログだと思っているから。
個人的にもそうでないダイアログはうざい。
0912デフォルトの名無しさん
2005/07/04(月) 22:47:39確定出来ちゃうダイアログ最高!
0913デフォルトの名無しさん
2005/07/04(月) 22:49:240914デフォルトの名無しさん
2005/07/04(月) 22:50:460915デフォルトの名無しさん
2005/07/04(月) 22:59:46BS_DEFPUSHBUTTON スタイルのボタンが押されたことになるのが、
Windows でのお作法。
このスタイル、「OK」ボタンにあるダイアログも多いけど、
検索ダイアログの類だと「次を検索」あたりにあることが多いか。
0916デフォルトの名無しさん
2005/07/04(月) 23:00:070917デフォルトの名無しさん
2005/07/04(月) 23:03:50914のは>>911向け
0918デフォルトの名無しさん
2005/07/04(月) 23:06:57だよね。おかしいと思った。
0919デフォルトの名無しさん
2005/07/04(月) 23:13:18そのdialogはOKとCancelのある普通のmodal dialogだという前提で話が進んでいるようだが。
この前提が違ったら意味ないね。>>915の書いてるような検索のmodeless dialogとか。
0920デフォルトの名無しさん
2005/07/04(月) 23:16:29OKやCancelボタンにフォーカスがあるときにReturn押してもOKやCanelせずに
閉じないdialogはやめたほうがいい。
0921920
2005/07/04(月) 23:19:160922デフォルトの名無しさん
2005/07/04(月) 23:22:430923デフォルトの名無しさん
2005/07/04(月) 23:23:49http://www.microsoft.com/japan/msdn/accessibility/general/ATG_KeyboardShortcuts.asp
UI設計に関わる人間は必読です。全部守るのは大変だけど。
0924デフォルトの名無しさん
2005/07/04(月) 23:26:58BS_DEFPUSHBUTTONがPUSHされる動作をやめさせたいだけじゃないの?
結構、そういう要望はあると思うが
不「可視」、「無効」属性でダミーの「標準のボタン」を作っておけばいいんでは
「」はVC6での表記、VC7は知らん
0925デフォルトの名無しさん
2005/07/04(月) 23:27:00・可能な場合、ダイアログ ボックスの既定のアクションに Enter キーを使用する。
・操作の中止またはキャンセルに Esc キーを使用する。
「可能な場合」ってのがポイントだな。
0926デフォルトの名無しさん
2005/07/05(火) 00:44:32OKやCancelで閉じたくないとは思いませんかそうですか俺だけですか
0927デフォルトの名無しさん
2005/07/05(火) 00:53:240928926
2005/07/05(火) 11:22:25×OKやCancelで
○EnterやEscで
0929デフォルトの名無しさん
2005/07/05(火) 12:14:500930デフォルトの名無しさん
2005/07/05(火) 12:22:52パシャッ
∧_∧ パシャッ >>926
パシャッ ( )】Σ
. / /┘ パシャッ
ノ ̄ゝ
0931デフォルトの名無しさん
2005/07/05(火) 19:49:480932デフォルトの名無しさん
2005/07/06(水) 20:27:41その子ダイアログの背景色を変えたいのですが、どのようにすれば
いいでしょうか?ネットで色々調べてみてるのですが、いまい
ち分かりません。具体的に教えていただけないでしょうか?
0933デフォルトの名無しさん
2005/07/06(水) 20:41:15ただ単にダイアログの背景色を変更したいのか、どちらでしょうか。
あと、今どこまで出来てるのかも記した方が良いと思います。
(ダイアログの作り方から聞いてるのか、そうでないのかが分からない。)
0934デフォルトの名無しさん
2005/07/06(水) 20:59:17すいませんでした。説明不足でした。
ボタンを押して子ダイアログを表示するとこまではできています。
あとはその子ダイアログの色を変えたいのです。
簡単なことのようですがわかりません。
0935デフォルトの名無しさん
2005/07/06(水) 21:01:28CDialogクラスでモーダレスダイアログとして作っています。
0936デフォルトの名無しさん
2005/07/06(水) 22:02:06HBRUSH hbr=::CreateSolidBrush(RGB(255,0,0));
return hbr;
0937デフォルトの名無しさん
2005/07/07(木) 11:35:59ありがとうございます。
できました。
0938デフォルトの名無しさん
2005/07/07(木) 21:10:11を使用して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:480940デフォルトの名無しさん
2005/07/07(木) 22:45:26さすがマイクロソフトの自動翻訳はクオリティ高いなw
とりあえず英語の原文
http://support.microsoft.com/kb/194124/en-us
0941デフォルトの名無しさん
2005/07/09(土) 22:17:49けですか?
0942デフォルトの名無しさん
2005/07/09(土) 23:23:56それじゃ GDI リソースがリークするのでまずいでしょ。
0943デフォルトの名無しさん
2005/07/09(土) 23:36:54そうかもしれんしそうじゃないかもしれん。
ツールボックスの造りによってどうにでもできる。
0944デフォルトの名無しさん
2005/07/10(日) 08:33:00このバイナリを他の言語のOSで起動すると
ロケールは変更されるのでしょうかか?(テスト環境がないもので...)
MFCをスタティックリンクした場合、ダイナミックリンクした場合でも変わるのでしょうか?
よろしくお願いします。
0945944
2005/07/10(日) 08:33:56の間違いです...
0946デフォルトの名無しさん
2005/07/10(日) 13:16:04CString::Findの逆検索をおこなうメソッドはないのでしょうか?
0947デフォルトの名無しさん
2005/07/10(日) 13:30:59MSDN で"CString クラス メンバ"を調べれ。
0948デフォルトの名無しさん
2005/07/10(日) 13:35:080949デフォルトの名無しさん
2005/07/10(日) 13:38:580950946
2005/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>別の逆検索メンバがあるのかと思い
意味不明だが? CStringのメンバは調べたんだよね?
0952デフォルトの名無しさん
2005/07/10(日) 13:50:05ソース見ろ
汚いソースだが、目的の物があるかないか(非公開でも)はわかるはず
0953デフォルトの名無しさん
2005/07/10(日) 14:14:40error C2660: 'ReverseFind' : 関数が不正な 2 個の実引数をともなって呼び出されました。
0954デフォルトの名無しさん
2005/07/10(日) 15:55:28VC2005 Express edition beta2を使っていますが、MFCは使えないのでしょうか?
どうしたら使えるようになりますか?
0955デフォルトの名無しさん
2005/07/10(日) 16:12:170956デフォルトの名無しさん
2005/07/10(日) 16:14:040957デフォルトの名無しさん
2005/07/11(月) 13:43:34938です。
ありがとうございます。
リンク先を見る限り仕様と言う事みたいですね。
EXCELシートのセルを全て文字列に指定できるかどうか
相手に聞いてみます。
0958デフォルトの名無しさん
2005/07/11(月) 16:35:33MFC ClassWizardを開いて、
クラスと結びつけるを選択したのですが、
CDialogから派生したダイアログクラスが出てきません。
作り方も、VC++の「新規フォーム」機能で作った正規物なんだけどなー?????
0959デフォルトの名無しさん
2005/07/11(月) 16:38:05MSDNを見たのですが、妥当なものがありません。
よろしくねがいます。
0960デフォルトの名無しさん
2005/07/11(月) 16:41:11http://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:27SetItemState(n, LVIS_SELECTED, LVIS_SELECTED)
0962デフォルトの名無しさん
2005/07/11(月) 16:44:560963958
2005/07/11(月) 17:01:47クラスとダイアログリソースとの結びつきは、
ソースファイル(?)のどこに書かれてるのでしょうか?
0964デフォルトの名無しさん
2005/07/11(月) 17:17:06もっと具体的に質問してくれたまえ。
#つーか、***_dlg.cpp, ***_dlg.h, ***.rc, resource.hを眺めれば判るだろ。
0966958
2005/07/11(月) 17:26:20「新規クラス "C〜Dlg"のためのファイル(〜.h, 〜.cpp)はそのクラスの残りを含んでいます」
というイミプーなエラーメッセージ。
ちょっと手詰まり。
0967958
2005/07/11(月) 17:37:11ダイアログリソースのプロパティのIDと合致してるんですが、
ClassWizardではクラスと結びついてないおかしいですね。
// ダイアログ データ
//{{AFX_DATA(C〜Dlg)
enum { IDD = IDD_〜_DIALOG };
// メモ: ClassWizard はこの位置にデータ メンバを追加します。
//}}AFX_DATA
0968デフォルトの名無しさん
2005/07/11(月) 17:40:000970デフォルトの名無しさん
2005/07/11(月) 17:48:42捨てろ。
0971デフォルトの名無しさん
2005/07/11(月) 19:00:58別のCDialog派生クラスを作成しようとしたんですが、
「ダイアログ ID」欄に既存IDが出てきません。
1つのダイアログリソースには、基本的に1つのクラスが良いのかな?
0972デフォルトの名無しさん
2005/07/11(月) 19:06:37Wizardが受け付けないだけなので、自分で書く
0973958
2005/07/11(月) 19:15:180974デフォルトの名無しさん
2005/07/11(月) 19:47:53>>970
ファイル捨ててから Wizard 起動したら「作り直す?」って訊いて来ない?
0976デフォルトの名無しさん
2005/07/11(月) 23:18:13>>974は「>>973へのレスが>>970」という意味だと思う
0978958
2005/07/12(火) 09:12:49thx、聞いてきます。
が、何か中途半端に作られて、あるクラスが登録されたり登録されなかったり、、、
で、1ファイルだけ足したいなーと。
0979デフォルトの名無しさん
2005/07/12(火) 11:25:59そんなのいちいち気にしない。
0980デフォルトの名無しさん
2005/07/12(火) 11:31:29SetWindowRectもSetWidth/Heigthもありませんが、
どうすれば良いでつか?
0981980
2005/07/12(火) 11:40:10Dialogのま上にDialogを同じ大きさで開きたいだけですが、
一番簡単な方法教えて下さい。
リソースを同じにするのは大変そう...
0982デフォルトの名無しさん
2005/07/12(火) 11:46:130983デフォルトの名無しさん
2005/07/12(火) 12:00:440984デフォルトの名無しさん
2005/07/12(火) 12:06:100985デフォルトの名無しさん
2005/07/12(火) 13:14:51Form1->Height = Form2->Height;
Form1->Width = Form2->Width;
くらい書けないの、
おかしくない?
0986デフォルトの名無しさん
2005/07/12(火) 13:21:260987デフォルトの名無しさん
2005/07/12(火) 13:23:05何のためのクラスライブラリだよ、
とか思うこと無い?
0988デフォルトの名無しさん
2005/07/12(火) 13:45:02※※※※※ キチガイ発生中 ※※※※※※
※※※※※※※※※※※※※※※※※※※※
0989デフォルトの名無しさん
2005/07/12(火) 14:35:08カラーを言うならフォントも。つか、MFCなんてその程度だ。
で、解決策はいいのか?
サイズ変更は CDialog の基底クラスであるところの CWnd の機能だが。
0990デフォルトの名無しさん
2005/07/12(火) 20:03:170991990
2005/07/12(火) 20:08:520992デフォルトの名無しさん
2005/07/12(火) 20:16:04>派生しまくった
とは?
俺語を使わず説明しなさい。
0993デフォルトの名無しさん
2005/07/12(火) 23:16:100994デフォルトの名無しさん
2005/07/12(火) 23:16:58よく解らんが、暮らすウィザードが吐く/認識するコメント行さえ維持していれば。
0995デフォルトの名無しさん
2005/07/13(水) 00:06:180996デフォルトの名無しさん
2005/07/13(水) 00:13:320997デフォルトの名無しさん
2005/07/13(水) 04:10:40http://pc8.2ch.net/test/read.cgi/tech/1065535118/
0998デフォルトの名無しさん
2005/07/13(水) 05:29:10http://pc8.2ch.net/test/read.cgi/tech/1121200124/
0999デフォルトの名無しさん
2005/07/13(水) 05:52:35http://pc8.2ch.net/test/read.cgi/tech/1121200124/
1000デフォルトの名無しさん
2005/07/13(水) 06:00:0110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。