본문 바로가기

Programming/MFC,C++28

Windows 10 Update(2021.02.05)로 인한 Visual Studio Docking 시 Visual Studio 종료되는 문제 이슈사항 Windows 10 Update(2021.02.05)로 인한 Visual Studio Docking 시 Visual Studio 종료되는 문제. 조치 1. Windows 10 Update를 롤백하는 방법. 2. %InstallRoot%\Common7\IDE\devenv.exe.config, %LocalAppData%\Microsoft\VisualStudio\16.0_xxx\devenv.exe.config 두 개의 파일에서, 끝에 Switch.System.Windows.Interop.MouseInput.OptOutOfMoveToChromedWindowFix=true; Switch.System.Windows.Interop.MouseInput.DoNotOptOutOfMoveToChromedWindow.. 2021. 3. 22.
MFC에서 RTTI 의 실제 구현 퍼옴 : anster.egloos.com/2172866 RTTI, Runtime Type Information 은 실행시간에 객체를 파악할 수 있도록 도와주는 시스템이다. RTTI 를 이용하기 위해서는 가상함수를 위해 생성되는 vftbl 이 필요하다. 즉, 클래스 내에 가상 함수가 존재할때에만 RTTI 정보가 클래스에 포함 된다. 다형성을 위해 가상 함수를 이용하면 굳이 런타임에 객체의 타입을 알 필요가 없을지도 모른다. 하지만, 분명히 어떤 경우에는 설계상의 오류로 인해 RTTI를 사용할 수 밖에 없다. 자세한 내용은 아래의 포스트를 참조하라. http://blog.naver.com/durenmarine?Redirect=Log&logNo=20017529755 C 구조체와 C++ 클래스 객체는 바이너리 .. 2021. 1. 28.
TCHAR COPY TCHAR A[10]; THCAR B[10]; 두개의 변수를 서로 복사하려면 _tcscpy(A,B); 하면 복사됨 2020. 7. 20.
MFC를 이용한 카카오톡에 글쓰기 CWnd* hd01 = FindWindow(NULL, _T("test")); ::ShowWindow(hd01->GetSafeHwnd(), SW_SHOWNORMAL); CWnd* hd02, * hd03, * hd04, * hd05; hd02 = FindWindowEx(hd01->GetSafeHwnd(), NULL, _T("RichEdit20W"), NULL); hd03 = FindWindowEx((HWND)hd01, NULL, _T("EVA_VH_ListControl"), NULL); Sleep(150); if (hd01 != NULL) { CString str = sMessage; str.Format("%s", sMessage); LPWSTR lpszW = new WCHAR[255]; LPTSTR lpS.. 2019. 7. 29.
[퍼옴] MFC 언어추가방법 mfc 프로젝트에서 다양한 언어를 지원해야할 경우에 사용하는 방법입니다. dll로 분리하여 관리하면 한 프로젝트에서 리소스를 관리하는것 보다 조금 더 정리된 상태에서 관리가 가능합니다.그리고 개발자가 직접 코드를 수정하지 않고 외부 인력이 번역하여 수정할 수 있기 때문에 개발자가 조금 더 편할수 있습니다.ㅎㅎ 이 예제는 vs2012에서 작성하였습니다. 1. dll 프로젝트를 생성합니다.저는 아래와 같이 MFC DLL을 선택하였습니다. 쭉쭉 진행~ 2. 원본 프로젝트의 resource.h, *.rc, res폴더를 새로 만든 프로젝트에 복사합니다. 3. 파일을 복사한 후 새로만든 프로젝트의 *.rc파일을 삭제하고 덮어 씌운 원래 프로젝트의 *.rc파일을 새로만들어진 프로젝트의 *.rc파일로 변경합니다.이렇게.. 2014. 11. 26.
[펌]SetDlgCtrlID 당연히 생략해도 뷰는 전환이 잘될꼽니당... 해당 문장은 뷰의 전환과는 직접적으로 연관되는 부분이 아니니까엽.... 하지만여... 가만히 생각해 보자구여... 예를들어 2개의 뷰가 있는 푸로구람이 이따구 하자구엽... 막무가내루 첫번째뷰와 두번째 뷰를 뛰워버렸습니당. 자! 이제 첫번째 뷰에 머찐 구림을 구려볼까엽? 구림을 첫번째 뷰에 그리려면 어떻게 해야 하겠습니까? 물론 첫번째 뷰의 포인터를 먼저 얻어야 하는게 순서겠져? 구래야 해당 뷰에 작업을 할 수 있을테니까엽... 구래서 첫번째 뷰의 포인터를 얻었습니다... GetDlgItem....어쩌구 저쩌구로욥... 자 모찌게 그림을 그렸네엽... 구러면 이제 두번때 뷰에 새로운 구림을 구려볼까엽? 우선 뷰를 스위치 하구 그 담엔 뭘 해야 할까엽? 두번째 .. 2013. 10. 24.
구조체 소팅 목표구조체를 내림차순으로 sorting 방법구조체를 만들고 이를 vector형태로 만들고 string과 int 값을 부여한다. int값을 기준으로 내림차순으로 sotring하고 출력한다. 예제 코드#include #include #include #include using namespace std;typedef struct sorting { string id; int count; } t_sorting; bool compare(t_sorting i,t_sorting j) { return (i.count > j.count); }int main () { vector str; sorting k; k.id = "hello"; k.count = 3; str.push_back(k); k.id = "world"; k.c.. 2013. 8. 7.
CString 문자열 자르기 CString SC30Token, SC50Token;int pos = 0;int count= 0; while((SC30Token = dlg.m_SC2.m_SC30_Total.Tokenize("\n",pos)) != ""){dlg.m_SC2.TempSc30[count++] = SC30Token;}sc30에 내용이 저장된다. Tokenize에 자르려는 내용 넣는다.또는if(m_SC30LCindex != 0){int count = 0;CString strA, strB, strC, strD,strE; while(count < m_SC30LCindex){AfxExtractSubString(strA, TempSc30[count], 0, '@'); // strA == "192"AfxExtractSubString(st.. 2013. 7. 19.
split replace c++ 출처 : http://blog.daum.net/lifemap/5474796 void trimleft(std::string& str, const char* ch) { str.erase(0, str.find_first_not_of(ch)); } void trimright(std::string& str, const char* ch) { str.erase(str.find_last_not_of(ch) + 1); } std::vector split(std::string& str, std::string separators ) { size_t n = str.length(); size_t start, stop; std::vector result; start = str.find_first_not_of(separators).. 2013. 7. 2.
c++글자 변경 string void ReplaceString( std::string & strCallId, const char * pszBefore, const char * pszAfter ){size_t iPos = strCallId.find( pszBefore );size_t iBeforeLen = strlen( pszBefore );while( iPos < std::string::npos ){strCallId.replace( iPos, iBeforeLen, pszAfter );iPos = strCallId.find( pszBefore, iPos );} 함수 추가 ReplaceString(t_value1," ","\n"); ( 문자열, 찾는 글자, 바꿀 글자);끝! 2013. 6. 28.
C++ — Convert int to string C++ — Convert int to stringBy Rares VernicaIn order to convert an int (or any other numeric type, e.g., float,double, etc.) to string, you can use:#include int i = 5; std::string s; std::stringstream out; out 2013. 5. 24.
SDI/MDI 관련 포인터 및 뷰생성 I. SDI의 각 클래스 포인터 얻기애플리케이션 클래스 포인터 CTestApp *pApp = (CTestApp *)AfxGetApp();메인 프레임 클래스 포인터 CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();도큐먼트 클래스 포인터 CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd(); CTestDoc *pDoc = (CTestDoc *)pFrame->GetActiveDocument();뷰 클래스 포인터 CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd(); CTestView *pView = (CTestView *)pFrame->GetActiveView(); II. SDI 템플릿 등록B.. 2013. 4. 8.
fopen 옵션및 예제 FILE *fopen(const char *filename, const char *mode); 위와 같이 fopen() 함수의 2번째 파라미터가 mode 스트링입니다. 파일을 어떤 모드로 열지를 결정하는 곳입니다. 이것은 볼랜드C++의 레퍼런스에 있는, mode 스트링 설명을 번역한 것입니다.r : Open for reading only. (읽기 전용으로 열기) w : Create for writing. If a file by that name already exists, it will be overwritten. (쓰기용으로 파일 만들기. 같은 이름이 있다면 덮어쓰기) a : Append; open for writing at end-of-file or create for writing if the fi.. 2013. 4. 1.
MFC 변환(CString,int,char) CString -> char * Cstring str;char *szstr = (lpstr)(lpctstr)str; char* -> cString CString str;str.format("%s",szstr) CString ->intCString str("123);int num = atoi(lpctstr(str)); operator LPCTSTR() const; CString -> doubleCString str("1.23");double num = atof(LPCSTR(STR));double CStringCString str;float num =.23;str.Format("%f",num); 2013. 3. 22.
CDockablePane에 Dialog 등록 CDockablePane에 Dialog 등록 CDockablePanel에 Dialog를 등록하여 사용할경우 컨트롤러를 직접 생성하는것보다 편리하다. 처리해야할 부분 기본적으로 CDockablePanel를 상속받아 Panel을 만들고 OnCreate 에서 다이얼로그를 생성하여 등록 하면되지만 부가적으로 해야할 처리들이 몇가지 존재한다. 1. 페널의 사이즈가 변경될시 다이얼로그의 사이즈도 변경해 줘야 한다.2. 페널이 포커스되면 다이얼로그에 포커스를 설정해 줘야 한다.3. 페널위 다이얼로그에서 마우스 오른쪽 클릭시에도 DockablePane Context menu (도킹관련 팝업메뉴)가 떠버려 다이얼로그를 가리게 되며 다이얼로그 위에서 마우스 왼쪽 클릭을 해도 사라지지 않는 문제점이 발생한다 이를 위해 Co.. 2013. 3. 15.
[MFC] OnCreate와 OnInitialUpdate의 차이점 OnCreate() 함수는 WM_CREATE 메시지에 대한 핸들러 함수입니다.즉, 어떤 윈도우 클래스가 윈도우로써 생성이 되면,시스템에 그 윈도우에게 "너 이제 윈도우가 됐어" 라는 의므로 WM_CREATE를 날려줍니다.그러면 OnCreate()가 실행되면서 윈도우가 되면 할 수 있는 것들을 하게 되죠. 반면 OnInitialUpdate() 함수는 가상함수 입니다. 즉, 메시지에 대한 처리 함수가 아니라는 것 입니다. View클래스의 내부로 들어가보면, OnInitialUpdate() 함수는 View가 윈도우로 생성된 후Document에 의해 호출 되게 됩니다. SDI나 MDI같은 프레임워크의 경우는 Document, View, Frame이 한꺼번에 생성되고 연관되어 동작하기 때문에, 서로가 서로의 상태.. 2013. 3. 15.
MFC 클래스간 통신 MFC 클래스간 통신 SDI 형태 1. MainFrame 얻기 - CMainFrame *pFrame = (CmainFrame *) AfxGetMainWnd(); 2. App 포인터 얻기 - CTestApp *pApp = (CtestApp *) AfxGetApp(); 3. Document 포인터 얻기 - CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd(); CTestDoc *pDoc = (CTestDoc *)pFrame->GetActiveDocument(); - CTestDoc *pDoc = ((CMainFrame *)AfxGetMainWnd())->GetActiveDocument(); 4. View 포인터 얻기 - CMainFrame *pFrame = (CMainF.. 2013. 3. 15.
MMF(Memory Mapped File) 안녕하세요 mmf (Memory mapped file) 에대해서 알고싶읍니다 어디강좌같은것이 있으면 부탁드립니다 mmf를이용해서 파일을 열고 파일을 읽어서 가공하고 닫고 하는작업을 해야됩니다 저는 텍스트가 포함된 바이너리파일을 열고 텍스트단위로 읽어서 줄바꿈기준으로 줄단위로 내용을 추출해야됩니다 방법좀 부탁드립니다 보니까 MapViewOfFile이란함수가있던데여, 이함수의 리턴값이 뭔가여사용법 좀 알았으면 합니다 즐거운하루되세요 [답변-즐거운악몽님이 답변하신 내용입니다.] MMF(Memory Mapped File)이란 파일과 메모리 객체를 연결한다는 말 입니다...ㅡㅡ; 정말입니다...영문 그대로 생각하시면 됩니다...^^ 좀 더 풀어서 이야기 하면 파일과 메모리 객체를 연결 시킨 후 그 메모리 객체에 .. 2013. 3. 14.
MFC 교육 관련 사이트 일단 이런곳이 있네요?ㅎㅎㅎㅎㅎ시간날대마다 들어봐야겠습니다.http://msdn.microsoft.com/ko-KR/visualc/bb496952.aspx#mfcclasses 2013. 3. 8.
MFC SendMessage관련 Sendmessage에 대해서 간단하게 정리! 함수에 AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_NEWPAGE);이딴식으로 쓴다.그리고메세지맵에다가ON_COMMAND(ID_NEWPAGE, &클래스명::함수) 요딴씩으로 쓰면 끝. MFC에서 버튼이벤트에 첫번째 에 쓴 AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_NEWPAGE); 이 내용을 쓰게되면 메세지 맵에들어가서 클래스의 함수를 부르게 된다. 스트링 테이블에 이름을 등록하길 바란다.나는 ID_NEWPAGE라는 내용을 썻다. 2013. 3. 8.