<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <font size="+1"><font face="Arial">Good morning from Greg Bennett<br>
        I am trying to understand the relationship between the handling
        of subviews and<br>
        the display of their host windows/views under MS-Windows. <br>
        <br>
        What follows is a blow-by-blow account of my attempts to follow
        two of the supplied examples, <br>
        which I realise are directed to those using Mac OS rather than
        Windows. <br>
        <br>
        If I this is not the right place for such posts, or if I have
        been too verbose, please let me know.<br>
        Perhaps there is documentation about what I observe. If so, I
        should be delighted to receive a<br>
        pointer to it.<br>
        <br>
        I have used ;-> to show lines returned by CCL<br>
        <br>
        Thanks for any and all advice and comment<br>
        Cheers /Greg Bennett<br>
        <br>
        ;; In Clozure CL Version 1.7-dev-r14869  (WindowsX8632)!<br>
        ;; Running under Windows7 Pro 64bit<br>
        ;; Using 32bit executables and listener <br>
        <br>
        ;; Initially, code from
        ccl/examples/cocoa/ui-elements//HOWTO.html<br>
        (in-package :ccl)<br>
        ;->#<Package "CCL"><br>
        <br>
        ;; First sequence<br>
        ;; (a) allocate my-window1<br>
        ;; (b) equip it with attributes<br>
        ;; (c) show it<br>
        ;; (d) allocate my-button<br>
        ;; (e) equip it too<br>
        ;; (f) add my-button as a subview to my-window1<br>
        ;; (g) add a label to my-button<br>
        <br>
        (setf my-window1 (#/alloc (@class ns-window)))<br>
        ;->#<NS-WINDOW [uninitialized] (#x3591640)><br>
        (ns:with-ns-rect (r 100 100 400 300)<br>
          (#/initWithContentRect:styleMask:backing:defer: <br>
           my-window1 <br>
           r <br>
           (logior  #$NSTitledWindowMask <br>
                    #$NSClosableWindowMask  <br>
                    #$NSMiniaturizableWindowMask <br>
                    #$NSResizableWindowMask)<br>
           #$NSBackingStoreBuffered<br>
           #$NO))<br>
        ;->;Compiler warnings :<br>
        ;->;   In an anonymous lambda form at position 93: Undeclared
        free variable MY-WINDOW1<br>
        ;->#<NS-WINDOW <NSWindow 0x03591640> (#x3591640)>
         <br>
        (#/makeKeyAndOrderFront: my-window1 nil)<br>
        ;->NIL<br>
        <br>
        ;;; .. and there is the window<br>
        <br>
        (setf my-button (#/alloc ns:ns-button))<br>
        ;->#<NS-BUTTON [uninitialized] (#x36981D0)><br>
        (ns:with-ns-rect (frame 10 10 72 32)<br>
          (#/initWithFrame: my-button frame)<br>
          (#/setButtonType: my-button #$NSMomentaryPushInButton)<br>
          (#/setImagePosition: my-button #$NSNoImage)<br>
          (#/setBezelStyle: my-button #$NSRoundedBezelStyle))<br>
        ;->;Compiler warnings :<br>
        ;->;   In an anonymous lambda form at position 183:
        Undeclared free variable MY-BUTTON (4 references)<br>
        ;->NIL  <br>
        (#/addSubview: (#/contentView my-window1) my-button)<br>
        ;->NIL<br>
        <br>
        ;;; and my-window1 is unchanged in appearance<br>
        <br>
        ;;; Check on the subviews of my-window1<br>
        <br>
        (#/subviews (#/contentView my-window1))<br>
        ;->#<NS-MUTABLE-ARRAY (<br>
        ;-> "<NSButton[0x36981d0] frame: {{10, 10}, {72, 32}}>"<br>
        ;-> ) (#x35F19E8)><br>
        <br>
        ;;; so the data structure behind my-window1 seems to know about
        the button<br>
        <br>
        (let ((label (%make-nsstring "Hello!")))<br>
          (#/setTitle: my-button label)<br>
          (#/release label))<br>
        ;->;Compiler warnings :<br>
        ;->;   In an anonymous lambda form at position 57: Undeclared
        free variable MY-BUTTON<br>
        ;->NIL  <br>
        <br>
        ;;; nothing shows in my-window1<br>
        <br>
        ;; Second sequence with my-window2 for my-window1 <br>
        ;; switching adding the subview and showing the window<br>
        ;; (a) allocate my-window2<br>
        ;; (b) equip it with attributes<br>
        ;; (f) add my-button as a subview to my-window2<br>
        ;; (c) show my-window2<br>
        <br>
        (setf my-window2 (#/alloc (@class ns-window)))<br>
        ;->#<NS-WINDOW [uninitialized] (#x35D8C50)><br>
        (ns:with-ns-rect (r 100 100 400 300)<br>
          (#/initWithContentRect:styleMask:backing:defer: <br>
           my-window2 <br>
           r <br>
           (logior  #$NSTitledWindowMask <br>
                    #$NSClosableWindowMask  <br>
                    #$NSMiniaturizableWindowMask <br>
                    #$NSResizableWindowMask)<br>
           #$NSBackingStoreBuffered<br>
           #$NO))<br>
        ;->;Compiler warnings :<br>
        ;->;   In an anonymous lambda form at position 93: Undeclared
        free variable MY-WINDOW2<br>
        ;->#<NS-WINDOW <NSWindow 0x035d8c50>
        (#x35D8C50)>   <br>
        (#/addSubview: (#/contentView my-window2) my-button)<br>
        ;->NIL<br>
        (#/makeKeyAndOrderFront: my-window2 nil)   <br>
        ;->NIL<br>
        <br>
        ;;; There is my-window2 complete with button which shows Hello!<br>
        ;;; Hence the label was indeed added to the button under<br>
        ;;; the First sequence.<br>
        <br>
        ::: It seems that I can assemble a composite view and then
        successfully display<br>
        ;;; the whole thing, but not display part of it and then add the
        rest. But what<br>
        ;;; follows has me wondering about such a simple dichotomy ..<br>
        <br>
        ;;; Third sequence<br>
        ;;; Now some code from
        <a class="moz-txt-link-freetext" href="http://trac.clozure.com/ccl/wiki/CocoaBridge">http://trac.clozure.com/ccl/wiki/CocoaBridge</a><br>
        ;;; but operating in the :ccl package still<br>
        (defclass red-view (ns:ns-view)<br>
          ()<br>
          (:metaclass ns:+ns-object))<br>
        ;->#<OBJC:OBJC-CLASS RED-VIEW (#x35EA810)><br>
        (objc:defmethod (#/drawRect: :void) ((self red-view) (rect
        :<NSR>ect))<br>
          (#/set (#/redColor ns:ns-color))<br>
          (#_NSRectFill (#/bounds self)))<br>
        ;->|-[RedView drawRect:]|<br>
        (defun show-red-window ()<br>
          (ccl::with-autorelease-pool<br>
           (let* ((rect (ns:make-ns-rect 0 0 300 300))<br>
              (w (make-instance 'ns:ns-window<br>
                        :with-content-rect rect<br>
                        :style-mask (logior #$NSTitledWindowMask<br>
                                   #$NSClosableWindowMask<br>
                                   #$NSMiniaturizableWindowMask)<br>
                        :backing #$NSBackingStoreBuffered<br>
                        :defer t)))<br>
             (#/setTitle: w #@"Red")<br>
             (#/setContentView: w (#/autorelease (make-instance
        'red-view)))<br>
             (#/center w)<br>
             (#/orderFront: w nil)<br>
             (#/contentView w))))<br>
        ;->SHOW-RED-WINDOW     <br>
        (defmacro with-focused-view (view &body forms)<br>
          `(when (#/lockFocusIfCanDraw ,view)<br>
             (unwind-protect<br>
              (progn ,@forms)<br>
               (#/unlockFocus ,view)<br>
               (#/flushGraphics (#/currentContext
        ns:ns-graphics-context))<br>
               (#/flushWindow (#/window ,view)))))<br>
        ;->WITH-FOCUSED-VIEW<br>
        (setf *v* (show-red-window))<br>
        ;->#<RED-VIEW <RedView[0x45726578] frame: {{3, 3},
        {300, 300}}> (#x45726578)><br>
        <br>
        ;;; there is the red window<br>
        <br>
        ;;; Modify the "More drawing" code of this example to<br>
        ;;; (1) draw a line diagonally across the view, and<br>
        ;;; (2) omit the "hello world" text <br>
        <br>
        (with-focused-view *v*<br>
            (let* ((path (#/bezierPath ns:ns-bezier-path)))<br>
              (#/moveToPoint: path (ns:make-ns-point 10 10))<br>
              (#/lineToPoint: path (ns:make-ns-point 300 300))<br>
              (#/stroke path)<br>
              ))<br>
        ;;; now there is a diagonal line (lower left -> upper right)<br>
        <br>
        ;;; Add my-button to this<br>
        (#/addSubview: *v* my-button)<br>
        <br>
        ;;; There is the button too (with "Hello!"), BUT with a piece of
        the<br>
        ;;; diagonal line missing (from (0,0) to just above the "e"<br>
        ;;; on the button.<br>
        <br>
        ;;; Thus I have been able to make a piece of a view, show it,
        and<br>
        ;;; then add to it, unlike what happened in the First sequence.
        <br>
        <br>
        ;;; So is it possible that my-button really was drawn in my
        first sequence,<br>
        ;;; but in the background colour of its window ?<br>
        <br>
        ;; add a title to the button<br>
        (#/setTitle: my-button #@"Zootlewirdle")<br>
        ;;;the title has changed, showing just the quartet ("rdle") <br>
        ;;; so that I can modify part of an already displayed view.<br>
        <br>
        Again, thanks for any and all assistance.                    <br>
      </font></font>
  </body>
</html>