以下のように、"Mainwnd"をあちこちで見かけますが、これは自動的に組み込まれているライブラリのようなものの中で定義されているいるものなのでしょうか?
これに関する解説やマニュアルなど、Webにはどんなに探しても見つかりません。山本大祐氏の"ActiveBasicオフィシャルユーザーズガイド"にもありませんでした。ご存じの方どなたかいらっしゃいましたらお教えいただきたいのですが......
Function MainWndProc(
Sub Mainwnd_create(
Sub MainWnd_Destroy(
Sub MainWnd_IDM_EXIT_MenuClick(
--------------------------------
また、以下の構文も必ず見かけますが、これはメインウィンドウを閉じるた後の処理のための
ものなのでしょうか?それにしても、これをプロシージャ記述領域の先頭に配置しても最後に配置しても、短いテストプログラムのためか動きに変化がありません。
ABもn88basicの様に、上から下の順に実行のための手続きが発行されることは一緒だと思うのですが、私の頭では理解できません。どなたかお教えください。m(__)m
Sub MainWnd_Destroy()
MenuTest_DestroyObjects()
PostQuitMessage(0)
End Sub
超初心者でご面倒をおかけしますが、
Re: 超初心者でご面倒をおかけしますが、
MainWndとは、ウィンドウを作成する場合のデフォルトの名前です。変更することも可能です(ただしその場合は、コードを書き始める前に名前を変更することをお勧めします)。以下のように、"Mainwnd"をあちこちで見かけますが、これは自動的に組み込まれているライブラリのようなものの中で定義されているいるものなのでしょうか?
プロシージャ(Sub ~ End Subのような、プログラムの実行のひとかたまり)は、プログラムのどこに書いても関係ないのです。それが外から呼び出されたときに初めて実行されるからです。また、以下の構文も必ず見かけますが、これはメインウィンドウを閉じるた後の処理のための
ものなのでしょうか?それにしても、これをプロシージャ記述領域の先頭に配置しても最後に配置しても、短いテストプログラムのためか動きに変化がありません。
ABもn88basicの様に、上から下の順に実行のための手続きが発行されることは一緒だと思うのですが、私の頭では理解できません。どなたかお教えください。m(__)m
例えば
コード: 全て選択
#N88BASIC
Output1()
Output2()
Sub Output1()
Print "No.1"
End Sub
Sub Output2()
Print "No.2"
End Sub
コード: 全て選択
#N88BASIC
Output1()
Output2()
Sub Output2()
Print "No.2"
End Sub
Sub Output1()
Print "No.1"
End Sub
N88BASICにはプロシージャという概念はないので、まずは概念を理解することが最初でしょうね。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
Re: 超初心者でご面倒をおかけしますが、
> プロシージャ(Sub ~ End Subのような、プログラムの実行のひとかたまり)は、プログラムのどこに書いても関係ないのです。それが外から呼び出されたときに初めて実行されるからです。
これは、大変よく理解できました。朝早く貴重な時間を割いてコーディングまでしていただきましてありがとうございました。まさに、目の覚める感じが致しました。
しかしながら、
> MainWndとは、ウィンドウを作成する場合のデフォルトの名前です。変更することも可能です(ただしその場合は、コードを書き始める前に名前を変更することをお勧めします)。
この解説自体は理解できるのですが、CreateやらDestroyやら_IDM_EXIT_などは、ウィンドウを作成する際に内部で予め予約されている(デフォルトでMainWndを使用した場合?)ものの様な気が致します。
結局のところ、このあたりを理解するには、ABではなく、マイクロソフトのWin32APIの解説書を読むしかないのでしょうか?
VBの入門編のようなところを探してみることと致します。
どうもありがとうございました。
これは、大変よく理解できました。朝早く貴重な時間を割いてコーディングまでしていただきましてありがとうございました。まさに、目の覚める感じが致しました。
しかしながら、
> MainWndとは、ウィンドウを作成する場合のデフォルトの名前です。変更することも可能です(ただしその場合は、コードを書き始める前に名前を変更することをお勧めします)。
この解説自体は理解できるのですが、CreateやらDestroyやら_IDM_EXIT_などは、ウィンドウを作成する際に内部で予め予約されている(デフォルトでMainWndを使用した場合?)ものの様な気が致します。
結局のところ、このあたりを理解するには、ABではなく、マイクロソフトのWin32APIの解説書を読むしかないのでしょうか?
VBの入門編のようなところを探してみることと致します。
どうもありがとうございました。
私も初心者ですが一つ書かせていただきます。
VBやほかのソフトでもそうだと思いますが、イベントのコードです。
――――――――――
・Create(私は、”クリエイト”と読んでいますが)
ウィンドウが作成されたとき、つまりはプログラムが実行されたときです。
そのときに起こるイベントです。
ただ、これはsbpファイルのほうに書いておかないとちゃんとイベントとして動いてくれません。
・Destroy
ウィンドウが破棄されるときに起こるイベントです。
――――――――――
これらのものは決まっている動作です。
が、メニューなどの場合は作ってもいいようです。
例えば、
こんな感じでコーディングするわけです。
確かに予約されている感じですね・・・。
N88BASICはあんまりやったことがないんですが、呼び出す順番で決まってきます。
下手な説明ですがお分かりいただけたでしょうか?
VBやほかのソフトでもそうだと思いますが、イベントのコードです。
――――――――――
・Create(私は、”クリエイト”と読んでいますが)
ウィンドウが作成されたとき、つまりはプログラムが実行されたときです。
そのときに起こるイベントです。
ただ、これはsbpファイルのほうに書いておかないとちゃんとイベントとして動いてくれません。
・Destroy
ウィンドウが破棄されるときに起こるイベントです。
――――――――――
これらのものは決まっている動作です。
が、メニューなどの場合は作ってもいいようです。
例えば、
コード: 全て選択
Sub MainWnd_IDM_EXIT_Click()
Dim ret As Long
ret=MessageBox(hMainWnd,"本当に終了しますか?","終了時のメッセージ",MB_YESNO)
Select Case ret
Case IDYES
EndDialog(hMainWnd,1)
Case IDNO
Exit Sub
End Select
End Sub
確かに予約されている感じですね・・・。
N88BASICはあんまりやったことがないんですが、呼び出す順番で決まってきます。
下手な説明ですがお分かりいただけたでしょうか?
-
- 記事: 33
- 登録日時: 2006年5月22日(月) 21:01
- お住まい: 山口
- 連絡する:
それらは恐らく、RADツールを使ってプロジェクトを作製する時のお約束ですね。
自分で全てのコードを書く(新規作成の時に「Basicプログラム」を選択)場合は、それらの単語は全く予約されていませんし、自由に使うことができます。
ただし、Windowsのアプリケーションをつくる場合は、RADツールを使えば(新規作成で「プロジェクト」を選択)とても簡単に作れます。
Mainwnd_Destroy()などはエディタが勝手に挿入してくれますし、
Mainwnd_create()も、ツールから簡単に作ることができます。
ただし、N88から移行されるのでしたら、ノーマルウィンドウはいろいろとややこしいかも知れないので(ハンドルとかイベントとか)、
まずはプロンプトベースのプログラムを書いて、プロシージャやAPI等の概念に慣れてから、徐々に移行されるのが良いと思います。
偉そうなこと言って、僕も最近ようやく理解したばかりなんですけどね(笑
自分で全てのコードを書く(新規作成の時に「Basicプログラム」を選択)場合は、それらの単語は全く予約されていませんし、自由に使うことができます。
ただし、Windowsのアプリケーションをつくる場合は、RADツールを使えば(新規作成で「プロジェクト」を選択)とても簡単に作れます。
Mainwnd_Destroy()などはエディタが勝手に挿入してくれますし、
Mainwnd_create()も、ツールから簡単に作ることができます。
ただし、N88から移行されるのでしたら、ノーマルウィンドウはいろいろとややこしいかも知れないので(ハンドルとかイベントとか)、
まずはプロンプトベースのプログラムを書いて、プロシージャやAPI等の概念に慣れてから、徐々に移行されるのが良いと思います。
偉そうなこと言って、僕も最近ようやく理解したばかりなんですけどね(笑
ってことでAPIだけでウィンドウを実装してみましょう。> まずはプロンプトベースのプログラムを書いて、プロシージャやAPI等の概念に慣れてから、徐々に移行されるのが良いと思います。
>
> 偉そうなこと言って、僕も最近ようやく理解したばかりなんですけどね(笑
コード: 全て選択
Const CLASSNAME="Window Class"
Const WINDOWNAME="Window"
Dim hMainInst As HINSTANCE
hMainInst=GetModuleHandle(NULL)
Dim wce As WNDCLASSEX
ZeroMemory(VarPtr(wce),SizeOf(WNDCLASSEX))
wce.cbSize=SizeOf(WNDCLASSEX)
wce.hbrBackground=COLOR_WINDOW
wce.hCursor=LoadCursor(hMainInst,IDC_ARROW)
wce.hIcon=LoadIcon(hMainInst,IDI_WINLOGO)
wce.hIconSm=LoadIcon(hMainInst,IDI_WINLOGO)
wce.hInstance=hMainInst
wce.lpfnWndProc=AddressOf(WndProc)
wce.lpszClassName=CLASSNAME
wce.lpszMenuName=NULL
wce.style=CS_DBLCLKS or CS_HREDRAW or CS_VREDRAW
Dim AtmWndClass As ATOM
AtmWndClass=RegisterClassEx(wce)
If AtmWndClass=0 Then ExitProcess(0)
Dim hMainWnd As HWND
hMainWnd=CreateWindowEx(0,CLASSNAME,WINDOWNAME,WS_OVERLAPPEDWINDOW,0,0,640,480,NULL,NULL,hMainInst,NULL)
If hMainWnd=0 Then ExitProcess(0)
ShowWindow(hMainWnd,SW_SHOW)
Dim msg As MSG
Do
Select Case GetMessage(msg,0,0,0)
Case -1,0
Exit Do
Case Else
TranslateMessage(msg)
DispatchMessage(msg)
End Select
Loop
ExitProcess(0)
Function WndProc(hWnd As HWND, Msg As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
Select Case Msg
Case WM_CLOSE
DestroyWindow(hWnd)
Case WM_DESTROY
PostQuitMessage(0)
End Select
WndProc=DefWindowProc(hWnd,Msg,wParam,lParam)
End Function
例えば、Createイベントを実装する場合はWndProc関数を以下のように修正します。
コード: 全て選択
Function WndProc(hWnd As HWND, Msg As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
Select Case Msg
Case WM_CLOSE
DestroyWindow(hWnd)
Case WM_DESTROY
PostQuitMessage(0)
Case WM_CREATE
MessageBox(hWnd,"ウィンドウが作成された。","メッセージ",MB_OK)
End Select
WndProc=DefWindowProc(hWnd,Msg,wParam,lParam)
End Function
Re: 超初心者でご面倒をおかけしますが、
皆さんありがとうございました。まだまだ理解ができていないどころか、皆様方のHPも除いてみたら、ますますABの深み広がりに驚くばかりです。当面(永久に?)、1ステップ(行、ライン)ずつ理解しようという壮大な計画はなかった事にしました ^^;)
とても取っつきやすいRADツールが作ってくれるソースコード自体をUFOのように未確認のまま受け入れ、まず全体を理解することに致しました。
それにしても、宇宙人のような人が大勢いらっしゃるのですね。このコミュニティには。なにやら、ABの熱烈ファンになりそうな予感がします。
とても取っつきやすいRADツールが作ってくれるソースコード自体をUFOのように未確認のまま受け入れ、まず全体を理解することに致しました。
それにしても、宇宙人のような人が大勢いらっしゃるのですね。このコミュニティには。なにやら、ABの熱烈ファンになりそうな予感がします。