В настоящее время я пытаюсь создать программу, которая выводит многоугольник на рабочий стол для простой анимации. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что анимация получает эффект лука, потому что рабочий стол не обновляется. Я искал способ обновить рабочий стол, однако, поскольку это анимация, ни одно из решений не может обновить его достаточно быстро. Ниже приведен пример моего кода:
#include <iostream>
#include <Windows.h>
#include <math.h>
#include <Shlobj.h>
int main() {
//start ambrose
POINT amby[5];
POINT pos;
/* hide console window */
ShowWindow(FindWindowA("ConsoleWindowClass", NULL), false);
/* Calling GetDC with argument 0 retrieves the desktop's DC */
HDC hDC_Desktop = GetDC(0);
//This is just an example of what I am doing
for (int i = 0; i < 10000; i++) {
pos.x = 600+sin(double(i)/50)*200;
pos.y = 500+cos(double(i)/50)*200;
amby[0].x = -10+pos.x;
amby[0].y = -10+pos.y;
amby[1].x = -50+pos.x;
amby[1].y = -50+pos.y;
amby[2].x = 50+pos.x;
amby[2].y = -50+pos.y;
Polygon(hDC_Desktop,amby, 3);
Sleep(10);
}
//The method I was trying before that didn't work VVVVV
//LPITEMIDLIST pidl;
//SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidl);
//SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,pidl,0);
return 0;
}
Спасибо
Редактировать
Я пытался использовать invalidateRect как таковой:
...
for (int i = 0; i < 10000; i++) {
pos.x = 600+sin(double(i)/50)*200;
pos.y = 500+cos(double(i)/50)*200;
amby[0].x = -10+pos.x;
amby[0].y = -10+pos.y;
amby[1].x = -50+pos.x;
amby[1].y = -50+pos.y;
amby[2].x = 50+pos.x;
amby[2].y = -50+pos.y;
Polygon(hDC_Desktop,amby, 3);
InvalidateRect(GetDesktopWindow(),NULL, true);
Sleep(10);
}
...
Мне интересно, можно ли каким-либо образом вызвать WM_ERASEBKGND или WM_DISPLAYCHANGE, чтобы принудительно внести изменения. Кто-нибудь знает, есть ли способ вызвать их?
FindWindow
находит для вас — которое может быть тем, в котором запущена ваша программа, а может и не быть . Но почему в вашей программе вообще есть консольное окно, если все, что вы хотите сделать с ним, это скрыть его? - person hmakholm left over Monica   schedule 31.10.2012