■MFC相談室 mfc11.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
関連リンクは >>2-10 の辺り。
0655デフォルトの名無しさん
NGNGMFCでアクセスのDBから検索するプログラムつくりました。
一緒にアクセス(のフォーマット)のDBを配布したいんですけど
ライセンスは大丈夫ですかね?
0656デフォルトの名無しさん
NGNGテンプレートを作って
CMainFrameでCDialogBarのオブジェクトを用意
コンストラクタでCreateを呼ぶ
でコンパイルは通りますが実行しようとすると
"0x77f5284"の命令が"0x00000000"のメモリを参照しました。
メモリが"written"になることはできませんでした。
と出て実効できません。
とりあえずダイアログバーを表示するだけの場合でも他に何かやらなければならないことがありますか?
0657デフォルトの名無しさん
NGNGCMainFrameのコンストラクタで、CMainFrameを親としてCDialogBarをCreateしてる
というオチだろうか?
0658デフォルトの名無しさん
NGNGコンストラクタ内の auto 変数として CDialogBar オブジェクトを定義している
というオチだろうか?
0660656
NGNGコンストラクタではなくMainFrameのOnCreateでCreateを呼んでいます
CDialogBar オブジェクトはちゃんとCMainFrameクラスのメンバとして宣言していますし
>>659のサイトの通りにやっても同じエラーが出て実効できません
0661デフォルトの名無しさん
NGNGまず落ちている個所を特定しる。
0662デフォルトの名無しさん
NGNGUNICODEビルドの場合、std::stringの派生じゃ困ると思う。
0663デフォルトの名無しさん
NGNGstd::basic_string<TCHAR>
0664デフォルトの名無しさん
NGNGそんなことみんな知ってるよ
0665デフォルトの名無しさん
NGNGちゃんと話がかみ合ってると俺は見ているが・・・
この後の展開次第かもな
0666デフォルトの名無しさん
NGNGVC++6.0はちがったとおもったけど
0667デフォルトの名無しさん
NGNGそそ、C6とC7で互換性がなくて怪しげなソースが引っ掛かり捲くり。
C6は兎も角、C4の頃はまともにテンプレートが使えない状態だったし。
0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNG爆弾? 新型でてるのか??
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG実行途中で変えるとか起動時に変える
というのではなく、デフォルトを変えたいと言うか…
0673デフォルトの名無しさん
NGNGリソースストリングテーブルのIDR_MAINFRAMEに
・SDIなら先頭から\nまでの文字列
・MDIなら文字列そのもの
がタイトルバーに表示されるような気がした。
0675デフォルトの名無しさん
NGNG大サービスついでに言っとく。
ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/caption.html
0676デフォルトの名無しさん
NGNGリンク先のページで、動的に変える場合は SetWindowText とか使えとなっているけど、
CFrameWnd::SetTitle で変えるか、GetTitle をオーバーライドして変えておかないと
不意に元に戻されて「MFCは陰で何やってるかわかんない・・・APIだけの方がラクぽ」
ってことになるので注意。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNG_TCHAR
tchar.hが_UNICODE/_MBCSが定義されているかで切り替える。
TCHAR
windows.h(の中のwinnt.h)がUNICODEが定義されているかで切り替える。LPCTSTRなどの仲間がいる。
0679デフォルトの名無しさん
NGNGMFCでSDIのプログラムを作っています。
ビューの基本クラスをCTreeViewにしています。
フレームのメンバ関数から、ビューのメンバ関数を使えずにいます。
ビューの基本クラスがCViewの場合、ポインタをGetActiveViewで取得でき、
そこからメンバ関数を使えると思うのですが、
自分のプログラムの場合、CTreeViewなので、GetActiveViewの戻り値を
CTreeViewにキャストして関数を使ったところ、コンパイルは通るのですが、
アドレスがおかしいなどのエラーがでました。
どなたか知恵をかしてください。
0680デフォルトの名無しさん
NGNGまずはデバッガで GetAvtiveView が返してきたものを見てみたら?
0681デフォルトの名無しさん
NGNGそりゃCTreeViewにキャストしたらCTreeViewまでのメンバしか使えないでしょ。
0683デフォルトの名無しさん
NGNGエクスプローラの超簡易版みたいなものを作っています。
ツリービューでの表示と展開はできるようになったのですが、
たとえば展開しているフォルダに別アプリなどで新しいフォルダ
を作成した時、すぐにエクスプローラの表示に反映させるには
どうすれば良いでしょうか?
MFC6.0です、よろしくお願いします。
0684デフォルトの名無しさん
NGNGFindFirstChangeNotification
0685デフォルトの名無しさん
NGNGありがとうございます!
0686デフォルトの名無しさん
NGNG回答ありがとうございます。MFCだと_TCHARがよさそうなので_TCHAR使います。
0687デフォルトの名無しさん
NGNG監視も行いたいと考えています。とりあえず考え付くのは
CWinThread::PumpMessage内のGetMessageの前、又は
OnIdleにてMsgWaitForMultipleObjectsを呼ぶ方法です。
CWinThread::RunのoverrideにしてもOnIdleのブロックに
しても余り一般的とは思えず躊躇してます。
似たような事をやったことある人がいれば意見をお願いします。
0688デフォルトの名無しさん
NGNGAfxBeginThread()でスレッドを作り、その中でシグナルイベント待ち。
ユーザーインターフェーススレッドに対して通知をしたい場合は、
WM_USER以上のユーザー定義メッセージを送信する。
受け取る側でもメッセージをユーザー定義メッセージ受信できるようにしておく。
0689デフォルトの名無しさん
NGNGプラグインとはどうやって作ればいいのでしょうか?
0690デフォルトの名無しさん
NGNGsusieプラグインで練習してみれば?
0691デフォルトの名無しさん
NGNGWM_USERじゃ拙いって。WM_APPを越える値がお勧め。
>>687
私のアプリでは、タイマーでイベント監視をした。
イベントの場合は落とし穴がいろいろあるから気をつけてや〜
0692687
NGNG別スレッドだとスレッドスイッチが多くなるのが少し
気になります。
>>691
タイマーだと処理周期が頭打ちとなってしまいそうです。
基本的には688の方法でもパフォーマンス的にはOK
だと思いますが、MsgWaitForMultipleObjectsを使えば
監視するだけのスレッドを立ち上げずにすむかなぁと思い
質問しました。
0693デフォルトの名無しさん
NGNGメニューのプロジェクトへ追加、コンポーネントとコントロール・・を使って追加すると
ラッパクラスが出来ると思うのですがこれを使うことは出来るのでしょうか?
このクラスのインスタンスをDll側のグローバルに用意してもいざメソッドを呼ぶと
void AFX_CDECL CWnd::SetProperty(DISPID dwDispID, VARTYPE vtProp, ...)
{
ASSERT(m_pCtrlSite != NULL); // not an OLE control (not yet, at least)
で引っかかってしまいます。
このクラスは使わずに自分でCreateInstanceするのですか?
0694デフォルトの名無しさん
NGNG処理速度が問題になるなら、イベントでの同期は検討しなおした方がよくない?
イベントはそれ自体早くないと思うし、発行側は処理側が処理したことを知りえないから
何らかの方法で返信しないといけなくなるしね。
0695デフォルトの名無しさん
NGNG質問者の分際で、評論家・審査員を気取ってんじゃねーよ、クソが
0696デフォルトの名無しさん
NGNG単にスキル不足なだけちゃうんかと。
0697デフォルトの名無しさん
NGNGお前が偉そうに言うな
0698デフォルトの名無しさん
NGNG何故こんなこと思ったかというと
CString& func(CString& str)
{
CString tmp;
// 処理
return str = tmp;
}
returnのところで
error C2440: 'return' : 'const class CString' から 'class CString &' に変換することはできません。(新しい動作 ; ヘルプを参照)
変換で修飾子が失われます。
と出たからです。
std::string::operator=の戻り値にはconst付いてないのに、CStringに付いてる意図はなんでしょうか?
0699デフォルトの名無しさん
NGNGCStringが作られた頃のC++は代入演算子の結果がCと同じく右辺値だったからじゃない?
それでCStringもそれに合わせてoperator =()の戻り値を値渡しに……するとオーバーヘッドがかかるんでconst参照にした、って具合。
0700デフォルトの名無しさん
NGNGWTLって知ってる?マイクロソフトのサイトからダウソできるよ。
WTLのCStringだと、constじゃないよ。
WTL::CStringで解決。終了。
0701デフォルトの名無しさん
NGNG>意図はなんでしょうか?
って聞いてるんだから、その答えじゃ解決になってませんよっと。
ちなみに、手元にあるVer7.1(build 3340)ではconstで
最新のWTL7.5.4196.0 では付いてませんね。
0704デフォルトの名無しさん
NGNG0705yara ◆SSLypP3Luo
NGNG0706デフォルトの名無しさん
NGNGhttp://www.codeproject.com/miscctrl/simplebrowserformfc.aspを参考にして
メモリ上のHTMLを書き込むと言うプログラムを作成いたしました。
このプログラムはCListView上のキーダウンのタイミングでCHtmlViewを書き換えるものです。
これは上手くいったのですが、問題が出てきてしまいました。
CHtmlViewをクリックしたあとに、CListView上にクリック等で戻りキーダウンすると
FocusがCHtmlViewに移動してしまうのです。
このときにメモリ上のHTMLファイルを書き込んでおりまます。
どうやら、HtmlViewをクリアする所あたりで問題が起きているようなのですが。
また、CHtmlViewをクリックを一度もしない場合においては問題なく動いております。
SetFocusでCListViewにセットし直しても、上手く動かないようです。
何か良い案、参考情報へのリンクなどお知りでございましたらご教授ください。
0707デフォルトの名無しさん
NGNGSetActiveViewとかどうよ?(試してないが)
ついでに
>お尻でございましたら
「ご存知でしたら」じゃね?
0709デフォルトの名無しさん
NGNGC○○ViewのOnInitialUpdateで
CTabCtrl.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 200, 80), this, 100);
を呼び出すと、SDIだと上手くいったんですがMDIでは何故かタブが生成されません。
エラーが出る訳でもなく、thisをGetWindow(GW_CHILD)に変更するとMDI子ウィンドウに生成されるので、
指定するウィンドウか生成するタイミングが間違っていると思うのですが色々試しても分かりません。
原因の分かる方、教えて下さい。
0710デフォルトの名無しさん
NGNG0711デフォルトの名無しさん
NGNGコンボボックスのエディットコントロールでテキストを変更した場合、OnCbnEditchangeXXXXが呼ばれますが、
このエディットコントロールのテキストの内容を取得する方法を教えてください。
0712デフォルトの名無しさん
NGNG「テキストの内容」ってなんだ?
GetLBText()じゃないの?
つーかリファレンスでメンバ関数のチェックぐらいしたんだろうな?
0713デフォルトの名無しさん
NGNG失礼しました。
誤)テキストの内容
正)エディットボックスの内容
その関数だとリストボックス内のテキストです。
エディットボックス内のテキストを取得する方法が見つかりません。
0714デフォルトの名無しさん
NGNG0716デフォルトの名無しさん
NGNGIEコンポーネントを使ってネット上からhtmlファイルを取得し、
解析して保存したいのですが、
ブラウザ画面を表示させたくはありません。
IEコンポーネントのうちURLからコンテンツを取得する機能と
htmlコンテンツを解析する機能を使いたいのですが
どのようにすればよいのでしょうか?
0717デフォルトの名無しさん
NGNG「解析」というのが何を指しているのか分からないね。
IEコンポーネントを使うって書いてあるけど、ブラウザ・エンジンを使うってのは
普通レンダリングさせるためであって、ファイル内容をHTMLコードとして見る
だけなら必要ないことのはずだが?
0718716
NGNGレスありがとうございます。
> 「解析」というのが何を指しているのか分からないね。
テーブルで表示されてる表などを整形してリスト表示したり
したいです。
> IEコンポーネントを使うって書いてあるけど、ブラウザ・エンジンを使うってのは
> 普通レンダリングさせるためであって、ファイル内容をHTMLコードとして見る
> だけなら必要ないことのはずだが?
ごもっともです。
・URLからhtmlコードを簡単に取得できそう。
・IE対応のページを確実に解析できそう
というのが理由です。
htmlの解析という視点に立つと他の手段はあるのでしょうか?
0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNGそうです。
でもXMLパーサーでは解析できませんよね?
一応試して見ましたができなかったので
IEコンポーネント使えば確実だろうと思いました。
0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNG中身をデータとして扱いたいならCHttpXXX系やCAsyncSocketなんかを使って
ファイル・データをもってきて自分で使いたいように加工するもんだと思う。
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNG自分でparseしたくないって話だっただろ。
GetHtmlDocumentでドキュメントインターフェイスの取得できるし。
0725デフォルトの名無しさん
NGNGIEコンポっていうか MSHTML っていうのが MS の html エンジン。
IE も WebBrowser Control もコレ使ってる。
使い方のサンプルは以下にあるよ。
データを持ってくるところは自分でやることになるような気がするけど。
http://msdn.microsoft.com/archive/en-us/samples/internet/browser/walkall/default.asp?frame=true
0726720
NGNG>> 721,725を見ましたが
この二つの組み合わせでうまくいきそうです。
感謝しています。
0727初心者D
NGNGOKを押したら、その値を元にCPenの絵が動くっていう
ソフトを作ってます。
ダイアログを表示するのはクラスCxxxAppに、
CPenで書かれた絵はOnDrawじゃなくCxxxViewクラスの中にpublic:として
HogeDraw()(OnDrawじゃないっす)を作ってあります。
ダイアログの関数に
if( Hoge.DoModal() == IDOK ){
クラスCxxxViewのメンバ関数HogeDraw(ダイアログの値を引数にする)
}
としたいのですが、どう記述すれば良いのですか?
参考になりそうなサンプルとかあったら教えてください。
対処できずにはや3日ほど経ちました…
0728& ◆RdmUjfVKqQ
NGNGCxxxViewのHogeDraw(引数あり)を使いたいんですが、
どう変数を宣言すればいいのか、どうポインタを渡せば良いのか
分からないってことです。
すいません、お願いします。
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG再質問します。
677 名前:デフォルトの名無しさん :04/09/09 22:52
ライブラリに依存する質問になってしまいますが、MFCのCAsyncSocketのOnXXX()は、
どういう仕組みで呼び出されるのでしょうか?
もし、メッセージポンプを経て呼び出されるのなら、OnXXX()の中では長時間の処理が
出来なくなりますが、皆さんどう対処しているのでしょう?
678 名前:677 :04/09/09 23:38
ソース見てみました。
カレントスレッドのメッセージポンプを利用するみたいですが、あってますか?
もしかしてスレ違いでしょうか?
0733732
NGNGこれを利用すればいいのでしょうか?
0734デフォルトの名無しさん
NGNG処理をスレッドに配置してスレッド起動をして、そのままメッセージハンドラを抜けてしまえばいいんじゃない?
ってか何をするのかによる。本当に長い計算をするのならスレッドにすればいいと思う。
何かを待つのなら・・・何を待つのか聞きたい。
0735732
NGNG例えば子プロセスの終了を待つとか。
0736732
NGNGソケット側のちょっとした挙動の変化でGUIを止めたくないのです。
こういう要求って変ですか?
0737デフォルトの名無しさん
NGNGそのスレッド内部でWaitFor系APIで子プロセスの終了イベントを待つ。
(たぶんその子プロセスのハンドルかなんかがそのままイベントとしてWaitできると思った。)
そんで、WaitForSingleObjectを抜けたらメインスレッドにメッセージをポストしてスレッドはそのまま終了。
というのはどう?
0738デフォルトの名無しさん
NGNGおそらくそれが正当な方法なんでしょうね。
Microsoftのサンプルもそういう形が多いです。
ところで、複数のサーバが合わさった形のプログラムはどうインプリメントするべきなんでしょうか?
たとえば、HTTP、FTPなどが組み合わさっているようなものです。
もし、あるサーバで異常が起こった場合、タイムアウトなどによって回復されるまでの期間
GUIが重くなる事態は避けたいと思います。
各サーバごとにUIスレッドを分けるといいのかな?などと妄想しましたが、
普通はどうするものなのでしょうか?
HTTP、FTPというのはあくまでもたとえです。
0739デフォルトの名無しさん
NGNG0740ディフォルトの名無しさん
NGNG動作しないなんてあるのでしょうか?
日本語版や英語版のWINDOWS環境では問題なく動作していたんですが
ドイツ版のWINDOWSでは動くPCと動かないPCが出てきました
動かないPCは、コンストラクション後にInitdialogに入らずにそのまま、
そのダイアログが終了してしまうという現象でした。
このようなことってあるんでしょうか?
0741デフォルトの名無しさん
NGNGプロセス間通信にもソケットを使おうとしています。
俺は異常でしょうか?
0742デフォルトの名無しさん
NGNGワーカスレッドでバークレーソケットを使うなら
UIのスレッドとは別にサーバAとサーバBを別々のワーカスレッドにして
おのおのでソケットを作ってlistenしたりすると思う。
そしておのおののサーバスレッドはイベントをUIに通知するためにPostMessageして
メインスレッドと交信する。もしどっちかが死んだり固まったりした場合でリスタートしたいなら
仕切りなおしの同期の処理を設計する必要があるでしょう。
0743デフォルトの名無しさん
NGNG実は、そういう形で作っていたのですが、非同期に切り替えることにしました。
以前は、各ソケットにスレッドを割り当ててブロッキングしていたのですが、
非同期にするに当たってATLあたりからメッセージポンプをいただいて
自前のソケットクラスを拡張するか、MFCを使うか考えました。
そして簡単そうなMFCを使うことにしたわけです。
一つのプロセスでUIスレッドを複数使うのはあまり一般的ではないのでしょうか?
0744デフォルトの名無しさん
NGNGCWinApp派生::InitInstanceでDoModal呼ぶ前に抜けるコードパスも存在する場合がある。
ソケットを使うための初期化処理(Wizが自動インプリメント)に失敗したとか。
0745デフォルトの名無しさん
NGNG別に普通だけど?
0746デフォルトの名無しさん
NGNG素直とは言えない作りに驚きました。
これだったら、自分で作り直したほうがいいのではないかとさえ思うのです。
皆さんはどう思いますか?
0748デフォルトの名無しさん
NGNG既存のものの問題がもしブロッキングとかだったら正しくselectを使うなど
すれば回避できると思う。しかしそのブロッキングの解決策としてCAsyncSocketを使うのは
結局同じ問題に到達するかもしれない上に変なアーキテクチャのために振り回されるかも。
0749デフォルトの名無しさん
NGNGやった分には責任を持たなくちゃいけないことになる。それを踏まえてどこまで
自分で「できる」のか判断して決めるしかないのでは?
0750デフォルトの名無しさん
NGNGOnXXX で(自らなにか)時間のかかる処理をするなら、
非同期でソケットを使う利点はまるでないと思うけど。
>ソケット側のちょっとした挙動の変化でGUIを止めたくないのです。
ちょっと状況が想定できないけど、どんなときにそういう問題がおきますか?
0751デフォルトの名無しさん
NGNGDDXでぐぐれ
0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNGCxxxViewクラスのポインタをグローバル変数かどっかに保存しておけばよろしいかと。
0754デフォルトの名無しさん
NGNGビュークラス内からダイアログを起動すればいいだけの話でしょ?
0755デフォルトの名無しさん
NGNGビュークラスにメッセージ飛ばして、その先でHogeDraw()を実行する。
WM_APPなどでググってみれ。
ダイアログの値を渡す方法はいくらでもある。
グローバル変数でもCxxxAppのメンバ変数でも良し。
そのときはHogeDraw()はpublicじゃなくてもオッケ。
■ このスレッドは過去ログ倉庫に格納されています