c - Win32 C/C++ 添加一个按钮到桌面

标签 c controls desktop draw win32gui

嗨,很久以前,我看到一个用 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;
}

最佳答案

这是一个 Application Desktop Toolbar 。神奇的功能是SHAppBarMessage .

关于c - Win32 C/C++ 添加一个按钮到桌面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9846502/

相关文章:

javascript - Ajax 拨号控制?

git - 意外删除的 .git 文件夹 - 可以恢复吗?

c++ - 在 Windows 8 中从开始菜单切换到桌面

windows - Windows 桌面锁定时 ExitWindowsEx 失败

c - 如何在C程序中找到线上的偶数

C编程: error: expected ‘)’ before string constant

c - 存储括号打开和关闭的地址

用 C 生成的 CRC 查找表总是给出不同的结果

c++ - 如何在 C++ 中实现传递函数的控制系统 block ?

c++ - 用于 C++ GUI 桌面 Windows 应用程序的测试自动化工具/库/框架