なぜでしょうか

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: なぜでしょうか

by YS » 2006年1月14日(土) 11:18

 だから、プログラムの中だけでこの hWnd の出所を探してもないということですね。何となく理解の手がかりが得られました。
 本当に有難うございました。

by イグトランス » 2006年1月14日(土) 01:09

EventCall_MainWndはWindowsが呼び出すコールバック関数です。
しかもWM_CREATEはCreateWindowExから戻るよりも前に呼び出されます。
従ってこのEventCall_MainWnd内でmessageがWM_CREATEのときが,
最初にウィンドウハンドルを得られるときなのです。
(本当はWM_CREATEよりも前に呼ばれるメッセージもありますけどね。)

by YS » 2006年1月14日(土) 00:03

ああそうか。ん?
じゃ、この hWnd はどこで得られたんでしょうか?
初歩的ですみません。

by Toshi » 2006年1月13日(金) 22:56

Callback.wbp で、
MainWnd に WM_CREATE メッセージが来た時に

コード: 全て選択


Function EventCall_MainWnd(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
	Select Case message
'中略
		Case WM_CREATE
			hMainWnd=hWnd

としているので、問題ありません。
確かに MakeWindow.wbp で取得してしまっても良いとは思いますけどね。

by YS » 2006年1月13日(金) 21:39

なるほど!
・・・でも、ProjectEditorで最初にできるファイルだから何か意味があるのでは、と思ったのですがどうでしょうか?考えすぎかも。
 まだ疑問に思うことがあります。
MakeWindow.wbp の最後です。いきなり、

CreateWindowEx( …

となっていますが、

hMainWnd=CreateWindowEx( …

ではないのでしょうか?

by イグトランス » 2006年1月11日(水) 23:11

ABでは呼び出されない関数の内部はきちんと解析されないので,
konisiさんが仰っている通り呼び出されなければ問題ないのです。

by konisi » 2006年1月11日(水) 22:34

一度も呼び出されなければ問題無いのかもしれません。

・・・と思って暇を潰してみる。

コード: 全て選択


#strict
Function Test(A As Byte) As Byte
	fjsdlkfjd
End Function
コンパイル結果↓
コンパイルは正常に完了しました(エラー:0、警告:0)。

但し、一度でもこの関数を呼び出すと無効な識別子として弾かれます。

なぜでしょうか

by YS » 2006年1月10日(火) 21:26

Callback.wbp の中で

Function DialogBox(hOwnerWnd As HWND, TemplateName As LPSTR) As LONG_PTR
Else
Exit Function
End If

というのがあります。Ifがないと思うのですが。

ページトップ