|
남병철 님이 쓰신 글 :
: 윈도우에서 작업표시줄의 위치를 알고싶습니다.
: 아직 윈32프로그래밍은 꽝이라서 윈도우 객체에 대해서는 잘모르지만 분명 접근하는 방법이 있을걸로
: 생각됩니다.
: Screen->Width만으로는 작업표시줄이 위로 높이 올라왔을때 실제 스크린의 크기는 알 수 없었던걸로
: 알고있습니다.
: 순수 스크린만의 크기는 어떻게 구해야하나요?
자문자답이지만 어케든 구했습니다.. ^^;
에구.. 오늘 몸도 않좋은데 참.. 쩝.. 그럼 간단히 적어보죠.
typedef struct _AppBarData
{
DWORD cbSize;
HWND hWnd;
UINT uCallbackMessage;
UINT uEdge;
RECT rc;
LPARAM lParam; // message specific
} APPBARDATA, *PAPPBARDATA;
위의 구조체와...
SHSTDAPI_(UINT) SHAppBarMessage(DWORD dwMessage, PAPPBARDATA pData);
위의 함수를 사용했습니다. (비베 API 라이브러리에서 참고했음. ㅡ.ㅡ;;)
간신히 엑세스 바이얼레이션을 피해서 어떻게든 값은 구했습니다.
(지금도 머리가 어찔어찔하네요. ㅡㅡ;)
소스는 정말 간단합니다.
위의 구조체를 선언해주고 구조체에 크기를 세팅해주고 위의 함수를 사용해서 태스크바의 크기를
구하면 됩니다. ( ㅡㅡ; 하여간 빨리 API를 마스터해야혐.. ㅡㅡ; 쩝.. )
이런것 하나에 넘 체력낭비가 심하네요.. ㅡㅡ;
내일은 더 나아질것을 기대하며.. T__T
이상 자문자답이었습니다.
ps. 수정하거나 보강할 부분이 있으면 추가답변 부탁합니다. ^___^;
<소스>
void __fastcall TForm1::Button2Click(TObject *Sender)
{
long TaskBarH;
APPBARDATA structBarData;
long l, r, t, b;
structBarData.cbSize = (unsigned long)sizeof(APPBARDATA);
TaskBarH = SHAppBarMessage(ABM_GETTASKBARPOS, &structBarData);
l = structBarData.rc.left;
r = structBarData.rc.right;
t = structBarData.rc.top;
b = structBarData.rc.bottom;
Label1->Caption = IntToStr(t);
Label2->Caption = IntToStr(l);
Label3->Caption = IntToStr(r);
Label4->Caption = IntToStr(b);
}
:보시면 아시겠지만 버튼하나에 라벨4개랍니다.(디기 단순하당.. ㅡㅡ;)
|