The MASM Forum

General => The Campus => Topic started by: caraveiro on April 04, 2013, 06:52:31 AM

Title: Drawing the DeskTop and Windows 8
Post by: caraveiro on April 04, 2013, 06:52:31 AM
I'd use poliline to draw in the windows Desktop.


The next code draws a simple rectangule outline shape on the desktop. BUT does not work in windows 8 (somehow W8 mess the inner area of the rectangle):


    Invoke CreateDC,addr szDisplay,NULL,NULL,NULL ;MultiMonitor
    ;Invoke GetDC,NULL ;Main monitor
    mov   hDC,eax
    ;
        lea ecx,sPoints
        mov eax,dStartX
        mov dword ptr[ecx],eax
        add ecx,4
        mov eax,dStartY
        mov dword ptr[ecx],eax
        ;
        add ecx,4
        mov eax,dStartX
        add eax,dWidth
        mov dword ptr[ecx],eax
        add ecx,4
        mov eax,dStartY
        mov dword ptr[ecx],eax
        ;
        add ecx,4
        mov eax,dStartX
        add eax,dWidth
        mov dword ptr[ecx],eax
        add ecx,4
        mov eax,dStartY
        add eax,dHeigth
        mov dword ptr[ecx],eax
        ;
        add ecx,4
        mov eax,dStartX
        mov dword ptr[ecx],eax
        add ecx,4
        mov eax,dStartY
        add eax,dHeigth
        mov dword ptr[ecx],eax
        ;
        add ecx,4
        mov eax,dStartX
        mov dword ptr[ecx],eax
        add ecx,4
        mov eax,dStartY
        mov dword ptr[ecx],eax
        ;
        mov dPoints,5 ;Number of points
        ;               
    Invoke Polyline,hDC,addr sPoints,dPoints ;Usar mejor PolyPolyline   
    ;
    Invoke ReleaseDC,NULL,hDC 



I think that Windows 8 needs some "setgraphicmode" or something else setting to work properly.

Any clues?

Thnks.
Title: Re: Drawing the DeskTop and Windows 8
Post by: qWord on April 04, 2013, 08:45:29 AM
You did not select a brush in the DC before drawing (the desktop-LV's DC has a hollow brush selected). Furthermore, note that your are asynchronously drawing to the desktop list view, which will quickly overdrawn by the control.
You might consider about an overlay window/control or similar.
Title: Re: Drawing the DeskTop and Windows 8
Post by: caraveiro on April 04, 2013, 11:56:15 AM
Quote from: qWord on April 04, 2013, 08:45:29 AM
You did not select a brush in the DC before drawing (the desktop-LV's DC has a hollow brush selected).

I use to draw in the Desktop as a matter of ruler for some application, so the drawing must appear over the top application.

Quote from: qWord on April 04, 2013, 08:45:29 AM
Furthermore, note that your are asynchronously drawing to the desktop list view, which will quickly overdrawn by the control.
You might consider about an overlay window/control or similar.
How can I get done without loosing the focus in the top application?

Thank in advance.
Title: Re: Drawing the DeskTop and Windows 8
Post by: qWord on April 05, 2013, 09:47:42 AM
you maybe give us more details on your problem?

There several, more or less complicated ways to overdraw windows of other processes:
- the target program has a public API/Interface/etc..
- window hooks (requires code/DLL injection, should be avoided)
- layered window on top of the target window in combination with active accessibility events
- DirectX/Draw overlays (AFAIK support depends on installed graphic card)
- ...?

qWord