トップページ⇒tech
961コメント299KB

■ VisualC++(MFC限定)相談室 ■

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
VisualC++相談室はすでにあるようですが
MFCに限ったお話をしましょう。

ルールを提案。
Qは高度なものからくだらないものまで何でもOK。

Aは「知ってるつもり君」、「えらそうに解説する人」お断りと
いうことで。
0911デフォルトの名無しさんNGNG
>>909
「Dialogで作成した」っていうのはダイアログにブラウザコントロールを貼り付けたって意味か?
OnBeforeNabigate2()はブラウザコントロールの親ウィンドウ(つまりダイアログ)につくるんじゃないの?
0912デフォルトの名無しさんNGNG
EXEファイルの小さいアイコンの変更の仕方を教えて下さい。
どうしてもMFCのアイコンになったまんまなのですが…。
0913デフォルトの名無しさんNGNG
>>912
上の方のコンボボックスをいじるべし。
0914デフォルトの名無しさんNGNG
>>913
上の方とはどこの事なんでしょうか?すいません、初心者で…
0915デフォルトの名無しさんNGNG
>>912
リソースエディタでアイコンを直接変更するのはダメなの?
それともこういうこと?
http://www.ylw.mmtr.or.jp/~akky/mfc/dlgicon.html
0916デフォルトの名無しさんNGNG
一つのアイコンファイルに複数のサイズの絵がおけることを知らないんだよ、きっと。
0917デフォルトの名無しさんNGNG
>>916
あぁそういうことか。
リソースエディタを開いて「32×32」とか
書いてあるコンボボックスを選択すればよいってことね。
0918デフォルトの名無しさんNGNG
(ノ゜O゜)ノおぉ〜!
上のコンボボックスの意味がやっとわかりました。
リソースのアイコンファイルの編集の時の話だったんですね。
僕はてっきりダイアログの設定でアイコンを指定すると
アイコンを自動的に小さく縮小しているものだと思ってました(汗)
小さいアイコンを作って解決出来ました。ありがとうございます。
0919909NGNG
>>911

まじですか?ブラウザコントロールの親(ダイアログ)となると
CDialogを継承しているだけなので、CHtmlViewの関数である
OnBeforeNabigate2()は呼び出せないと思いますが。

それとも、この親(ダイアログそのもの)をCHtmlViewから継承させる
ということですかね?

うーーん
0920デフォルトの名無しさんNGNG
>>919
いやそうじゃなくて ブラウザコントロールの「これからなびげーとするよ」メッセージのハンドラがOnBeforeNabivage2()ってことだろ。

