얼마전부턴가 갑자기 각종 에디팅 툴에서 한글이 네모로 깨져보이기 시작했다.

 

찾아보니 MS에서는 유니코드를 변경하고 다시 원복하고 어쩌고.... 하던데

다 부질없는 짓이었다 [.........]

 

내 경우....

처음엔 에디트플러스 등의 오류인가 싶어 폰트를 보니 Courier New 로 되어있기에

적당한 한글 폰트로 (ex: 맑은 고딕) 변경하여 사용하니 정상적으로 나오긴 하였다.

 

단, 이경우는 폰트변경이 가능한 환경에서나 취할 수 있는 Action이고...

SQLYog 등과 같은 모든 에디터 툴에서 폰트를 변경 할 수도 없는 노릇이라 근본적 해결책은 되지 못하였다.

 

그러나, 해결방법을 찾았다.

 

원인은 레지스트리에 Courier New 폰트가 레지스트리에 등록이 되어있지 않은 것으로 유추된다.

따라서 해결방법은 단순하다.

 

하기와 같이 별도의 값을 하나 추가해주고 리붓하게 되면 정상적으로 표시됨을 알 수 있다.

Courier_New.reg

 

첨부된 파일을 1회 실행하고 리붓하면 된다.

 

 

by PrettyNaru 2013.08.01 18:07

서비스 사용 안함 하고 삭제를 하건 ... 뭐 다른 팁들을 많이 찾아보았지만...

안전모드에서 삭제하니 오류가 나온다는 둥의 글들을 많이 보았다.
(사실 따지고 보면 오류가 나오는게 맞다. 정상동작 하는 서비스의 실행파일이 사라졌잖는가)

 

해당 서비스를 아예 없애버리면 오류고 뭐고 나올게 없다.
(사용안함 으로 바꾸는 방법도 있겠지만.. 찌꺼기가 남았다는 것 자체가 ...)

 

해결방법:

시작 -> 실행 -> %windir%\imagesafersvc.exe -remove

C:/Windows/IMAGESAFERSVC.exe 제거

C:/Windows/System32/ImageSAFER 로 시작하는 파일 모두 제거

 

참 쉽죠?

 

마크애니는 정말 괴악한 회사인듯.

by PrettyNaru 2013.07.04 11:47

다국어 언어팩의 iso를 다운로드 받아서

iso 이미지를 마운트한 후,

PowerShell을 열어

Dism /online /Add-Package /PackagePath:lp.cab 파일 위치(ex: F:/langpacks/ko-kr/lp.cab)

완료되면 Y 를 눌러 Reboot 한 뒤, 제어판에서 Language Options 에 있는 'Make this the primary language' 선택.

로그오프 후 다시 로그인 하면 한글로 나온다.

by PrettyNaru 2012.10.04 15:09

오늘 회사 랩탑을 부팅하니, 바탕화면 아이콘이 죄다 검은색...

파일과 폴더를 제외 한, 바로가기 아이콘들의 왼쪽 하단이 64x64 정도의 사각형 검은색 박스가 떠있었다.

찾아보니, 원인은 iconcache.db 파일 손상으로 인한 것으로 유추가 되어, 이를 복구해주었다.

 

복구하는 방법은 다음과 같다.

 

시작 -> cmd.exe 입력 -> 메뉴의 cmd.exe 를 우클릭 -> 관리자 권한으로 실행 -> 나타난 명령 프롬프트 화면에서 우클릭 -> 아래 내용을 붙여넣기

@echo off
taskkill /f /im explorer.exe
attrib %userprofile%\appdata\local\iconcache.db -s -r -h
del /q %userprofile%\appdata\local\iconcache.db
start explorer.exe
exit

위 작업을 완료하면 명령 프롬프트와 윈도우 탐색기가 닫히고 바탕화면 아이콘과 작업표시줄이 2초간 사라졌다가 다시 나타난다.

그 이후 바탕화면 아이콘을 보면 정상으로 돌아온 것을 확인할 수 있다.

 

출처: http://support.microsoft.com/kb/2417044/ko

 

 

 

 

by PrettyNaru 2012.09.24 09:32

암호화라고 거창하게 써놨지만, 사실 별거 없죠

걍 특정/불특정 문자열을 꼬아놓은다 랄까...

여튼, 전 제가 원하는 임의의 문자(숫자)를 곱하는 형식을 취했습니다.


