320x100

윈도우 위치,크기 저장/복구

Posted on 2013. 5. 10. 16:05
Filed Under Visual C++

설명

CMainFrame에서 창크기를 제어한다.

저장은 CMainFrame::OnClose() 에서 하고

로드는 BOOL C******App::InitInstance() 에서..

 

소스

 

//아래는 MSDN에서 빼온 함수들. MainFrm.cpp에 추가

//////////////////////////////////////////////////////////////////
// Helpers for saving/restoring window state

static TCHAR BASED_CODE szSection[] = _T("Settings");
static TCHAR BASED_CODE szWindowPos[] = _T("WindowPos");
static TCHAR szFormat[] = _T("%u,%u,%d,%d,%d,%d,%d,%d,%d,%d");

static BOOL PASCAL NEAR ReadWindowPlacement(LPWINDOWPLACEMENT pwp)
{
    CString strBuffer = AfxGetApp()->GetProfileString(szSection, szWindowPos);
    if (strBuffer.IsEmpty())
        return FALSE;

    WINDOWPLACEMENT wp;
    int nRead = _stscanf(strBuffer, szFormat,
        &wp.flags, &wp.showCmd,
        &wp.ptMinPosition.x, &wp.ptMinPosition.y,
        &wp.ptMaxPosition.x, &wp.ptMaxPosition.y,
        &wp.rcNormalPosition.left, &wp.rcNormalPosition.top,
        &wp.rcNormalPosition.right, &wp.rcNormalPosition.bottom);

    if (nRead != 10)
        return FALSE;

    wp.length = sizeof wp;
    *pwp = wp;
    return TRUE;
}

static void PASCAL NEAR WriteWindowPlacement(LPWINDOWPLACEMENT pwp)
// write a window placement to settings section of app"s ini file
{
    TCHAR szBuffer[sizeof("-32767")*8 + sizeof("65535")*2];

    wsprintf(szBuffer, szFormat,
        pwp->flags, pwp->showCmd,
        pwp->ptMinPosition.x, pwp->ptMinPosition.y,
        pwp->ptMaxPosition.x, pwp->ptMaxPosition.y,
        pwp->rcNormalPosition.left, pwp->rcNormalPosition.top,
        pwp->rcNormalPosition.right, pwp->rcNormalPosition.bottom);
    AfxGetApp()->WriteProfileString(szSection, szWindowPos, szBuffer);
}

////////////////////////////////////////////////
//아래 두개의 함수를 만들어 주세요.

//아래는 복원, 저장 함수...둘다 public

void CMainFrame::SaveWindowPlacement()
{
    WINDOWPLACEMENT wp;
    wp.length = sizeof wp;
    if (GetWindowPlacement(&wp))
    {
        wp.flags = 0;
        if (IsZoomed())
            wp.flags |= WPF_RESTORETOMAXIMIZED;
        // and write it to the .INI file
        WriteWindowPlacement(&wp);
    }
}

BOOL CMainFrame::RestoreWindowPlaceMent()
{
    WINDOWPLACEMENT wp;
    if (ReadWindowPlacement(&wp)){
        SetWindowPlacement(&wp);
        return TRUE;
    }

    return FALSE;
}

//////////////////////////////////////////////////////////////
//사용예

//저장
void CMainFrame::OnClose() 
{
    // TODO: Add your message handler code here and/or call default
    //현재위치 저장하기
    SaveWindowPlacement();
    
    CFrameWnd::OnClose();
}

//복원.. 한글 주석이 달린곳만 보세요.
//CMainFrame에서 복원 작업을 하면 최대화 상태의 윈도우에서 문제가 있답니다.

