태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
 

 


 
 

EditBox 글씨 크게하기~~

Programming/C/C++ | 2009/12/23 07:33 | Posted by 엉이엉이

먼저 EditBox 멤버변수로 지정하고...

난 m_edit라고 해야지~

전역변수로  

CFont gFont;    

한뒤에


BOOL CDlgxxxxx::OnInitDialog()
{
................

int fontsize = 15;
gFont.CreatePointFont(fontsize*10, _T("Tahoma")); 
m_edit.SetFont(&gFont);

.................

}


그리고 Destroy이 에다가

gFont.DeleteObject(); 


해제 해주면 끝!!!!
저작자 표시 비영리

TRACKBACK ADDRESS : http://smartiz.co.kr/trackback/84 관련글 쓰기

댓글을 달아 주세요

C++ 문자열변환 TIP

Programming/C/C++ | 2009/12/21 23:45 | Posted by 엉이엉이
c++짜면서 문자열 상당히 까다로운데..

요걸보고 해결하곤한다...

아주 잘되어있다^^

링크로~~

http://blog.naver.com/cbdman/130032675221
저작자 표시 비영리

TRACKBACK ADDRESS : http://smartiz.co.kr/trackback/79 관련글 쓰기

댓글을 달아 주세요

출처 : http://blog.naver.com/ahnshy/100015197822

원본에서 내가 좀 수정하였다.. 원본꺼가 모바일에서 안돌아가기에 ...

내가 바꾼거!!
CString GetProgramPath(BOOL bOnlyPath)
{
TCHAR szBuffer[256];
CString strRet;

::GetModuleFileName(NULL,szBuffer,MAX_PATH);
strRet.Format(_T("%s"),szBuffer);

if(!bOnlyPath) return strRet; //여기서 리턴 Path+파일명

int nIndex= strRet.ReverseFind('\\');
strRet=strRet.Left(nIndex);
retrun strRet;//Path만 리턴

}

이렇게 바꾸면 잘돌아간다!!
아주 굿!!
저작자 표시 비영리

TRACKBACK ADDRESS : http://smartiz.co.kr/trackback/78 관련글 쓰기

댓글을 달아 주세요

OnEraseBkgnd 함수는 보통 배경화면을 비트맵을 사용하여 그리기 위해 사용한다. 배경화면을 비트맵으로 처리하면 윈도우가 새로 그려져야 할 경우 화면이 깜박이고, 컨트롤들이 비트맵에 가려서 보이지 않게 된다. 윈도우가 다른 윈도우에 가려졌다가 다시 앞으로 나올 경우 그 윈도우는 다시 그려지게 된다. 윈도우가 배경을 그리는 방법은 모든 화면을 깨끗이 지우고(흰색 브러쉬로 채운다), 그 위에 배경을 그리게 된다. 한마디로 배경을 다시 그리기 위해 두 개의 작업이 이루어 진다. (윈도우가 배경을 다시 그려야 할 때 WM_ERASEBKGND 메세지를 호출한다.)

 

OnEraseBkgnd() 기본형 함수

  1. bool OnEraseBkgnd(CDC *pDC) {

    reutrn CDialog::OnEraseBkgnd(pDC); // Dialog에서 작업

  2. } // 흰 부러쉬로 배경을 다시 그린다.

 

윈도우에서 GDI(Graphic Device Interface)를 사용하여 그림을 그려야 할 경우, 화면에 DC(Device Context)에 바로 출력하지 않고, 메모리 DC에 먼저 그림을 로드한 후에 메모리 DC의 내용을 화면 DC에 빠르게 출력하여 깜박임 현상을 최소하 한다. 이러한 것을 Double Buffering이라고 한다.

 

DC(Device Context)의 종류

  1. CClientDC   클라이언트 영역의 출력
  2. CPaintDC   WM_PAINT 메시지 헨들러를 사용
  3. CWindowDC   전체 윈도우에 대한 출력(Screen Saver ...)
  4. CMetaFileDC   메타 파일로의 출력

 