CFile f;

 CFileException e;
 
 CString fileName, strHost;
 
 UpdateData(TRUE);
 
 char *p_host = (LPSTR)(LPCSTR)m_strHost; // 에디트 박스에 쳐박은 호스트주소입니다.
 
 char key = 243;
 
 int i = 0;
 
 for( i = 0; i < strlen(p_host); i++){  // 한글자 마다 key 값을 곱합니다 (-_-) 제곱이랄까....
  p_host[i] = p_host[i] ^ key;
 }

 strHost.Format("%s\r\n", p_host);
 
 char szCurDir[256] = {NULL, };

 GetCurrentDirectory(256, szCurDir);
 strcat(szCurDir, "\\config.ini");
 fileName=szCurDir;

 if( !f.Open( fileName, CFile::modeCreate | CFile::modeWrite, &e ) )
 {
#ifdef _DEBUG
  afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
 }
 else
 {
  f.SeekToEnd();
  f.Write(strHost , strlen(strHost)); // 저장합니다.
  f.Close();
 }

끝.

읽어올때도 마찬가지로 하나씩 읽어오는 형태를 취합니다.


 char szCurDir[256] = {NULL, };
 CString fileName, strHost;
 GetCurrentDirectory(256, szCurDir);
 strcat(szCurDir, "\\config.ini");
 fileName=szCurDir;
 char load_data[256] = { 0 ,};
 char key = 243;
 int i = 0;
 
 FILE *p_file = fopen(fileName, "rb");
 if(p_file != NULL){
  fread(load_data, 256, 1, p_file);
  fclose(p_file);
 }
 
 int length = strlen(load_data);
 int j = 0, k=0;
 
 for(i = 0; i < length; i++){
  load_data[i] = load_data[i] ^ key;
 }
 m_strHost = load_data;
 if(bUpdate) UpdateData(FALSE);

끝...

by PrettyNaru 2009.09.21 15:53

Static컨트롤에 색상을 입히는 것 까지는 좋으나, 다이얼로그를 계속 생성하거나

폰트사이즈를 지정해줄 경우, 1회성으론 관계가 없다.

하지만, 여러번 다이얼로그를 불러온다던가 하면서

SetFontSize 메소드를 계속 불러올 경우

에러를 토해내는데, 생각보다 단순한 문제였다.

우선, ColotStaticST의 함수 부분을 살펴보면

void CColorStaticST::SetFontSize(int nHeight, int nWidth, BOOL bold)
{
 CFont* pFont  = NULL;
 LOGFONT LogFont;

 pFont   = GetFont();
 pFont->GetLogFont(&LogFont);

 if(nHeight > 0)
 {
  LogFont.lfHeight = nHeight;
 }

 if(nWidth > 0)
 {
  LogFont.lfWidth  = nWidth;
 }
 
 if(bold)
 {
  LogFont.lfWeight = FW_BOLD;
 }

 m_pFont->CreateFontIndirect(&LogFont);

 SetFont(m_pFont);

 Invalidate();
}

자 무엇이 문제인지 알겠는가.

 m_pFont->CreateFontIndirect(&LogFont);

이부분에서 에러가 발생하게 된다.

즉, 반복적으로 불러올 경우, 불러오는 만큼 오브젝트를 계속 생성하려 들기 때문인데

여러가지 해결 방법이 있을 수 있겠지만 본인은 이렇게 해결했다. (사실 좀 무식하게 해결한..)

m_cStStatus.m_pFont->DeleteObject();

해당 컨트롤에 대한 변수를 선언하고 (CColorStaticST m_cStStatus; 등..)

CColorStaticST가 가지고 있는 멤버변수인 m_pFont 에 직접 DeleteObject() 를 수행케 함으로써 해결했다.

.... 아 쓰고나니 진짜 개무식하네-_-

by PrettyNaru 2009.09.18 09:47

파일에 쓸때:

 - 형식:
WritePrivateProfileStringA(
    LPCWSTR lpAppName,
    LPCWSTR lpKeyName,
    LPCWSTR lpString,
    LPCWSTR lpFileName
    );

 - 사용법:
  WritePrivateProfileString("카테고리", "파라메터", 저장하고자하는항목(변수), ini파일의 위치);

실 사용 예:
  char szCurDir[256] = {NULL, };
  int port;
  CString strPort;
  GetCurrentDirectory(256, szCurDir);
  strcat(szCurDir, "\\server.ini");
  strPort.Format("%d", port);
  WritePrivateProfileString("Server", "Port", m_nPort, szCurDir);
  strMsg.Format("%d", size);


파일로부터 읽어올때:

 - 형식:
