TODAY : / TOTAL :

Devlog/Windows API

[API / MFC] MFC 윈도우 창 크기 변경하기

MainFrame 클래스에서 PreCreateWindow(CREATESTRUCT& cs) 부분을 찾는다. 함수 내부에 cs.cx = 원하는 가로 크기 cs.cy = 원하는 세로 크기 를 입력한 다음, Instance 초기화 해주는 함수 (InitInstance) 내부에서 레지스트리 등록 다음 부분에 CWinAppEx::CleanState(); 를 넣습니다. [레지스트리 키를 등록 바로 다음 줄에 CWinAppEx::CleanState() 를 넣는다. ] MFC가 실행되면 레지스트리에 상태값을 저장하게 되는데, 화면이 갱신되면서 저장된 상태값을 읽어와서 계속 유지하기때문에 메인 프레임에 초기화만 시켜둔 값으론 조정이 안됨. 아예 레지스트리에 데이터를 저장하지 않도록 저장된 정보를 초기화 해주는 함수 (Cl..

[Windows API]대화상자(Dialog)

모듈리스형 대화상자 - 대화상자 작업이 끝나지 않으면 프로시저가 넘어가지 않음. 대화상자 이외의 작업 불가 모듈형 대화상자 - 대화상자를 열어두고 다른 윈도우 창에서 작업 가능 HINSTANCE - 인스턴스 핸들 :: 멀티테스킹 중 많은 윈도우를 구분하기 위한 식별번호 DialogBox(인스턴스 핸들, 리소스 주소, 윈도우 핸들 (윈도우 종속관계확인), AboutDlgProc ); ㅇ해당 다이얼로그에서 일어나는 메시지 처리해주는 함수 :: AboutDlgProc COMMAND 메시지. ( 나 눌렸다...) CALLBACK :: 콜백함수 - O.S가 호출해주는 함수 WM_INITDIALOG :: 다이얼로그 생성시 호출 == WM_CREATE :: 윈도우 생성시 호출 다이얼로그 종료 함수. EndDialog..

[ERROR] _WinMain@16 외부 기호(참조 위치: ___tmainCRTStartup 함수)에서 확인하지 못했습니다.

뭔가 엄청 복잡해보이는 에러코드지만, 실상은 실수로 인한 컴파일 에러. 프로젝트 생성 시에 콘솔프로그램으로 생성한게 아니고, 윈도우 응용프로그램으로 생성 하는 바람에 나오는 에러. 윈도우 응용프로그램에서 콘솔 코드를 짜서 쓰니 오류가 나올수밖에 없는. . . . * 해결 방법 * 프로젝트 속성( Alt + F7 ) - 구성 속성 - 링커 - 시스템 - 하위 시스템 부분 콘솔(/SUBSYSTEM:CONSOLE)로 변경!!

DrawBitmap :: 비트맵 출력용으로 자주 쓰는 함수.

void DrawBitmap(HDC hdc,int x,int y,HBITMAP hBit) { HDC MemDC;// 메모리 DC HBITMAP OldBitmap;// 비트맵 핸들 int bx,by;// 좌표 BITMAP bit;// 비트맵 정보 MemDC=CreateCompatibleDC(hdc); OldBitmap=(HBITMAP)SelectObject(MemDC, hBit); GetObject(hBit,sizeof(BITMAP),&bit); // 메모리에 저장된 비트맵 정보를 가져옴 bx=bit.bmWidth; by=bit.bmHeight; BitBlt(hdc,x,y,bx,by,MemDC,0,0/*복사 시작 좌표*/,SRCCOPY); SelectObject(MemDC,OldBitmap); Delete..

120626_API :: Old Object

void TestResource(BOOL bUnSel,BOOL bDelete,int num) { HDC hdc; HPEN hPen,OldPen; int i; TCHAR str[256]; hdc=GetDC(hWndMain); for (i=0;i ** DC에는 항상 오브젝트가 장착 되어 있는 상태여야 함. case '2': TestResource(FALSE,TRUE,10000); // 기본 오브젝트를 다시 장착시켜주지 않고, 바로 삭제한 경우. break; // => DC에 펜이 장착된 채로 삭제됨. - 다른 작업을 진행 할시 문제가 발생. case '3': TestResource(FALSE,FALSE,10000); // 기본 오브젝트를 다시 장착시켜주지도 않고, 삭제도 하지 않은 경우. break; //=..

120626_API :: GDI

STOCK OBJECT //스톡 브러시 예제 LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; HBRUSH MyBrush,OldBrush; switch (iMessage) { case WM_PAINT: hdc=BeginPaint(hWnd,&ps); MyBrush=(HBRUSH)GetStockObject(GRAY_BRUSH); // 기본적으로 제공되는 스톡오브젝트(브러쉬,펜,폰트) 제공. // 그중에서 브러쉬만 지정해서 가져오므로 HBRUSH 로 캐스팅. OldBrush=(HBRUSH)SelectObject(hdc,MyBrush); // DC 에 도구를 장착 하는 함수...

120621_API :: MOUSE

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; // 좌표를 지속적으로 저장해 두기 위해 static static int x; //-> static short x; static int y; //-> static short y; static BOOL bNowDraw = FALSE; // 마우스 클릭중에만 그리기 작업이 진행되므로 작업여부를 확인 switch (iMessage) { case WM_LBUTTONDOWN: SetCapture(hWnd); // 그리기 작업이 시작되는 시점부터 마우스 이벤트를 받도록해서 윈도우 밖으로 빠져나가도, 마우스의 메시지를 모두 받을수 있음. = 작업영역을 벗어나도..

120620_API :: 도형 그리기(Graphic Draw) , 키 입력(KeyDown)

Draw Graphic LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static bool Check = false; int xPos; int yPos; static int xPos1; static int yPos1; int xPos2; int yPos2; switch (iMessage) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_LBUTTONDOWN : // lParam 에 x,y 좌표 정보가 저장되고 rParam 에는 조합키정보가 들어감. MSDN 참고. /**************** 클릭한 두점을 이..

120620_API :: DC(Device Context) - TextOut , DrawText

TextOut hdc=GetDC(hWnd); SetTextAlign(hdc,TA_CENTER); // TA_CENTER :: 가운데 정렬. TextOut(hdc,250,100,TEXT("PRINT TA_CENTER "),17); // 문자열 좌표는 문자열 중간을 기준으로 함. TextOut(hdc,250,120,TEXT("PRINT TA_CENTER "),17); ReleaseDC(hWnd, hdc); // 가져왔던 DC 반환. ** 핸들은 사용하고 바로 반납을 해야 함. DrawText HDC hdc; PAINTSTRUCT ps; RECT rt={100,100,400,300}; // { Left Pos , Top Pos, Right Pos, Bottm Pos } TCHAR *str=TEXT("님은 갔습..

120619_API :: API 기본형식 (Default Form)

#include // 프로시저 [콜백] 함수 선언 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; LPCTSTR lpszClass=TEXT("First"); // == const char* ptr = "First"; => const char* ptr = TEXT("first"); // 운영체제가 ANSI 형식이면 상관없지만, 유니코드면 오류 발생. 반드시 TEXT 안에 글자를 넣을것. //메인 [콜백] 함수

120619_API :: 변수명명법 / 유니코드

:: 변수 명명법 :: cb~ 바이트 수 (Count of Byte) dw~ 부호 없는 long형 정수 (Double Word) h~ 핸들(Handle) sz~ - lp~ 포인터 (long pointer ) WORD 2byte Word DWORD 4byte Word :: 유니코드 :: C타입 유니코드 (호환)타입 char TCHAR char* LPSTR const char* LPCTSTR :: 유니코드 지원함수 :: C타입 유니코드 (호환) 타입 strlen lstrlen strcpy lstcpy strcat lstrcat strcmp lstrcmp sprintf wsprintf(printf : 화면 / sprintf: 메모리 == 출력 대상의 차이) * 프로젝트 속성 - 문자 집합 - "유니코드 설정"..

120618_API :: 기초 이론

SDK (Software Development Kit) : 소프트웨어 개발 도구 API (Application Programming Interface) : 프로그래밍을 위해 제공되는 C타입의 함수들의 집합. MFC (Microsoft Foundation Class) : 다양한 API를 여러 개의 C++ 클래스로 작성한 클래스의 집합.-클래스 라이브러리 API 장점 - 로우레벨(Low Level) 의 프로그래밍 가능 - 우수한 성능 - 윈도우 동작원리 이해 단점 - 배우기가 어렵고 시간이 많이 소요. - 컴포넌트 프로그래밍 곤란. (컴포넌트 프로그래밍 :: 클래스화 시킨 프로그래밍) MFC 장점 - API 함수 사용가능. - RAD 툴과 같은 비주얼 기능 제공 - 컴포넌트 프로그래밍에 적합 단점 - 배우기..

SEARCH

태그로 찾아보기