BOOL C******App::InitInstance()
{
    AfxEnableControlContainer();

    // Standard initialization
    // If you are not using these features and wish to reduce the size
    //  of your final executable, you should remove from the following
    //  the specific initialization routines you do not need.

#ifdef _AFXDLL
    Enable3dControls();    // Call this when using MFC in a shared DLL
#else
    Enable3dControlsStatic();    // Call this when linking to MFC statically
#endif

    // Change the registry key under which our settings are stored.
    // TODO: You should modify this string to be something appropriate
    // such as the name of your company or organization.
    SetRegistryKey(_T("Local AppWizard-Generated Applications"));

    LoadStdProfileSettings();  // Load standard INI file options (including MRU)

    //아래줄을 안해놓으면 깜빡일수 있다.
    this->m_nCmdShow=SW_HIDE;


    // Register the application"s document templates.  Document templates
    //  serve as the connection between documents, frame windows and views.

    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(CDockingWndDoc),
        RUNTIME_CLASS(CMainFrame),       // main SDI frame window
        RUNTIME_CLASS(CDockingWndView));
    AddDocTemplate(pDocTemplate);

    // Parse command line for standard shell commands, DDE, file open
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);

    // Dispatch commands specified on the command line
    if (!ProcessShellCommand(cmdInfo))
        return FALSE;

    // The one and only window has been initialized, so show and update it.
    //이전위치로 만들기.
    if (!((CMainFrame*)m_pMainWnd)->RestoreWindowPlaceMent())
        m_pMainWnd->ShowWindow(SW_SHOW);


    m_pMainWnd->UpdateWindow();

    return TRUE;
}

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

출처 - http://www.devpia.com/Forum/boardview.aspx?forumname=VC_LEC&no=2041

 

반응형

[MFC] Dialog 클래스명 바꾸기(rc편집)

Posted on 2010. 2. 25. 12:52
Filed Under Visual C++

<출처: http://blog.naver.com/amoros21/140024540662 2006/05/23>

다이얼로그도
윈도 클래스명 바꾸기(32770_바꾸기)

가끔은 클래스명으로 FindWindow를 할수도 있고  SendMessage, PostMessage를 보낼때가 있는데
대부분 다이얼로그는 클래스 명이 #32770으로(Spy++) 되어 있다.

1. 리소스파일(rc파일)을 메모장으로 열고..
IDD_MAINTAB_DIALOG DIALOGEX 0, 0, 195, 44
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "TestSeed"
CLASS "Seed Control"      // CLASS는 그냥 해주시고. 클래스 이름을 입력
FONT 9, "굴림"


2. APP의 InitInstance()에 추가사항
WNDCLASS wClass; 

 // 기존 윈도우 클래스 정보를 얻음.
::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wClass);

// 기존 윈도우 클래스 정보에서 클래스이름만을 변경.
wClass.lpszClassName = _T("Seed Control");
//변경된 클래스정보를 등록.
BOOL bOk;
bOk = AfxRegisterClass(&wClass);

Spy 로 찍어보면 클래스 명이 #32770이 아니라 Seed Control로 변경 되었음을 확인하면,

참고
wClass.style = CS_HREDRAW | CS_VREDRAW; //클래스 스타일
wClass.lpfnWndProc = WndProc; //윈도우 프로시져
wClass.cbClsExtra = 0; //윈도우 클래스 데이터 영역
wClass.cbWndExtra = 0; //윈도우의 데이터 영역
wClass.hInstance = hInstance; //인스턴스 핸들
wClass.hIcon = LoadIcon (NULL, IDI_APPLICATION); //아이콘 핸들
wClass.hCursor = LoadCursor (NULL, IDC_ARROW); //커서 핸들
wClass.hbrBackground = GetStockObject(WHITE_BRUSH); //배경브러쉬 핸들
wClass.lpszMenuName = NULL; //메뉴이름
wClass.lpszClassName = szAppName; //윈도우 클래스 이름

반응형

caption 없는 윈도우 이동하기 [OnLButtonDown]

Posted on 2010. 2. 24. 21:26
Filed Under Visual C++

caption 없는 윈도우 이동하기

void CAPLiveInstallerDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    CDialog::OnLButtonDown(nFlags, point);

    DefWindowProc(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
}


==>윈도우영역 마우스 L버튼 다운일시, CATION바를 클릭한것처럼 메시지를 보내어, 윈도우 이동가능하게함
<출처: http://psmon.x-y.net/maniwiki/doku.php?do=export_xhtml&id=mfc%3Aprg_mfc>

반응형

[MFCTips] 메인 메뉴 바꾸기 & Tip링크 ★

Posted on 2010. 2. 23. 11:28
Filed Under Visual C++

http://psmon.x-y.net/maniwiki/doku.php?do=export_xhtml&id=mfc%3Aprg_mfc



http://kovi.cafe24.com/MFCTips.html



