Visual Studio 2008로 새 프로젝트를 만들고 빌드를 하면 아래의 에러가 뜬다.
"MSVCR90.dll을 찾을 수 없음."
메뉴-프로젝트-속성-구성속성-링커-입력-특정라이브러리무시에
MSVCRT.lib
을 입력한다.
디버그 모드만 해주고 릴리즈에서는 안해도 된다.
끝
Visual Studio 2008로 새 프로젝트를 만들고 빌드를 하면 아래의 에러가 뜬다.
"MSVCR90.dll을 찾을 수 없음."
메뉴-프로젝트-속성-구성속성-링커-입력-특정라이브러리무시에
MSVCRT.lib
을 입력한다.
디버그 모드만 해주고 릴리즈에서는 안해도 된다.
끝
<고정 윈도우 일때> (m_listStudy는 CListCtrl이고 Report형식이다.)
CRect rect;
m_listStudy.GetClientRect(rect);
m_listStudy.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES );
char title[4][16] = {"Monday", "Tuesday", "Wednesday", "Thursday"};
double percent[4] = {25, 25, 25, 25};
int sum = 0, size, i = 0;
for(i=0;i<3;i++){
size = int(percent[i] / 100. * rect.Width());
m_listStudy.InsertColumn(i, title[i], LVCFMT_CENTER, size);
sum += size;
}
m_listStudy.InsertColumn(i, title[i], LVCFMT_CENTER, rect.Width() - sum);
한국어 OS에서 만든 대화상자는 영어 OS에서 완전히 망가져 보인다.
이를 해결하기 위한 방법중 템플릿을 이용한 방법이 있다.
1. 리소스에디터에서 대화상자의 Language 속성을 "기본 언어 처리"로 변경한다.
2. 아래 코드를 추가한다.
#include <afxpriv.h>
3. 대화상자에 DoModal() 함수를 오버라이드하고 아래와 같이 추가한다.
붉은색 부분은 클래스 이름을 써주고 파란색부분에는 폰트 이름과 사이즈를 넣어준다.
INT_PTR CDlgSplash::DoModal()
{
CDialogTemplate dlt;
int nResult;
if(!dlt.Load(MAKEINTRESOURCE(CDlgSplash::IDD)))
return -1;
dlt.SetFont(theApp.m_Reg.GetFontFace(), (WORD) theApp.m_Reg.GetFontSize());
LPSTR pdata = (LPSTR)GlobalLock(dlt.m_hTemplate);
m_lpszTemplateName = NULL;
InitModalIndirect(pdata);
nResult = CDialog::DoModal();
GlobalUnlock(dlt.m_hTemplate);
return nResult;
}
App의 InitInstance에 아래의 코드를 추가한다. Mutext를 이용한 방법이다.
App에 고유한 이름을 정해주어야 한다.
HANDLE prevInstance = NULL;
DWORD dwLastError = 0;
prevInstance = CreateMutex(NULL, FALSE, "BROADSTORAGE");
if(prevInstance == NULL){
AfxMessageBox ("Can't create Mutex!");
return FALSE;
}
dwLastError = GetLastError ();
if(dwLastError == ERROR_ALREADY_EXISTS){
if(prevInstance != NULL){
CloseHandle (prevInstance);
prevInstance = NULL;
HWND hWnd = ::FindWindow("BroadStorage", NULL);
if(hWnd != NULL)
::ShowWindow(hWnd, SW_RESTORE);
}
return FALSE;
}
<대화상자 기반>
아래는 클래스 이름을 "BroadStorage"로 변경하는 예이다. 대화상자는 클래스 이름이 모두 #32770이다.
1. 리소스 파일을 텍스트 편집기로 연다.
2. 메인 대화상자에 아래와 같이 CLASS 항목을 추가한다.
IDD_BROADSTORAGE_DIALOG DIALOGEX 0, 0, 235, 230
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW | WS_EX_NOACTIVATE
CAPTION "Broad Storage Server"
CLASS "BroadStorage"
FONT 8, "MS Shell Dlg", 0, 0, 0x1...
END
3. App의 InitInstance()의 맨 윗부분에 아래 코드를 추가한다.
WNDCLASS wndClass;
::ZeroMemory(&wndClass, sizeof(WNDCLASS));
::GetClassInfo(AfxGetInstanceHandle(), _T("#32770"), &wndClass);
wndClass.lpszClassName = _T("BroadStorage");
AfxRegisterClass(&wndClass);
<프레임 윈도우 기반>
1. App의 InitInstance의 맨 윗부분에 아래 코드를 추가하여 어플리케이션이 클래스를 등록하기전에 먼저 선수를 친다.
WNDCLASS wc;
memset(&wc, 0, sizeof(wc));
wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = AfxWndProc;
wc.hInstance = m_hInstance;
wc.hIcon = LoadIcon(IDR_MAINFRAME);
wc.hCursor = LoadCursor(IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "BroadStorage";
AfxRegisterClass(&wc);
2. CMainFrame의 PreCreateWindow에 아래 코드를 추가한다.
cs.lpszClass = "BroadStorage";
끝