Win32 C / C ++ добавить кнопку на рабочий стол - PullRequest
2 голосов
/ 24 марта 2012

Привет давным-давно я видел программу, созданную на C ++, которая создала кнопку и пристыковалась в верхнем левом углу рабочего стола, так что размер самого рабочего стола был изменен в соответствии с новым элементом управления.Но я забыл, какой API использовал парень.

Кто-нибудь знает, о чем я говорю, или имеет какой-либо опыт работы с элементами управления рисованием на рабочем столе?

Спасибо.

PS: Мне просто нужны API

#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;
}

1 Ответ

3 голосов
/ 24 марта 2012
...