배경화면 그리기(Exampe-1)

  1. VOID CTest::Initialize(VOID) {
  2. CBitmap m_BackBitmap;
  3. m_BackBitmap.LoadBitmap(IDB_BACKGROUND);   //메모리 DC에 사용할 Background Bitmap
  4. }
  5. BOOL CTest::OnEraseBkgnd(CDC* pDC) {
  6.  CDC  memDC;                     // 메모리 DC
     CBitmap * pOldBitmap = NULL;    // m_BackBitmap으로 새로운 그림을 DC에 그릴 때, 이전 그려졌던 DC(즉, Bitmap)을 저장.
  7.  BITMAP bitmapInfo;              // 그림의 정보(m_BackBitmap)
  8.  m_BackBitmap.GetBitmap(&bitmapInfo); // Bitmap 크기 구함.
  9.  memDC.CreateCompatibleDC(pDC);  // 메모리 DC 생성
  10.  pOldBitmap = memDC.SelectObject(&m_BackBitmap);
  11.  pDC->BitBlt(0, 0, bitmapInfo.Width, bitmapInfo.Height, &memDC, 0, 0, SRCCOPY);   // 메모리 DC에 그림을 그림
     
     memDC.SelectObject(pOldBitmap);
  12.  memDC.DeleteDC();
  13.  //return CDialog::OnEraseBkgnd(pDC);
     return true; // 흰 부러쉬가 아닌 배경을 그려야 하기 때문에 true
  14. }

 

 위의 소스에서 이해하기 난해한 부분은 memDC.SelectObject(CBitmap* bitmap) 함수이다. CBitmap * pOldBitmap 을 선언한 이유는 pOldBitmap = memDC.SelectObject(&m_BackBitmap); 구문 때문이다.

윈도우는 항상 거의 대부분 사용을 다한 자원은 반환되어야 한다. memDC.SelectObject(&m_BackBitmap); 을 사용하여 새로운 비트맵을 넣으면, 이전 작업 중이던 비트맵을 리턴한다. 14줄 memDC.SelectObject(pOldBitmap); 에서는 이전에 저장했던 pOldBitmap을 다시 넣는다. m_BackBitmap 그림을 다 그렸기 때문에 더이상 사용할 필요가 없기 때문에 이전 pOldBitmap을 다시 DC에 돌려 주게 된다. 그리고 배경을 다 그렸기 때문에 두 번째 나오는 SelectObject에서는 리턴값을 받을 필요가 없다. (OnEraseBkgnd 함수는 배경이 다시 그려져야 할 경우에만 WM_ERASEBKGND 메시지를 호출하여 다시 그리게 된다.)

GetClip를 사용하여 속도 향상 시키기(Exampe-2)

  1. VOID CTest::Initialize(VOID) {
  2. CBitmap m_BackBitmap;
  3. m_BackBitmap.LoadBitmap(IDB_BACKGROUND);  
  4. }
  5. BOOL CTest::OnEraseBkgnd(CDC* pDC) {
  6.  CDC  memDC;
     CBitmap * pOldBitmap = NULL;
     BITMAP bmpInfo;
  7.  //HBITMAP m_hBmp = (HBITMAP)LoadImage(NULL, _T("bg.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
     //CBitmap *pBmp = CBitmap::FromHandle(m_hBmp);

  8.  m_BackBitmap.GetBitmap(&bmpInfo);
     memDC.CreateCompatibleDC(pDC);
  9.  pOldBitmap = memDC.SelectObject(&m_BackBitmap);
     memDC.SelectObject(&m_BackBitmap);
     
     CRect rect;
     GetClientRect(&rect);
  10.  int nX, nY;
     for(nX = 0; nX < rect.Width(); nX += bmpInfo.bmWidth) {
  11.      for(nY = 0; nY < rect.Height(); nY += bmpInfo.bmHeight) {
               pDC->GetClipBox(&rect);
  12.   pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &memDC, 0, 0, SRCCOPY);
  13.   }
  14.  }
  15.  memDC.SelectObject(pOldBitmap);
     memDC.DeleteDC();
  16.  return true;
  17. }

 Double Buffering