<출처: http://myhome.hanafos.com/~kukdas/doc/mfc/mainmenu.html>
MFC가 기본적으로 제공하는 IDR_MAINFRAME 라는 메뉴 대신 다른 메뉴를 로딩하도록 고쳐보기로 하겠다.

1) 리소스에 새 메뉴를 추가한다. 메뉴의 id는 IDR_MENU_NEW 로 한다.

2) MainFrm.cpp 의 PreCreateWindow() 함수에서 다음과 같이 추가한다.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
        if( !CFrameWnd::PreCreateWindow(cs) )
                return FALSE;
        // TODO: Modify the Window class or styles here by modifying
        //  the CREATESTRUCT cs
        cs.hMenu = ::LoadMenu(AfxGetInstanceHandle(),
                MAKEINTRESOURCE(IDR_MENU_NEW));         // 추가

        return TRUE;
}

 

(설명)

 MFC가 작성해준 코드에는 항상 IDR_MAINFRAME 가 기본메뉴가 되어 있다. 따라서 이것을 다른 메뉴로 바꿔치기하려면 기본메뉴가 시스템에 "등록" 되는 시점을 알아내어 등록되기 전에 바꿔치기 하면 되는 것이다.

 여기서 PreCreateWindow() 함수는 윈도우가 생성되기 전에 불려지는 함수이다. 만약 윈도우에 무슨 조작을 가하고 싶다면 여기서 인자들을 변경해 주면 그 인자들이 윈도우에 적용되어 윈도우에 자기가 원한 조작이 되는 것이다.

PreCreateWindow의 인자인 CREATESTRUCT는 다음과 같이 정의된 구조체이다.

 

typedef struct tagCREATESTRUCT {

     LPVOID     lpCreateParams;
     HANDLE    hInstance;
     HMENU     hMenu;                 // 이 부분 주목
     HWND       hwndParent;
     int             cy;
     int             cx;
     int             y; 
     int             x;
     LONG        style;
     LPCSTR     lpszName;
     LPCSTR     lpszClass;
     DWORD      dwExStyle;

} CREATESTRUCT;

 

앞의 구조체에서 HMENU hMenu; 라는 부분에서 메인 메뉴에 대한 등록이 이루어진다. 따라서 이 값을 원하는 hMenu 값으로 바꾸면 될 것이다.

반응형

[펌]문자열 출력 함수 (TextOut, DrawText)

Posted on 2009. 9. 22. 13:16
Filed Under Visual C++

[펌]문자열 출력 함수
2007/01/10 15:33

복사 http://blog.naver.com/iperfume/100032988161

문자열 출력 함수.

BOOL TextOut(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString);

 

▶hdc:DC핸들

▶nXStart:문자열을 출력할 X좌표

▶nYStart:문자열을 출력할 Y좌표

▶lpString:출력할 문자열

▶cbString:문자열의 길이. 널 종료 문자열을 인식하지 않으므로 반드시 길이를 밝혀 주어야 한다.

 

 

 

문자열의 정렬 방법을 변경하는 함수

UINT SetTextAlign(HDC hdc, UINT fMode);

▶fMode:정렬 방식과 CP사용 여부 등의 플래그를 지정한다. 정렬 방식은 수평, 수직에 대해 각각 한 종류만 선택할 수 있다.

플래그 설명
TA_BLASELINE 텍스트의 기준선에 정렬
TA_BOTTOM 수직 하단 정렬
TA_TOP 수직 상단 정렬
TA_CENTER 수평 중앙 정렬
TA_LEFT 수평 왼쪽 정렬
TA_RIGHT 수평 오른쪽 정렬
TA_NOUPATECP 문자열이 출력된 후 CP는 변경되지 않는다.
TA_RTLREADING 문자열을 오른쪽에서 왼쪽으로 출력한다. 한글 윈도우즈에서는 의미가 없다.
TA_UPDATECP 문자열 출력 좌표 CP를 사용하며 문자열 출력 후 CP를 갱신한다.

 

 

 

 

사각영역을 정의하여 영역 안에 문자열을 출력할수 있다.

int DrawText(HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);

 

 

▶hDC:DC핸들

▶lpString:출력할 문자열. nCount가 -1이면 널 종료 문자열이어야 한다.

