2012-03-23 2 views
1

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

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

Спасибо.

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

ответ

3

Это Application Desktop Toolbar. Волшебная функция - SHAppBarMessage.

+0

Ahh! да ! Благодарю вас, это было бы так. – TheRealChx101

+0

Хорошо. Uuhhm, я просматриваю примеры онлайн, и большинство из них не добавляют элементы управления, а заканчиваются черным. Вы знаете, как добавить простой элемент управления, например, кнопку? Спасибо – TheRealChx101

+0

Вы можете поместить все, что хотите, в свою панель приложений. Если вы хотите вставить в нее кнопку, выбейте себя. –

Смежные вопросы