매모리맵에 클라이언트 창의 크기만큼 비트맵 이미지를 그려 놓고 한꺼번에 화먼에 뿌려주는 방식(실행시 더 빠른 속도) (Exampe-3)

  1. BOOL CLoaderDlg::OnEraseBkgnd(CDC* pDC) {
  2.  CDC  MemDC, BufferDC;
     CBitmap * pOldBitmap1 = NULL;
     CBitmap * pOldBitmap2 = NULL;
     CBitmap memBitmap;
     BITMAP bmpInfo;
     CRect rect;
  3. GetClientRect(&rect);
     MemDC.CreateCompatibleDC(pDC);
     BufferDC.CreateCompatibleDC(pDC);
  4.  memBitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
  5.  pOldBitmap1 = MemDC.SelectObject(&memBitmap);
  6.  m_BackBitmap.GetBitmap(&bmpInfo);

  7.  pOldBitmap2 = BufferDC.SelectObject(&m_BackBitmap);
     for(int nX = 0; nX < rect.Width(); nX += bmpInfo.bmWidth) {
         for(int nY = 0; nY < rect.Height(); nY += bmpInfo.bmHeight) {
             MemDC.BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &BufferDC, 0, 0, SRCCOPY);
         }
     }

  8.  pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
  9.  BufferDC.SelectObject(pOldBitmap2);
     MemDC.SelectObject(pOldBitmap1);
  10.  return true; 
    }

  11. [출처] OnEraseBkgnd() 배경화면 & 속도향상|작성자 리커버리


    OnPaint만 쓰다가 이거쓰니 속이 시원하다 ㅋㅋㅋ

저작자 표시 비영리

TRACKBACK ADDRESS : http://smartiz.co.kr/trackback/75 관련글 쓰기

댓글을 달아 주세요

mfc 배경 이미지 넣기

Programming/C/C++ | 2009/12/20 00:19 | Posted by 엉이엉이
배경 뿌리기~~

void CDlgMain::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CDialog::OnPaint()을(를) 호출하지 마십시오.
CBitmap resBack;
CBitmap *old_resBack;
CDC memDC;
memDC.CreateCompatibleDC(&dc);
resBack.LoadBitmapW(IDB_IMG_MAIN);   //리소스 아이디
old_resBack=memDC.SelectObject(&resBack);
        //이미지 뿌리기
dc.BitBlt(0,0  ,cx,cy, &memDC,0,0,SRCCOPY);
//메모리 해제
memDC.SelectObject(old_resBack);
resBack.DeleteObject();
memDC.DeleteDC();
}
저작자 표시 비영리

TRACKBACK ADDRESS : http://smartiz.co.kr/trackback/73 관련글 쓰기

댓글을 달아 주세요



처음엔 이메세지를 보고 thrdcore.cpp를 찾아가보았지만 당최 어떤걸 손대야할지 모르다가...

쓰레드관련된 먼가 잘못됬거니싶어서.. 내가 만든 쓰레드를 살펴봤다...

헌데 보니... 쓰레드가 아직 시작도 안한상태에서 저메세지가 뜬거였는데...

결론적으로 추적하다보니..... 다이얼로그 문제엿다...

다이얼로그가...

메인 - > 셋팅 - > 주창

근데 주창에서 프로그램 종료를 눌렀더니!!!! 글쎄...!!! 오류가 뿅...

반드시 주창 끄고 셋팅 끄고 메인 꺼야지...... 정상종료...

근데 저번 펌버젼에선 된이유가 멀까 ㅡㅡ
저작자 표시 비영리

