내 프로그램 - 다른 것들 사이는 - 콘솔 창 모양 (주로 창 크기 및 테두리)을 변경합니다.
이제 내 컴퓨터, 모든 순간에 완벽하게 작동하지만 버추얼에서 응용 프로그램을 실행하거나 다른 컴퓨터에, 내가 할 때 다음과 같다 :C++ : 느린 '유령'창이 나타납니다 ..?
이미지의 왼쪽 상단에있는 창은 실제로 창이 아닙니다. 그것은 클릭 할 수없는 창 이미지입니다.
당신은 그것을 통해 바탕 화면에서 선택 사각형을 스트레칭하여 제거 할 수 (마우스 클릭은 통과), 또는 (예) 버튼을 선택하면 그게 받고있다. 또한 창 위로 이동하면 완전히 사라집니다.
이미지의 오른쪽 하단에 검은 색 사각형이 올바르게 표시됩니다 내 콘솔 창입니다.
내 질문은, 어떻게 C로 '유령'창을 제거하는 것입니다 ++?
Google 검색을 시도했지만 모두 내 컴퓨터에서이 문제가 발생하지 않아서 컴퓨터에서 아무 것도하지 않는 ChangeDisplaySettings(0, 0);
이며 VirtualBox에서는 처음에는 잠시 나타납니다. 콘솔 창을 전체 화면으로 만든 다음 원래대로 되돌립니다. (응용 프로그램을 처음 실행할 때 화면이 깜박입니다.)
유령 창을 제거하지만 화면이 깜박 거리는 것을 원치 않으므로이 점은 제가 찾고있는 것과 다릅니다.
편집 :
이 문제의 관련 코드가 무엇인지 알 수 없기 때문에 프로그램에서 창 자체를 변경하는 것과 관련이있는 코드를 모두 덤프 할 것입니다.
CSBIEx.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
GetConsoleScreenBufferInfoEx(hCon, &CSBIEx);
CSBIEx.dwSize.X = 49;
CSBIEx.dwSize.Y = 21;
SetConsoleScreenBufferInfoEx(hCon, &CSBIEx);
srWnd.Bottom = 20;
srWnd.Left = 0;
srWnd.Right = 48;
srWnd.Top = 0;
SetConsoleWindowInfo(hCon, TRUE, &srWnd);
GetClientRect(hWnd, &rClnt);
rClnt.top += 1;
rClnt.bottom -= 2;
rClnt.right -= 1;
SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP);
exStyle = GetWindowLongPtr(hWnd, GWL_EXSTYLE);
exStyle &= ~WS_EX_CLIENTEDGE;
SetWindowLongPtr(hWnd, GWL_EXSTYLE, exStyle);
BringWindowToTop(hWnd);
SetWindowPos(hWnd, HWND_TOPMOST, ((rScr.right/2) - rClnt.right/2) - 1, (rScr.bottom/2) - rClnt.bottom/2, 0, 0, SWP_FRAMECHANGED | SWP_DRAWFRAME | SWP_NOSIZE);
SetWindowRgn(hWnd, CreateRectRgnIndirect(&rClnt), 1);
ShowWindow(hWnd, SW_SHOWNORMAL);
//ChangeDisplaySettings(0, 0);
2 일 편집 :
이 어떤 도움이 있는지 모르겠어요,하지만 난 ChangeDisplaySettings(NULL, 0);
대신 ChangeDisplaySettings(0, 0);
의를 사용하는 경우는 아무것도하지 않는 것으로 나타났습니다. NULL
이 #define
d 0
입니다.
아무도 알아낼 수 없다면, 아마도 ChangeDisplaySettings(0, 0);
을 사용하게 될 것입니다.
우리에게 보여줄 수있는 [짧고, 잘 들어 있고 정확한 예] (http://sscce.org/)를 만들 수 있습니까? 코드를 보지 않고 무엇이 잘못되었는지를 추측하는 것은 매우 어렵습니다. –
이것은 소유자의 뒤에서 창 설정을 변경하는 단점입니다. 창 프로 시저가 수행 한 작업을 알지 못해서 상황이 올바르게 그려지지 않거나 지워지지 않습니다. – Deanna
@ JoachimPileborg 필자는 내 자신의 컴퓨터에서이 코드를 실제로 복제 할 수 없기 때문에 관련 코드를 제공하기가 정말로 어렵지만 가능한 한 최선의 코드를 추가하려고합니다. 잠시만. –