이나리 콩콩 사랑의 첫걸음, 이나리 캥캥 사랑의 첫걸음, いなり、こんこん、恋のいろは 38화 후편 애니메이션 2014년 1월 신작
만년꼴등의 이야기
2014년 2월 5일 수요일
2013년 12월 17일 화요일
[칸코레][4컷][번역] 구축함의 운명 -01
艦これ4コマ『~駆逐艦の運命~』① | ゼファー [pixiv] http://www.pixiv.net/member_illust.php?mode=medium&illust_id=37281829
2013년 2월 21일 목요일
2012년 5월 17일 목요일
MFC 강의 -4 컨트롤 다루기 - 버튼
MFC 강의 - 4 컨트롤 다루기 -버튼
일단 처음은 대화상자 기반으로 만듭니다.(컨트롤을 만들고 배치하기 편하기 때문에...)
1.
처음에 생성되는 버튼들을 전부 지웁니다.
도구상자에 있는 버튼을 클릭해서
이렇게 가운데 하나를 배치하고 아래에 세 개를 배치합니다.
배튼 한 개씩 클릭해서 옆에 있는 속성창의 caption과 ID를 수정합니다.
순서는 달라고 되니까 ID와 CAPTION이 일치하도록 해주세요.
제목 바꾸기 - IDC_BUTTON_TITLE
숨기기 - IDC_BUTTON_SHOW
사용하지 못하게 함 - IDC_BUTTON_DISABLE
그 다음 MFC 클래스 마법사를 실행하면 (오른쪽 클릭 후 클래스 마법사항목 선택)
개체 ID와 메시지라는 항목이 나옵니다.
메시지 항목은 왼쪽의 클릭된 객체의 메시지(버튼이 클릭되었을 경우라던가...)입니다.
우리가 만들었던 버튼들 중 IDC_BUTTON_TITLE를 빼고 전부 BN_CLICKED메시지를 클릭하여 처리기를 추가합니다.
이렇게 하면 버튼들이 클릭되었을 때(이벤트) 운영체제에서 해당 버튼이 클릭 되었다는 메시지(BN_CLICKED)를 보내는 처리기(함수)를 설정해 주는 것 입니다.
코드 창을 보면 클래스의 메소드 3개가 추가되어있는 것을 확인할 수 있습니다.
그럼 우선 OnClickedButtonDisable()이란 함수를 수정해 보도록 하겠습니다.
"사용하지 못하게 함"이라 써져 있던 버튼이 클릭되어 있을 때 실행되는 메소드입니다.
void CMFC4Dlg::OnClickedButtonDisable()
{
//현재 버튼이 어떤 상태인지를 기억하기 위한 변수를 선언합니다. 함수가 종료더라도 상태
//은 기억되야 하므로 정적변수로 선언합니다.
//처음 실행될 때의 상태는 사용할 수 있으므로 true로...
static bool bEnable = true;
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
//누르면 상태가 바뀌어야 하므로 !연산자을 한 자기 자신을 대입합니다.
bEnable = !bEnable;
//GetDlgItem()은 해당 ID인 컨트롤인 클래스의 주소를 반환합니다. 클래스의 메
//소드를 이용하여 컨트롤의 상태를 조절할 수 있습니다.
//컨트롤 클래스의 메소드인 EnableWindow()는 bool변수를 인수로 가지며,
//true일 경우 버튼을 사용할 수 있게, false일 경우 버튼을 사용불가로 만듭니
//다.
GetDlgItem(IDC_BUTTON_TAGET)->EnableWindow(bEnable);
if(bEnable)
{
//SetWindowText()메소드는 버튼의 텍스트를 설정하는 메소트입니다.
GetDlgItem(IDC_BUTTON_DISABLE)->SetWindowText(_T("사용하지 못하게
함"));
}
else
{
GetDlgItem(IDC_BUTTON_DISABLE)->SetWindowText(_T("사용하게 함"));
}
}
다음은 "숨기기"라 써져있던 버튼이 클릭되었을 때 실행되는 메소드를 수정해 보겠습니다.
OnClickedButtonShow이란 메소드입니다.
void CMFC4Dlg::OnClickedButtonShow()
{
static bool bShow=true;
bShow = !bShow;
GetDlgItem(IDC_BUTTON_TAGET)->ShowWindow(bShow);
if(bShow)
{
GetDlgItem(IDC_BUTTON_SHOW)->SetWindowText(_T("숨기기"));
}
else
{
GetDlgItem(IDC_BUTTON_SHOW)->SetWindowText(_T("보이기"));
}
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
void CMFC4Dlg::OnClickedButtonTitle()
{
static bool bTitle =true;
bTitle = !bTitle;
if(bTitle)
{
GetDlgItem(IDC_BUTTON_TAGET)->SetWindowTextW(_T("바뀌었다."));
}
else
{
GetDlgItem(IDC_BUTTON_TAGET)->SetWindowTextW(_T("실험체"));
}
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
참고로 버튼(컨트롤)의 상태를 변경하는 메소드가 Window라고 써져있는 이유는
사실 컨트롤들은 일종의 윈도창입니다. 자세한 것은 인터넷에 검색해 보시길...
예제 파일 다운
그럼 우선 OnClickedButtonDisable()이란 함수를 수정해 보도록 하겠습니다.
"사용하지 못하게 함"이라 써져 있던 버튼이 클릭되어 있을 때 실행되는 메소드입니다.
void CMFC4Dlg::OnClickedButtonDisable()
{
//현재 버튼이 어떤 상태인지를 기억하기 위한 변수를 선언합니다. 함수가 종료더라도 상태
//은 기억되야 하므로 정적변수로 선언합니다.
//처음 실행될 때의 상태는 사용할 수 있으므로 true로...
static bool bEnable = true;
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
//누르면 상태가 바뀌어야 하므로 !연산자을 한 자기 자신을 대입합니다.
bEnable = !bEnable;
//GetDlgItem()은 해당 ID인 컨트롤인 클래스의 주소를 반환합니다. 클래스의 메
//소드를 이용하여 컨트롤의 상태를 조절할 수 있습니다.
//컨트롤 클래스의 메소드인 EnableWindow()는 bool변수를 인수로 가지며,
//true일 경우 버튼을 사용할 수 있게, false일 경우 버튼을 사용불가로 만듭니
//다.
GetDlgItem(IDC_BUTTON_TAGET)->EnableWindow(bEnable);
if(bEnable)
{
//SetWindowText()메소드는 버튼의 텍스트를 설정하는 메소트입니다.
GetDlgItem(IDC_BUTTON_DISABLE)->SetWindowText(_T("사용하지 못하게
함"));
}
else
{
GetDlgItem(IDC_BUTTON_DISABLE)->SetWindowText(_T("사용하게 함"));
}
}
다음은 "숨기기"라 써져있던 버튼이 클릭되었을 때 실행되는 메소드를 수정해 보겠습니다.
OnClickedButtonShow이란 메소드입니다.
void CMFC4Dlg::OnClickedButtonShow()
{
static bool bShow=true;
bShow = !bShow;
GetDlgItem(IDC_BUTTON_TAGET)->ShowWindow(bShow);
if(bShow)
{
GetDlgItem(IDC_BUTTON_SHOW)->SetWindowText(_T("숨기기"));
}
else
{
GetDlgItem(IDC_BUTTON_SHOW)->SetWindowText(_T("보이기"));
}
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
내용은 거의 같습니다. 다만 EnableWindow(bEnable)이 아닌 ShowWindow(bShow)인데
인수가 true면 보이는 상태로 false면 보이지 않는 상태로 변경합니다.
이제 제목 바꾸기 라는 버튼이 클릭되었을 때 실행되는 메소드를 수정해 보겠습니다.
OnClickedButtonTitle이란 메소드 입니다.
void CMFC4Dlg::OnClickedButtonTitle()
{
static bool bTitle =true;
bTitle = !bTitle;
if(bTitle)
{
GetDlgItem(IDC_BUTTON_TAGET)->SetWindowTextW(_T("바뀌었다."));
}
else
{
GetDlgItem(IDC_BUTTON_TAGET)->SetWindowTextW(_T("실험체"));
}
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
사실 컨트롤들은 일종의 윈도창입니다. 자세한 것은 인터넷에 검색해 보시길...
예제 파일 다운
wxWidgets튜토리얼03-2 버튼 만들기
1-단순한 창 띄우기
main.h
#include<wx/wx.h>
class MyApp: public wxApp
{
public:
virtual bool OnInit();
};
main.cpp
#include"main.h"
#include"CMainFrame.h"
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
CMainFrame *MainFrame = new CMainFrame(wxT("My First Program"));
MainFrame->Show(true);
return true;
}
CMainFrame.h
#include<wx/wx.h>
class CMainFrame:public wxFrame
{
public:
CMainFrame(const wxString& title);
//기본 프로그램에서 추가된 함수
void OnButton(wxCommandEvent & Event);
};
CMainFrame.cpp
#include"CMainFrame.h"
CMainFrame::CMainFrame(const wxString & title)
: wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(640,480))
{
wxPanel * Panel = new wxPanel(this,wxID_ANY);
wxButton * Button = new wxButton(Panel , wxID_OK , wxT("This is a button") , wxPoint(20,20) );
Connect(wxID_OK , wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler
(CMainFrame::OnButton));
Centre();
}
void CMainFrame::OnButton(wxCommandEvent & WXUNUESED( Event ) )
{
wxMessageBox(wxT("You click a button"),wxT("Info"),wxOK);
}
main.h
#include<wx/wx.h>
class MyApp: public wxApp
{
public:
virtual bool OnInit();
};
main.cpp
#include"main.h"
#include"CMainFrame.h"
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
CMainFrame *MainFrame = new CMainFrame(wxT("My First Program"));
MainFrame->Show(true);
return true;
}
CMainFrame.h
#include<wx/wx.h>
class CMainFrame:public wxFrame
{
public:
CMainFrame(const wxString& title);
//기본 프로그램에서 추가된 함수
void OnButton(wxCommandEvent & Event);
};
CMainFrame.cpp
#include"CMainFrame.h"
CMainFrame::CMainFrame(const wxString & title)
: wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(640,480))
{
wxPanel * Panel = new wxPanel(this,wxID_ANY);
wxButton * Button = new wxButton(Panel , wxID_OK , wxT("This is a button") , wxPoint(20,20) );
Connect(wxID_OK , wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler
(CMainFrame::OnButton));
Centre();
}
void CMainFrame::OnButton(wxCommandEvent & WXUNUESED( Event ) )
{
wxMessageBox(wxT("You click a button"),wxT("Info"),wxOK);
}
wxWidgets튜토리얼 03-첫프로그램
1-단순한 창 띄우기
main.h
#include<wx/wx.h>
class MyApp: public wxApp
{
public:
virtual bool OnInit();
};
main.cpp
#include"main.h"
#include"CMainFrame.h"
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
CMainFrame *MainFrame = new CMainFrame(wxT("My First Program"));
MainFrame->Show(true);
return true;
}
CMainFrame.h
#include<wx/wx.h>
class CMainFrame:public wxFrame
{
public:
CMainFrame(const wxString& title);
};
CMainFrame.cpp
#include"CMainFrame.h"
CMainFrame::CMainFrame(const wxString & title)
: wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(640,480))
{
Centre();
}
CMainFrame::CMainFrame(const wxString & title)
: wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(640,480))
CMainFrame의 생성자가 실행될 때 상속된 wxFrame의 생성자도 같이 실행된다.
wxFrame의 생성자는 여러 인자를 같고 있는 데 창을 생성할 때 필요한 정보들이다.
이외에도 더 많은 인수가 있지만, 디폴드 인수가 있어서 신경을 쓰지 않아도 된다.
Centre()
창을 화면 중앙에 배치해주는 함수.
main.h
#include<wx/wx.h>
class MyApp: public wxApp
{
public:
virtual bool OnInit();
};
main.cpp
#include"main.h"
#include"CMainFrame.h"
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
CMainFrame *MainFrame = new CMainFrame(wxT("My First Program"));
MainFrame->Show(true);
return true;
}
CMainFrame.h
#include<wx/wx.h>
class CMainFrame:public wxFrame
{
public:
CMainFrame(const wxString& title);
};
CMainFrame.cpp
#include"CMainFrame.h"
CMainFrame::CMainFrame(const wxString & title)
: wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(640,480))
{
Centre();
}
----------------------------------------------------설명---------------------------------------------------
MyApp 클래스
콘솔 프로그램이나 WinAPI의 GUI프로그램에서의 main이나 WinMain과 비슷한 역활을 한다.
프로그램이 시작할 때(OnInit메소드) 창을 생성하고(CMainFrame선언) 화면에 뜨게한다(MainFrame의 Show메소드)
IMPLEMENT_APP(MyApp)
MyApp클래스를 프로그램이 시작할 때 생성해 달라는 매크로, 이 매크로가 있어야만 MyApp클래스가 처음으로 생성되고, OnInit을 호출하여 창을 보여준다.
CMainFrame클래스에 대한 설명
CMainFrame은 wxFrame이라는 클래스을 상속받는다.
: wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(640,480))
CMainFrame의 생성자가 실행될 때 상속된 wxFrame의 생성자도 같이 실행된다.
wxFrame의 생성자는 여러 인자를 같고 있는 데 창을 생성할 때 필요한 정보들이다.
이외에도 더 많은 인수가 있지만, 디폴드 인수가 있어서 신경을 쓰지 않아도 된다.
Centre()
창을 화면 중앙에 배치해주는 함수.
2012년 5월 15일 화요일
wxWidgets 튜토리얼 01,02
wxWidgets 튜토리얼 01 소개
wxWidgets는 C++로 응용프로그램을 제작할 때 쓰는 GUI(그래픽 유저 인터페이스)툴킷입니다.
wxWidgets는 오픈소스이며 다중플랫폼 풀킷입니다.
wxWidgets는 윈도우즈,유닉스와 맥같은, 모든 주요 운영체제 플랫폼에서 구동됩니다.
wxWidgets프로젝트는 1992년에 Julian Smart가 시작했습니다.
wxWidgets는 툴킷, 그 이상의 것입니다.
wxWidgets는 파일입출력,데이터베이스,쓰레드,온라인도움 또는 응용프로그램셋팅등을 관리하는 크고 다양한 클래스들를 제공합니다.
wxWidgets는 widget들의 커다란 그룹으로 구성되어 있습니다.
wxWidgets는 오픈소스이며 다중플랫폼 풀킷입니다.
wxWidgets는 윈도우즈,유닉스와 맥같은, 모든 주요 운영체제 플랫폼에서 구동됩니다.
wxWidgets프로젝트는 1992년에 Julian Smart가 시작했습니다.
wxWidgets는 툴킷, 그 이상의 것입니다.
wxWidgets는 파일입출력,데이터베이스,쓰레드,온라인도움 또는 응용프로그램셋팅등을 관리하는 크고 다양한 클래스들를 제공합니다.
wxWidgets는 widget들의 커다란 그룹으로 구성되어 있습니다.
wxWidgets 튜토리얼 02 보조 클래스 (helper classes)
wxString
wxString은 문자열을 표현하는 클래스입니다.
초기화 -
wxString str = wxT("This");
wxString str_2=wxT("is");
wxString str_3=wxT("wxWidget");
wxString str_joint = str+ wxT(" ") + str_2 + wxT(" ") + str_3;
메소드
Printf() : 해당문자열을 대입해준다.
ex)
int x = 50;
wxString OutPut;
OutPut.Printf(wxT(" Variable x is %d "),x);
Len() 문자열의 길이를 반환해줍니다.
wxDataTime
wxDataTime은 시간및 날짜를 제공하는 클래스입니다.
wxFile
파일입출력을 제공하는 클래스입니다.
wxDir
파일과 디텍토리(폴더)를 열겨해주는 클래스입니다.
피드 구독하기:
글 (Atom)