GetPrivateProfileStringA(
    LPCSTR lpAppName,
    LPCSTR lpKeyName,
    LPCSTR lpDefault,
    LPSTR lpReturnedString,
    DWORD nSize,
    LPCSTR lpFileName
    );

 - 사용법:
 GetPrivateProfileString("카테고리", "파라메터", "기본값", 저장할곳, 읽어올바이트수, ini파일의 위치);

실 사용 예:

 CString strButt;
 int port, m_nPort;
 char szBuffer[256] = {NULL , };
 char szCurDir[256] = {NULL, };
 GetCurrentDirectory(256, szCurDir);
 strcat(szCurDir, "\\server.ini");
 GetPrivateProfileString("Server", "Port", "15000", szBuffer, 256, szCurDir);
 strBuff.Format("%s", szBuffer);
 port = atoi(szBuffer);
 m_nPort.Format("%d", port);

by PrettyNaru 2009.09.14 10:04

BOOL C다이얼로그클래스::PreTranslateMessage(MSG* pMsg)
{
 if (pMsg->message==WM_MOUSEMOVE)
    {
        if (GetDlgItem(IDC_SEND)->GetSafeHwnd()==pMsg->hwnd)
        {

        }
        else if (GetDlgItem(IDC_SELSEND)->GetSafeHwnd()==pMsg->hwnd)
        {
   
        }
        else if (GetDlgItem(IDC_START)->GetSafeHwnd()==pMsg->hwnd)
        {
   
        }
        else if (GetDlgItem(IDOK)->GetSafeHwnd()==pMsg->hwnd)
        {
   
         }
      }
   return CDialog::PreTranslateMessage(pMsg);
}

....

사실 버튼같은 경우엔 CButtonST를, 스태틱컨트롤은 CColorStaticST를 쓰는 편이 낫긴 하다.

by PrettyNaru 2009.09.14 09:47

같은 내용의 MFC프로그램을 ARM용으로 하나의 eVC 4.0 프로젝트를 생성하고
Win32용으로 하나의 VS 6.0 프로젝트를 생성해서 두개를 관리해왔습니다.

뭐 하나로 묶어서 쓸 수도 있었겠지만, 난 초보니까.

헌데 이번에 2005를 쓰다보니, 이걸 하나로 뭉칠 수 있을 것 같았습니다.
그래서 뭉쳤죠 (-_-)

지난번 글에도 언급했다 시피 어차피 임베디드계열과 Win32를 병행한다면
eVC로 만든것을 컨버팅하는게 낫다고 생각합니다.

왜?

1>C:\Program Files\Microsoft Visual Studio 8\VC\ce\include\crtdefs.h(100) : fatal error C1189: #error :  ERROR: Use of C runtime library internal header file.
1>Build log was saved at "file://c8c8c8c8c8c8c8c8c8 (ARMV4I)\Debug\BuildLog.htm"
1>zip_dev - 1 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

이딴에러 만날 일 없거든... -_-


여튼, 각설하고

eVC를 컨버팅 해서 쓰려고 하니, 컴파일시 다음과 같은 문제가 발생을 합니다.

warning C4996: 'strcpy' was declared deprecated
        c:\program files\microsoft visual studio 8\vc\include\string.h(73) : see declaration of 'strcpy'
        Message: 'This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'

... WHAT THE FUCK??
기본 API에서 오류가 날리가 없잖아... 근데 났네요

이는 stdafx.h 상단에
 #define _CRT_SECURE_NO_DEPRECATE
를 정의함으로써 해결가능합니다.

또, rc2 파일인가 rc파일이 없다고 컴파일이 안되는 부분도 생기는데
전 그냥 주석처리 해버렸습니다 (무식한놈....)

by PrettyNaru 2009.08.11 15:36

기존엔 WinCE 5.0기준으로 개발해왔기 때문에

개발환경을 VS6.0 과 eVC++ 4.0 을 쓰다가

이제 WinCE 6.0 을 개발해야 하는 상황이 와서

SDK가 VS 2005 에서만 구동되는 x같은 상황이 왔습니다.


그래서 Visual Studio 2005를 사용중에 있는데.

확연히 다르다는 느낌도 많이 받거니와

확실히 짜증도 많이 납니다.


기존 VS 6.0 -> VS 2005 로 컨버팅 해서 쓰느니

eVC++ 4.0 -> VS 2005 로 컨버팅 해서 쓰는게 낫다는 생각도 들고요.
(물론 어디까지나 임베디드 개발도 병행해야 할 경우의 이야기입니다.)

조만간에 개발노트들을 마구마구 작성할 듯 싶습니다.

by PrettyNaru 2009.08.11 15:26
| 1 |