• 登入
sketchucation logo sketchucation
  • 登入
⚠️ Libfredo 15.4b | Minor release with bugfixes and improvements Update

[code] Win32 Moving/Showing/Hiding Toolbars and Dialogs

已排程 已置頂 已鎖定 已移動 Developers' Forum
91 貼文 8 Posters 15.9k 瀏覽 8 Watching
正在載入更多貼文
  • 從舊到新
  • 從新到舊
  • 最多點贊
回覆
  • 在新貼文中回覆
登入後回覆
此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
  • J 離線
    Jim
    最後由 編輯 2010年9月29日 下午1:57

    Too fast... here's how to get the exact name. (But is_pro? is for windows 7+)

    
    def su_window_name
        pro = Sketchup.is_pro? ? " Pro" ; ""
        if ((title = Sketchup.active_model.title).empty?)
            return ("Untitled - SketchUp" + pro)
        else
            return (title += ".skp - SketchUp" + pro)
        end
    end
    
    

    Hi

    1 條回覆 最後回覆 回覆 引用 0
    • T 離線
      thomthom
      最後由 編輯 2010年9月29日 下午1:59

      But when there is two untitled windows there could be problems?

      Thomas Thomassen — SketchUp Monkey & Coding addict
      List of my plugins and link to the CookieWare fund

      1 條回覆 最後回覆 回覆 引用 0
      • J 離線
        Jim
        最後由 編輯 2010年9月29日 下午2:00

        Yes, but in that case how would any program know which one the user meant?

        You can find all of the matching windows. It's just hard to know which the user meant to use.

        Hi

        1 條回覆 最後回覆 回覆 引用 0
        • T 離線
          thomthom
          最後由 編輯 2010年9月29日 下午2:03

          @jim said:

          Yes, but in that case how would any program know which one the user meant?

          If you'd created the window then you'd get the handle from there. (Would be nice if the API could expose the handles in the Ruby API)

          I suppose that if it is possible to get an array of matching windows one could filter out the window you want by checking if one of them is the active - if it's the active SU window you want. (Assuming SU is the currently active window)
          Or maybe by Z-Order? Assuming that the top most is the most recent - again if that is what you want...

          Thomas Thomassen — SketchUp Monkey & Coding addict
          List of my plugins and link to the CookieWare fund

          1 條回覆 最後回覆 回覆 引用 0
          • T 離線
            thomthom
            最後由 編輯 2010年9月29日 下午2:13

            In most cases you'd get the window the user is working on, right?
            So how about
            GetForegroundWindow - then, in case one of the toolbars or webdialogs are the active window, iterate down the hierarchy using GetParent - checking for matching window title?

            Thomas Thomassen — SketchUp Monkey & Coding addict
            List of my plugins and link to the CookieWare fund

            1 條回覆 最後回覆 回覆 引用 0
            • J 離線
              JD Hill
              最後由 編輯 2010年10月1日 下午1:05

              If you have an API which supports EnumWindows, you can use GetProcessId and GetWindowThreadProcessId to filter on windows in the current process.

              Developer - Bella Render

              1 條回覆 最後回覆 回覆 引用 0
              • T 離線
                thomthom
                最後由 編輯 2010年10月4日 下午12:34

                @jim said:

                But I didn't see a lag when applying the ToolWIndow class immediately after .showing the webdialog.

                You got a snippet of how you applied the ToolWindow style?

                Thomas Thomassen — SketchUp Monkey & Coding addict
                List of my plugins and link to the CookieWare fund

                1 條回覆 最後回覆 回覆 引用 0
                • T 離線
                  thomthom
                  最後由 編輯 2010年10月4日 下午3:40

                  'N' instead of 'L'?
                  hm.. I'm a wee bit confused to exactly when to use what type...

                  Thomas Thomassen — SketchUp Monkey & Coding addict
                  List of my plugins and link to the CookieWare fund

                  1 條回覆 最後回覆 回覆 引用 0
                  • J 離線
                    Jim
                    最後由 編輯 2010年10月4日 下午4:05

                    From the pick-axe book:

                    @unknownuser said:

                    Strings n'' and l'' represent numbers,
                    i'' represent integers, p'' represents pointers to data stored in a string
                    ``v'' represents a void type (used for export parameters only).
                    These strings are case-insensitive.

                    So I guessed you just use the type that is the best match to the API call parameters. In other words, your guess is as good as mine.

                    Hi

                    1 條回覆 最後回覆 回覆 引用 0
                    • T 離線
                      thomthom
                      最後由 編輯 2010年10月4日 下午8:08

                      is N === L ? "Number" vs Integer? Number == Float?

                      Thomas Thomassen — SketchUp Monkey & Coding addict
                      List of my plugins and link to the CookieWare fund

                      1 條回覆 最後回覆 回覆 引用 0
                      • T 離線
                        thomthom
                        最後由 編輯 2010年10月17日 下午8:38

                        I got lots of errors when I tried the Toolwindow snippet in the first post. Seems that a few constants where missing from the snippet.

                        I found them though, and I tried another way to get the window handle.

                        CustomWindow.png

                        <span class="syntaxdefault"><br /></span><span class="syntaxcomment">#&nbsp;http://ruby-doc.org/docs/ProgrammingRuby/html/lib_windows.html#Win32API.new<br /><br /></span><span class="syntaxkeyword">require&nbsp;</span><span class="syntaxstring">'Win32API'<br /><br /></span><span class="syntaxdefault">WS_CAPTION&nbsp;&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0x00C00000<br />WS_EX_TOOLWINDOW&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0x00000080<br /><br />GWL_STYLE&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">=&nbsp;-</span><span class="syntaxdefault">16<br />GWL_EXSTYLE&nbsp;</span><span class="syntaxkeyword">=&nbsp;-</span><span class="syntaxdefault">20<br /><br /></span><span class="syntaxcomment">#&nbsp;SetWindowPos()&nbsp;flags<br /></span><span class="syntaxdefault">SWP_NOSIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0x0001<br />SWP_NOMOVE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0x0002<br />SWP_DRAWFRAME&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0x0020<br />SWP_FRAMECHANGED&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0x0020<br />SWP_NOREPOSITION&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0x0200<br /><br /></span><span class="syntaxcomment">#&nbsp;Windows&nbsp;Functions<br />#FindWindow&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;Win32API.new("user32.dll"&nbsp;,&nbsp;"FindWindow"&nbsp;&nbsp;&nbsp;,&nbsp;'PP'&nbsp;,&nbsp;'L')<br />#FindWindowEx&nbsp;&nbsp;=&nbsp;Win32API.new("user32.dll",&nbsp;"FindWindowEx"&nbsp;,&nbsp;'LLPP',&nbsp;'L')<br /></span><span class="syntaxdefault">SetWindowPos&nbsp;&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Win32API</span><span class="syntaxkeyword">.new(</span><span class="syntaxstring">"user32.dll"&nbsp;</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"SetWindowPos"&nbsp;</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'LLIIIII'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'I'</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">SetWindowLong&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Win32API</span><span class="syntaxkeyword">.new(</span><span class="syntaxstring">"user32.dll"&nbsp;</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"SetWindowLong"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'LIL'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'L'</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">GetWindowLong&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Win32API</span><span class="syntaxkeyword">.new(</span><span class="syntaxstring">"user32.dll"&nbsp;</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"GetWindowLong"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'LI'&nbsp;</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'L'</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">GetActiveWindow&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Win32API</span><span class="syntaxkeyword">.new(</span><span class="syntaxstring">"user32.dll"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"GetActiveWindow"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">''</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'L'</span><span class="syntaxkeyword">)<br /></span><span class="syntaxcomment">#GetForegroundWindow&nbsp;=&nbsp;Win32API.new("user32.dll",&nbsp;"GetForegroundWindow",&nbsp;'',&nbsp;'L')<br /></span><span class="syntaxdefault">GetWindowText&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Win32API</span><span class="syntaxkeyword">.new(</span><span class="syntaxstring">"user32.dll"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"GetWindowText"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'LPI'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'I'</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">GetWindowTextLength&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Win32API</span><span class="syntaxkeyword">.new(</span><span class="syntaxstring">"user32.dll"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"GetWindowTextLength"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'L'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">'I'</span><span class="syntaxkeyword">)<br /><br /><br /></span><span class="syntaxdefault">def&nbsp;create_toolbar_window<br />&nbsp;&nbsp;window&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">WebDialog</span><span class="syntaxkeyword">.new(</span><span class="syntaxstring">'My&nbsp;Test&nbsp;Window'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">false</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">window</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">set_html</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'<br />&nbsp;&nbsp;<html><br />&nbsp;&nbsp;<head><br />&nbsp;&nbsp;<style&nbsp;type="text/css"><br />&nbsp;&nbsp;&nbsp;&nbsp;html&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font;&nbsp;caption;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background;&nbsp;ButtonFace;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border;&nbsp;none;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-top;&nbsp;1px&nbsp;solid&nbsp;ThreeDShadow;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-bottom;&nbsp;1px&nbsp;solid&nbsp;ThreeDHighlight;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;</style><br />&nbsp;&nbsp;</head><br />&nbsp;&nbsp;<body><br />&nbsp;&nbsp;&nbsp;&nbsp;<b>My&nbsp;very&nbsp;own&nbsp;window</b><br />&nbsp;&nbsp;&nbsp;&nbsp;<hr&nbsp;/><br />&nbsp;&nbsp;&nbsp;&nbsp;Neato!<br />&nbsp;&nbsp;</body><br />&nbsp;&nbsp;</html><br />&nbsp;&nbsp;'</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">window</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">show<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Find&nbsp;the&nbsp;new&nbsp;window&nbsp;-&nbsp;should&nbsp;get&nbsp;it&nbsp;by&nbsp;GetActiveWindow&nbsp;since&nbsp;wd.show&nbsp;brings<br />&nbsp;&nbsp;#&nbsp;the&nbsp;window&nbsp;to&nbsp;front.<br />&nbsp;&nbsp;</span><span class="syntaxdefault">hwnd&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">GetActiveWindow</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call<br />&nbsp;&nbsp;</span><span class="syntaxcomment">#hwnd&nbsp;=&nbsp;GetForegroundWindow.call<br />&nbsp;&nbsp;#hwnd&nbsp;=&nbsp;FindWindow.call(DIALOG_CLASS,&nbsp;window_title)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;hwnd<br /><br />&nbsp;&nbsp;puts&nbsp;</span><span class="syntaxstring">'Check&nbsp;Window&nbsp;Text'<br />&nbsp;&nbsp;</span><span class="syntaxdefault">buf_len&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">GetWindowTextLength</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">str&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">'&nbsp;'&nbsp;</span><span class="syntaxkeyword">*&nbsp;(</span><span class="syntaxdefault">buf_len&nbsp;</span><span class="syntaxkeyword">+&nbsp;</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;GetWindowText</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">str</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">str</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;str<br />&nbsp;&nbsp;p&nbsp;str</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">strip<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Change&nbsp;Window&nbsp;Style<br />&nbsp;&nbsp;</span><span class="syntaxdefault">style&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">GetWindowLong</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">GWL_EXSTYLE</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;style<br />&nbsp;&nbsp;p&nbsp;SetWindowLong</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">GWL_EXSTYLE</span><span class="syntaxkeyword">,&nbsp;&nbsp;</span><span class="syntaxdefault">style&nbsp;</span><span class="syntaxkeyword">|&nbsp;</span><span class="syntaxdefault">WS_EX_TOOLWINDOW</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;SetWindowPos</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">SWP_FRAMECHANGED</span><span class="syntaxkeyword">|</span><span class="syntaxdefault">SWP_NOSIZE</span><span class="syntaxkeyword">|</span><span class="syntaxdefault">SWP_NOMOVE</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">end<br /></span>
                        

                        The code needs error checking and such.
                        (maybe it's because I'm not error checking yet that I some times experience that the window automatically closes after a few seconds. it has happened only sporadically...)


                        win32.rb

                        Thomas Thomassen — SketchUp Monkey & Coding addict
                        List of my plugins and link to the CookieWare fund

                        1 條回覆 最後回覆 回覆 引用 0
                        • T 離線
                          thomthom
                          最後由 編輯 2010年10月17日 下午8:58

                          Removing the maximize and minimize button: (Addition to the code in my previous post)

                          <span class="syntaxdefault"><br />&nbsp;&nbsp;WS_MAXIMIZEBOX&nbsp;</span><span class="syntaxkeyword">=&nbsp;&nbsp;</span><span class="syntaxdefault">0x10000<br />&nbsp;&nbsp;WS_MINIMIZEBOX&nbsp;</span><span class="syntaxkeyword">=&nbsp;&nbsp;</span><span class="syntaxdefault">0x20000<br />&nbsp;&nbsp;WS_SIZEBOX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">=&nbsp;&nbsp;</span><span class="syntaxdefault">0x40000<br /><br />&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Remove&nbsp;Buttons<br />&nbsp;&nbsp;#&nbsp;http://support.microsoft.com/kb/137033<br />&nbsp;&nbsp;</span><span class="syntaxdefault">style&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">GetWindowLong</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">GWL_STYLE</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;style<br />&nbsp;&nbsp;style&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">style&nbsp;</span><span class="syntaxkeyword">&&nbsp;~</span><span class="syntaxdefault">WS_MINIMIZEBOX<br />&nbsp;&nbsp;style&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">style&nbsp;</span><span class="syntaxkeyword">&&nbsp;~</span><span class="syntaxdefault">WS_MAXIMIZEBOX<br />&nbsp;&nbsp;</span><span class="syntaxcomment">#style&nbsp;=&nbsp;style&nbsp;&&nbsp;~WS_SIZEBOX<br />&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;SetWindowLong</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">GWL_STYLE</span><span class="syntaxkeyword">,&nbsp;&nbsp;</span><span class="syntaxdefault">style</span><span class="syntaxkeyword">)<br />&nbsp;</span><span class="syntaxdefault"></span>
                          

                          This prevents the window from maximising when double-clicking. Seems to introduce some frame flicker.
                          Can GWL_STYLE and GWL_EXSTYLE changes be combines into one call?

                          Thomas Thomassen — SketchUp Monkey & Coding addict
                          List of my plugins and link to the CookieWare fund

                          1 條回覆 最後回覆 回覆 引用 0
                          • T 離線
                            thomthom
                            最後由 編輯 2010年10月18日 下午6:19

                            As implemented in TT_Lib2 with error checking:

                            <span class="syntaxdefault"><br />  </span><span class="syntaxcomment"># Call after webdialog.show to change the window into a toolwindow. Spesify the<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># window title so the method can verify it changes the correct window.<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment">#<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># @param [String] window_title<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment">#<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># @return [Nil]<br /></span><span class="syntaxdefault">  </span><span class="syntaxcomment"># @since 2.5.0<br /></span><span class="syntaxdefault">  def self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">make_toolwindow_frame</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">window_title</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment"># Retrieves the window handle to the active window attached to the calling<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment"># thread's message queue. <br /></span><span class="syntaxdefault">    hwnd </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> GetActiveWindow</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call<br />    return nil if hwnd</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">nil</span><span class="syntaxkeyword">?<br /></span><span class="syntaxdefault">    <br />    </span><span class="syntaxcomment"># Verify window text as extra security to ensure it's the correct window.<br /></span><span class="syntaxdefault">    buf_len </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> GetWindowTextLength</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    return nil if buf_len </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 0<br />    <br />    str </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">' '</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">*</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">buf_len </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    result </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> GetWindowText</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> str</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> str</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    return nil if result </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 0<br />    <br />    return nil unless str</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">strip </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> window_title</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">strip<br />    <br />    </span><span class="syntaxcomment"># Set frame to Toolwindow<br /></span><span class="syntaxdefault">    style </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> GetWindowLong</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> GWL_EXSTYLE</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    return nil if style </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 0<br />    <br />    result </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> SetWindowLong</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> GWL_EXSTYLE</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> style </span><span class="syntaxkeyword">|</span><span class="syntaxdefault"> WS_EX_TOOLWINDOW</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    return nil if result </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 0<br />    <br />    </span><span class="syntaxcomment"># Remove and disable minimze and maximize<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment"># http://support.microsoft.com/kb/137033<br /></span><span class="syntaxdefault">    style </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> GetWindowLong</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> GWL_STYLE</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    return nil if style </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 0<br />    <br />    style </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> style </span><span class="syntaxkeyword">&</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">~</span><span class="syntaxdefault">WS_MINIMIZEBOX<br />    style </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> style </span><span class="syntaxkeyword">&</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">~</span><span class="syntaxdefault">WS_MAXIMIZEBOX<br />    result </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> SetWindowLong</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> GWL_STYLE</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">  style</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    return nil if result </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 0<br />    <br />    </span><span class="syntaxcomment"># Refresh the window frame<br /></span><span class="syntaxdefault">    result </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> SetWindowPos</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">call</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">hwnd</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> SWP_FRAMECHANGED</span><span class="syntaxkeyword">|</span><span class="syntaxdefault">SWP_NOSIZE</span><span class="syntaxkeyword">|</span><span class="syntaxdefault">SWP_NOMOVE</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    result </span><span class="syntaxkeyword">!=</span><span class="syntaxdefault"> 0<br />  end<br /></span>
                            

                            Thomas Thomassen — SketchUp Monkey & Coding addict
                            List of my plugins and link to the CookieWare fund

                            1 條回覆 最後回覆 回覆 引用 0
                            • T 離線
                              thomthom
                              最後由 編輯 2010年10月18日 下午6:22

                              Can we have code blocks that expand similar to when you click on images?

                              Thomas Thomassen — SketchUp Monkey & Coding addict
                              List of my plugins and link to the CookieWare fund

                              1 條回覆 最後回覆 回覆 引用 0
                              • P 離線
                                Pout
                                最後由 編輯 2010年10月22日 上午8:58

                                What are possible advantages of using toolwindows instead of webdialogs?
                                And is the communication between SU and the toolwindow still done in the same way?

                                1 條回覆 最後回覆 回覆 引用 0
                                • T 離線
                                  thomthom
                                  最後由 編輯 2010年10月22日 上午10:38

                                  It's not different windows - it's just different window frames. The code examples changes the window frame of webdialogs to toolwindows - which takes up less space and look neater.

                                  Thomas Thomassen — SketchUp Monkey & Coding addict
                                  List of my plugins and link to the CookieWare fund

                                  1 條回覆 最後回覆 回覆 引用 0
                                  • J 離線
                                    Jim
                                    最後由 編輯 2010年10月22日 下午6:17

                                    Thanks for following (and cleaning) up the example. Will some this be getting into TT_Lib at some point?

                                    Hi

                                    1 條回覆 最後回覆 回覆 引用 0
                                    • T 離線
                                      thomthom
                                      最後由 編輯 2010年10月22日 下午7:38

                                      @jim said:

                                      Will some this be getting into TT_Lib at some point?

                                      TT_Lib2, yes.

                                      I already got a wrapper to create toolwindows.

                                      <span class="syntaxdefault"><br />&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;show_toolbar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options&nbsp;</span><span class="syntaxkeyword">=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span><span class="syntaxdefault">title&nbsp;</span><span class="syntaxkeyword">=>&nbsp;</span><span class="syntaxstring">'Bezier&nbsp;Surface'</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span><span class="syntaxdefault">pref_key&nbsp;</span><span class="syntaxkeyword">=>&nbsp;</span><span class="syntaxstring">"#{TT;;Plugins;;BPatch;;ID}_Toolbar"</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span><span class="syntaxdefault">width&nbsp;</span><span class="syntaxkeyword">=>&nbsp;</span><span class="syntaxdefault">128</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span><span class="syntaxdefault">height&nbsp;</span><span class="syntaxkeyword">=>&nbsp;</span><span class="syntaxdefault">52</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span><span class="syntaxdefault">resizable&nbsp;</span><span class="syntaxkeyword">=>&nbsp;</span><span class="syntaxdefault">false</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span><span class="syntaxdefault">scrollable&nbsp;</span><span class="syntaxkeyword">=>&nbsp;</span><span class="syntaxdefault">false<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">toolbar&nbsp;</span><span class="syntaxkeyword">||=&nbsp;</span><span class="syntaxdefault">TT</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">GUI</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">ToolWindow</span><span class="syntaxkeyword">.new(&nbsp;</span><span class="syntaxdefault">options&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">toolbar</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">show_window<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br /></span>
                                      

                                      (Extract from a work in progress project.)

                                      Thomas Thomassen — SketchUp Monkey & Coding addict
                                      List of my plugins and link to the CookieWare fund

                                      1 條回覆 最後回覆 回覆 引用 0
                                      • T 離線
                                        thomthom
                                        最後由 編輯 2010年10月22日 下午7:39

                                        Wonder if one can hook into windows like this under OSX...

                                        Thomas Thomassen — SketchUp Monkey & Coding addict
                                        List of my plugins and link to the CookieWare fund

                                        1 條回覆 最後回覆 回覆 引用 0
                                        • J 離線
                                          Jim
                                          最後由 編輯 2010年10月23日 上午4:27

                                          @pout said:

                                          What are possible advantages of using toolwindows instead of webdialogs?
                                          And is the communication between SU and the toolwindow still done in the same way?

                                          For some windows, if it is a Toolwindow it will not show up in the Alt-Tab list. But this is normal for SketchUp dialog windows anyway, so there should be no difference there.

                                          Hi

                                          1 條回覆 最後回覆 回覆 引用 0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 2 / 5
                                          • 第一個貼文
                                            最後的貼文
                                          Buy SketchPlus
                                          Buy SUbD
                                          Buy WrapR
                                          Buy eBook
                                          Buy Modelur
                                          Buy Vertex Tools
                                          Buy SketchCuisine
                                          Buy FormFonts

                                          Advertisement