内部的にWinsock2を使用して別のサーバアプリケーションと通信を行うActiveXコントロールを作成しています。サーバからのデータ受信を非同期で行うため、WSAAsyncSelect()関数を使用して指定したウィンドウにWinsockからイベントメッセージ(メッセージIDはWM_USER+1を使用)を通知させます。
コントロールをウィンドウなしのアクティベーション使用で開発しているので、WSAAsyncSelect()のメッセージ通知対象ウィンドウがコントロール内にありません。
コンテナによりコントロール充てにメッセージを送ってくれるということなので、コンテナのウィンドウハンドルを取得し、WSAAsyncSelect()のメッセージ通知対象ウィンドウに設定しました。が、コントロールのOnMessageWindowless()にWM_USER+1のイベントは来ていないようです。
私が試したウィンドウハンドルは、次のコードで取得できるものです。
1. AfxGetMainWnd()->m_hWnd
2. CWnd::GetActiveWindow()->m_hWnd (CWndは使用するなとありましたが)

 取得するウィンドウハンドルが間違っているのでしょうか?それとも、コンテナアプリケーションはWM_USERメッセージをコントロールに送ることができないのでしょうか?もしくは、コンテナにWM_USER+1のメッセージはコントロールへ、という設定をしてやる必要があるのでしょうか?

 なお、なぜウィンドウありのコントロールにしないかと申しますと、ウィンドウありだとコンテナ(IEを想定)に乗った直後にウィンドウが生成されず、自分のウィンドウハンドルを取得しようとするとNULLが返ってしまうからです。ユーザがマウスで一度クリックすればOKなのですが・・・オブジェクト生成時に自動的にウィンドウを生成する方法がわかりませんでした。もしこちらが分かればウィンドウありで行くこともできますので、分かる方いらっしゃいましたらお願いいたします。

A 回答 (1件)

一応通知方法はあります。



ウィンドウハンドルの取得も
1.AfxGetMainWnd()->m_hWnd
2.CWnd::GetActiveWnd()->m_hWnd
ということをしなくても、ウィンドウあり
(ディフォルト)であれば、使用する前に
ひとつ関数(コンストラクタはダメ)を
呼んでやれば、きちんとm_hWndがNULL以外の
値になるはずです。
#私はいつもこの方法でウィンドウハンドルを
#取得しています。コンストラクタでは、
#どうやってもNULLになります。

ただし、この方法だと、どうしてもOCXを
使う側が一度呼び出さなければならないため、
Initialize処理としての関数呼び出しが必要に
なりますので、若干不便でしょう。

後は、不可視にしておいて、上から確実に
呼んでもらえるようにしておけば、大丈夫なはず。

どういった風にActiveXを使いたいのか
分かりませんが、一応通知することは可能
だということは分かってください。

ではでは☆
    • good
    • 0
この回答へのお礼

早速のご回答、どうもありがとうございました。
やっぱり、Windowありのコントロールにするのが無難ですかね。
ということで、おっしゃるようにやってみました。最初はやっぱりアクティブ
にならなかったのですが、試行錯誤してみると、どうやらOLEMISC__INVISIBLEATRUNTIMEフラグを立てていたからのようです。
これをはずして、OLEMISC_ACTIVATEWHENVISIBLEを立てたらいけました!
ActiveXって難しいですね~。
どうもお世話になりました。

お礼日時:2001/03/27 14:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q洋画(英語)を日本語字幕無しで感動したい

洋画(英語)を日本語字幕無しで鑑賞し、8割くらいの内容が理解できる様になる事を目標とし勉強をしています。
しかし、過去、学校で学習した英語はすっかり忘れています。

こんな私ですが、効率的に英語を勉強し、洋画を理解できる様になるにはどうしたらよいでしょうか?
目標は1年後に「めぐり逢えたら」を初めて鑑賞し、英語(字幕無し)で内容が理解できる事です。

・ひたすら英語で洋画を観る(字幕は英語)
・基本的な文法を学習する
・英会話教室に通う(これはスケジュール面で無理です)

