2012-03-23 11 views
1

Hallo vor langer Zeit sah ich ein Programm in C++, die eine Schaltfläche erstellt und in der oberen linken Ecke des Desktops angedockt, so dass der Desktop selbst wurde angepasst, um die neue Kontrolle. Aber ich habe vergessen, welche API der Typ benutzt hat.Win32 C/C++ fügen Sie eine Schaltfläche zum Desktop

Weiß jemand, worüber ich spreche oder habe ich irgendwelche Erfahrungen mit dem Zeichnen von Steuerelementen auf dem Desktop?

Danke.

PS: Ich brauche nur die APIs

#include <windows.h> 

#include <stdio.h> 

#pragma comment(lib,"user32.lib") 

#include <shellapi.h> 

void pumpMsg(MSG * msg){ 


while(GetMessage(msg,0,0,0) != 0) 
{ 
    TranslateMessage(msg); 
    DispatchMessage(msg); 
} 

} 


WNDPROC oldProc = 0; 

HWND hWnd = 0; 

APPBARDATA abd = {0}; 

BOOL CALLBACK dlgProc(HWND hwnd, UINT msg, WPARAM wpar, LPARAM lpar) 
{ 
if(msg==WM_COMMAND) 
{ 
    if(wpar==100) 
    { 
     puts("Called"); 
     SendMessage(hwnd,WM_CLOSE,0,0); 
    } 

} 

if(msg==WM_CLOSE || msg==WM_QUIT) 
{ 
    SHAppBarMessage(ABM_REMOVE, &abd); 
    EndDialog(hwnd,1); 
} 

CallWindowProc(oldProc,hwnd,msg,wpar,lpar); 
} 

int main(int argc, char *argv[]) 
{ 
MSG msg = {0}; 

    DWORD style = WS_VISIBLE|WS_SYSMENU; 
hWnd = CreateWindowEx(0,WC_DIALOG,"",style,2,2,400,400,0,0,GetModuleHandle(0),0); 
__asm mov ebx, eax 



     abd.cbSize = sizeof(APPBARDATA); 
     abd.hWnd = hWnd; 
     SHAppBarMessage(ABM_NEW, &abd); 
     abd.rc.top = 0; 
     abd.rc.left = 0; 
     abd.rc.right = GetSystemMetrics(SM_CXSCREEN); 
     abd.rc.bottom = abd.rc.top + 60; 

     abd.uEdge = ABE_TOP; 

     SHAppBarMessage(ABM_QUERYPOS, &abd); 
     SHAppBarMessage(ABM_SETPOS, &abd); 
     abd.lParam = TRUE; 
     SHAppBarMessage(ABM_ACTIVATE, &abd); 

     MoveWindow(hWnd, abd.rc.left, abd.rc.top, abd.rc.right - abd.rc.left, abd.rc.bottom - abd.rc.top, TRUE); 

     CreateWindowEx(0,"button","button",WS_BORDER|WS_CHILD|WS_VISIBLE,2,10,40,40,hWnd,(HMENU)100,GetModuleHandle(0),0); 

__asm{ 

    push dlgProc 
    push GWL_WNDPROC 
    push ebx 
    call [SetWindowLong] 

    mov  [oldProc], eax 
    } 

DWORD tid = 0; 

// CreateThread(0,0,&Timer,0,0,&tid); 

pumpMsg(&msg); 


return 0; 
} 

Antwort

3

Das ist eine Application Desktop Toolbar ist. Die magische Funktion ist SHAppBarMessage.

+0

Ahh! Ja ! Danke, das wäre es. – TheRealChx101

+0

Ok. Uuhm, ich schaue mir die Beispiele online an und die meisten von ihnen fügen keine Steuerelemente hinzu, es endet einfach schwarz. Weißt du zufällig, wie man ein einfaches Steuerelement wie eine Schaltfläche hinzufügt? Danke – TheRealChx101

+0

Sie können setzen, was Sie wollen, in Ihrer Appbar. Wenn du einen Knopf drücken willst, klopfe dich aus. –