ActiveX 컨트롤 추가하는건 기억할테니 패스하고.....


Microsoft FlexGrid Control, version 6.0 (SP6)을 추가하고, 컨트롤변수를 추가하고나서 컴파일을 하면 아래와 같은 Error가 뜬다.

단항 빼기 연산자가 부호 없는 형식에 적용되었습니다. 결과는 역시 unsigned입니다.


뭔말인지 이해도 안가고 어렵다.. 에러뜨는 위치로 가보자.



flexOLEDropEffectScroll = -2147483648   이놈이 Error의 원인이란다.

뭔지 모르겠고, 그냥 고치자.



flexOLEDropEffectScroll = -2147483648LL


이렇게 고치고 컴파일 하면 Error는 뜨지 않는다. 난 여기까지 성공했으니, FlexGrid 컨트롤 하러감. 

하다가 막히면 또 해결후 기록해 놓겠음.




Posted by 둔한늑대
,

Button에 Text만 있으면 뭔가 허전하잖아.


이럴때 아래모습처럼 Button에 그림 넣어보자.

접한 아이콘이지만 넣으니 색다르군.


1. Button의 컨트롤 변수를 선언하자. 변수 형식은 CMFCButton이다.


2. OnPaint()나 OnInitDialog() 따위의 위치에 아래의 코드를 추가하자.


이렇게하면.....

버튼이 이렇게 바뀔것이다.








Posted by 둔한늑대
,

Dialog에 BMP 이미지 올리기


1. Dialog에 Picture Control을 하나 넣고  속성의 Type을 Bitmap으로 바꾼다.



2. "클래스 마법사"를 통해서 Control변수를 하나 등록한다.


3. Bitmap이미지도 추가하고, ID를 부여하자.



4. 이미지를 띄우고 싶은 곳에, 아래의 코드를 추가하면 BMP이미지가 나타난다.

HBITMAP hbit;

hbit = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_INFOICON));

m_MyIcon.SetBitmap(hbit);




끝!

Posted by 둔한늑대
,

SDI로 프로젝트를 생성하면 메뉴바가 있다.



저  Menu Bar를 없애기 위해서는

MainFrm.cpp파일의 PreCreateWindow 함수에 아래의 코드를 추가 하면 된다.



CMenu* pMenu = new CMenu;

pMenu->Attach(cs.hMenu);

pMenu->DestroyMenu();

cs.hMenu = NULL;

delete pMenu;


이렇게 추가 하고 컴파일 하면


이렇게 없어진다.

Posted by 둔한늑대
,

다른 폴더를 프로젝트에 포함시키기


"프로젝트 -> 속성"을 선택한다.



"구성속성->C/C++"을 선택한다.



"추가 포함 디렉토리"에 빨간색 부분을 선택한다.



폴더를 추가해주면 된다. 끝!



Posted by 둔한늑대
,

Bitmap에 이미지 추가했으면, 화면에 넣어줘야지.


1. 도구상자에서 Picture Control을 선택해서 원하는 위치에 넣자.


2. 속성에 Type을 Bitmap로 선택하고, Image에 Bitmap에 추가한 이미지 ID를 선택하자.


3. 이렇게해서 컴파일되면 얼마나 좋을까 싶지만, 이렇게 하면 에러뜬다!!!! 뭐 이따위가.... 췟!


4. 이럴때는 프로젝트 *.rc 파일을 오픈해 보자.

    쭉~ 훑어보면 요론놈이 있을것이다. 아까 Picture Control로 추가한 ID를 찾으면 간단~


5. 요놈에 아래와 같이 추가하자.

    "Static", SS_BITMAP       <= 요놈 추가

    

    이제 컴파일하면 에러없이 그림이 딱! 나타날 것이다.






Posted by 둔한늑대
,

대화상자기반(Dialog) 프로그램을 실행하고 엔터키를 누르면 프로그램이 닫혀버린다.

이것을 방지하는 방법을 적어놓자.

 

1. 함수추가하기 

 

    - 우선 가상함수 하나를 추가해야 한다.

      클래스 마법사를 띄우고, 가상함수의 PreTranslateMessage 함수를 추가한다.

 

