[힐끗]
CreateDialogBoxIndirectParam, DialogBoxIndirectParam 이놈들에 대해 이야기 해보자.
이녀석들을 쓰면 좋은 점이라면, 사용자로 하여금 리소스로 설정된 다이어로그를
리소스 수정 프로그램으로 수정시킬 수 없게 만든다는 점 외에는 장점이 없다.
( 그래봐야, 리버싱하면 리소스 수정 프로그램도 무력화된다. )
리소스 수정 프로그램은 이에 관련해 무지한 사람이더라도
인터페이스를 사용자가 손쉽게 수정 가능하니, 이를 방지하기 위해 한번 손으로 코드를 구현해보았다.
HWND WINAPI CreateDialogIndirectParam( INT_PTR WINAPI DialogBoxIndirectParam(
< 출처 > http://msdn.microsoft.com/en-us/library/windows/desktop/ms645441(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms645461(v=vs.85).aspx
|
일단 함수들은 이렇게 생기셨다.
근데 이녀석들의 웃긴점은
두번째 인자가 LPCDLGTEMPLATE 되어 있지만, 실제 DLGTEMPLATE 값만 넘기면 실행되지 않는다.
왜냐하면, DLGTEMPLATE 은 하나의 헤더일 뿐, 내용이 들어가지 않기 때문이다.
구현은 이렇게 . . .
#include <windows.h>
// 유저 윈도우 이름 정의 #ifdef UNICODE
// 다이어로그 기본 템플릿 재정의
// 다이어로그 메시지 처리
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ // 위 구조체 크기를 계산하기 위해 임시변수 할당함. // 기존 템플릿 크기 + 윈도우 이름(유니코드) 사이즈 + 여분 공간(1) 을 할당할 준비함. // 메모리 할당 // 메모리를 죄다 0으로 초기화. // 윈도우 이름을 복사함. // 템플릿 옵션 설정함. // 다이어로그 생성 // 메모리 해제 return 0;
|
그냥 귀찮아서 간략하게 구현했는데
자세한건 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996(v=vs.85).aspx 을 보면
다이어로그 안에 생성되는 윈도우를 좀 더 자세히 구현할 수 있지만
차라리 저렇게 구현할 바에야 CreateWindowEx 나 그냥 리소스로 구현해버리고 말겠다.
Visual Studio Runtime Library Compiler Option /MD /MT (0) | 2014.07.20 |
---|---|
[API] 현재 실행중인 프로그램 경로 구하기 및 폴더 생성 (0) | 2013.05.31 |
광고, 악성코드 썰 좀 풀어보자. (4) | 2013.05.04 |
[임시] 티스토리 스팸 덧글/방명록 차단. (8) | 2013.04.27 |
빡침의 하루 ( ERROR_CANNOT_FIND_WND_CLASS ) (4) | 2013.04.23 |
|
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |