반응형

갑자기 Visual Studio에서 전체 찾기를 하는데 입력한 영문 간격이 이상하다.

 

Visual Studio 영문 간격 이상

그래서 해당 내용 검색이 안되는 문제가 생겼다.;;

 

구글링 결과 해당 문제는 Visual Studio에만 국한된 내용은 아닌것 같다.

 

해결 방법으로는 Alt+= (Alt키와 '='키 동시)에 눌렀다 떼주면 된다.

 

Alt+= 눌렀다 떼주면 다시 정상적으로 입력이 가능하다.

반응형
반응형

via@ https://www.wholetomato.com/features 

 

안 써본 사람은 있어도, 한 번만 써본 사람은 없다는 Visual Assist.

MS사의 Visual Studio 제품군을 이용한다면 한번씩은 들어봤을 터이고, 사용해봤을 범한 편리한 툴이다.

 

C#에서는 사용빈도가 높진 않지만 C++쪽에서는 은근 사용빈도가 높아 정리를 해보았다.

 

자주쓰는 단축키는 공식홈페이지의 문서에서 참조하여 정리하였다.

 

단축키는 기본 설정값 기준이다.

명령 설명 단축키
참조 찾기
(FindReferences)
현재 커서에 선택된 변수/함수가 참조되는곳 모두 찾기 Shift+Alt+F
심볼 찾기
(FindSymbolDialog)
대화상자가 나타나며, 키워드를 포함하는 현재 솔루션내 존재하는 심볼 나열 Shift+Alt+S
정의로 이동
(GotoImplementation)
현재 커서에 선택된 변수/함수 정의로 이동 Alt+G
헤더/소스 파일 전환
(OpenCorrespondingFile)
현재 문서의 헤더/소스 파일로 전환 Alt+O
파일 찾기
(OpenFileInSolutionDialog)
대화상자가 나타나며, 키워드를 포함하는 현재 솔루션 내 존재하는 파일 나열 Shift+Alt+O
리펙터 네이빙 변경
(RefactorRename)
현재 커서에 선택된 변수/함수의 네이밍 변경 대화상자.
(한번에 해당 변수/함수의 이름을 바꿀수 있어 유용)
Shift+Alt+R
스마트 선택영역 확장
(SmartSelectExtend)
현재 커서를 기준으로 여러번 누를시 선택영역 범위를 점차 늘림 (단어->문장->문단->블럭 순) Shift+Alt+]
스마트 블럭 선택영역 확장
(SmartSelectExtendBlock)
현재 커서를 기준으로 여러번 누를시 선택영역 범위를 블럭 단위로 늘림 Alt+]
스마트 선택영역 축소
(SmartSelectShrink)
위의 SmartSelectExtend와 반대되는 기능
선택 영역 범위를 점차 줄임
Shift+Alt+[ 
스마트 블럭 선택영역 축소
(SmartSelectShrinkBlock)

위의 SmartSelectExtendBlock와 반대되는 기능
선택영역 범위를 블럭단위로 줄임
Alt+[
반응형
반응형

MFC에서 각 윈도우 핸들간 메시지를  전달하는 방법으로 SendMessage와 PostMessage가 있다.

이 둘은 비슷하면서도 차이가 있다.

가장 많이 쓰는 곳이 쓰레드에서 UI 접근할때가 아닌가 싶다.

 

이 둘의 차이점을 가장 쉽게 표현하자면 비동기화와 동기화 차이라고 할 수 있다.

SendMessage

함수 원형

LRESULT SendMessage(
  HWND   hWnd,
  UINT   Msg,
  WPARAM wParam,
  LPARAM lParam
);

동작

SendMessage를 호출하게 되면 해당 윈도우의 메시지프로시져가 즉각 호출되어 해당 메시지의 처리가 끝날때까지 리턴하지 않는다.

즉, 동기화가 된다.

 

활용

해당 메시지 처리 작업이 길지 않은 곳에 사용하면 될것 같다. 간단한 UI 업데이트 등..

 

PostMessage

함수 원형

BOOL PostMessage(
  HWND   hWnd,
  UINT   Msg,
  WPARAM wParam,
  LPARAM lParam
);

동작

PostMessage를 호출하게 되면 해당 윈도우의 메시지 큐에 추가된다.

메시지 큐(Queue)에 호출 메시지만 삽입하고 바로 블럭을 빠져나온다.(즉시 리턴)

이는 곧, 메시지 처리 결과와 상관없이 다음 코드를 진입한다는 뜻이다. (비동기)

 

활용

메시지 처리작업이 오래걸리거나 처리결과가 중요하지 않는 경우에 사용될거 같다.

반응형
반응형

영문윈도우에 VisualStudio를 설치하고 한글 윈도우에서 작성된 코드를 띄우면 한글로 된 부분(메시지, 주석)이 깨진다.


언어팩 깔고 VisualStudio를 재설치해보고 별짓을 다했는데도 똑같다가 언어설정쪽을 만지작 거리니깐 신기하게도 한글깨짐 현상이 사라졌다.


1. 제어판(Control Panel) -> 시계 및 국가(Clock, Language and Region)을 차례로 이동하여 국가 또는 지역(Region and Language)를 클릭한다.



2. 나타나는 팝업창의 메뉴탭에서 관리자옵션(Administrative)를 클릭한 후, 하단의 시스템 로캘 변경(Change system locale)을 클릭한다.


3. 나타나는 팝업창에서 한국어(Korean)를 선택하고 OK를 눌러준다.


반응형
반응형

시스템 맥주소를 가져와야할 필요가 있어서 관련 코드를 작성하고 컴파일 했는데

 

LNK2019 오류가 뜨면서 _GetAdaptersInfo@8 에러메시지가 나타난다.

 

이 경우에는 헤더파일만 추가해서 그렇다.

 

아래처럼 Lib파일도 추가해주면 된다.

#include <Iphlpapi.h>
#pragma comment (lib, "Iphlpapi.lib")
반응형
반응형

윈도우 환경의 C++ 프로그래밍을 하다 보면 멀티바이트, 유니코드라는 문자집합 때문에 고민하게 된다.




프로젝트를 생성하게 되면 기본적으로 유니코드 환경으로 설정되어 있으나, 과거 하위버전의 Visual Studio에서 작성한 프로젝트이거나, 기타사유로 멀티바이트로 변경한 프로젝트를 다시 유니코드 환경으로 설정하면 당연히 컴파일 오류가 발생한다.




 구분

유니코드(_UNICODE) 

멀티바이트(_MBCS) 

 기본 자료형

 wchar_t

char 

 단일 문자의 크기

2Byte (16bit) 

1Byte ~ 2Byte 

(영문, 숫자를 포함한 ASCII는 1바이트로 표현되고 나머지 한글, 한자, 일본 가나 등은 2바이트로 표현)

 포함하는 문자셋

와이드 문자 및 u t f-16으로 인코딩된 문자열 

유니코드를 제외한 문자셋 (ANSI, UTF-8 등)


기존 멀티바이트 환경에서는 문자열을 입력할 때 큰따옴표(" ") 안에 정의했지만, 유니코드 환경에서는 큰따옴표 앞에 대문자 L을 넣어줘야한다.

TCHAR에서 제공하는 통합형 매크로는 TEXT나 _T를 큰따옴표 앞에 넣어주면 된다.

예시

멀티바이트 환경에서 문자열 정의:

char chTest[50] = "ABCDEFG";


유니크도 환경에서 문자열 정의:

wchar_t wchTest[50] = L"ABCDEFG";


TCHAR 통합형 매크로:

TCHAR tchTest[50] = TEXT("ABCDEFG");    //또는 _T("ABCDEFG");

#ifdef _UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif 

위 코드에서 보면 _UNICODE가 정의되었냐에 따라 새로 정의된 자료형 이름이 둘다 TCHAR인것을 확인 할 수 있는데,

이것은 유니코드, 멀티바이트 모두 TCHAR를 사용할 수 있으며, 각 정의에 따라 자동으로 WCHAR와 char로 매크로가 된다는 의미이다.

따라서 TCHAR 매크로를 쓰게되면 유니크도, 멀티바이트 환경을 개발자가 고민할 필요가 없다는 것이다.

프로젝트 설정에 따라 내부적으로 매크로가 되니깐.

 

뿐만아니라 문자열 함수(strcpy 등)도 정의에 따라 나눠지게 된다. (자세한 내용은 tchar.h 파일에서 확인하면 된다. 너무 많아서 ㅠㅠ)


대표적인 함수 몇개를 정리해보았다.


  • 기본적인 문자열 관련 함수

함수 설명 

 _MBCS(멀티바이트)
(_UNICODE 정의안됨)

 _UNICODE(유니코드) 정의됨

 TCHAR 통합형(권장)

문자열 복사 

strcpy_s

wcscpy_s

_tcscpy_s

문자열 복사

(길이 지정)

strncpy_s

_mbsnbcpy_s

 _tcsncpy_s

문자열 서식 

sprintf_s

sprintf

swprintf_s

swprintf

 _stprintf_s

_stprintf

문자열 비교

strcmp

wcscmp

 _tcscmp

 문자열 길이

strlen

wcslen

 _tcslen

 문자열 추가

 strcat_s

strcat

wcscat_s

wcscat

_tcscat_s

_tcscat

문자 검색

strchr

wcschr

_tcschr

문자열 검색

strstr

wcsstr

_tcsstr

 문자열 스트림 입력

scanf_s

wscanf_s

_tscanf_s


  • 문자열을 정수 또는 실수형으로 변환

 함수 설명 

  _MBCS(멀티바이트) 

(_UNICODE 정의안됨)

  _UNICODE(유니코드) 정의됨

  TCHAR 통합형(권장)

 문자열 정수(int) 변환

 atoi

_wtoi

_ttoi

 문자열 정수(long) 변환

 atol

 _wtol

 _ttol

 문자열 정수(long long) 변환

 atoll

 _wtoll

 _ttoll

 문자열 실수(double) 변환

atof

 _wtof

_ttof


  • 파일입출력 관련

 함수 설명 

  _MBCS(멀티바이트) 

(_UNICODE 정의안됨)

  _UNICODE(유니코드) 정의됨

  TCHAR 통합형(권장)

파일 열기

fopen_s

_wfopen_s

_tfopen_s

파일 쓰기(스트림 출력)

fprintf_s

fwprintf_s

_ftprintf_s

 스트림에서 문자열 읽기

fgets

fgetws

_fgetts

 

 

 




반응형

+ Recent posts