원인) 다이얼로그 사용자 이벤트 메시지 처리하는 부분과 함수 실행 부분이 단일 쓰레드로 실행되어 메시지 파이프라인을 공유하기 때문에 함수처리가 끝나기 전까지는 메시지 처리가 안되기 때문

 

방법1) 오래걸리는 loop 부분에 쓰레드로 처리한다.(분산)

 

방법2) 다음의 코드를 삽입한다.

MSG msg;
 while(::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
 {
  ::TranslateMessage(&msg);
  ::DispatchMessage(&msg);
 }

 

'MFC' 카테고리의 다른 글

[MFC] 자주 쓰이는 형변환  (0) 2020.06.30
C++ MFC CString  (0) 2020.06.26
[MFC] ProgressBar  (0) 2020.06.25
[MFC] LPSTR과 LPCTSTR  (0) 2020.06.25
[MFC] 문자열(MULTI BYTE/UNICODE) / CString  (0) 2020.06.24

SetRange(low,high) : low~high 값 셋팅

SetPos(result) : 현재 값 변경

'MFC' 카테고리의 다른 글

C++ MFC CString  (0) 2020.06.26
[MFC] 응답없음 처리  (0) 2020.06.25
[MFC] LPSTR과 LPCTSTR  (0) 2020.06.25
[MFC] 문자열(MULTI BYTE/UNICODE) / CString  (0) 2020.06.24
[MFC] Const char* 이란  (0) 2020.06.24

ofstream os(Test.txt, ios::xxx);

 ios::app

Test.txt 파일이 이미 존재하면 내용을 보존하고 파일 끝에서부터 쓰여진다. 파일이 없다면 새로 만든다.

 ios::ate

..?

 ios::binary

 이진수 형태로 쓰거나 읽음

 ios::in

파일을 읽고 파일이 없으면 안됨.

 ios::out

덮어쓰기를 실행. 즉 이미 존재하면 내용을 지우고 작성

 

중복된 파일 존재 여부 체크

 

중복된 파일을 존재 여부를 체크하기 보다는 파일을 제일 처음 쓸 때는 이 전 내용을 전부 삭제하고 작성

이어서 쓸 때는 app을 이용하여 마지막부터 씀

 

 

LPSTR = long pointer string = char *
LPCSTR = long pointer constant string = const char *

LPCTSTR = long pointer constant t_string = const tchar *

LPWSTR = long pointer wide string = w_char *
LPCWSTR = long pointer constant wide string = const w_char *

C/C++은 string을 compiler차원에서 지원하지 않음.

Windows에서는 이런 string처리를 위해서 char* 형을 그대로 쓰기보다는 LPCSTR 등의 표현

 

LP (long pointer) + STR (string) : 윈도 시절 16bit 과거 windows3.1에서 까지는 모두 16bit였고,

24bit 메모리를 long pointer라는 것으로 extended memory라는 이름으로 관리

 

LPCSTR (long pointer constant string = const char *)

LP(Long Pointer)는. Net에서는 64bit pointer를, VC++6.0과 그 이전 버전에서는 32bit pointer를 나타냄

C contant는 함수의 내부에서 인자 값을 변경하지 말라는 뜻.

STR은 말 그대로 string자료가 될 것이라는 뜻으로 내부적으로는 char형 배열에 null값 종료를 의미를 의함.

 

LPCTSTR = long pointer constant t_string = const tchar *

char는 1Byte이고 wide char는 2Byte 포인터 연산을 많이 하는 c, c++코드는 호환성에 치명적인 문제 발생
그래서 컴파일러가 precompile option을 보고. 환경에 맞게 동작하는 코드를 작성할 수 있는 새로운 변수 모양의 Macro를 선언 --> TCHAR, t_char 

 

t_char의 유용성 type casting

운영체제가 multi-byte환경이면, char형으로,
unicode환경이면, w_char, wide char형으로 

https://wantairpod.tistory.com/7

LPWSTR = long pointer wide string = w_char *
LPCWSTR = long pointer constant wide string = const w_char *

W는 wide char를 나타냅니다. 즉 unicode

 

(LPSTR)(LPCTSTR) 형 변환 (char *)(const char *)와 같은 말

 

 

 

출처 : Tong – lcyblue님의 C++통

 


 

 

'MFC' 카테고리의 다른 글

[MFC] 응답없음 처리  (0) 2020.06.25
[MFC] ProgressBar  (0) 2020.06.25
[MFC] 문자열(MULTI BYTE/UNICODE) / CString  (0) 2020.06.24
[MFC] Const char* 이란  (0) 2020.06.24
[MFC] Edit Control  (0) 2020.06.24
path.Format(_T("%s"), szBuffer); // int->cstring 변경시
MessageBox(_T("경로 입력하세요")); //메시지박스 이용시

 멀티 바이트

  • ASCII는 영어, 숫자, 부호 등 128개의 문자를 1바이트로 표현하도록 구성된 코드이다.
  • 1바이트는 8비트인데 데이터 타입이 sign인 경우 최상위 비트 1개는 부호 판별용으로 사용되어 데이터로 쓸 수 있는 나머지 7비트를 10진수로 (=2^7) 나타내면 128이다.
  • 따라서 ASCII는 1바이트만 사용하도록 만들어져서 원래는 128개의 문자만 사용할 수 있는 것이다. 그런데 한글도 써야 하고 여러 다른 문자들도 써야 하는데 1바이트는 너무 부족해서 한 바이트를 더 추가해서 통 2바이트로 문자 집합을 구성하고 멀티 바이트라고 정의하게 되었다.
  • 영어는 1바이트, 한글은 2바이트를 확보
  • ""(멀티 바이트)

유니코드

  • 유니코드는 첨부터 2바이트 문자열로 컴퓨터에서 사용하는 모든 문자를 포함하도록 만들어졌다.
  • L""(유니코드) --> 이 경우 내부 프로젝트 설정을 멀티 바이트로 바꾸면 문제가 생깁니다.
  • 문자 하나당 무조건 2바이트의 공간을 확보.

 

멀티바이트 및 유니코드 문제 해결

TEXT()/_T() 매크로 사용

결국 전처리기를 따라가면 다음과 같이 나타낸다.

#ifdef _UNICODE
 #define __T(x)      L ## x
#else
 #define __T(x)      x
#endif

ex)

