다이얼로그 엔터키 막기 _키보드메세지_PreTranslateMessage

 

BOOL CPreTranslateMessageDlg::PreTranslateMessage(MSG* pMsg) {     
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.    
 if (pMsg->message == WM_KEYDOWN)
{       
  
//키 눌렀을때       
  if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
{           
  // esc, 엔터키이면 리턴         
   return TRUE;       
  }  
}  
   return CDialogEx::PreTranslateMessage(pMsg);
}

클래스뷰 - 속성 - 재정의 - PreTranslateMessage  추가

 

or

 

컨트롤 + 쉬프트 + x   - 가상함수 - PreTranslateMessage  추가

실행파일 경로 얻기

 

// 실행파일이 존재하는 폴더 경로 반환
CString CAutoSaveDlg::GetModulePath()
{
TCHAR szPath[MAX_PATH];
memset(szPath, 0x00, MAX_PATH);

::GetModuleFileName(NULL, szPath, MAX_PATH);

CString sTempPath = szPath;
int iLength = sTempPath.GetLength();
int iPos = sTempPath.ReverseFind(TCHAR('\\'));

CString sModulePath = sTempPath.Left(iPos);
sModulePath += _T("\\");
return sModulePath;
}

//CString to BYTE*

CString str;

str = _T("TEST");

BYTE* By;

By = new BYTE(str.GetLength()+1);

strcpy((char*)By;, CT2A(str));

delete[] By

//CString to BYTE*

CString str;

str = _T("TEST");

std::string strData = CT2CA(str);

int nDataLength = strData.length();

BYTE* By;

By = new BYTE(nDataLength);

ZeroMemory(By , sizeof(BYTE) * nDataLength);

for (int i = 0; i < nDataLength; i++)

{

By[i] = strData.at(i);

}

delete[] By

CSTring 에서 const *char 로 변환할 수 없습니다.

 

//유니코드일때

FILE *fp;

USES_CONVERSION;

fp = fopen(T2A(m_strPath), "r");

std::string command;

CString str;

command = std::string(CT2CA(str.operator LPCWSTR()));

//command.c_str()

//사용

nResult = sqlite3_exec(pDB, command.c_str(), NULL, NULL, &pErr);

 

//////

 

유니코드 일때.

CString strTest;

strTest = "";

char* Buff = new char[strTest.GetLength()];

strcpy(Buff,CT2A(strTest));

다른방법

CString csFullAddr = _T("TEST");

CStringA csAFullAddr = CStringA(csFullAddr);

const char* cFullAddr = csAFullAddr;

char* cpFullAddr = const_cast<char*>(cFullAddr);

 

속성 - 전처리기 - _CRT_SECURE_NO_WARNINGS

또는

가장 윗줄에

#define _CRT_SECURE_NO_WARNINGS

또는

프로젝트 생성시 SDK 체크 해제

위와 같이 코드 사용시

Buff 를 delete 를 해준다.

Buff 할당은 strTest 의 크기로 할당하였으나

delete 는 널문자를 포함한 크기를 해제하기 때문에 크기가 맞지 않아 에러 발생

char* Buff = new char[strTest.GetLength()]; 라인을

char* Buff = new char[strTest.GetLength()+1]; 로 수정 후

delete Buff; 해주면 된다.

유니코드 환경에서 변환

CString uni_char_to_CString_Convert(char *data)

{

// Unicode char* -> CString 변환 과정

// char* -> wchar* -> CString 순서로 변환 되어야 함

int len;

CString str;

BSTR buf;

// 1. char* to wchar * conversion

len = MultiByteToWideChar(CP_ACP, 0, data, strlen(data), NULL, NULL);

buf = SysAllocStringLen(NULL, len);

MultiByteToWideChar(CP_ACP, 0, data, strlen(data), buf, len);

// 2. wchar_t* to CString conversion

str.Format(_T("%s"), buf);

return str;

}

char* CString_to_uni_char_Convert(CString data)

{

// Unicode CString -> char* 변환 과정

// CString -> wchar* -> char* 순서로 변환 되어야 함

wchar_t *wchar_str;

char *char_str;

int char_str_len;

// 1. CString to wchar * conversion

wchar_str = data.GetBuffer(data.GetLength());

char_str_len = WideCharToMultiByte(CP_ACP, 0, wchar_str, -1, NULL, 0, NULL, NULL);

char_str = new char[char_str_len];

// 2. wchar_t* to char* conversion

WideCharToMultiByte(CP_ACP, 0, wchar_str, -1, char_str, char_str_len, 0, 0);

return char_str ;

}

 

출처 : https://blog.naver.com/ikariksj/140186998237

1. Cstring -> string

CString strPath ;

string strReuslt;

strResult = ((string)CT2CA(strPath.operator LPCWSTR()))

///////////////////////////////////////////////

CString strPath ;

string strReuslt;

CT2CA pszConvert(strPath );

string strReuslt(pszConvert);

 

 

2. string -> Cstring

  string strPath ;
  CString strReuslt;
  strReuslt.Format(_T("%S"), strPath .c_str());

//
-  CString strReuslt(strPath .c_str());

- strReuslt = strPath .c_str();

- strReuslt = CString::CStringT(CA2CT(strPath.c_str())); 

// 헤더파일 포함

#include <filesystem>

 

 

//가져오기

vector<string> vcDrawFname;

string strDrawDirname = "D:\\";

 for (auto& p : experimental::filesystem::directory_iterator(strDrawDirname))
 {
  vcDrawFname.push_back(strDrawDirname + "\\" + p.path().filename().string());
 }

 

 

vs2022사용시 에러

프로젝트 - 속성 - 구성속성 - 일반 - c++언어표준 

ISO C++ 17표준 선택

// 헤더파일 포함
#include <filesystem>




//가져오기
vector<string> vcDrawFname;
string strDrawDirname = "D:\\";
 for (auto& p : std::filesystem::directory_iterator(strDrawDirname))
 {
  vcDrawFname.push_back(strDrawDirname + "\\" + p.path().filename().string());
 }

 

+ Recent posts