▶nCount:문자열을 길이. -1일 경우 널 종료 문자까지를 문자열 길이로 계산한다.

▶lpRect:문자열을 출력할 시각영역

▶uFormat:출력 옵션.

플레그 설명
DT_BOTTOM 텍스트를 사각 영역의 바닥에 출력한다. DT_SINGLELINE 플레그가 설정되어 있을 때만 사용할 수 있다.
DT_CALCRECT 문자열을 출력할 수 있는 사각 영역을 계산한다. 문자열이 여러줄로 되어 있으면 사각 영역의 바닥(bottom)을 확장하여 모든 문자열이 다 포함되도록 하며 문자열이 한줄로 되어 있으면 사각 영역의 오른쪽(right)을 확장한다. 이 플레그가 주어지면 실제 문자열은 출력되지 않고 계산만 해 준다.
DT_CENTER 수평 중앙 정렬
DT_EDITCONTROL 멀티 라인 에디트 컨트롤과 같은 방식으로 문자열을 출력한다. 문자의 수평폭을 계산하는 방법이 에디트 컨트롤과 동일하며 마지막 줄의 일부가 보이지 않을 경우 출력하지 않는다.
DT_END_ELLIPSIS 문자열 끝이 사각 영역을 넘을 경우 문자열은 자르고 생략 기호(...)을 대신 보여준다. 단어가 잘릴 경우는 생략 기호를 붙이지 않는다.
DT_EXPANDTABS 탭 문자를 확장하여 8문자 너비로 만든다.
DT_EXTERNALLEADING 일반적으로 폰트 높이에 External Leading은 제외되는데 이 플레그가 주어지면 폰트 높이에 External Leading을 포함시킨다.
DT_HIDEPREFIX 2000이상:&문자를 무시하며 &다음 문자에 밑줄이 그어지지 않는다.
DT_INTERNAL 시스템 폰트를 사용하여 텍스트 메트릭을 계산한다.
DT_LEFT 수평 왼쪽 정렬
DT_MODIFYSTRING 문자열을 출력된 모양대로 변경한다. DT_END_ELLIPSIS, DT_PATH_ELLIPSIS 플레그와 함꼐 사용되며 그 외의 경우는 아무런 효과가 없다.
DT_NOCLIP 클리핑없이 문자열을 출력한다. 그래서 문자열이 사각형 밖으로 벗어나도 자르지 않고 그냥 출력된다.
DT_NOFULLWIDTHCHARBREAK DBCS환경에서 자동 개행 방법을 SBCS와 동일하게 설정한다.
DT_NOPREFIX &문자를 그대로 출력한다.
DT_PATH_ELLIPSIS 문자열 끝이 사각 영역을 넘을 경우 문자열의 중간을 생략 기호로 바꾸어 사각 영역에 맞게 조정한다. 문자열 내부에 \문자가 있을 경우 마지막 \이후의 문자를 최대한 보존해 준다.
DT_PREFIXONLY 2000이상:&문자가 있는 위치에 밑줄만 출력한다. 텍스트는 출력되지 않는다.
DT_RIGHT 수평 오른쪽 정렬
DT_RTLREADING hdc에 선택된 폰트가 Hebrew 또는 Arabic 폰트인 경우 오른쪽에서 왼쪽으로 문자열을 출력한다.
DT_SINGLELINE 문자열을 무조건 한줄로만 출력한다. CR, LF코드가 있어도 개행되지 않는다.
DT_TABSTOP 탭 정지점을 설정한다. uFormat인수의 8~15비트(하위 워드의 상위 바이트)가 탭 정지점 설정에 사용되며 디폴트를 8문자이다.
DT_TOP 텍스트를 사각 영역의 윗쪽에 출력한다.
DT_VCENTER 수직 중앙 정렬한다.
DT_WORDBREAK 단어가 사각형의 오른쪽 변에 닿았을 경우 자동 개행한다. CR/LF 조합은 강제로 개행시킨다.
DT_WORD_ELLIPSIS 사각 영역을 넘을 경우 단어를 자르고 생략 기호를 붙인다.

 

 

 

 

 

그래픽 출력

COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);

BOOL MoveToEx(HDC hdc, int X, int Y, LPPOINT lpPoint);

BOOL LineTo(HDC hdc, int nXEnd, int nYEnd);

BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);

BOOL Ellipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);

 

 

LineTo함수는 CP(현재 좌표)에서부터 지정한 좌표까지 선을 그으며 CP를 끝점으로 이동시켜 준다.

MoveToEx는 CP를 지정한 좌표(x,y)로 이동시켜준다.  이동전의 CP좌표를 lpPoint에 대입해주는데 이전 CP값이 필요치 않는 경우 lpPoint에 NULL을 넘겨주면 된다.

 

(a,b) ~ (c,d) 까지 선을 긋고 싶다면

MoveToEx(hdc, a, b, NULL);

LineTo(hdc,c,d);

 

 

 

case WM_PAINT:
 hdc=BeginPaint(hWnd,&ps);
 MoveToEx(hdc,150,150,NULL);
 LineTo(hdc,180,200);
 Rectangle(hdc,200,100,250,180);
 Ellipse(hdc,200,200,250,280);
 EndPaint(hWnd,&ps);
 return 0;

 

메시지 박스는 조그만 별도의 윈도우를 열어서 사용자에게 정보를 전달해 주거나 질문을 하는 장치.

 

int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

 

▶hWnd : 부모 윈도우의 핸들. 메시지 박스의 이 윈도우의 모달 대화상자로 열린다. 부모 윈도우가 없을 경우 NULL로 지정할 수 있다.

▶lpText : 메시지 내용을 나타내는 널 종료 문자열. 이 문자열은 ANSI 문자열일 수도 있고 유니코드 문자열일 수도 있는데 어떤 포맷이라도 메시지 출력이 가능하다.

▶lpCaption : 메시지 박스의 타이틀 바에 나타날 문자열. NULL일 경우 디폴트로 Error(한글 윈도우즈에서는 오류)가 표시된다.

▶uType : 메시지 박스에 나타날 버튼의 종류와 아이콘 모양, 동작 방식을 지정한다. 다음 여러 그룹의 플래그 조합을 지정할 수 있다.

 

 

 


반응형

[BOOK] Windows MFC Programming - 스터디노트

Posted on 2009. 5. 12. 12:42
Filed Under Visual C++


유동근, 원리에서 활용까지 윈도우즈 MFC 프로그래밍, 정보문화사


Chapter 1 시작을 위한 준비
1-1 Win32 API 프로그래밍
윈도우즈 어플리케이션은 어디에서 시작하는가?
진짜 main과 WinMain이 시작 함수일까?
CRT main 함수 지정
1-2 Win32 GUI 프로그래밍
WinMain 함수 원형
WinMain 함수의 기본 골격
윈도우 프로시저
메시지 루프를 종료하기 위해 WM_DESTROY를 처리해야 한다
화면에 내용을 출력하기 위해 WM_PAINT를 처리해야 한다
GetMessage를 다시 한 번
1-3 핸들
핸들이 뭐지?
유저 객체 핸들
GDI 객체 핸들
커널 객체 핸들
1-4 유니코드
유니코드란?
그럼 어떻게 유니코드를 사용하지?
Win32 API의 유니코드 지원
1-5 함수 호출 규약
_ _cdecl
_ _stdcall
_ _fastcall
1-6 가상함수
가상함수
클래스 단위로 컴파일러가 생성하는 가상함수 테이블

1-7 #pragma와 #, ##
#pragma
#과 ##
핵심 포인트

Chapter 2 MFC 어플리케이션의 시작과 끝
2-1 가장 간단한 MFC 프로그램
프로젝트 생성과 기본 코드
WinMain은 어디에?
어플리케이션과 MFC의 만남
다시 WinMain과 AfxWinMain
2-2 실전 프로젝트
실전 프로젝트 생성
InitInstance
InitInstance의 나머지는 간단하게
2-3 메시지 구조
메시지 큐
MFC의 메시지 루프
MFC의 윈도우 프로시저
2-4 어플리케이션 종료
프레임/뷰/도큐먼트 파괴
ExitInstance
핵심 포인트

Chapter 3 RTTI와 CRuntimeClass
3-1 RTTI
RTTI
3-2 CRuntimeClass
CRuntimeClass는 어디에 쓰는 물건인가?
CRuntimeClass 매크로
일반화된 객체 생성
실행 시 객체 자료형 검사
실행 시 객체 유효성 검사
직렬화
CRuntimeClass 리스트
핵심 포인트