MessageBox(_T("경로 입력하세요")); //메시지 박스 이용시
path.Format(_T("%s"), szBuffer); //포멧 변경시

 

CString

typedef ATL::CStringT< wchar_t, StrTraitMFC_DLL< wchar_t > > CStringW;
typedef ATL::CStringT< char, StrTraitMFC_DLL< char > > CStringA;
typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString;

TCHAR라는 타입은 프로젝트 설정에 의존적인 타입이고, CStringW, CStringA는 프로젝트 설정에 상관없이 한 가지 문자 타입을 사용하는 것

보통 사용할 때는 CString을 사용하는 것이 좋음.

특정 라이브러리를 사용할때 해당 라이브러리가 특정 문자열을 지원한다고 하면 선택적으로 CStringW, CStringA 사용.

CString str_T("asdfg"); // 프로젝트 설정에 알맞은 문자열이 타입이 될 것임

 

 

__ttoi  : CString->int함수

 

 

 

기본 string

  • wstring(유니코드)
  • wchar_t src [] = L"asdf" ; 앞에 L을 써주면 유니코드화로 변환
  • TCHAR src[] = _T("sdf"); : _T("")을 사용하면 설정에 맞게 유니코드 또는 멀티 바이트 코드로 자동 변환.
기본 유니코드      
string wstring      
char wchar
ex) wchar_t src[]=
L"ASDF" ; 
앞에 L을 써주면 유니코드화 됨.
TCHAR

 : 멀티바이트 문자, 유니코드 문자등으로 자동 변환.
ex) TCHAR src[] =
_T("asdf");
_T()를 사용하면 설정에 맞게 유니코드 또는 멀티바이트 코드로 자동으로 변환.
     
         

 

'MFC' 카테고리의 다른 글

[MFC] ProgressBar  (0) 2020.06.25
[MFC] LPSTR과 LPCTSTR  (0) 2020.06.25
[MFC] Const char* 이란  (0) 2020.06.24
[MFC] Edit Control  (0) 2020.06.24
[MFC] 응용프로그램 종류(기본옵션)  (0) 2020.06.24

1)const char* tmp 의 2)char* const tmp2 차이

1)포인터 변수에 담긴 내용의 주소를 변경금지.

2)포인터가 가르키는 곳의 값 변경금지.

 

따라서 tmp 자체는 변경가능.

tmp2 자체 변경 불가능.

 

ex) const int tmp = 10; 이면 tmp는 10고정이다.

'MFC' 카테고리의 다른 글

[MFC] LPSTR과 LPCTSTR  (0) 2020.06.25
[MFC] 문자열(MULTI BYTE/UNICODE) / CString  (0) 2020.06.24
[MFC] Edit Control  (0) 2020.06.24
[MFC] 응용프로그램 종류(기본옵션)  (0) 2020.06.24
[MFC] Combobox  (0) 2020.06.24

C자료형

API 자료형

 

 

[C++ 64비트 정수 __int64 사용법 : 변수 선언]

32비트 정수형인 int 는 "unsigned int"라 하더라도 4294967295 까지만 표현함.

따라서 64비트 정수가 필요함

 

 


__int64 or unsigned __int64 tempNum=4294967295+10 ;

 printf("%I64d\n", tempNum); 

'C++' 카테고리의 다른 글

C++ 동적할당  (0) 2020.07.14
C++ iterator, auto  (0) 2020.06.29
C++ ODBC (Open DataBase Connectivity)  (0) 2020.06.26
C/C++ 문자열 분리 함수 (strtok, strtok_s) 유용 warning발생  (0) 2020.06.26
C++ 자료의 크기 및 범위 총 정리  (0) 2020.06.26

텍스트 삽입

m_Edit.SetWindowTextW(path);

텍스트 가져오기

CString str;

m_Edit.GetGetWindowTextW(str);

 

공백처리

 

 

'MFC' 카테고리의 다른 글

[MFC] LPSTR과 LPCTSTR  (0) 2020.06.25
[MFC] 문자열(MULTI BYTE/UNICODE) / CString  (0) 2020.06.24
[MFC] Const char* 이란  (0) 2020.06.24
[MFC] 응용프로그램 종류(기본옵션)  (0) 2020.06.24
[MFC] Combobox  (0) 2020.06.24

+ Recent posts