Привет давным-давно я видел программу, созданную на 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;
}