Chapter 4 MFC 메시지
4-1 윈도우즈 메시지
메시지란?
메시지 큐를 통과하지 않는 메시지
4-2 MFC 메시지 핸들러
4-3 MFC 메시지 루프 다음으로의 여행
4-4 CWnd::OnWndMsg와 메시지 맵
4-5 메시지 종류
윈도우 메시지
명령 메시지
통지 메시지
사용자 정의 메시지
4-6 명령 메시지와 통지 메시지는 어떤 것이 특별한가?
4-7 메시지 리플렉션
핵심 포인트

Chapter 5 MFC와 스레드
5-1 스레드
프로세스와 스레드
스레드 생성
5-2 워커 스레드와 UI 스레드
워커 스레드
UI 스레드
5-3 MFC 스레드
MFC 워커 스레드
MFC UI 스레드
MFC 스레드 구조
5-4 TLS(Thread Local Storage)
Win32 TLS
컴파일러 지원 TLS
MFC TLS
PROCESS_LOCAL
5-5 _AFX_THREAD_STATE, AFX_MODULE_STATE, AFX_MODULE_THREAD_STATE
_AFX_THREAD_STATE
AFX_MODULE_STATE
AFX_MODULE_THREAD_STATE
핵심 포인트

Chapter 6 뷰와 도큐먼트
6-1 자료 구조 설계와 구현
자료 구조 설계
자료 구조 구현 - CFigure
자료 구조 구현 - CLine
6-2 뷰와 도큐먼트
데이터의 생성
데이터의 보관
데이터를 이용한 화면 복원
데이터를 이용한 인쇄
데이터의 파괴
파일 입·출력
6-3 "WBChat" UI 구현
메뉴, 툴바, 단축키 구현
도형 객체 이동
6-4 직렬화
직렬화는 어디에서 시작되나
직렬화의 핵심 Serialize 함수
클래스 버전 관리는 어떻게?
직렬화 파일 포맷
핵심 포인트

Chapter 7 대화상자와 서브클래싱
7-1 CAttribute 구현
CFigure와 CAttribute
속성 설정 사용자 인테페이스
7-2 대화상자 구현
대화상자 리소스 편집
대화상자 클래스 추가
변수 연결
7-3 DoDataExchange
DoModal 안으로...
대화상자의 90% - DoDataExchange
DDX 함수
DDV 함수
값 변수와 컨트롤 변수 초기화
[확인]과 [취소] 버튼
7-4 컨트롤 서브클래싱
확장된 컨트롤 클래스 구현
확장된 컨트롤 변수 연결
확장된 컨트롤 클래스 기능 추가
핵심 포인트

Chapter 8 MFC 소켓 통신
8-1 소켓 통신
TCP/IP 모델
소켓이란?
클라이언트/서버 모델
서버 함수
클라이언트 함수
8-2 WSAAsyncSelect 통신 모델
모델 이름이 왜 WSAAsyncSelect일까?
소켓 메시지
8-3 MFC 소켓
MFC 소켓 클래스
CAsyncSocket
CAsyncSocket는 어떻게 이벤트 메시지를 처리하나?
CSocket
8-4 직렬화 소켓
1대1 통신 방식으로 서버와 클라이언트 구현
직렬화 소켓
직렬화에서 소켓 타임 아웃 처리
8-5 스레드와 MFC 소켓
스레드와 MFC 소켓
직렬화를 이용한 패킷 설계
핵심 포인트

Chapter 9 데이터베이스
9-1 데이터베이스 접근 전략
UDA
ADO를 MFC에서 어떻게 사용하지?
9-2 대화 상대 관리 사용자 인터페이스 구현
분할 윈도우
대화 상대 관리 메뉴
대화상자 구현
9-3 ADO
테이블 정의
ADO를 사용한 데이터 소스 접속
ADO를 사용한 검색
ADO를 사용한 수정과 삭제
ADO를 사용한 삽입
9-4 ODBC
CDatabase
CRecordset
CRecordset는 상속해 사용한다.
MFC에서 Stored procedure는 어떻게 호출하지?
핵심 포인트
반응형

About

by 쑤기c

반응형