2. 함수 확인

    - Source에 PreTranslateMessage 함수가 추가 되었을 것이다.

 

3. Source코드 넣기 

    - PreTranslateMessage 함수에 이 코드를 넣으면 아무리 엔터키를 눌러도 프로그램은 닫히지 않는다.

    - 대충 설명

       if ( Key가 눌러졌다는 메시지를 받으면)

       {

              if (Key가 13번(엔터키)이면)

              {

                      돌아가라~

              }

       }

Posted by 둔한늑대
,

Edit Box에 사용자가 입력한 값 가져오기

 

1. Edit Box?

    - 사용자에게서 텍스트값을 입력받을 수 있는 박스.  

 

2. Edit Box 그리기

    - 오른쪽 두번째 Edit Box클릭. 그릴 곳에 클릭. 끝  

 

3. Edit Box 사용자 입력값 표시 방법

    - 사용자가 입력한 값 그대로 보이게 할거면 그냥 쓰면 되고, 1번처럼 '*'로 보이게 할거면 Properties에서

       StylesPassword를 체크 

 

4. 사용자 입력값 가져오기

    - 우선 Edit Box의 ID를 확인한다. 

 

    - GetDlgItemText을 사용. 값을 읽어와서 CString 변수에 넣어주면 된다. 

 

Tip> strcmp를 사용해서 CString 값 비교하기. 

 

 

 

 

Posted by 둔한늑대
,

Visual C++ 6.0에서 Timer 사용하기

 

1. Timer가 뭐야?

    - 간단히 말해서, 셋팅한 타임마다 실행하는 함수. 예를들어 5초로 셋팅해놓으면 5초마다 Timer함수가 호출됨.

 

2. Timer 이벤트 함수 만들기

    1) ClassWizard로 들어가자.

   

    2) Messages에 WM_TIMER를 선택하고 Add Function을 클릭해.

 

    3) 그럼 OnTimer(UINT nIDEvent)라는 함수가 생길거야.

        이 함수안에 셋팅한 시간마다 할 일을 작성하면 되는거야. 그럼 셋팅은 어떻게 하느냐?

 

3. Timer 셋팅하기   

    - 이 한줄만 있으면 Timer셋팅은 끝.

       첫번째 인자는 타이머번호야. 타이머를 여러개 쓸때 구분하기위한 것이니 겹치지 않게 하도록...

       두번째 인자는 타이머함수를 호출하는 주기야. 시간단위는 1000분의 1초. 예를들어 1000은 1초, 2000은 2초....

       세번째 인자는 그냥 NULL로 두자. 깊이있게 가지마...

    - 이렇게 SetTimer를 선언하면 이때부터 셋팅된 시간마다 함수가 호출될거야. 그럼 멈추는건 어떻게 하느냐?

 

4. Timer 멈추기 

    - KillTimer 한줄이면 Timer는 멈춰. 무섭게도 죽여버리는거지.

 

 

Posted by 둔한늑대
,

Visual C++ 6.0에서 현재시간 가져오는 방법

 

  - Ctrl+C / Ctrl+V 용 소스

     CString LogWriteString;

     CTime cTime = CTime::GetCurrentTime(); 
      LogWriteString.Format("%04d/%02d/%02d %02d:%02d:%02d", cTime.GetYear(), cTime.GetMonth(),  

                                        cTime.GetDay(), cTime.GetHour(), cTime.GetMinute(), cTime.GetSecond());   

 

  - 설명이 필요없는 코드지만, 그래도 적어두자.

      cTime.GetYear()     : 현재시간의 년(年)을 가지고 있음.

      cTime.GetMonth()   : 현재시간의 월(月)을 가지고 있음.

      cTime.GetDay()      : 현재시간의 일(日)을 가지고 있음.

      cTime.GetHour()     : 현재시간의 시(時)를 가지고 있음.

      cTime.GetMinute()  : 현재시간의 분(分)을 가지고 있음.

      cTime.GetSecond() : 현재시간의 초(秒)를 가지고 있음.

 

 

    

 

 

Posted by 둔한늑대
,