Winapi — C ++ не может закрепить AppBar

Я пытаюсь закрепить панель приложений на правой стороне экрана рабочего стола. Поэтому я включил только код на право. Я не собираюсь перемещать панель приложений или включить функцию автоматического скрытия. Ниже приведен код:

    #include <windows.h>
#include <commctrl.h>
#include "resource.h"#include <stdio.h>

#define Tool_Width 300

HINSTANCE hInst;
RECT desktop;
BOOL fBarRegistered;
UINT uCallBack;

void RegisterBar(HWND);
void ABSetPos(HWND);

BOOL CALLBACK DlgMain(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch(uMsg){
case WM_INITDIALOG:{
SystemParametersInfo(SPI_GETWORKAREA,0, &desktop, 0);
RegisterBar(hwndDlg);
}
return TRUE;

case WM_CLOSE:{
RegisterBar(hwndDlg);
EndDialog(hwndDlg, 0);
}
return TRUE;

}
return FALSE;
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){
hInst=hInstance;
InitCommonControls();
return DialogBox(hInst, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DlgMain);
}

void RegisterBar(HWND hwndDlg){
APPBARDATA abd;
abd.cbSize = (DWORD) sizeof(APPBARDATA);
abd.hWnd = hwndDlg;
if (!fBarRegistered){
uCallBack = RegisterWindowMessage("AppBarMessage");
abd.uCallbackMessage = uCallBack;

SHAppBarMessage((DWORD)ABM_NEW, &abd);
fBarRegistered = true;

ABSetPos(hwndDlg);
}
else{
SHAppBarMessage((DWORD)ABM_REMOVE, &abd);
fBarRegistered = false;
}
}

void ABSetPos(HWND hwndDlg){
APPBARDATA abd;
abd.cbSize = (DWORD) sizeof(APPBARDATA);
abd.hWnd = hwndDlg;
abd.uEdge = (UINT)ABE_RIGHT;

abd.rc.top = 0;
abd.rc.bottom = desktop.bottom;
abd.rc.right = desktop.right;
abd.rc.left = abd.rc.right - Tool_Width;

SHAppBarMessage((DWORD)ABM_QUERYPOS, &abd);
abd.rc.left= abd.rc.right - Tool_Width;
SHAppBarMessage((DWORD)ABM_SETPOS, &abd);

MoveWindow(hwndDlg, abd.rc.left, abd.rc.top, abd.rc.right - abd.rc.left, abd.rc.bottom - abd.rc.top, false);
}

Когда я запускаю этот код, пространство выделяется с правой стороны, но MoveWindow не вставляет окно в это пространство. Если я прокомментирую ABM_SETPOS, MoveWindow перемещается и диалоговое окно размеров справа, но не стыкуется.

Я ссылался на код с этого сайта Пример кода C #

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]