CHtmlViewとブラウザコントロール(IWebBrowser2だっけか)の関係をよく考えてみろ。
0921デフォルトの名無しさんNGNG
ダブルクリックに対応するメッセージってあるんですか?
0922少しは調べろよNGNG
>>921
WM_LBUTTONDBLCLK
CWnd::OnLButtonDblClk
0923デフォルトの名無しさんNGNG
SDI+MFCで生成したウィンドウのテキストエリアにある
スクロールバーを消すにはどうしたらよいでしょうか?
0924デフォルトの名無しさんNGNG
>>922
ゴメン、サンクス
0925デフォルトの名無しさんNGNG
モーダルレスダイアログでユーザーにデータ入力して、メインウインドウの内容を変えるようにしたいんですが、
モーダルレスダイアログはどうやって呼び出す側にメッセージ与えるんですか?
例えば元のクラスの関数呼びたいときとか、、
いまは呼び出す側のポインタも貰って使ってるが、そうすると相互includeしてたまにおかしくなる。
クラス宣言の前にincludeするクラスを書いておけば通るが、なんか危なそうなので、、
0926デフォルトの名無しさんNGNG
>>925
ユーザ定義メッセージ
0927デフォルトの名無しさんNGNG
ああ、、(;´Д`)その手があったのか←逝って良し
closeのときメインの方にポストするんですか?
よーくわからないからヘルプ見てみる、、、
サンクス!
0928デフォルトの名無しさんNGNG
>>922
実はいい人
0929900,909NGNG
>>920

最近きづいたことなのですが、まず、自分のアプリはウィザードから
「ダイアログベース」として作成して、Webオブジェクトを貼り付けて
コントロールしています。

もしかして、CHtmlViewって、「SDI,MDI」ベースのアプリじゃないと
利用できないっぽくないですか?
こちらだと、問題なく、OnBeforeNavigate2はオーバーライドできますが・・・

問題点をまとめると、ダイアログベースのアプリで、あるWebオブジェクト
に対するCWebBrowser2クラスで「OnBeforeNavigate2」と同じことを
やりたいのです。

どなたかどうか知恵をかしてください
0930デフォルトの名無しさんNGNG
質問でございます。
WIN32(NT SP5)で、VC6のMFCで作成されたモジュールが実行されている環境です。
VCから起動している8つ程度のスレッドがおのおの
VBモジュールを呼び出し、そこで1個の名前付セマフォを取得しているような状態で、
VCから起動されたスレッドがランタイムエラーを出したときに、
VBが獲得した名前付セマフォが開放されず残っているようなのです。
そこでVBがつかんでいるセマフォを開放する手段はあるでしょうか?
ReleaseSemaphoreは自分がつかんでいるセマフォしか開放できないのでしょうか?

詳しい方教えてください。
0931デフォルトの名無しさんNGNG
>>929
だからぁ
ダイアログクラスで、ウエブブラウザコントロールの「これからナビゲートします」メッセージのハンドラを作ればいいだけじゃないの?

CHTMLViewクラスは内部にウェブブラウザコントロールを持っていて、「これからナビゲートします」メッセージのハンドラとしてOnBeforeNavigate2()が書かれているわけだろ?
君の場合はCHTMLViewがダイアログに変わるだけの話だろ?。

だまされたと思ってクラスウィザードで ダイアログクラスにウェブブラウザコントロールの「これからナビゲートします」メッセージのハンドラを作ってみてくれ。
それで何が不満なのか教えてくれ。

それともウェブブラウザコントロールの派生クラス自身でどうしてもやりたいのか?それならCHtmlViewの話がでてくるのはおかしくないか?

それとも俺はからかわれているだけなのか?
0932デフォルトの名無しさんNGNG
>>930
そのクソOCXを捨てなさい。
0933デフォルトの名無しさんNGNG
>CHtmlView
Viewはウィンドウではないのでメッセージはポストされません。
なのでダイアログの派生元をCHtmlViewにしてもメッセージハンドラは
呼ばれません。
0934900,909NGNG
>>931
いろいろありがとうございます。決してからかっていません。
それから、動作報告も必ずします。

これから試してみますが、933さんのような意見があると、ちょっと不安・・・
931さんを信じてみます
0935デフォルトの名無しさんNGNG
ダイアログベースのアプリケーションで
エディットコントロールなどを貼り付けてしまうと、
WM_CHARやWM_KEYDOWNなどがダイアログクラスで受け取れなく
なってしまいますけど、
いい対処法ってありますか?
0936900,909NGNG
>>931
やっぱり駄目でした

>だまされたと思ってクラスウィザードで ダイアログクラスに
>ウェブブラウザコントロールの「これからナビゲートします」メッセージの
>ハンドラを作ってみてくれ。

class CTestDlg : public CDialog
{
}
ダイアログクラスはこんな感じですが、
やはり、ClassWizardでは、OnBeforeNavigate2メッセージハンドラは
生成できないですね。

CDialogを継承するだけでは無理ぽい気もしますが・・・
かといって、

class CTestDlg : public CDialog,public CHtmlView
{
}

も駄目でしたし。
0937デフォルトの名無しさんNGNG
>やはり、ClassWizardでは、OnBeforeNavigate2メッセージハンドラは
>生成できないですね。
ClassWizardがないと、何もできない人のようですね:)
CHtmlViewくらい、改造してしまえばいいのに。
0938デフォルトの名無しさんNGNG
どうしてCHtmlViewのソースを見ないんだろう…
0939デフォルトの名無しさんNGNG
>>936
お前には本当にいらいらさせられるな。
ダイアログにブラウザコントロールを貼り付けるだろ。
クラスウィザードでダイアログのクラスを選択して オブジェクトIDでブラウザコントロールを選択するだろ。
そうするとそのブラウザコントロールのメッセージとしてBeforeNavigate2というのがあるだろ。
そのメッセージのハンドラを作れって二日前から延々言ってんだよ。

ダイアログベースのアプリなんだからCHtmlViewは全然関係ない。

メッセージハンドラを作るんだぞ!。オーバーライドじゃないぞ!。わかるか??
0940結構初心者NGNG
すいません。質問です。
文字列の内容を判断して実行させる、インタープリタもどきな機能をもたせたアプリケーションを
作りたいのですが、文字列の判断にif elseを連発して、いまいち見栄えがよくありません。
良い方法があったらどなたかレスお願いします。
0941デフォルトの名無しさんNGNG
>>940
yacc&lex
flex&bison
あたりをキーワードに何か探してみなさい
0942デフォルトの名無しさんNGNG
関数オブジェクトをstd::mapに入れる。見た目だけはいいぞ。トロいが。
0943デフォルトの名無しさんNGNG
>>939
なんつーか・・・なんだかんだで教えてやってるお前・・・優しいな
惚れちまいそうだ(ぽっ
0944940NGNG
>>941
>>942
ありがとうございいます。調べてみます。
ただ、トロいのには抵抗あります。トロさにもよりますが・・・。
0945942NGNG
>>944
多少のオーバーヘッドはあるにせよ、総当りでif elseを繰り返すよりは
比較回数減る分速いとは思うが、結局文字列比較繰り返してることには
変わらないからトロい。hash_mapならもうちょっと速いが標準じゃないし。

まぁ、yacc&lex使う根性がなくて、速度を求めないならアリって程度。
0946デフォルトの名無しさんNGNG
MFCならCMap?
0947940NGNG
>946
CMap!?
ザッツサウンドナイス(訳:根性なくてもできそうな響き♪)!!
それも見てみます。
0948デフォルトの名無しさんNGNG
VCでActiveXdll作った時、どこにコード書けばいいの?
0949デフォルトの名無しさんNGNG
>>942
遅いかどうか以前に、yacc と比べると受け付ける言語のクラスが限定されるのが痛いと思われ。
手で状態遷移を計算できる程度だと LR(1) なんて論外でしょ。
0950936NGNG
>>939
なるほど
うまくいきました。自分で間違って思い込みしていたところがあって、
ClassWizard立ち上げても見過ごしていました。
デバッガでも万事うまく通過しました!!
ありがとうございました
0951デフォルトの名無しさんNGNG
ちょっと失礼!

age。
0952デフォルトの名無しさんNGNG
言葉は汚いが、優しい人だ
>>936
0953デフォルトの名無しさんNGNG
どーせジサクジエンだろ?
俺は認めないぞ!
0954デフォルトの名無しさんNGNG
ちょっと教えてください
CBitmapButtonで管理している任意のビットマップボタンを
操作不能(マウスオンに反応せずノーマルボタン状態の画像が表示されたまま)
にするのはどうしたらよいのでしょうか?
EnableWindow(FALSE)だと、ボタンの画像すら描画されないですし。
0955デフォルトの名無しさんNGNG
>>954
EnableWindowでできますよ。
ボタンに割り当てる画像(操作不能時)のリソースIDを
"hogehogeX" にしてますよね?
0956デフォルトの名無しさんNGNG
>>1
そろそろ新スレたてるべきかと。
もういないかもしれないけど・・・
0957デフォルトの名無しさんNGNG
>>1じゃないけど

■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/test/read.cgi/tech/1008031675/
0958みゆNGNG
VC++6.0で
新規作成で
MFC AppWizard→ダイアログベース→***App
を選択したもので

始めに出来ているダイアログ画面の
親を適当なもの(ウィンドウクラス名をAとする)
に変更することなんかはできるのでしょうか?

このときダイアログのウィンドウクラス名をBに設定し
親のウィンドウクラス名をAにする方法もおしえてください
0959デフォルトの名無しさんNGNG
VC++6.0でNetscapeプラグイン形式のものを
IE6で動作させるためにActiveX化したいと
思っています。
機能は、ファイルアップロード、ダウンロードです。
お勧めの開発方法、書籍などあったら教えてください。
0960デフォルトの名無しさんNGNG
質問です。

あるスレッドを使ったプログラムをCOM化すると、
WaitForSingleObjectのところで応答が返ってきません。
どうやらスレッドが終了していないようなのですが、原因不明です。
COM化してない場合は問題なく動くのですが、
なにかご存知の方、いらっしゃいますでしょうか?
0961デフォルトの名無しさんNGNG
>>959-960
新スレ逝ってください。ageないでください。
http://pc.2ch.net/test/read.cgi/tech/1008031675/l50
レス数が950を超えています。1000を超えると書き込みができなくなります。