VS2005, VS2008에서 Wizard 스크립트 에러 문제와 해결 방법

IE8 을 설치하면 AddOn 에 대한 정책이 변경되면서 VS2005와 VS2008 의 Wizard가 먹통이 된다.
명백한 버그이나 MS 측은 서비스팩 발표를 안하고 있어
다음과 같은 방법으로 피해가야 한다.

(지금은 패치 되었으려나???)

 

주의) 64비트 OS 는 32비트 regedit 를 실행해야 한다. 왜냐면 IDE는 32비트 어플리케이션이므로

 

HKCU/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones
에 들어가서 새로운 키 1000 을 만든다. 만약 존재한다면 수정
1000 아래에 DWORD 값으로 아래와 같이 만든다.

이름: 1207

타입: REG_DWORD

값: 0

자세한 기술 설명은 VC++ Team Blog 를 참조하시길~
http://blogs.msdn.com/vcblog/archive/2009/03/28/some-vs2005-and-vs2008-wizards-pop-up-script-error.aspx

DBG: Potential deadlock. Soft broken

DBG: Break command failed within 3 seconds.
DBG: Potential deadlock. Soft broken

 

VC6에서 아주 아주 가끔은 이런 일이 발생합니다.
웹에서 열심히 검색하다보니 Windows 2000 에서 자주 발생하는 것으로

while (condition)
    processing;

과 같은 루프를 너무 열심히 돌고 있는 경우에 VC++ 6.0 에서 break excution 을 누르면
이런 메시지가 Output Window의 Debug 탭에서 뜰 때가 있습니다.

 

이걸 방지하려면

#ifdef _DEBUG
#define DEBUGSLEEP Sleep(50);
#else
#define DEBUGSLEEP
#endif

while (condition)
{
    processing;
    DEBUGSLEEP
}

이렇게 하라고 하네요… (MS 사이트에서)
Sleep() 이나 I/O 등에 의해서 프로세스가 대기 상태에 놓일 때에만 break excution이 된다고… 특히 Windows 2000 에서
근데 BS 는 XP 에서 당했습니다.
아무튼 MS 도 참 버그가 많습니다.

Visual C++ Dialog 리소스 편집시 Tab Order 조정

컨트롤 마구 넣다 보면 Tab Order 를 중간에 끼워 넣고 싶을 때가 있는데
Ctrl + D 를 누르고 모든 컨트롤을 순서대로 다시 찍기는 무척 짜증나는 일이죠…

 

주변의 많은 프로그래머들이 툴 사용법에 대해 깊이 생각하지 않기에 모르는 사람이 꽤 있더군요.
모르니까 처음부터 찍다가 중간에 다른 것 찍히면 마우스를 던저 버리죠…
이럴 때는
원하는 위치로 컨트롤 옮기고
Ctrl + D 해서 나오는 Tab Order를
새로 추가하여 변경하고자 하는 컨트롤 앞에 해당하는 컨트롤을 Ctrl + Click 으로 선택하고
추가한 컨트롤을 Click 하면 된답니다.

 

예)
1 ~ 100 의 컨트롤이 있었습니다.
새로 101 컨트롤을 추가해서 위치 시켰습니다.
101 컨트롤의 Tab Order 번호를 20 으로 변경하고 싶습니다.
Ctrl + D 로 Tab Order 조정을 시작합니다.
Ctrl + Click 으로 19 컨트롤을 선택합니다.
그냥 Click 으로 새로 추가한 101 컨트롤을 선택합니다.
새로 추가된 컨트롤이 101 에서 20 으로 바뀌며 20부터 100 의 컨트롤의 Tab Order 숫자가 1씩 뒤로 밀립니다.
마우스 안 던지고 해결되었습니다.

HotKey – 윈도 단축키 만들기

WinKey + E를 누르면 탐색기가 실행되고
WinKey + Pause는 시스템 정보가 뜨고…
이렇게 시스템에 단축키를 만드는 방법에 대해 소개합니다.

 

1. 키보드 액셀레이터
응용프로그램의 리소스에 추가하여, 해당 응용프로그램 윈도우에 포커스가 있을 때 사용

 

2. 키보드 후킹
1과 마찬가지로 사용가능하며, DLL로 제작할 경우 시스템 후킹이 가능

 

그러나… 이렇게 제한적이거나, 복잡한 방법은 치워버리고 아주 간단한 함수 2개로 끝낼수 있습니다.

 

RegisterHotKey(), UnregisterHotKey()

 

위의 두 API 함수가 이를 쉽게 도와줍니다.

 

윈도우를 생성하면 발생하는 WM_CREATE 메시지를 WndProc에서 받아서
RegisterHotKey()를 실행하여 원하는 단축키 조합을 설정하면,

 

단축키 입력시 WM_HOTKEY 이벤트가 발생하여, 해당 윈도우에 메시지가 전달되고

 

해당윈도우는 RegisterHotKey()에서 지정한 핫키의 ID값을 통해 단축키 입력을 구분하고

 

윈도우가 종료될때, WM_DESTROY에서 UnregisterHotKey()를 사용하여 등록을 해제하면 끝~