123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- // Copyright 2012 The Walk Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package main
- import (
- "log"
- )
- import (
- "github.com/lxn/walk"
- . "github.com/lxn/walk/declarative"
- "github.com/lxn/win"
- )
- const myWidgetWindowClass = "MyWidget Class"
- func init() {
- walk.MustRegisterWindowClass(myWidgetWindowClass)
- }
- func main() {
- var mw *walk.MainWindow
- if err := (MainWindow{
- AssignTo: &mw,
- Title: "Walk External Widgets Example",
- Size: Size{400, 300},
- Layout: HBox{},
- }).Create(); err != nil {
- log.Fatal(err)
- }
- for _, name := range []string{"a", "b", "c"} {
- if w, err := NewMyWidget(mw); err != nil {
- log.Fatal(err)
- } else {
- w.SetName(name)
- }
- }
- mpb, err := NewMyPushButton(mw)
- if err != nil {
- log.Fatal(err)
- }
- mpb.SetText("MyPushButton")
- mw.Run()
- }
- type MyWidget struct {
- walk.WidgetBase
- }
- func NewMyWidget(parent walk.Container) (*MyWidget, error) {
- w := new(MyWidget)
- if err := walk.InitWidget(
- w,
- parent,
- myWidgetWindowClass,
- win.WS_VISIBLE,
- 0); err != nil {
- return nil, err
- }
- bg, err := walk.NewSolidColorBrush(walk.RGB(0, 255, 0))
- if err != nil {
- return nil, err
- }
- w.SetBackground(bg)
- return w, nil
- }
- func (*MyWidget) MinSizeHint() walk.Size {
- return walk.Size{50, 50}
- }
- func (w *MyWidget) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr {
- switch msg {
- case win.WM_LBUTTONDOWN:
- log.Printf("%s: WM_LBUTTONDOWN", w.Name())
- }
- return w.WidgetBase.WndProc(hwnd, msg, wParam, lParam)
- }
- type MyPushButton struct {
- *walk.PushButton
- }
- func NewMyPushButton(parent walk.Container) (*MyPushButton, error) {
- pb, err := walk.NewPushButton(parent)
- if err != nil {
- return nil, err
- }
- mpb := &MyPushButton{pb}
- if err := walk.InitWrapperWindow(mpb); err != nil {
- return nil, err
- }
- return mpb, nil
- }
- func (mpb *MyPushButton) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr {
- switch msg {
- case win.WM_LBUTTONDOWN:
- log.Printf("%s: WM_LBUTTONDOWN", mpb.Text())
- }
- return mpb.PushButton.WndProc(hwnd, msg, wParam, lParam)
- }
|