テクニカルノート25: ツールバーにコントロールを追加

June 27, 2002

© NSB Corporation. All rights reserved.


Go to English page.

Alex Yakhnin 氏(Software Developer, Morganville, NJ) による寄稿。


このテクニカルノートの内容はPocket PCデバイスに適用しますが、Pocket PC 2002には対応していません。

Mark GamberのWin32 APIオブジェクトの紹介以来、NS Basicプログラマに、このツールの境界線を広げるための、無限の可能性が開かれてきました。我々の多くは、アプリケーションのためにより多くのディスプレイスペースを確保しながら、Toolbar上にコントロールを置きたいと思っているはずです。最初のステップとして、ToolbarにCommandButtonを配置してみましょう。

Sample 1
sample sample

(このサンプルを実行する前に、"TlbButton.nsb"として保存して下さい。)

Option Explicit

'Declare variables and objects
AddObject "MGCEWin32.API","API"
AddObject "CommandButton","cmdTool", 50, 3, 20, 20
cmdTool.BackColor = 12632256 ' Gray
cmdTool.Caption="OK"

Dim AppWnd
Dim tlbWnd

'Get Application Window Handle
AppWnd = API.FindWindow("TlbButton.nsb")
'Get ToolBar Window Handle
tlbWnd = API.ChildWindowFromPoint(AppWnd, 0, 0)

'Assign to our Button a new Parent
API.WindowParent(cmdTool.hWnd) = tlbWnd

Sub cmdTool_Click
  MsgBox "Tool Button Clicked"
End Sub

それでは、IconボタンをToolbarに追加するのを試してみましょう。この目的の為に、"bmp"ファイルを中に読み込んだPictureBoxコントロールを使うことが出来ます。

"しかし、PicutureBoxはウインドウを処理するプロパティを持っていない!"とあなたは言うかもしれません。

勿論それは正しいことです。そしてWindows APIの知識がここでもヘルプとなります。トリックは、NS Basicによって作成されるアプリケーションのメイン ウインドウが、2つの子供を持っていることを知ることです。それらはToolBarとDialogです。プロジェクトに追加される全てのコントロールは、実際、Dialogウインドウの子供になります。

Sample 2
sample sample

(このサンプルを実行する前に、"TlbIcon.nsb"として保存して下さい。)

Option Explicit

'Declare variables and objects
AddObject "MGCEWin32.API","API"
AddObject "PictureBox","picTool", 50, 3, 21, 21
' Load picture file into control ( Make sure that the file exists in your system)
picTool.DrawPicture "\Windows\property.2bp",0,0
picTool.BorderStyle = 0

Dim AppWnd
Dim dialogWnd
Dim pictWnd

'Get Application Window Handle
AppWnd = API.FindWindow("TlbIcon.nsb")
'Get ToolBar Window Handle
tlbWnd = API.ChildWindowFromPoint(AppWnd, 0, 0)
' Get Dialog Window handle
dialogWnd = API.ChildWindowFromPoint(AppWnd, 100, 100)
'Get PictureBox handle using dialogWnd as a Parent and PictureBox
coordinates
pictWnd = API.ChildWindowFromPoint(dialogWnd, 50, 3)

'Assign to our Icon a new Parent
API.WindowParent(pictWnd) = tlbWnd

Sub picTool_Click
  MsgBox "Tool Icon Clicked"
End Sub

' Lets Change BorderStyle to show that it was clicked
Sub picTool_MouseDown(b, s, x, y)
   picTool.BorderStyle = 1
End Sub

' Restore BorderStyle
Sub picTool_MouseUp(b, s, x, y)
   picTool.BorderStyle = 0
End Sub

Alex Yakhnin, Software Developer, Morganville, NJ