など、初心者向けのアドバイスをお願いします

Aベストアンサー

わたしの方からは、ちょっと厳しいアドバイスを。

現時点でのあなたの英語力はどれくらいでしょうか。それによってアドバイスも変わってくると思いますが、「過去、学校で学習した英語はすっかり忘れて」いらっしゃるとのことですから、英検ならば2級程度で英語圏での生活経験、留学経験なしとの前提でお答えします。

せっかくの意欲に水をさすようで恐縮ですが、結論から申し上げますと、あなたの掲げられた目標はレベルが高すぎて、1年後どころか5年後、10年後ですら難しいと思います。1年は無理にしても、数年で目標達成の可能性がある方法としては、「日本からはなれ、米国で暮らす」しかないでしょう。

洋画といっても、個々の作品で聞き取りレベルに大きな差異がありますので、一概には言えないのですが、「8割」というのは「ほとんど分かる」というレベルになります。「めぐり逢えたら」には「下品な言葉」や「かしこまった表現」、「専門用語」、「方言」、「時事英語」などが数多くは出てきませんから、どちらかというと分かりやすい映画なのですが、それでも「生きた本物の英語」ですから、けっして視聴者に外国人を想定してはいません。したがって、これが字幕無しに初見でほとんど理解できるためには、米国における日常生活で米英語が外国語であると意識することなく自然に耳に入ってきて、理解・反応できるというレベルが必要とされるのです。

「わたしは英語が大好きだった」の著者、宮本美智子氏をご存知でしょうか。書名のとおり彼女は英語大好き少女で、学校の英語は本当に力を入れて勉強した方です。当然成績もトップクラス。「知識としての英語」をしっかり身につけていたばかりか、日本国内での勉強という枠組みの中でではありますが、実用英語にもしっかり意識を注いでいた方です。しかしその彼女でさえ、交換留学体験をはさんで米国で仕事を始めてから数年(4,5年だったでしょうか)経て、ようやく「英語が外国語であるという意識」がなくなってきたと書いています。彼女でさえこうです。

噺家の三遊亭小三治さんはご存知ですか? この方は超売れっ子噺家であるにもかかわらず、「数年以内に字幕なしで洋画を理解できること」を目標に掲げ、忙しいスケジュールを調整して、単身米国の語学学校に入ったという人です。しかし、すぐにあきらめました。まあ、この人の場合は「ほとんどゼロからのスタート」でしたから無理もありませんが、それでもこの人の偉いところは、自分のたてた目標の高さにすぐに気づいて、「字幕なしの理解」という目標をすぐに撤回したところです。(くわしくは講談社文庫「ま・く・ら」をご参照ください。)

私自身は留学経験もなく、中学一年以来ウン十年の勉強を経て、ようやく「わかる映画がたまにある」程度です。「ひたすら英語で洋画を観」たり、「基本的な文法学習」に死ぬ気で心血を注いでも、最低英検1級以上の実力と数年間の米国での生活体験なしには、「1年後に…」というのは目標としてはかなり高すぎるのではないでしょうか。

とはいえ、「あきらめなさい」などと言っているのではありませんよ。外国語の学習には、外国語の学習でしか得られない楽しみ・喜びみたいなものがあります。レベル的には高くなくても、「買い物できるようになった」とか「子供向けの本がすらすら読めるようになってきた」とか「あの国の人とお友達になれた」とかいったワクワクするような喜びを与えれくれるものです。ですから、わたしが言いたいのは「1年で字幕なしで8割」などという目標は立てずに、「あと3年くらいで4割(?)」といった感じの、ある程度実現の可能な目標を設定したほうがいいと申し上げたいのです。(ただ、この4割、8割というのも、具体的な判定材料がないので目標としてはあまり感心しませんが…)

日本語の達人、かつての駐日大使でありジャパノロジストでもあったエドウィン・ライシャワー氏も「語学は20年、30年のスパンで勉強しなければいけない」みたいなことを書いていました。デーブ・スペクターにしろケント・デリカットにしろ5年、10年でここまで来たわけではありません。そして、わたしが敬愛する彼ら語学の達人でさえ、寅さんものや落語にはついていけないところがかなりあるものなのです。(江戸弁、東京下町弁のため)。

