Я пытаюсь программно переместить МОЮ панель задач с помощью функции win32 SHAppBarMessage () с параметром ABM_SETPOS.
Я знаю и следую мантре «Всегда держите пользователя под контролем», и я знаю, что некоторые скажут, что у приложения нет причин делать это.Я изучаю win32, и эта проблема на какое-то время побеждала меня, и это всегда заставляет меня хотеть решить эту проблему еще больше!Если есть функция SHAppBarMessage, то окна должны позволять вам перемещать панель задач.
Не могли бы вы дать совет о том, как я могу заставить SHAppBarMessage перемещать панель задач вправо?
Мой код ниже используетдва метода, чтобы попытаться переместить панель задач к правой границе моего экрана.Оба метода терпят неудачу, и я начинаю думать, что, возможно, Windows 7 не позволит вам переместить панель задач, хотя я искал MSDN, и ни одна из документации не предполагает, что она устарела.
1-й метод следует вежливому стандартуСначала используйте ABM_QUERYPOS, прежде чем я попытаюсь ABM_SETPOS, но это не перемещает панель задач.
BOOL moveTaskBar( UINT pos, bool a )
{
// Post:
APPBARDATA barData;
RECT barRect;
HWND hTaskbar = FindWindow( "Shell_TrayWnd", NULL );
SetRect( &barRect, 1310, 10, 1350, 740 ); // These dimensions & coords are within my screens bounds so thats not a problem
barData.cbSize = sizeof(APPBARDATA);
barData.hWnd = hTaskbar;
barData.uCallbackMessage = 0;
barData.uEdge = pos;
barData.rc = barRect;
barData.lParam = (LPARAM) FALSE;
BOOL fResult = (BOOL) SHAppBarMessage( ABM_QUERYPOS, &barData ); // Get system to verify & suggest position
fResult = (BOOL) SHAppBarMessage( ABM_SETPOS, &barData ); // Set position
fResult = (BOOL) SHAppBarMessage( ABM_WINDOWPOSCHANGED, &barData ); // Inform ??? that the taskbar pos has been changed
// Debugging
// fResult = (BOOL) SHAppBarMessage( ABM_ACTIVATE, &barData );
// fResult = (BOOL) SHAppBarMessage( ABM_GETTASKBARPOS, &barData );
return ( fResult == 0 );
}
Мой второй метод пытается заставить HWND панели задач переместиться в положение x, y, это то, что я не хотел бы делать, но я пытаюсь найти метод для перемещенияпанель задач, но в любом случае этот метод также не работает.Что заставляет меня думать, что вы не можете переместить панель задач в Windows 7?
BOOL moveTaskBar( UINT pos )
{
// Post:
HWND hTaskbar = FindWindow( "Shell_TrayWnd", NULL );
SetWindowPos(hTaskbar, NULL, barData.rc.left, barData.rc.top, barData.rc.right, barData.rc.bottom, SWP_NOSENDCHANGING);
ShowWindow(hTaskbar, SW_SHOW);
UpdateWindow(hTaskbar);
HWND hDesktopWindow = GetDesktopWindow();
RedrawWindow( hDesktopWindow, NULL, NULL, RDW_FRAME|RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN );
SystemParametersInfo(SPI_SETWORKAREA, 0, NULL, SPIF_SENDCHANGE);
UpdateWindow(hDesktopWindow);
}