C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[20616] Re:[질문]프로그램 비정상 종료시 트레이 아이콘 바로 사라지게 하기 어떻게 하는지 아는분 ???
유영인.Chris [cuperido] 1575 읽음    2002-08-05 11:48
TrayBar의 버그로 어플리케이션이 비정상적으로 종료가 되면 나타나는 문제입니다. 그렇기 때문에 어플리케이션에서 어떤식으로 만들어도 그 버그는 나타나게 됩니다. 이 문제는 Builder 뿐만이 아니라 모든 어플리케이션에서 공통적으로 일어나는 문제입니다.

강제적으로 Refresh 시켜주는 방법 또한 먹지 않습니다. (부분적인 OS에서만 되는것 같더군요) 그래서 그냥 고전적인 방법으로 마우스를 아이콘 각각에 위치시키는 방법을 몇몇 어플리케이션에서는 사용하고 있습니다.

아래 소스는 해당하는 그 소스로, 제가 만든건 아니고 델파이로 뉴스그룹에 돌아다니던걸 빌더로 포팅해 본것 입니다. 테스트도 해봤는데, 잘 동작되네요.


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

HWND              hdHandle;
RECT              rtRect;
int               itWidth, itHeight, itX, itY;
tagPOINT          tpPosition;


hdHandle = FindWindowEx(FindWindow("Shell_TrayWnd", NULL), 0, "TrayNotifyWnd", NULL);
GetWindowRect(hdHandle, &rtRect);

itWidth  = GetSystemMetrics(SM_CXSMICON);
itHeight = GetSystemMetrics(SM_CYSMICON);


GetCursorPos(&tpPosition);

for(itY = 0; itY <= (rtRect.bottom - rtRect.top) / itHeight; itY ++)
   for(itX = 0; itX <= (rtRect.right - rtRect.left) / itWidth; itX ++) {
     SetCursorPos(rtRect.left + itX * itWidth, rtRect.top + itY * itHeight);
     Sleep(0);
   }

SetCursorPos(tpPosition.x, tpPosition.y);


RedrawWindow(hdHandle, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW);

}
//---------------------------------------------------------------------------


박용우 님이 쓰신 글 :
:
: 답변이 없어서.. 한번 더 올립니다  
: 혹시 방법이 없는건가요???
:
:
:
: 시스템 트레이 부분에 트레이 아이콘을 지우고 났는데도..
: 비정상 종료 되면. .아이콘이 남아 있군요
:
: 이것을 없애려면... 마우스로 그 트레이 아이콘 위에 가야 없어지더라구요...
:
:
: 아마도.. 마우스가 그 트레이 아이콘 위에 가면 repaint 하는거 같은데.. .
: 시스템 트레이 부분을 repaint 하는 방법은... 없을까요...
:
: 고수님들 가르쳐 주세요...
:
: ^^; 부탁합니다 꾸우뻑
:

+ -

관련 글 리스트
20593 [질문]프로그램 비정상 종료시 트레이 아이콘 바로 사라지게 하기 어떻게 하는지 아는분 ??? 박용우 981 2002/08/02
20616     Re:[질문]프로그램 비정상 종료시 트레이 아이콘 바로 사라지게 하기 어떻게 하는지 아는분 ??? 유영인.Chris 1575 2002/08/05
20628         감사합니다... (냉무) 박용우 889 2002/08/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.