昔は「半年でペラペラに…」とか「1年でスラスラと…」といった語学学校や語学教材の広告もあったようです。これは、消費者の「半年や1年なら、金を出してもいいか」という意識につけこんだもので、現在は広告としては許されていないと思います。「1年後」ではなく、すくなくとも「3年後」、できれば「10年」のスパンで大きな目標を設定してください。短期の目標としては、来年中に英検x級とか、NHKラジオを1年聞き続けるとか、雑誌・新聞の特定のコラムを半年読み続けるといったものを掲げてみてはいかがでしょう。

わたしの方からは、ちょっと厳しいアドバイスを。

現時点でのあなたの英語力はどれくらいでしょうか。それによってアドバイスも変わってくると思いますが、「過去、学校で学習した英語はすっかり忘れて」いらっしゃるとのことですから、英検ならば2級程度で英語圏での生活経験、留学経験なしとの前提でお答えします。

せっかくの意欲に水をさすようで恐縮ですが、結論から申し上げますと、あなたの掲げられた目標はレベルが高すぎて、1年後どころか5年後、10年後ですら難しいと思います。1年は無理にし...続きを読む

QWM_PAINTとWM_MOVEで同じ事をしたいけど

VC.NETにて、
ウィンドウプロシージャでWM_PAINTとWM_MOVEを拾って、テキストを書き直す関数に飛ばしているのですが、WM_MOVEでは書き直してくれません。
書き直し関数はウインドウの座標の絶対と相対をGetClientRectとGetWindowRectで得て表示をするだけです。
WM_MOVEでも関数に飛んで、座標を得てはいるようですが、表示しなおしてくれません。
ウインドウの大きさを変えると表示し直してくれます。
何故でしょうか?

Aベストアンサー

>hdc = BeginPaint(hWnd, &paint);
と、
>EndPaint(hWnd, &paint);

これはWM_PAINTの中でしか使用できません。

WM_MOVEで描画を行うのでしたらGetDC()、ReleaseDC()を使用してください。

Q英語無しで入れる有名大はありますか?

私は関西在住の文型の高2です。
英語が非常に苦手でテスト前に学習しても常に欠点しか取れません。大よその模試の偏差値が英語35数学55国語55日本史65化学50程度です。英語無しで入れる有名私学はあるのでしょうか?若しくは英語のアドバンテージが低いところを教えて頂きたいです。

※数Bを履修してるので一応国公立の受験は可能です。

Aベストアンサー

”英語を有る程度ものに出来無いような頭脳では大学で何を学ぶ積りか?”
と言うのが、大学の当事者の大方の考えではないでしょうか? と言って、大学の第一外国語でもまともな英語も教えてくれませんね。だけど、
試験で合格点を取らないと卒業出来ないことになります、たとえ商学部や法学部でも。
私が想像するに、あなたは英語を勉強している積りで、何も学んでいないように思えます。大変失礼な言い方をすれば、覚えるだけの努力を実はしていないように思えます。能力が欠けているとすれば、数学、国語、日本史、化学などそこまで成績は行かないと思います。同じくらい時間を掛けているとすれば、遣り方が間違っているのかな? 私は、数学や物理などの抽象的で目で見ることの出来ない科目をなんだかんだと言って怠けておりました。恐らくあなたとは逆になるでしょう。
もう一寸工夫をすると、楽に覚えられるかも。それと、楽しい英語の本でも夏休みに一冊読まれたら如何でしょうか? 高2でしたらまだ時間がありますよ。薄いものでも一冊読み通すと気が楽になり、自信が出てくると思います。

QWM_SIZEとWM_SIZINGの違い (Win32API)

Windowsプログラミングで、画面のサイズを変更したときに送られてくるメッセージで、
WM_SIZEで処理するのとWM_SIZINGで処理するのとでは何が違うのでしょうか?
WM_SIZEとWM_SIZINGの違いは何なのでしょうか?

