ページ 11

なぜでしょうか

Posted: 2006年1月10日(火) 21:26
by YS
Callback.wbp の中で

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

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

Posted: 2006年1月11日(水) 22:34
by konisi
一度も呼び出されなければ問題無いのかもしれません。

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

コード: 全て選択


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

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

Posted: 2006年1月11日(水) 23:11
by イグトランス
ABでは呼び出されない関数の内部はきちんと解析されないので,
konisiさんが仰っている通り呼び出されなければ問題ないのです。

Posted: 2006年1月13日(金) 21:39
by YS
なるほど!
・・・でも、ProjectEditorで最初にできるファイルだから何か意味があるのでは、と思ったのですがどうでしょうか?考えすぎかも。
 まだ疑問に思うことがあります。
MakeWindow.wbp の最後です。いきなり、

CreateWindowEx( …

となっていますが、

hMainWnd=CreateWindowEx( …

ではないのでしょうか?

Posted: 2006年1月13日(金) 22:56
by Toshi
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 で取得してしまっても良いとは思いますけどね。

Posted: 2006年1月14日(土) 00:03
by YS
ああそうか。ん?
じゃ、この hWnd はどこで得られたんでしょうか?
初歩的ですみません。

Posted: 2006年1月14日(土) 01:09
by イグトランス
EventCall_MainWndはWindowsが呼び出すコールバック関数です。
しかもWM_CREATEはCreateWindowExから戻るよりも前に呼び出されます。
従ってこのEventCall_MainWnd内でmessageがWM_CREATEのときが,
最初にウィンドウハンドルを得られるときなのです。
(本当はWM_CREATEよりも前に呼ばれるメッセージもありますけどね。)

Posted: 2006年1月14日(土) 11:18
by YS
 だから、プログラムの中だけでこの hWnd の出所を探してもないということですね。何となく理解の手がかりが得られました。
 本当に有難うございました。