TRACKBACK ADDRESS : http://smartiz.co.kr/trackback/69 관련글 쓰기

댓글을 달아 주세요

C++ 파일처리

Programming/C/C++ | 2009/03/03 20:39 | Posted by 엉이엉이

[출처] 14장 파일처리(ofstream, ifstream, fstream, seekp, seekg, fileObject.read, fileObject.write)|작성자 돌돌이


순차 접근 파일 생성

#include<iostream>

#include<fstream>

using std::ofstream; //파일에 쓰기용

......

ofstream outClientFile("clients.dat",ios::out); //파일을 연다, 없으면 생성

int accoount;

char name[30];

double balance;

while(cin>>account>>name>>balance)

    outClientFile<<account<<' '<<name<<' '<<balance<<endl; //이런형식으로 저장됨

 

ios::app 파일 끝에 모든 출력을 추가

ios::ate 출력을 위해 파일을 열고 파일의 끝으로 이동

ios::in 입력용 파일 열기

ios::out 출력용 파일 열기

ios::trunc 파일이 존재한다면, 파일 내용을 모두 삭제(ios::out을 위한 디폴트 동작)

ios::binary 텍스트가 아닌 이진으로 입출력하기 위한 파일열기

 

순차 접근 파일에서데이터 읽기

#include<iostream>

#include<fstream>

using std::ifstream; //파일 읽기용

.....

ifstream inClientFile("clients.dat",ios::in);

int account;

char name[30];

double balance;

while(inClientFile>>account>>name>>balance); //읽어들일꺼 없을때까지 읽어들임

 

 

istream : seekg(seek get) //읽기용 포인터 탐색

ostream : seekp(seek put) //쓰기용 포인터 탐색

ex)

fileObject.seekg(n); //fileObject의 n바이트로 이동(디폴트ios::beg)

fileObject.seekg(n, ios::cur); //fileObject의 현재 위치에서 n바이트 앞으로 이동

fileObject.seekg(n, ios::end); //fileObject의 끝에서 뒤로 n바이트로 이동

fileObject.seek(0, ios::end); //fileObject의 끝으로 이동

 

 

임의 접근 파일  생성

class ClientData{

......

};

......

#include<fstream>

using std::ofstream;

......

ofstream outCredit("credit.dat",ios::binary); //텍스트가 아닌 이진으로

ClientData blankClient; //빈 객체 생성

for(int i=0;i<100;i++) //100개의 비어있는 레코드 기록

    outCreadit.write(reinterpret_cast<const char*>(&blankClient),sizeof   (ClientData));

    //ClientData*를 const char*로 바꾸기 위해 reinterpret_cast 사용

 

임의 접근 파일에 임의로 데이터 쓰기

......

#include<fstream>

using std::ofstream;

......

ofstream outCredit("credit.data",ios::binary);

outCredit.seekp((client.getAccountNumber()-1)*sizeof(ClientData));

//사용자가 지정한 레코드의 파일 위치를 찾음

outCredit.write(reinterpret_cast<const char*>(&client),sizeof(ClientData));

//사용자가 입력한 정보를 파일에 기록 client객체에 쓸정보를 넣어두고

 

임의 접근 파일에서 순차적으로 데이터 읽기

......

#include<fstream>

using std::ifstream;

......

ifstream inCredit("credit.dat",ios::in);

......

inCredit.read(reinterpret_cast<char*>(&client),sizeof(ClientData));

//파일에서 처음 레코드를 읽음

while(inCredit && !inCredit.eof()) //파일의 끝까지 모든 레코드를 읽음

    inCredit.read(reinterpret_cast<char*>(&client),sizeof(ClientData));

     //다음 레코드를 읽음

 

fstream inOutCreadit("credit.dit",ios::in | ios::out); //읽고 쓰기위한 파일 열기

 


저작자 표시 비영리

TRACKBACK ADDRESS : http://smartiz.co.kr/trackback/19 관련글 쓰기

댓글을 달아 주세요