윈도우의 여러 다이얼로그를 보면 아래와 같이 하이퍼링크를 다이얼로그에 자연스럽게 삽입한 것을 자주 볼 수 있게 됩니다.
보통 다이얼로그에 하이퍼링크를 넣을려면 코드프로젝트나 코드구루같은 개발포럼에서 좋은 컨트롤을 가져다가 사용하는 경우가 많습니다. 그런데 윈도우의 공용컨트롤에서 그런 기능을 지원한다면 구지 찾아다닐 필요없이 공용컨트롤을 사용하는게 훨신 편하고 빠르겠죠.
해당 컨트롤은 SysLink라는 클래스이름을 가지고 있군요.
역시나 MSDN에서 찾아보니 Win32 공용 컨트롤에 SysLink 컨트롤이 존재합니다.
여기 저기서 자주 볼 수 있는 다이얼로그 기반 하이퍼링크
보통 다이얼로그에 하이퍼링크를 넣을려면 코드프로젝트나 코드구루같은 개발포럼에서 좋은 컨트롤을 가져다가 사용하는 경우가 많습니다. 그런데 윈도우의 공용컨트롤에서 그런 기능을 지원한다면 구지 찾아다닐 필요없이 공용컨트롤을 사용하는게 훨신 편하고 빠르겠죠.
일단 저 컨트롤을 만든건지 공용컨트롤인지 확인해보죠.
SysLink Class
해당 컨트롤은 SysLink라는 클래스이름을 가지고 있군요.
그리고 윈도우 캡션을 보니 <a>~</a>로 되어 있네요. 아마도 하이퍼링크의 <A>태그를 인식하는 것으로 보입니다.
MSDN
역시나 MSDN에서 찾아보니 Win32 공용 컨트롤에 SysLink 컨트롤이 존재합니다.
그런데 왜 Visual Studio의 대화상자 편집기에서는 없는 것일까요? @.@a
아무튼 그건 나중에 찾아보기로 하고 일단 다이얼로그에 SysLink를 넣어보겠습니다.
다이얼로그에 커스텀 컨트롤을 하나 올려놓습니다.
그리고 클래스에 SysLink라고 적습니다.
그럼 속성창이 아래와 같이 폼이 바뀌게 됩니다.
먼가 속성이 많아 졌네요.
그런데 눈에 띄는 것이 하나 있습니다.
네.. <A href="http://zextor.tistory.com">이동</a> 이라고 넣고 저 Shell Exec URL 을 TRUE로 하면 자동으로 쉘에서 ie를 띄워 줄 것처럼 설명이 되어 있네요.
하지만 몇번을 테스트 해본 결과 쉘에서 반응을 안 하네요. -_ㅡ; 먼가 다른 설정이 필요한 듯합니다.
아니면 구현이 안 되어 있거나 말이죠.
어쨋든 코드 한줄 더 들어가는 것이니 신경끄고 계속 진행하겠습니다.
캡션에는 위와 같이 적었습니다.
다이얼로그에는 이렇게 나오네요. 일단 소기의 목적은 달성했습니다.
마지막으로 이벤트 핸들러를 작성해보겠습니다.
이벤트 처리 메세지 중에 NM_CLICK 을 선택하고 아래와 같이 한줄 적습니다.
모든것이 완료되었습니다. 테스트를 해보니 아주 잘 되네요.
대화상자의 공용컨트롤들
아무튼 그건 나중에 찾아보기로 하고 일단 다이얼로그에 SysLink를 넣어보겠습니다.
다이얼로그에 커스텀 컨트롤을 하나 올려놓습니다.
SysLink
그리고 클래스에 SysLink라고 적습니다.
그럼 속성창이 아래와 같이 폼이 바뀌게 됩니다.
먼가 속성이 많아 졌네요.
그런데 눈에 띄는 것이 하나 있습니다.
네.. <A href="http://zextor.tistory.com">이동</a> 이라고 넣고 저 Shell Exec URL 을 TRUE로 하면 자동으로 쉘에서 ie를 띄워 줄 것처럼 설명이 되어 있네요.
하지만 몇번을 테스트 해본 결과 쉘에서 반응을 안 하네요. -_ㅡ; 먼가 다른 설정이 필요한 듯합니다.
아니면 구현이 안 되어 있거나 말이죠.
어쨋든 코드 한줄 더 들어가는 것이니 신경끄고 계속 진행하겠습니다.
문의사항은 <a href="http://zextor.tistory.com">개발자 블로그</a>를 참고하세요.\n아니면 <a href="http://www.google.co.kr">구글</a>로 가시겠어요?
캡션에는 위와 같이 적었습니다.
다이얼로그에는 이렇게 나오네요. 일단 소기의 목적은 달성했습니다.
마지막으로 이벤트 핸들러를 작성해보겠습니다.
이벤트 처리 메세지 중에 NM_CLICK 을 선택하고 아래와 같이 한줄 적습니다.
241 void CAboutDlg::OnNMClickCustom1(NMHDR *pNMHDR, LRESULT *pResult)
242 {
243 PNMLINK p = (PNMLINK)pNMHDR;
244
245 ShellExecuteW(0, L"open", L"iexplore.exe", p->item.szUrl, NULL, SW_SHOWNORMAL);
246
247 *pResult = 0;
248 }
모든것이 완료되었습니다. 테스트를 해보니 아주 잘 되네요.
간단하게 Win32 공용 컨트롤 중 SysLink 를 이용해서 다이얼로그 베이스의 하이퍼링크 컨트롤을 삽입하는 방법에 대해 알아보았습니다.
굉장히 활용적인 컨트롤임에도 불구하고 비주얼스튜디오의 대화상자 도구모음에 없는 것이 조금 아쉽긴 하지만 이렇게라도 넣을 수 있으니 다행이네요.
굉장히 활용적인 컨트롤임에도 불구하고 비주얼스튜디오의 대화상자 도구모음에 없는 것이 조금 아쉽긴 하지만 이렇게라도 넣을 수 있으니 다행이네요.