기능생각...기능에 따른 구현함수나 흐름

외부에서 데이터가 들어올때 그 데이터를 담아놓을 공간을 만드는것이 제일먼저.

 

1. 대화상자 기반의 새 프로젝트 생성(Clipboard)

2. 버튼 두 개, 에디트 컨트롤 한 개 추가

   캡션 수정 Button1(Copy to clipboard), Button2(Read from clipboard)

3. 두 개의 버튼 이벤트 핸들러 추가

3.1 에디트컨트롤에 변수 추가(형식: value, 변수이름: m_strText)

3.2 Button1, Button2 코드 작성

 

**

데이터와 핸들을 받아올때는 무조건 예외처리 코드가 있어야 함!!!

 

void CClipboardDlg::OnBnClickedButton2()
{
 if(!::OpenClipboard(m_hWnd))   return;

 HGLOBAL hGlobalMemory;
 hGlobalMemory = ::GetClipboardData(CF_UNICODETEXT);
 ::EmptyClipboard(); // 다시 초기화 시키고 싶을 때 가장 적당한 위치. 바로 해주는게 좋음
 
 if (hGlobalMemory == NULL)
 {
  // ...
  return;
 }
 
 TCHAR* pszBuffer = (TCHAR*)::GlobalLock(hGlobalMemory);
 if(pszBuffer == NULL)
 {
   // ...
  return;
 }

 m_strText.Format(_T("%s"), pszBuffer);
 ::GlobalUnlock(hGlobalMemory);

 // ::EmptyClipboard();
 ::CloseClipboard();
 UpdateData(FALSE);

}

void CClipboardDlg::OnBnClickedButton1()
{
 UpdateData(TRUE);
 
 if (m_strText.GetLength() <= 0)
  return; // 에디트 컨트롤에 글자 있는지 검사. 없으면 굳이 열어서 쓸필요 없음

 HGLOBAL hGlobalMemory;
 TCHAR* pszBuffer=NULL;
 
 if (::OpenClipboard(m_hWnd) == FALSE)
 {
  AfxMessageBox(_T("ERROR : Failed to open clipboard"));
  return;
 }
 


 int nLength = m_strText.GetLength()*sizeof(TCHAR)+1;
 //문자열대신 이미지를 사용할때는 비트맵사이즈를 이용할 수 있다.
 
 // 가상메모리 공간에 nLength 길이만큼 공간을 할당받는다.
 hGlobalMemory = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, nLength);
 if (hGlobalMemory == NULL)
 {
  AfxMessageBox(_T("ERROR : Failed to allocate global memory"));
  return;
 }

 pszBuffer = (TCHAR*)::GlobalLock(hGlobalMemory);
 wsprintf(pszBuffer, _T("%s"), m_strText);
 ::GlobalUnlock(hGlobalMemory);


 ::EmptyClipboard(); //클립보드를 비워준다
 ::SetClipboardData(CF_UNICODETEXT, hGlobalMemory);
 ::CloseClipboard();

 
}


'PROGRAMMING > MFC(C++)' 카테고리의 다른 글

[0426수업] Windows Service Process  (0) 2011.04.26
[0425수업] dll파일 만들기  (0) 2011.04.25
[0422수업] IPC통신  (0) 2011.04.22
[0422수업] 중복실행 방지  (0) 2011.04.22
[0421수업] 소프트웨어 업데이트  (0) 2011.04.21
Posted by 마마필로 :