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

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

Scheduled Pinned Locked Moved Developers' Forum
91 Posts 8 Posters 15.9k Views 8 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    JD Hill
    last edited by 1 Oct 2010, 13: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 Reply Last reply Reply Quote 0
    • T Offline
      thomthom
      last edited by 4 Oct 2010, 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 Reply Last reply Reply Quote 0
      • T Offline
        thomthom
        last edited by 4 Oct 2010, 15: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 Reply Last reply Reply Quote 0
        • J Offline
          Jim
          last edited by 4 Oct 2010, 16: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 Reply Last reply Reply Quote 0
          • T Offline
            thomthom
            last edited by 4 Oct 2010, 20: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 Reply Last reply Reply Quote 0
            • T Offline
              thomthom
              last edited by 17 Oct 2010, 20: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 Reply Last reply Reply Quote 0
              • T Offline
                thomthom
                last edited by 17 Oct 2010, 20: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 Reply Last reply Reply Quote 0
                • T Offline
                  thomthom
                  last edited by 18 Oct 2010, 18: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 Reply Last reply Reply Quote 0
                  • T Offline
                    thomthom
                    last edited by 18 Oct 2010, 18: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 Reply Last reply Reply Quote 0
                    • P Offline
                      Pout
                      last edited by 22 Oct 2010, 08: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 Reply Last reply Reply Quote 0
                      • T Offline
                        thomthom
                        last edited by 22 Oct 2010, 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 Reply Last reply Reply Quote 0
                        • J Offline
                          Jim
                          last edited by 22 Oct 2010, 18:17

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

                          Hi

                          1 Reply Last reply Reply Quote 0
                          • T Offline
                            thomthom
                            last edited by 22 Oct 2010, 19: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 Reply Last reply Reply Quote 0
                            • T Offline
                              thomthom
                              last edited by 22 Oct 2010, 19: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 Reply Last reply Reply Quote 0
                              • J Offline
                                Jim
                                last edited by 23 Oct 2010, 04: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 Reply Last reply Reply Quote 0
                                • J Offline
                                  Jim
                                  last edited by 23 Oct 2010, 04:32

                                  @thomthom said:

                                  I some times experience that the window automatically closes after a few seconds. it has happened only sporadically...)

                                  It's just getting GC'd. window is a local variable referencing the WebDialog, and the variable no longer exists after the method exits. Since the WebDialog no longer has any references, it is GC'd.

                                  @thomthom said:

                                  Can GWL_STYLE and GWL_EXSTYLE changes be combines into one call?

                                  Maybe - the "styles" are just bits but at different offset (one is -16, the other -20). If you meant is there a win32api function for setting both simultaneously then I don't know.

                                  Hehe, the php highlighter work OK on Ruby. 👍

                                  Hi

                                  1 Reply Last reply Reply Quote 0
                                  • T Offline
                                    thomthom
                                    last edited by 23 Oct 2010, 09:34

                                    @jim said:

                                    It's just getting GC'd. window is a local variable referencing the WebDialog, and the variable no longer exists after the method exits. Since the WebDialog no longer has any references, it is GC'd.

                                    Oh... that's a gotcha I didn't think of. You need to keep a reference to the WD for the duration of its lifespan.

                                    @jim said:

                                    Maybe - the "styles" are just bits but at different offset (one is -16, the other -20). If you meant is there a win32api function for setting both simultaneously then I don't know.

                                    The thing is - today, I don't really see any lag... 😕 😒

                                    What's nice about having toolwindows is that now I can make my custom toolbar. 😄

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

                                    1 Reply Last reply Reply Quote 0
                                    • T Offline
                                      thomthom
                                      last edited by 26 Dec 2010, 13:45

                                      Just came across a nice API call that will be useful for creating webdialog toolbars:
                                      http://social.msdn.microsoft.com/forums/en/csharpgeneral/thread/e7fef568-2c0b-41eb-9785-304f84d03819/#bf79c87e-ef49-456f-a485-aa767d841d20

                                      One can use WS_EX_NOACTIVATE to prevent a window from catching focus - but from what I understand it'll still allow interaction events. I'll try it out as soon as I get home.

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

                                      1 Reply Last reply Reply Quote 0
                                      • T Offline
                                        thomthom
                                        last edited by 26 Dec 2010, 13:51

                                        hm....

                                        @unknownuser said:

                                        The WS_EX_NOACTIVATE value for dwExStyle prevents foreground activation by the system. To prevent queue activation when the user clicks on the window, you must process the WM_MOUSEACTIVATE message appropriately. To bring the window to the foreground or to activate it programmatically, use SetForegroundWindow or SetActiveWindow. Returning FALSE to WM_NCACTIVATE prevents the window from losing queue activation. However, the return value is ignored at activation time.

                                        http://msdn.microsoft.com/en-us/library/ms632680%28v=vs.85%29.aspx

                                        "queue activation"?

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

                                        1 Reply Last reply Reply Quote 0
                                        • T Offline
                                          thomthom
                                          last edited by 26 Dec 2010, 13:58

                                          bleh... turns out to not be so straight forwards as I though. Seems that one needs to handle some window messages:
                                          http://www.allquests.com/question/132471/Ws-ex-noactivate.html
                                          http://stackoverflow.com/questions/2969680/c-showing-form-with-ws-ex-noactivate-flag

                                          But working out how to handle window messages would be a very interesting thing - as then we could recreate the roll-up/down feature of SU's toolwindows.

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

                                          1 Reply Last reply Reply Quote 0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 2 / 5
                                          • First post
                                            Last post
                                          Buy SketchPlus
                                          Buy SUbD
                                          Buy WrapR
                                          Buy eBook
                                          Buy Modelur
                                          Buy Vertex Tools
                                          Buy SketchCuisine
                                          Buy FormFonts

                                          Advertisement