また、似たようなものでWM_MOVEとWM_MOVINGの違いも教えてもらいたいです。

Aベストアンサー

実際にプログラムを書いてみれば、両者の違いは明白になるでしょう。

WM_SIZE は「サイズの変更後に」メッセージがアプリケーションに飛んでくるので、
ウィンドウのコーナーからマウスを離した時に文字がビョンと移動します。

Windows98 くらいまではウィンドウのサイズの変更はまずは輪郭だけサイズが変って
マウスをコーナーから離した時にウィンドウの中身が再描画されていたので、
WM_SIZE のメッセージハンドラを実装することになったでしょう。

しかし最近のインターフェイスはサイズ変更中もズリズリとウィンドウの中身が
再描画され続けます。これには WM_SIZING のメッセージハンドラを実装して、
サイズ変更中常に文字列の再描画を繰り返す必要があるでしょう。

Q「名物に旨いモノ無し」を「旨く」英語に

「名物に旨いモノ無し」

を外国人に「旨く端的に」説明する慣用句的なフレーズを教えて
下さい。

丁寧に「説明的に」書けば、

Some locally famous foods, though said delicious
but available only there, may not always taste
very wonderful.

ですが、これをより短く表現した「フレーズ」を、、、、
違う観点での違う書き方が望ましいのですが、贅沢は言いません。
尚、なるべく易しい単語でお願いします。

又、英語圏で同様な趣旨の「慣用句」は有りますか?

Aベストアンサー

>Not all local speciality is as tasty as they say so.
>なんか、これで、少し良くなった様な気がするのは、錯覚ですか?

Not all だと、部分否定で、「全部が言われているほどおいしいわけではない」(一部にはうわさどおりにおいしいものがある)の意味になってしまいます。
(Not always も部分否定になります)

ことわざの元の意味は、有名なものに限って評判ほどのものはない(全否定)ですから、(There is) no ~ とすべきだと思います。

as ~ as they say so は、最後の so は不要だと思います。
they say (it is) good の good の部分はすでに as ~ as の部分に入っているからです。

QなぜhButton1ボタンからのWM_COMMANDはフックできてクライアントエリアのWM_RBUTTONDOWNはフックできないのでしょうか?

#define STRLBUTTON TEXT("マウス左ボタンが押されました from mainProc")
#define STRRBUTTON TEXT("マウス右ボタンが押されました from my_HookProc")
#define STRCOMMAND TEXT("ボタンが押されました")


HWND hButton1;



LRESULT CALLBACK my_HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPRETSTRUCT *pcwpRetStruct = (CWPRETSTRUCT *)lParam;
HDC hDC;

if(nCode==HC_ACTION)
{
hDC = GetDC(pcwpRetStruct->hwnd);
switch(pcwpRetStruct->message)
{
case WM_COMMAND:
TextOut(hDC, 10, 10, STRCOMMAND, strlen(STRCOMMAND));
break;
case WM_RBUTTONDOWN:
TextOut(hDC, 10, 10, STRRBUTTON, strlen(STRRBUTTON));
break;
}

ReleaseDC(pcwpRetStruct->hwnd, hDC);
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}



LRESULT CALLBACK mainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HHOOK hHook;
HDC hDC;

switch(uMsg)
{
case WM_DESTROY:
UnhookWindowsHookEx(hHook);
PostQuitMessage(0);
return 0;

case WM_CREATE:
hHook = SetWindowsHookEx(WH_CALLWNDPROCRET, my_HookProc, NULL, GetCurrentThreadId() );
if(!hHook)
MessageBox(NULL, "hooking failed", NULL, MB_OK);

hButton1 = CreateWindow(
"BUTTON", "hButton1",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 40, 100, 20,
hWnd, NULL,
((LPCREATESTRUCT)lParam)->hInstance, NULL
);
return 0;

case WM_LBUTTONDOWN:
hDC = GetDC(hWnd);
TextOut(hDC, 10, 10, STRLBUTTON, strlen(STRLBUTTON));
ReleaseDC(hWnd, hDC);
return 0;
}

