[MFC] 다이얼로그 컨트롤 아이디로 버튼인지 알아내기 | VC++ 일반 | 2003-01-02 오전 9:38:21 |
조경민 (bro) | 번호: 5887 / 평점: (-) / 읽음:1,116 |
조경민 bro@shinbiro.com
다이얼로그 컨트롤 아이디로 버튼인지 체크 박스인지 알아내기
====================================================================
HWND 컨트롤의 윈도우 핸들로 아래와 같이 클래스 이름을 얻어와서
int GetClassName( hC
HWND hWnd, // handle to window
LPTSTR lpClassName, // class name
int nMaxCount // size of class name buffer
);
"button" 이라는 문자열이라면 버튼 윈도우를 의미하며
버튼 윈도우는 디폴트 버튼(테두리가 굵은섹 IDOK), 그냥 버튼.
라디오 버튼, 체크 버튼 등 여러가지가 있다. 아래는 버튼의 스타일이다.
( Spy++로 해당 윈도우를 잡아 보면 윈도우 클래스이름을 얻어올 수 있다. )
/*
* Button Control Styles
*/
#define BS_PUSHBUTTON 0x00000000L
#define BS_DEFPUSHBUTTON 0x00000001L
#define BS_CHECKBOX 0x00000002L
#define BS_AUTOCHECKBOX 0x00000003L
#define BS_RADIOBUTTON 0x00000004L
#define BS_3STATE 0x00000005L
#define BS_AUTO3STATE 0x00000006L
#define BS_GROUPBOX 0x00000007L
#define BS_USERBUTTON 0x00000008L
#define BS_AUTORADIOBUTTON 0x00000009L
#define BS_OWNERDRAW 0x0000000BL
#define BS_LEFTTEXT 0x00000020L
#if(WINVER >= 0x0400)
#define BS_TEXT 0x00000000L
#define BS_ICON 0x00000040L
#define BS_BITMAP 0x00000080L
#define BS_LEFT 0x00000100L
#define BS_RIGHT 0x00000200L
#define BS_CENTER 0x00000300L
#define BS_TOP 0x00000400L
#define BS_BOTTOM 0x00000800L
#define BS_VCENTER 0x00000C00L
#define BS_PUSHLIKE 0x00001000L
#define BS_MULTILINE 0x00002000L
#define BS_NOTIFY 0x00004000L
#define BS_FLAT 0x00008000L
#define BS_RIGHTBUTTON BS_LEFTTEXT
#endif /* WINVER >= 0x0400 */
하위 한바이트가 버튼의 특성을 크게 결정짓는 것이므로
CWnd::GetStyle 즉
_AFXWIN_INLINE DWORD CWnd::GetStyle() const
{ ASSERT(::IsWindow(m_hWnd)); return (DWORD)GetWindowLong(m_hWnd, GWL_STYLE); }
UINT nButtonStyle = GetWindowLong(m_hWnd, GWL_STYLE) & 0x0000000F;
한 후
if( nButtonStyle == BS_PUSHBUTTON || nButtonStyle == BS_DEFPUSHBUTTON )
{
// 보통의 버튼이다.
}
else
if( nButtonStyle == BS_CHECKBOX || nButtonStyle == BS_AUTOCHECKBOX )
{
// 보통의 체크 박스다.
}
else
if( nButtonStyle == BS_3STATE || nButtonStyle == BS_AUTO3STATE )
{
// 보통의 3 상태 버튼이다.
}
else
if( nButtonStyle == BS_RADIOBUTTON || nButtonStyle == BS_AUTORADIOBUTTON )
{
// 보통의 라디오 버튼이다.
}
else
if( nButtonStyle == BS_OWNERDRAW )
{
// 보통의 오너 드로우 버튼이다.
}
else
{
} ..
이런식으로 하면 어떤 버튼인지 알 수 있다.
이와 비슷하게 리스트, 트리 등도 구분 해 낼 수 있을 것이다.
댓글 없음:
댓글 쓰기