return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

#define STRLBUTTON TEXT("マウス左ボタンが押されました from mainProc")
#define STRRBUTTON TEXT("マウス右ボタンが押されました from my_HookProc")
#define STRCOMMAND TEXT("ボタンが押されました")


HWND hButton1;



LRESULT CALLBACK my_HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPRETSTRUCT *pcwpRetStruct = (CWPRETSTRUCT *)lParam;
HDC hDC;

if(nCode==HC_ACTION)
{
hDC = GetDC(pcwpRetStruct->hwnd);
switch(pcwpRetStruct->message)
{
case WM_COMMAND:
Tex...続きを読む

Aベストアンサー

WH_CALLWNDPROCRETはSendMessageで送られたメッセージのみを対象とし、WM_xBUTTONDOWNはPostMessageで送られるからです。WH_GETMESSAGEならばWM_xBUTTONDOWNをフックすることができます。

QCD無しでのXP英語版への日本語インストールについて

英語版Windows XPのインストールされたパソコンを海外で購入しました。日本語をインストールしたいのですが、CD(Service Pack3)の挿入を指示されます。しかし、このパソコンは小型パソコンでCDドライブはなく、付属CDもなく、CDドライブをつないだとしてもバックアップCDの作製ができません。
どなたか、この場合のインストール方法(もしくはバックアップCD作製方法)を教えていただけますか。
この類の質問をネット上で検索してみたのですが、どれもCDを使用する方法しか回答されてませんでした。
よろしくお願いいたします。

Aベストアンサー

現在持たれている英語版PCの他に日本語入力出来るPCを持たれているのですよね?
質問されているので可能だと思って回答します。

CDが無くても、現在入力されているPCからC:\I386のフォルダをコピーして読み込ませれば可能だと思います。OS,PC等が分かりませんので曖昧になりますが…。

自分は XP Professional SP3 英語版を日本語化して使っています。
ttp://homepage3.nifty.com/~nekomata/ie6appcompattest/JapaneselanguageonEnglishXP-1.htm

途中CDを要求されますが根気よく繰り返せば完了出来ました。

ttp://qanda.rakuten.ne.jp/qa4026668.html
HomeEditonでも日本語化出来るようですが上記が使えるかは分かりません。

上記方法の他にもいろいろ解説されていたりします。ホストからコピーしなくてもMicrosoftが公開している体験版など利用してI386を持ってくるやり方もありました。このやり方ならダウンロードで可能。
上記ならUSBフラッシュメモリー1Gあれば可能です。
自分はVirtual PCで使い分けてます。
質問者さんと環境が違うので絶対出来るとは断言できません。
探せばヒント、解決法はいろいろ見つけられると思います。
参考になれば。

現在持たれている英語版PCの他に日本語入力出来るPCを持たれているのですよね?
質問されているので可能だと思って回答します。

CDが無くても、現在入力されているPCからC:\I386のフォルダをコピーして読み込ませれば可能だと思います。OS,PC等が分かりませんので曖昧になりますが…。

自分は XP Professional SP3 英語版を日本語化して使っています。
ttp://homepage3.nifty.com/~nekomata/ie6appcompattest/JapaneselanguageonEnglishXP-1.htm

途中CDを要求されますが根気よく繰り返せば完了出来ま...続きを読む

QWM_CHAR or WM_KEYDOWN の「wParam」について

よくわかっていないのですが、

switch (message)
{
case WM_CHAR:
というところで、wParamから、文字の情報取得して、
HDC宣言して、TextOut関数使用…、の途中で、
wParamの文字情報は、どのようにすれば
TextOut関数に渡せるのでしょうか?
Visual C++を勉強したてで、勉強の成果をと思い、
テキストエディタを作ってみたいと思ったのですが、
さて、どうしたらよいのでしょうか?
エラー内容は、unsigned int → const char *
にできません、ということなのですが、
じゃぁ、型の変換の仕方は?という感じです。
初心者なので、簡単な例をつけて説明してくださると助かります。よろしくお願いします。

Aベストアンサー

TextOut(~, (char*)wParam, ~);

と、char*型に型変換すると良い気がします。

--
TextOut関数の宣言、

TextOut(~, (const char*)szText, ~);

のconstキーワードは、
「TextOut関数に渡したwParamの値をTextOut関数の内部で書き換えることはありませんので安心してね。」
という意味ですので、

unsigned int
long double

などの2つの単語で宣言される「型」とは意味合いが異なります。
ヘルプの説明ですと釈然としませんが、参考URLなどを読んでみてください。

プログラマの正体!? - 誰が為にconst
http://www.asahi-net.or.jp/~vx2t-andu/lets/20020203.html

参考URL:http://www.asahi-net.or.jp/~vx2t-andu/lets/20020203.html

Qtheの有り無しで英語の意味がどう変わるの?

■私は図書館で本を読みます。
I read a book in library.
I read a book in the library.

テストではtheが必要ってことだったんですが、必要性がよくわかりませんでした。
あってもなくてもどっちでもいいんでしょうか?

Aベストアンサー

まず、library のような単語には最低限、a が必要で、
in library というのは正しくありません。

library のような、というのは1つ2つと数えられる、ということですが、
いわゆる可算名詞(数えられる名詞)には、まず、a が必要。

in a library なら、ここでも○をもらえたかもしれません。
とにかく、in library なら減点です。

そして、the になるのは特定の図書館を表わすからです。
具体的になになに図書館となくても、相手が知っている図書館でなくても、
話者として特定されていたら the です。

普通、図書館で、というと、最寄りのいつもの図書館のことで決まっているはずです。

「行きます」という日本語があいまいに響きますが、中1レベルならここまでしか習っていないはずです。
だから、the も詳しく習っていないかもしれませんが、まず「その」と習うはずです。
「その」と決まっている。でも「その」と訳せないことも多いです。

My mother cooks dinner in the kitchen.
母が台所で夕食を料理する。

この台所はどこでもいい台所でなく、1つしかない、我が家の台所のこと。
これが the kitchen です。

a は何でもいい1つ、the は決まったもの。

「行きます」があいまいなように、この日本語全体があいまいですので、
とある図書館、で a library でもいいように思いますが、パターンとしては
library はほとんど the library で出てきます。

いつもの図書館、ということです。

まず、library のような単語には最低限、a が必要で、
in library というのは正しくありません。

library のような、というのは1つ2つと数えられる、ということですが、
いわゆる可算名詞(数えられる名詞)には、まず、a が必要。

in a library なら、ここでも○をもらえたかもしれません。
とにかく、in library なら減点です。

そして、the になるのは特定の図書館を表わすからです。
具体的になになに図書館となくても、相手が知っている図書館でなくても、
話者として特定されていたら the で...続きを読む

QhDC=::GetDC(m_hWnd)とhDC=GetDC(m_hWn

hDC=::GetDC(m_hWnd)とhDC=GetDC(m_hWnd)の違いについて

表題について,お伺いします。
ビットマップをダイアログに表示するソースコードを
書いてますが,参考書やさまざまなHPでは,
ウィンドウハンドルをゲットする際に

hDC=::GetDC(m_hWnd) ○
↑と書かれております。

hDC=GetDC(m_hWnd)  ×
↑はなぜだめなのでしょう。

 ●このスコープ演算子::は何の為につけているのですか?

::が無いとエラーになるので必要みたいですが・・

Aベストアンサー

どういうエラー(リンクエラー、コンパイルエラー)なのかがわからないので、
あくまで憶測ですが、
Windows.hで定義されているGetDC()の他に、
別のスコープに(例えばクラスのメソッドとして)、
GetDC()が定義されているのではないでしょうか?

上記の状態でスコープ演算子がないときには、
同じクラス(スコープ)にあるGetDC()を先に呼ぶことになるので、
目的のWindows.hのGetDC()を呼ぶことができないのだと思います。

参考URL:http://wisdom.sakura.ne.jp/programming/cpp/cpp7.html


人気Q&Aランキング

おすすめ情報