태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.

티스토리 툴바


'전체'에 해당되는 글 286건

  1. 2007/01/30 [펌] [C#] GUI+ 기초 강좌
  2. 2007/01/30 findwindow를 이용한 해당 프로세스 얻기
  3. 2007/01/30 [MFC] 유용한 팁 모음2
  4. 2007/01/30 [VC++] MFC 관련 요점정리
  5. 2007/01/30 [VC++] MFC 헤더와 라이브러리 설명
  6. 2007/01/30 [MFC] dialog기반 반투명 다이알로그 만들기 (1)
  7. 2007/01/30 [VC++] 개발팁 모음 (1)
  8. 2007/01/30 VC++ 숭실대 강의자료
  9. 2007/01/30 Visual C++ 6 완벽가이드 & 세미나(강의)자료 (1)
  10. 2007/01/30 [C] printf 함수의 내부 구조 이해하기 (1)
  11. 2007/01/30 Mobile and Embedded Development
  12. 2007/01/30 PocketC and COM -- File System Control
  13. 2007/01/30 Mobile Web Forms를 사용하여 모바일 웹 응용 프로그램 만들기 (1)
  14. 2007/01/30 PC 키보드 PDA용으로 개조하기
  15. 2007/01/30 TodaysPPC 6100 세팅관련 링크 모음
  16. 2007/01/30 Windows CE의 소개 (1)
  17. 2007/01/30 eMMbedded Visual C++ 에서의 한글. (2)
  18. 2007/01/30 NASM 설치
  19. 2007/01/30 이제 이런것도 나오려나 (2)
  20. 2007/01/29 QT.. 완전 삽질

[펌] [C#] GUI+ 기초 강좌

안녕하세요 이곤섭이라고 하고요

첨 글을 올려 보니까 구리다고 많이 갈구시지 마시고 많이 봐주십시오

GDI+ GDI의 다음 버젼으로 기존의 많은 문제점들을 개선해서

나왔다고 함니다. 뭐가 바꿨는지는 제가 VC VB를 해보지않아서 모르겠고.

그럼 바로 삘이 오는 예제로 들어가 보죠.

 

GDI+ System.Drawing.dll에 들어가 있는데.

존재하는 namespace

System.Drawing,

System.Text,

System.Printing,

System.Internal ,

System.Imaging,

System.Drawing2D,

System.Design 들이 존재 한답니다.

 

전 말이 많은건 싫습니다.

그냥 선그리는 예제로 느낌을 가슴에 박아 보죠.

일단 화면데로 따라오십시오

새 프로젝트에서 응용 프로그램을 선택

프로젝트명을 맘데로지만. GDIplus1으로 했습니다.

 

새로운 프로젝트가 만들어지고 하나의 폼이 생성되면 그폼의 속성창에서 이벤트버튼을 눌르시고

 

Paint 이벤트를 정의하십시오(더블클릭) 이 이벤트는 화면이 그려질 때 발생하는

이벤트입니다.

 

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

}

원래는 위와 같은 함수가 나오는데 우리 여기다 코딩을 할겁니다.

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

Graphics g = e.Graphics ;      // Graphics GDI+에서 그리기와 관련된 것을

                                             // 캡슐화한 클래스 입니다

             Pen pen = new Pen(Color.Blue,2); //펜의 색깔,펜의 굵기

             Point p1 = new Point(50,50);   // 시작점의 x,y좌표

             Point p2 = new Point(200,200);// 끝점의 x,y좌표

             g.DrawLine(pen,p1,p2);       // Graphics의 선을 그리는 함수

             pen.Dispose();               //펜 객체 해지

}

 

선그리는 것이 이외에

DrawArc(.)

DrawEllipse(..)..

여러함수가 있는데

그중에 쫌특이한건 함 더해보죠

 

이번에 할껀 결과부터 보고 하죠

 

이건 보통 포토샆에서 그레디언트를 주면 이런식으로 나오든데..

이렇게 그리는걸 함 보죠..

선그리기와 같은 이벤트에 코딩을 합니다.

하시기 전에

using System.Drawing.Drawing2D; 를 추가해주세요

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

Graphics g = e.Graphics ;

Rectangle rect = new Rectangle(20, 20, 200, 200); //사각형 좌표점객체를 선언과초기와 시킴니다.

                                                                                  // 일단 우리가 그릴것이 사각형이기 때문이죠.

LinearGradientBrush LGBrush = new LinearGradientBrush(rect, Color.Blue,Color.Yellow,LinearGradientMode.BackwardDiagonal);

                                                                                  // 그레디언트 부러쉬를 하나 생성하는데.

                                                                                  // 첫번째 파라미터는 그레디언트 패턴을 사이즈를 정하는 겁니다.

                                                                                  // 두번째는 시작되는 컬러, 세번째는 바뀔컬러

g.FillRectangle(LGBrush, rect);                   // 이제 브러쉬로 그립니다.

LGBrush.Dispose();                                  

}

 

 

글을 마칠까 하다가 이걸로 끝나면 뭐 이런 쓰래기다 다있어..

내가 말야 마우스 클릭할 때 그림을 그리고 싶은데 말야.. 마우스 클릭이벤트엔

System.Windows.Forms.PaintEventArgs e 이놈이 파라미터로 않넘어 오니까

Graphics g를 만들지 못하니서 화면에 그릴수가 있어야지..

하시는 분이들 있을까봐  님들한테 죽기싫어서

다음 예제를 하나더 하죠

시작하기전에 꼭 알아두셔야 되는거..

 

Graphics는 다른클래스들과 같이 new Graphics()이런 생성자가 없습니다.

그럼 어떻게 생성하냐.

Graphics g = Graphics.FromHwnd(윈도우핸들);

이렇게 하면 드릴 대상의 Graphics객체를 생성할수 있습니다.

 

다음 예제는 마우스다운 이벤트가 사용될것이고요

마우스가 다운 됬을 때 선을 그리는 예제를 해보겠습니다.

 

 

더블클릭하면

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

}

요런놈이 나옴니다. 먼제 이해하시고 넘어 갈껀

System.Windows.Forms.MouseEventArgs e ß란 놈인데..

e 라는 놈은 마우스가 다운시 이벤트가 발생하는데 다운당시의 마우스커서의 위치가 이놈에 담겨서 옵니다.

e.X e.Y 란 속성이 바로 이겁니다.

그럼 코딩은 이렇게 됬니다.

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

Graphics g = Graphics.FromHwnd(this.Handle);      // 현재 윈도우의 핸들을 가지고 Graphics폼의 Graphics객체를 생성

             Pen pen = new Pen(Color.Blue,1);      //펜의 색깔,펜의 굵기

             Point p1 = new Point(e.X+10,e.Y+10);   // 시작점의 x,y좌표

             Point p2 = new Point(e.X+50,e.Y+50);   // 끝점의 x,y좌표

             g.DrawLine(pen,p1,p2);               // Graphics의 선을 그리는 함수

             pen.Dispose();       

}

이제 됬습니까..

좋은 하루 되시고요

여기까지 이곤섭 이었습니다.

Trackback 0 Comment 0

findwindow를 이용한 해당 프로세스 얻기

ReadProcessMemory 가 목표인거죠?



HWND hWnd = ::FindWindow(NULL, "윈도우캡션");


// 윈도우를 찾습니다.

// hWnd 는 윈도우의 핸들입니다.

// 해당윈도우를 찾지 못했을경우 NULL을 반환합니다.

// if(hWnd == NULL) return -1;


DWORD dwProcessId;

::GetWindowThreadProcessId(hWnd, &dwProcessId);


// 프로세스 핸들을 얻습니다.

// GetWindowThreadProcessId 함수는 첫번째 인자로 윈도우의 핸들을 받고

// 두번째 인자로 DWORD 형 변수의 번지를 받습니다.

// 이 함수가 호출되고 나면 dwProcessId 변수안에 프로세스 ID 가 저장됩니다.

// 함수가 실패하면 dwProcessId 의 값은 NULL 입니다.

// 이 함수는 그 프로세스의 스레드 ID 를 반환합니다.

// 스레드 ID 를 받으려면

// DWORD dwThreadId = ::GetWindowTh......


HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);


// 프로세스를 오픈합니다.

// PROCESS_ALL_ACCESS 플래그를 주었기 때문에 이 프로세스에 대해 모든 접근이 허용됩니다.

// 세번째 인자로 프로세스의 ID 를 넘겨줍니다.

// OpenProcess함수는 프로세스의 핸들을 반환합니다 (윈도우의 핸들과는 다릅니다..)

// hProcess 값이 NULL 이면 실패입니다...

 

// 모든 준비가 끝났습니다. 이젠 ReadProcessMemory 함수만 호출하면 되지요..


DWORD dwValue, dwBytes;

::ReadProcessMemory(hProcess, (LPVOID)0x400000, &dwValue, 4, &dwBytes);


// 첫번째 인자로 프로세스의 핸들을 넘겨줍니다.

// 이때 프로세스가 메모리를 읽기에 충분한 권한이 있어야 합니다.

// 두번째 인자로 읽을 메모리의 주소를 넘겨줍니다.

// 세번째 인자로 값을 저장할 변수의 번지를 넘깁니다.

// 메모리의 값을 성공적으로 읽었다면 이 변수에 그 값이 기록됩니다.

// 네번째 인자는 메모리에서 몇 바이트를 읽어올 건지 기록합니다.

// DWORD 는 unsigned int. 4 바이트입니다.

// 다섯번째 인자로 변수의 번지를 넘기고

// 이 변수에는 메모리상에서 실제 몇바이트를 읽어왔는지 기록하게됩니다.



// 메모리를 값을 수정하려면..

// 값을 수정한 후 WriteProcessMemory 함수를 똑같이 호출해주면 됩니다.


dwValue = 10000;

::WriteProcessMemory(hProcess, (LPVOID)0x400000, &dwValue, 4, &dwBytes);


 

 

// 모든 작업이 끝났으면 프로세스를 닫습니다.

// 안닫으면 컴이 느려지지요... -_-..

::CloseHandle(hProcess);

Trackback 0 Comment 0

[MFC] 유용한 팁 모음2

Base

트레이 아이콘(Tray Icon) 사라지는 버그 막기

매핑 모드 사용하여 확대 축소 구현하기

인터넷 익스플로어 제어와 관련된 Knowledge Base

선택 영역에 줄번호 붙여주는 매크로

Web으로부터 컨트롤을 다운받아서 실행하는 VC예제

현재 작업중인 프로젝트의 폴더를 열어주는 매크로

로컬 폴더에 있는 DLL 사용하게 만들기

Dialog Base 프로그램을 Tray에 등록할 때 문제점

FlashWindow를 사용하여 내 프로그램의 존재를 알리자

자신의 IP 얻기

스플리터 윈도우 위치 고정하기

Dialog Box의 Control에 Tooltip넣기

타이틀 바가 없는 프로그램에 아이콘을 나오게하는 법

슈퍼 클래싱과 서브 클래싱

마지막 에러코드 Watch창으로 나타내기

네트웍 어드레스 변환 방법

CWinApp에서 명렁어 인자 분석 방법

ToolBar에서 256이상의 Color사용

특정 확장자명으로 프로그램 실행시키기

Volatile

어셈블된 코드 보기

ATOM을 이용한 프로세스간 데이터 공유

WM_COPYDATA 를 사용한 메세지 전송

TrackMouseEvent 구현하기

필요없는 warning 은 보기 시러~~

파일의 특정 부분의 warning level을 지정하기

CFileDialog에서 초기 경로명 지정하기

256색 이상의 Bitmap ImageList 만들기

List Control 에 다른 Control 넣기

초 간단!! 시스템 이미지 리스트 얻어오기

CStringArray 정렬하기

MFC Dialog Box에서 자신의 Class Name설정

사용자 정의 Common Dialog 만들기

사용자 정의 Common Dialog에서 Common Dialog자원의 위치 설정

자기 프로세스의 복사본을 만드는 방법

일반적인 Child Window 만들기

CSocket 과 CAsyncSocket에서 Thread문제

SearchPath()의 리턴값 알아보기

화면 캡쳐 소스

Dll에 breakpoint 설치하기

윈앰프처럼 TaskBar와 SystemTray 마음대로 주무루기

Winamp 처럼 벽에 붙이기

Title바 마음대로 하고 싶나요?

Toolbar안에 다른 Control넣기

문자열 검색 API

자신만의 윈도 class name을 가지자

Coverage가 90% 이하면 안돼요~~~

_ASSERTE 가 GetLastError()를 망친다

Explorer처럼 툴바에 Text 넣기

MDI(Multiple Document Interface) application에서 초기 뷰 없애기

Dll 찾는 순서

DLL 파일의 이름 알아보기

메인 프래임 윈도우에 얼굴을 부여하기

Break Pointer 는 INT 3 으로 통한다!!

두 변수의 값을 바꾸는 환상의 매크로

안전하게 free, delete하는 방법

윈도에 포커스가 가지 못하게 하기

TreeCtrl 에서 Context Menu 사용하기 -번역은 나중에

랭귀지 팩을 만들자!!

Visual C++ 이 만드는 파일의 의미

툴바에 Dropdown버튼 넣기

VC++의 Quick Macro

VC++에서도 Regular Expression으로 검색할 수 있다

Dll에서 제공되는 함수들 보기

공유 섹션 만들기

화면 보호기 제어하기

바탕화면, 즐겨찾기, 내 문서 등의 패스얻기

CAsyncSocket 에서 도메인 주소 바로 사용하기

bool과 BOOL의 차이

TRACE를 잠깐 못쓰게 만드려면

DirectX에서 리턴값 확인은 FAILED매크로를 사용하도록 하자

DirectDraw에서 Control Box 사용하기

CFrameWnd가 아닌 윈도우에서 툴바의 툴팁 출력하기

Dialog Bar 만들기

Toolbar에 버튼 추가하기

화면 정보 얻어오기

절전 기능 및 화면 보호기 제어하기

절전 모드로 진입을 거부하는 방법

Console 프로젝트와 Windows 프로젝트 바꾸기

Ansi 문자열과 Unicode 문자열 바꾸기

문자열을 _T() 형으로 바꿔주는 매크로

Resource ID 이름 짓는 방법

Little or Big Endian

Alt+F4 키로 종료되는거 막는 방법

프로그램내에서 한/영 전환하기

pair 라는 것의 용도는?

WORD 특정 비트값 알아내기

일반적인 윈도우 소멸 순서

메모리 DC 사용하기

DirectDraw에서 256색 Bitmap 간편히 사용하기

Source Safe과 Project를 분리시키기

실수(소수점) 나누셈 연산을 정수 연산으로 하기

프로그램안에서 Registry 이름 지정하기

특정 Registry Key안의 Value값 가져오기

Registry에 File Icon등록해주기

'객체 삽입' 상자 없이 객체 삽입하기

윈도우즈 강제로 종료하기

재밌는(?) 시스템 강제로 다운시키기

Document없는 CRichEditView에 Ole객체 삽입 막기

비교 연산자를 위한 예약어들

Dialog Based 프로그램에서 가속키 기능 넣기

투명한 윈도우 만들기 (w2k만)

현재 실행되고 있는 자신의 경로와 파일명 가져오기

프로그램 한번만 실행하기

MFC 모듈의 상태 데이터 관리하기

Dialog Based 프로그램에서 '최근 사용한 파일 목록' 메뉴 넣기

Override를 통해 잃어버리는 것들

특정 파일의 Property 창 띄우기

Serialize를 이용한 객체 복사하기 (Copy constructor)

CWinThread로 UI Thread 만들기

Socket에서 완벽한 Receive처리

[API/SHELL] 디스크 복사 및 포맷...

[API/SHELL] 프로그램 추가 삭제 / 원도 구성 요소 추가 다이얼로그 띄우기

원하는 확장자파일만 지우기

CEdit control의 font 바꾸기

연결 프로그램 찾기 다이얼로그 띄우기

Visual Basicⓡ처럼 property 다루기

Func()

[ATL] 새로운 인터페이스 추가하기

생성자 두 번 호출되는 버그

LastError를 보여주는 Debugging Trace Macro

할당된 블록의 크기 구하기

[Win32/C++]템플릿을 이용한 동기화 클래스 만들기

Visual Studio Macro

auto_ptr

explicit

Unicode/MBCS(DBCS)/ANSI/TCHAR

String Conversion Macro

upper_bound/lower_bound

stringstream

CD Rom 드라이브 구하기

WebBrowser 로 부터 키보드 메세지 가로채기

CDROM Insertion / Removal 감지하기

입력 컨트롤에서 허용하는 문자를 제한하려면

History ComboBox

HBITMAP을 BMP 파일로 만들어 주는 함수

FTP 로 파일 전송하기

ATL Browser - SmileBrowser v0.1

레지스터 설명

어셈블러 쉽게 쓴 강좌

내가 만든 타입 자동으로 확장하기

watch 창에서 심볼의 출력 타입 정해주기

Thread 생성시 어떤 API를 사용해야 하는가?

LAN에 연결된 모든 스테이션에 broadcasting하기

ActiveX를 무조건 다운로드 하게 하기

ATL Debugging Support #1

웹페이지가 이동될때 진입하는 함수

GetMessage() PeekMessage()

based addressing

다이얼로그 리소스의 실제 크기 얻기

문자열에서 드라이브,디렉토리,파일이름, 확장자 정보 가져오기

Bitmap 이미지 resizing 하기

프로파일링(Profiling) 기능 활용하기

template으로 구조체 초기화 하기

사용하지 않는 인자에 대한 warning 없애기

포인터 변수를 검증하기위한 매크로

#define 보다는 const와 inline을 사용한다.

malloc과 free 보다는 new와 delete를 사용한다.

메모리가 모자랄 경우에 대비한다.

operator new 와 operator delete 작성시 관례를 따른다.

캐럿의 위치 알기

URL을 파싱하자

Lite control에서 이벤트가 가능하게 하기

소스로 바로가는 TRACE

Watch 창에서 함수 실행하기

파일로 트레이스 하도록 바꾸기 (3줄이면 됨)

MFC에서 NULL을 비교하는 것은 의미가 없다.

Floating-Point Error가 Exception을 발생하도록 만들기

First-chance exception 에서 Stop 하도록 만들기

exception 클래스 확장하기

INF file Architecture

GUID 생성하기

VC의 IDE를 편하게 쓰는 도구[1]

VC의 IDE를 편하게 쓰는 도구[2]

new의 정상 형식을 감추지 않는다.

operator new를 작성한다면 operator delete도 작성한다

동적으로 할당되는 메모리를 갖는 클래스를 위해서는 복사 생성자와 치환 연산자를 선언하라.

생성자에서 치환보다는 초기화를 사용한다.

클래스에 선언된 순서에 따라 멤버 초기화 리스트에 멤버들을 나열한다

Edit 컨트롤에서 Tab 키 넣기

[VB] QueryInterface하는 방법

[ActiveX] VBScript에서는 QueryInterface가 않된다.

[ActiveX] VBScript에 User-Define Interface 노출하기

ATL 디버깅 정보 출력하기

[ActiveX] 키보드 메세지 받기

OLE Activation 될때 컨테이너의 툴바 살리기

인터넷 Short-Cut 만들기

StrouStrup의 좋은 기사 3개 Link

WTL 3.1

WTL 도움말

CreateFile 이용시 주의사항

DLL 로드 시간 성능 최적화 하기

GUID를 문자열로... 문자열을 GUID로

트레이 메뉴가 사라지지 않을때

대용량의 파일 순식간에 읽기

Error LNK2001: '_WinMain@16': Unresolved External Symbol

Hatch 가 밀려나오는 브러시 수정하기

Brush 의 패턴을 사용하여 스킨 구현하기

ATL Object가 한글 폴더 있으면 등록 안되는 버그

ActiveX 컨트롤에서 사용할 디지털ID 발급 받는 방법

[VB] 패키지 마법사 최적화 하기

MFC 라이브러리에 동적으로 링크된 정규 DLL

원격 디버깅 하기

왼쪽에 이미지 들어가는 메뉴추가하기

2000 에서 나오는 파일 저장 다이얼로그 사용하기

콤보박스나 에디터 상자에서 입력 자동 완성 기능

폴더내의 dll 한 번에 등록하기

폴더 선택 다이얼로그 사용하기

윈도우즈 작업 관리자 기능 살펴보기

Delayload 적용시키기 (매우 쉬움)

Dll Rebase 시키기 (역시 쉬움)

Win32 버퍼 오버플로어 관련 문서

local folder에 있는 dll 사용하게 만들기

ActiveX Control을 View에서 사용하기

Web으로부터 컨트롤을 다운받아서 실행하는 VC예제

인터넷 익스플로어 제어와 관련된 Knowledge Base

w2k에서 Process Tree 보기

줄번호 매겨주는 매크로 입니다.

DbgChooser from Bugslayer

특정 컨트롤에서 한글을 입력받고 싶지 않을때

홈페이지 소스 가져오기

OPCODE 설명서

ASCII 코드 설명서

inline assembly에서는 C++맴버변수로 접근 불가

Unicode Conversions in Visual C++

실행 파일(바이너리)에서 파일 이름 가져오기

디버깅 관련 KB(Knowledge Base) 모음집

디버깅 관련 책 정보

Coding Techniques and Programming Practices

The Basics of Programming Model Design

[ActiveX] automation을 편하게 쓰는팁

IME 입력기 예제입니다.

특정 DLL 을 사용하는 프로그램 알아보기

[ATL] 나한테 연결했나?

인터넷에 연결되어 있는지 알아보기

파일 사이즈 별로 단위를 나누어서 출력하기

아스키 코드의 재미난 연산

이런 코드는 피하고 싶다

윈도우가 리사이즈될때 다시 그려야 하는 영역 얻기

Visual C++ 이 사용하는 확장자 살펴보기

 

 

Advanced

함수의 호출 규약에 대해서 알아봅시다

WaitCursor가 만들어지지 않는 경우

Capture가 되지 않는 경우

Queue를 함께 씁시다

SendMessage는 어떻게 작동하는가?

친절한 메세지 ( benign message )

복잡한 ActiveX Control 라이센스 간단히 얻기

LHCTRACE( light-weight!!!)

LHCTRACE

Advanced Breakpoint

DECLARE_DYNCREATE()와 IMPLEMENT_DYNCREATE()

TLS(Thread Local Storage)

CreateWindow()

Top 윈도우들의 핸들을 알수 없을까?

호출 관행

C++에서 Internal Linkage를 갖는 몇 가지

배경이 투명한 Bitmap 그리기

VC++에서 RTTI 사용하기

OLE를 이용한 Drag and Drop

콜백함수의 구현

프로세스의 초기화와 종료 기다리기

향상된 RichEdit control (RICHEDIT20A)

PowerPoint 파일을 Image 파일로 변환하기

실행파일 또는 DLL에서 파일버전 정보를 가져오는 방법

CEdit - 리소스에서 파일을 여는 방법

IPicture를 이용한 JPG, GIF, BMP, WMF, EMF, ICO 보기

Child윈도를 Popup시키는 방법

Set Next Statement 를 통해서 디버깅 하기

스레드에 이름 지어주기

툴바의 툴팁을 내가 원하는데로

정렬과 탐색 루틴이 필요하신 분

데이터 암호화 방법

Dialog Base에 UpdateCommandUI Handler를 달자.

Popup Menu에 UpdateCommandUI handler동작 시키기

함수대신 function object를 대입하자

koenig lookup

Win32 multithreading Performance

실행중인 자신의 파일의 fullpath를 정확히 알아내기

ATL에서 error LNK2001: unresolved external symbol _main 해결하기

Winsock 2.0 에 관련된 몇가지 것들

Winsock 2.0의 단점들

none MFC에서 memory leak난 부분 찾기

ATL - warning MIDL2039 의 버그

apartment간의 marshaling

apartment 모델에 관한 이야기

#File Error#

DLL 에 대해서 알아보자.

Simulating Dynamic Binding

HANDLE 의 정체!!

특정 URL의 파일을 다운로드하기

dll을 모든 프로세스에 로드시키기

특정 Port 가 사용중인지 알아보는 방법

스택에 동적으로 메모리 할당하기

ActiveX 컨트롤로부터 URL 알아내기

프로그램의 수행 속도를 개선하는 방법

힙: 장점과 단점

socket을 옳바르게 닫기

release 에서 _set_new_handler() 가 동작하지 않는 경우

Windows Structured Exceptions을 C++ Exceptions로 바꾸기

if문을 사용한 경우와 Exception handling을 사용한 경우의 비교

dispinterface의 특성

치명적인 오류가 발생하였을 때 프로그래머에게 알리기

API hooking ( Dll 바꿔치우기~)

메모리 패킹

VC++ 에서 OCX 내의 함수 직접 호출하기

ActiveX 컨트롤 사용하지 않고 프로그램 실행하기

ActiveX 컨트롤 설치할때 inf 파일에서 dll 순서 중요

C 에서 최적화된 프로그램 만들기

regsvr32.exe 를 사용하여 ActiveX 컨트롤 등록시 주의점

PHP나 ASP 코드 직접 호출하기

Trackback 0 Comment 0

[VC++] MFC 관련 요점정리

MFC 요점정리

 

1. DC얻기

  CClientDC dc(this);


2. Client 영역 구하기

  GetClientRect(&rect);

  WM_SIZE 메시지발생후 cx,cy 사용


3. 문자열 사각형안에 그리기

  pDC->DrawText(문자열,사각형,Style);

  Style: DT_BOTTOM - 문자열을 사각형 맨아래줄에배열 반드시 DT_SINGLELINE과 함께사용

        DT_CENTER - 문자열을 가로중앙에 배치

        DT_VCENTER - 문자열을 세로중앙에 배치

        DT_LEFT,RIGHT - 문자열을 좌,우로 배치

        DT_SINGLELINE - 문자열을 한줄로만 쓴다


4. Brush 사용법

  CBrush brushname(RGB(red,green,blue)); //브러쉬 생성

  CBrush *oldBrush=pDC->SelectObject(&brushname); //이전Brush 저장, 새로운 Brush 선택

  pDC->SelectObject(oldBrush); //원래의 브러쉬로 반환


5. Pen사용법

  CPen pen(Pen Style,RGB(red,green,blue)); //브러쉬생성

//Style: PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_GEOMETRIC,PS_COSMETRIC - 펜종류

        PS_ENDCAP_ROUND,PS_ENDCAP_SQUARE - 펜끝을 둥글게,각지게 설정

  CPen *oldPen=pDC->SelectObject(&pen); //이전Pen저장, 새로운 Pen설정

  pDC->SelectObject(oldPen); //펜반환


6. 화면다시그리기

  View Class에서 - Invalidate(TRUE) : 화면을 지우고다시그린다

                    Invalidate(FALSE) : 화면을 덮어씌운다

  UpdateAllViews(NULL);  // Doc Class에서 View 의 OnDraw 호출

  RedrawWindow();


7. 메시지,함수 수동으로 넣기 (EX)버튼클릭함수넣기

  헤더파일의 AFX_MSG_MAP 부분에 함수를 정의

  EX) afx_msg void funcName();

  .cpp파일의 AFX_MSG 부분에 메시지를 추가한다

  EX) ON_BN_CLICKED(ID_NAME,funcName)...

  ID 등록:  View 메뉴의 Resource Symbol 에 들어가서 메뉴 ID 를 등록해준다..

  .cpp파일의 맨아래에서 함수를 정의한다

  EX) void CClass::funcName() { ... }


8. 마우스커서 바꾸기

  리소스탭에서 커서를 그리고 저장한뒤 ID값은 준다음

  SetCapture(); //커서의입력을 클라이언트영역을 벗어나더라도 받아낸다

  SetCursor(AfxGetApp()->LoadCursor(nIDResource));

  //APP클래스의 LoadCursor View의 SetCursor 사용

  ReleaseCapture(); //SetCursor()상태를 해제한다


9. 색상표 사용하기

  CColorDialog dlg;

  if(dlg.DoModal()==IDOK) //Dialog 를 띄운후 OK버튼을누르면 실행할부분

  MemberFunc: GetColor() //선택된 색상을 받아온다 return 형은 COLORREF 형


10. 팝업메뉴 만들기

  CMenu menu; //메뉴 객체생성

  CMenu *pmenu; //메뉴 포인터생성

  menu.LoadMenu(IDR_MAINFRAME); //메뉴를 불러온다

  pmenu=menu.GetSubMenu(3); //메뉴의 3번째 메뉴를 가져온다

  menu.CheckMenuItem(ID_MENU,m_kind==ID_MENU ? MF_CHECKED : MF_UNCHECKED);

  //메뉴 체크하기 (메뉴 ID, ID 체크조건)

  pmenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this)  //(TMP_Style,x좌표,y좌표,hWnd) 메뉴 띄우기


  *주의사항*

    OnContextMenu(CWnd* pWnd, CPoint point)  //여기서 point 는 스크린 기준이고,

    OnRButtonDown(UINT nFlags, CPoint point)  //여기서 point 는 클라이언트 기준이다!


11. 클라이언트 포인터를 스크린 포인터로 변경

  ClientToScreen(&point);


12. 그림판기능

         if(m_flag==FALSE)  return;   //m_falg=그리기 기능 참,거짓설정  그리기 아니면 빠져나간다

        CClientDC dc(this);

        CPen myPen(PS_SOLID,m_width,m_color);

        CPen *pOldPen=dc.SelectObject(&myPen);

        switch(m_shape)

        {

        case ID_FREELINE: //자유선그리기

                dc.MoveTo(m_oldpt.x,m_oldpt.y); //지난포인터부터

                dc.LineTo(point.x,point.y); //새포인터까지 그린다

                break;

        case ID_RECT: //사각형그리기

                dc.SetROP2(R2_NOTXORPEN);

                dc.Rectangle(m_spt.x,m_spt.y,m_oldpt.x,m_oldpt.y);  //지워지는 효과

                dc.Rectangle(m_spt.x,m_spt.y,point.x,point.y); //그려지는 효과

                break;

        case ID_ELLIPSE: //원그리기

                dc.SetROP2(R2_NOTXORPEN);

                dc.Ellipse(m_spt.x,m_spt.y,m_oldpt.x,m_oldpt.y);  //지워지는 효과

                dc.Ellipse(m_spt.x,m_spt.y,point.x,point.y); //그려지는 효과

                break;

        case ID_LINE: //선그리기

                dc.SetROP2(R2_NOTXORPEN);

                dc.MoveTo(m_spt.x,m_spt.y); //시작점부터

                dc.LineTo(m_oldpt.x,m_oldpt.y); //지난점까지 그은선을 지운다

                dc.MoveTo(m_spt.x,m_spt.y); //시작점부터

                dc.LineTo(point.x,point.y); //새로운점까지 그린다

                break;

        }

        m_oldpt=point;  //바로이전값 보관

        dc.SelectObject(pOldPen); //펜 반환

13. MessageBox

  AfxMessageBox() -> 전역함수를 이용하영 메세지 박스를 출력한다.   //어디서든지 사용할수 잇다

  int CWnd::MessageBox("메세지","창제목","아이콘|버튼(상수값)");   //View클래스에서 사용한다

  아이콘 상수값  MB_ICONERROR, MB_ICONWARNING, MB_ICONQUESTION,MB_ICONINFOMATION

                MB_SYSTEMMODAL //시스템모달 대화창 닫기전에 다른작업 못함

                MB_APPLMODAL //응용모달

  버튼 상수값    MB_OK, MB_OKCANCEL, MB_YESNO


14. OS 컨트롤

        ExitWindowEx(EWX_SHUTDOWN,NULL); //Shut Down

        ExitWindowsEx(EWX_FORCE,0); //강제종료

        ExitWindowsEx(EWX_LOGOFF,0); //로그오프

        ExitWindowsEx(EWX_POWEROFF,0); //Shut Down -> Turn Off

        ExitWindowsEx(EWX_REBOOT); //Shut Down -> Reboot


15. DialogBox 메시지 교환

        UpdateData(FALSE); // 컨트롤에 멤버변수의 내용을 표시해준다

        UpdateData(TRUE);  // 컨트롤 내용을 다이얼로그 클래스의 멤버변수로 저장


16. 자료변환

        atoi,itoa - int <=> ASCII(char) 변환

        str.Format(" %d %d",x,y); // int형을 문자열로 변환

        atol,ltoa - ASCII <=> long 변환

        atof - ACSII => float 변환

        fcvt,gcvt  - 실수를 text로 변환

        LPtoDP, DPtoLP - 장치좌표 <=> 논리좌표 변환


17. CEdit Class 사용하기

  CEdit e_str.SetSel(int StartChae, int EndChar); //처음문자부터 마지막까지 블록 지정

  CEdit e_str.GetSel(int SChar,int EChar); //블럭 지정한 처음문자와 마지막문자 받기

  CString str=m_str.Mid(SChar,EChar-SChar); //블럭지정한 부분을 가져온다

18. 컨트롤과 자료교환

  SetDlgItemText(컨트롤 ID,문자열) //컨트롤에 문자열을 넣는다

  GetDlgItemText(컨트롤 ID,문자열) //컨트롤의 내용을 문자열에 넣는다

  GetDlgItem(컨트롤 ID); //컨트롤의 주소를 가져온다

19. 상태바조작

  CMainFrame 생성자 위에

  static UINT indicators[] = //이안에 새로운 ID를 넣고 그 ID의 갱신핸들러를 만든다음 코딩

  pCmdUI->SetText("표시할내용“);


20. 수동으로 Bitmap 컨트롤 사용하기

  CStatic bitmap; //bitmap 컨트롤변수

  bitmap.SetBitmap(CBitmap m_bitmap); //컨트롤에 비트맵지정

  GetDlgItem(IDC_BITMAP)->ShowWindow(SW_SHOW,HIDE);  // 그림을 보이거나 숨긴다.

 

21. 응용프로그램 실행하기

  WinExec("프로그램경로“,SW_SHOW,HIDE); //응용프로그램실행,경로는 \\로 구분한다


22. Bitmap 사용하기

  CBitmap bitmap.LoadBitmap(IDC_BITMAP); //비트맵객체에 비트맵지정

  CDC memDC; //그림그릴 메모리DC생성

  MemDC.CreateCompatibleDC(pDC); //화면 DC와 메모리 DC 호환 생성

  CBitmap *pOldBitmap=MemDC.SelectObject(&m_bitmap); //메모리에 그림을그린다.

  pDC->BitBlt(int x, int y,int Width, int Height, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);

//BitBlt(그림x좌표,그림y좌표,그림넓이,그림높이,그림그려진메모리DC,그림시작x좌표,그림시작y좌표,스타일);

  pDC->StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop )

//StretchBlt(그림x좌표,그림y좌표,그림넓이,그림높이,그림그려진메모리DC,그림x좌표,그림y좌표,메모리그림넓이,메모리그림높이,스타일);

MemDC.SelectObject(pOldBitmap); // 메모리DC반환


23. Font 바꾸기

  CFontDialog dlg; //폰트다이얼로그 생성

  LOGFONT m_logFont; //폰트받을변수선언

  if(dlg.DoModal()==IDOK) //폰트다이얼로그표시

  {dlg.GetCurrentFont(&m_logFont)} //선택된 폰트받기

  OnDraw()

   CFont newFont,*pOldFont; //폰트 객체 만들기

   newFont.CreateFontIndirect(&m_logFont); //폰트 생성

   pOldFont=(CFont *)pDC->SelectObject(&newFont); //폰트 선택

   OnCreate()

   CClientDC dc(this); //DC 생성

   CFont *pFont=dc.GetCurrentFont();       //클라이언트 영역의 폰트를

   pFont->GetLogFont(&m_logFont); //로그폰트 멤버값으로 지정


24. Font 만들기

         LOGFONT logfont; //폰트를 만든다

        logfont.lfHeight=50;               //문자열 높이

        logfont.lfWidth=0;                 //너비

        logfont.lfEscapement=0;            //문자열기울기

        logfont.lfOrientation=0;             //문자개별각도

        logfont.lfWeight=FW_NORMAL;     //굵기

        logfont.lfItalic=TRUE;             //이탤릭

        logfont.lfUnderline=TRUE;  //밑줄

        logfont.lfStrikeOut=FALSE; //취소선

        logfont.lfCharSet=HANGUL_CHARSET; //필수

        logfont.lfOutPrecision=OUT_DEFAULT_PRECIS;              

        logfont.lfClipPrecision=CLIP_DEFAULT_PRECIS;      //가변폭폰트 고정폭폰트

        logfont.lfPitchAndFamily=DEFAULT_PITCH|FF_SWISS; //글꼴이름

        strcpy(logfont.lfFaceName,"궁서체");

        CClientDC dc(this);

        CFont newFont; //폰트객체생성

        newFont.CreateFontIndirect(&logfont); //폰트지정

        CFont *pOldFont=dc.SelectObject(&newFont); //폰트선택

        dc.TextOut(100,100,m_text);

        dc.SelectObject(pOldFont); //폰트반환


25. Font 만들기 2

  CFont newFont;

  newFont.CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );

 CFont *pOldFont=dc.SelectObject(&newFont);


26. ComboBox 사용하기

  CComboBox combo; //콤보박스 선언

  combo.Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

  //Style - WS_CHILD|WS_VISIBLE

  int n=combo.GetCurSel(); //선택된 아이템의 index를 가져온다

  combo.AddString("문자열“); //문자열을 추가한다

  combo.GetLBText(n,str); //n번째 아이템을 str에 저장


27. Spin 사용하기

  Spin은 바로앞의 Tab Order에 따라 붙는다

  m_spinr.SetRange(1900,3000); //스핀 범위 지정

  m_spinr.SetPos(m_nYear); //스핀 위치 지정


28. CTime사용하기

  CTime time; //시간객체생성

  time=CTime::GetCurrentTime(); //현재시간을 저장

  time.GetYear(),time.GetMonth();,time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond()


29. CListBox 메소드

  AddString("문자열");             //리스트에 문자열 추가

  DeleteString(index);             //리스트에서 항목 삭제

  GetCount()                     //전체 항목 갯수를 얻는다.

  GetSelcount()                   //선택된 항목 갯수 리턴

  GetSel()                       //선택된 것인지 아닌지를 리턴한다 -> 양수 = TRUE , 음수 => FALSE

  GetText(int index,문자열변수)     //index 번째 문자열을 문자열 변수에 넣는다

  FindStringExact(문자열)          //지정 문자열의 index 값 리턴 -> 없으면 리턴값 LB_ERR 반환

  FindString("a")                 //"a"로 시작하는 항목을 모두 찾는다.

  ResetCountent()                 //모든 내용을 지운다.


30. 파일입출력

 프로젝트생성시 Step4 => Advanced => 저장파일확장자지정

 .h 파일에       DECLARE_SERIAL(CSawon) //이 클래스를 저장,로드가능한 클래스로 쓰겟다는 선언

 .cpp 파일에     IMPLEMENT_SERIAL(CSawon,CObject,1) //이거를 해야 저장이 가능하다

void CFileioDoc::Serialize(CArchive& ar)

        if (ar.IsStoring())  //저장하기

        {ar<<m_shape; //저장할걸 쓴다, 순서대로들어간다}

        else    //열기

        {ar>>m_shape; //불러올걸 쓴다. 읽을때도순서대로읽어야한다}


31. MicroSoft FlexGrid 사용하기!

        CMSFlexGrid m_Grid; //FlexGrid 컨트롤 변수

        CString strTitle[]={"고객코드","고객성명","고객포인트","신장","몸무게","고객등급","BMT지수","판정결과"};

        // Grid 의 제목에 넣을문자배열

        int Width[]={900,900,1100,800,800,900,1000,900};

        // Grid 의 열넓이 지정할 배열

        m_Grid.SetRows(m_cnt+2); //전체행수 지정

        m_Grid.SetCols(8); //전체열수 지정

        m_Grid.Clear(); //지우기

        m_Grid.SetFixedCols(0); //고정열은 없다.

        m_Grid.SetRow(0); // 행선택

        for(int i=0;i<=7;i++)

        {

                m_Grid.SetColWidth(i,Width[i]); //열 넓이 설정

                m_Grid.SetCol(i); //열 선택

                m_Grid.SetText(strTitle[i]); // 선택된행, 선택된열에 Text 를 넣는다

        }


32. 4대 Class간 참조

//각각 헤더파일 include

#include "MainFrm.h" //메인프레임 헤더파일

#include "ClassDoc.h"   //Doc클래스 헤더파일

#include "ClassView.h" //View를 include 할때는 반드시 Doc 헤더파일이 위에잇어야한다

#include "Class.h" //APP Class 의 헤더파일


void CClassView::OnMenuView() //뷰클래스

        CClassApp *pApp=(CClassApp *)AfxGetApp();   //View -> App
        CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd();  //View -> MainFrm

        CClassDoc *pDoc=(CClassDoc *)pMain->GetActiveDocument(); //View -> MainFrm -> Doc

        CClassDoc *pDoc=(CClassDoc *)GetDocument();                     //View -> Doc


 //MainFrame 클래스

        CClassView *pView=(CClassView *)GetActiveView();  //MainFrm -> View

        CClassDoc *pDoc=(CClassDoc *)GetActiveDocument();  //MainFrm -> Doc

        CClassApp *pApp=(CClassApp *)AfxGetApp(); //MainFrm -> App


//Doc 클래스

        CClassApp *pApp=(CClassApp *)AfxGetApp(); //Doc -> App

        CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd(); //Doc -> MainFrm

        CClassView *pView=(CClassView *)pMain->GetActiveView(); // Doc -> MainFrm -> View

        CClassView *pView=(CClassView *)m_viewList.GetHead();      // Doc -> View


//App 클래스

        CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd(); //App -> MainFrm

        CClassView *pView=(CClassView *)pMain->GetActiveView(); //App -> MainFrm -> View

        CClassDoc *pDoc=(CClassDoc *)pMain->GetActiveDocument(); //App -> MainFrm -> Doc


33. ToolBar 추가하기

  CMainFrame 으로 가서 멤버변수 추가

        CToolBar m_wndToolBar1;

  OnCreate 로 가서 다음 내용을 추가해준다 (위의 toolbar 부분을 복사하고 이름만 바꾸면 된다.3군데..)

  if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

                | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

                !m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))

        {

                TRACE0("Failed to create toolbar\n");

                return -1;      // fail to create

        }


  그 함수내에서 //TODO 아래에 내용추가..역시..복사해서 이름만 바꾸면 된다.

        m_wndToolBar1.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);

        //DockControlBar(&m_wndToolBar1);   <= 이부분 대신..

        이거를 넣는다..

        CRect toolRect; //툴바 영역을 얻을 사각형

        this->RecalcLayout(); //현상태의 Client 영역을 구해서 저장한다

        m_wndToolBar.GetWindowRect(&toolRect); //툴바영역을 저장한다

        toolRect.left+=1; //사각형의 왼쪽을 1Pixel 줄인다

        DockControlBar(&m_wndToolBar1,AFX_IDW_DOCKBAR_TOP,&toolRect); //ToolRect에 툴바를 붙인다

        return 0;


34. ToolBar에 ComboBox붙이기

        CComboBox m_combo; //객체생성

        ID 등록 => view 메뉴 => resource symbol => new => ID_COMBO

  oncreate 에 내용 추가 (콤보를 만들고 표시하는 내용)

        m_wndToolBar.SetButtonInfo(10,IDC_COMBO,TBBS_SEPARATOR,150);

        //툴바의 10번째버튼을 편집한다

        CRect itemRect; //콤보를넣을 사각형을 만든다

        m_wndToolBar.GetItemRect(10,&itemRect); //툴바의 10번째 버튼을 사각형에 넣는다
        itemRect.left+=5; //앞여백

        itemRect.right+=5; //뒤여백

        itemRect.bottom+=100; //콤보가열릴 공간확보

        m_combo.Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWN,itemRect,&m_wndToolBar,IDC_COMBO);

        //콤보박스를 툴바에 붙여준다

        m_combo.AddString("이름"); //내용추가

        m_combo.SetCurSel(0); //셀 선택


35.  Toolbar에 수동으로넣은 ComboBox 사용하기

  afx_msg void OnSelectCombo(); //원형

  ON_CBN_SELCHANGE(IDC_COMBO,OnSelectCombo) //메세지맵에 추가

        CMainFrame *pMain=(CMainFrame *)GetParent(); //메인프레임 주소참조

        CComboBox *pCom=(CComboBox *)(pMain->m_wndToolBar.GetDlgItem(IDC_COMBO));

        //콤보박스의 주소를 가져온다, 접근할 때 메인프레임 -> 툴바 -> 콤보박스 의 순서로 가야한다

        int n=pCom->GetCurSel(); //현재선택된 셀의 인덱스를 가져온다

        if(n==CB_ERR) return; //선택된셀이 없으면 중지한다

        CString str;

        pMain->m_combo.GetLBText(n,str); //선택된셀의 Text를 가져온다


36. UPDATE_COMMAND 사용하기

        pCmdUI->Enable(TRUE); //버튼 활성화

        pCmdUI->SetText((bAdd)?"취소":"신규"); //버튼의 text 설정

        pCmdUI->SetCheck(TRUE); //버튼 체크


37. 프로그램정보저장

  CWinApp::GetProfileString(섹션명,항목명,기본값); // 함수를 사용한다. (문자열)

  CWinApp::GetProfileInt(섹션명,항목명,기본값);  //불러올때사용 (숫자) 

  CWinApp::WriteProfileString(섹션명,항목명,값); //저장할때 사용 (문자열)

  CWinApp::WriteProfileInt(섹션명,항목명,값); //저장할때 사용 (숫자)

  //불러올때 사용할함수

  void CMainFrame::ActivateFrame(int nCmdShow)  //프로그램 실행후 프레임생성될때 실행

  //저장할 때 WM_DESTROY 메시지 사용


38. 컨트롤바 표시하기

        CMainFrame *pMain=(CMainFrame *)GetParent(); //MainFrame 주소가져오기

        pMain->ShowControlBar(&pMain->m_wndToolBar,bTool1,FALSE); //툴바를 bTool2 에따라 보이고 감춘다


39. Window 창크기,위치정보 저장하기

MainFrame 의 WM_DESTROY 에

        WINDOWPLACEMENT w;

        this->GetWindowPlacement(&w); //윈도우의 정보를 저장한다.

        CString strRect;

        strRect.Format("%04d,%04d,%04d,%04d", //04d 는 4자리 확보하고 남은건 0으로 채워라

                w.rcNormalPosition.left,w.rcNormalPosition.top,

                w.rcNormalPosition.right,w.rcNormalPosition.bottom); //윈도우의 위치,크기 확보..

       

        BOOL bMax,bMin; //윈도우의 상태를 저장하기위한 변수

        //w.falg 는 이전상태의 정보를 가지고 잇다!!

        if(w.showCmd==SW_SHOWMINIMIZED)           //최소화 상태

        {

                bMin=TRUE;

                if(w.flags==0) //falg 값이 0 이면 이전 상태가 보통상태이다!!

                        bMax=FALSE;

                else    //이전상태가 최대화 상태

                        bMax=TRUE;

        }

        else                           

        {

                if(w.showCmd==SW_SHOWMAXIMIZED) //최대화상태

                {

                        bMax=TRUE;

                        bMin=FALSE;

                }

                else  //보통 상태

                {

                        bMax=FALSE;

                        bMin=FALSE;

                }

        }

        AfxGetApp()->WriteProfileString("WinStatus","Rect",strRect);

        AfxGetApp()->WriteProfileInt("WinStatus","Max",bMax);

        AfxGetApp()->WriteProfileInt("WinStatus","Min",bMin);


//읽어올차례..

ActivateFrame 함수로 가서

        WINDOWPLACEMENT w;  //윈도우의 상태를 저장하는 구조체..

        BOOL bMax,bMin;               //최대,최소상태를 저장할 변수

        CString strRect; //창크기를 받아올 변수

        strRect=AfxGetApp()->GetProfileString("WinStatus","Rect","0000,0000,0500,0700");

        bMin=AfxGetApp()->GetProfileInt("WinStatus","Min",FALSE);

        bMax=AfxGetApp()->GetProfileInt("WinStatus","Max",FALSE);

        int a=atoi(strRect.Left(4)); //문자열을 int 로 바꿔준다.

        int b=atoi(strRect.Mid(5,4));     //atoi 아스키 값을 int형으로 바꿔준다..

        int c=atoi(strRect.Mid(10,4));

        int d=atoi(strRect.Mid(15,4));

        w.rcNormalPosition=CRect(a,b,c,d);

        if(bMin)

        {

                w.showCmd=SW_SHOWMINIMIZED;

                if(bMax)

                {

                        w.flags=WPF_RESTORETOMAXIMIZED  ;

                }

                else

                {

                        w.flags=0;

                }

        }

        else

        {

                if(bMax)

                {

                        w.showCmd=SW_SHOWMAXIMIZED;

                }

                else

                {

                        w.showCmd=SW_SHOWNORMAL;

                }

        }

        this->SetWindowPlacement(&w); //설정된 값으로 윈도우를 그리게 한다..

       

        //CFrameWnd::ActivateFrame(nCmdShow); //이건 반드시 주석처리한다..


40. progress Bar 쓰기


        m_progress.SetRange(m_first,m_last); //Progress 범위설정하기

        m_progress.SetStep(m_step); //Progress Step설정하기

        //m_progress.StepIt(); //스텝만큼 움직이기

        //또는 다음을 사용한다

        for(int a=m_first;a<=m_last;a+=m_step) //a가 처음부터 끝까지

        {

                m_progress.SetPos(a); // 위치를 a에 맞춘다

                Sleep(50); //천천히 움직이게한다

        }


41. 파일대화상자 FileDialog 사용하기

void CConDlg1::OnFileopen()  //파일열기 버튼

{

        CFileDialog *fdlg; //파일대화상자 객체 생성 // 포인터로 만든다..

        static char BASED_CODE szFilter[] = "Animate Video Files (*.avi)|*.avi|All Files (*.*)|*.*||";

        //필터를 만들어 준다..이건 할줄 모름..

        fdlg =new CFileDialog(TRUE, ".avi", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);

        //대화상자 만들기..이렇게 해야댄다..

        if(fdlg->DoModal()==IDOK) //이제..대화상자를 띠우고..   

        {                               //OK 누르면 실행될 부분..

                m_filename=fdlg->GetPathName();        //대화상자에서 경로를 받아서 저장.

                UpdateData(FALSE);   

        }

}

선생님이 해준거 //파일 다이얼로그 만들기

CFileDialog fdlg(TRUE,"avi",".avi",OFN_OEVRWRITEPROMPT,"Vidoe Files(*.avi)|*.avi|All Files(*.*)|*.*||");


42. Animate Control 사용하기

        m_animate.Open(m_filename); //파일을 연다

        m_animate.Play(0,-1,1);  //(처음프레임,마지막프레임,반복횟수)

        m_animate.Stop(); //정지시키기

        m_ani.SetAutoStart(TRUE); //자동으로 시작한다

43. Control 의 Style 바꿔주기

        Control.ModyfyStyle(제거할스타일,추가할스타일); //스타일은 MSDN내용 참조


44. 시스템 날자바꾸기 버튼

//SetSystemTime(),GetSystemTime() //GMT 표준시를 가져온다.

//GetLocalTime(),SetLocalTime()  //현재 지역시간을 가져온다.


        SYSTEMTIME st;

        GetLocalTime(&st); //현재 시간, 날자를 넣는다.

        st.wYear=m_date2.GetYear();

        st.wMonth=m_date2.GetMonth();

        st.wDay=m_date2.GetDay();

        SetSystemTime(&st);


45. 시스템 시간 바꾸기 버튼

        UpdateData(TRUE);

        SYSTEMTIME st;

        GetLocalTime(&st);

        st.wHour=m_time.GetHour();

        st.wMinute=m_time.GetMinute();

        st.wSecond=m_time.GetSecond();

        SetLocalTime(&st);


46.시스템의 드라이브 문자 얻기


        char temp[50];

        GetLogicalDriveStrings(sizeof(temp),temp);

        CString str,str1;

        int n=0;

        while(*(temp+n)!=NULL)

        {

                str=temp+n;

                str1+= " "+str.Left(2);

                n+=4;

        }


47. 현재 작업경로 얻기

        char temp[MAX_PATH]; //MAX_PATH 는 경로길이의 최대를 define 해놓은것.

        GetCurrentDirectory(sizeof(temp),temp);  // 현작업하는 경로를 얻어온다.(경로 길이,문자형);


48. Tree Control 사용하기

        HTREEITEM hmov,hmus; //핸들을받을 변수 이게 잇어야 하위 디렉토리 생성가능

        hmov=m_tree.InsertItem("영화",TVI_ROOT,TVI_LAST); //,TVI_ROOT,TVI_LAST는 default

        hm1=m_tree.InsertItem("외화",hmov);  //hmov 아래 “외화”트리 생성

        CImageList m_image; //그림을 사용하기 위한 클래스다!! 알아두자..

        m_tree.SetImageList(&m_image,TVSIL_NORMAL); //Tree View Style Image List => TVSIL

        hmov=m_tree.InsertItem("영화",0,1,TVI_ROOT,TVI_LAST); //,TVI_ROOT,TVI_LAST는 default

        hmus=m_tree.InsertItem("가요",1,2); //("문자열",처음그림번호,선택시그림)

        hm1=m_tree.InsertItem("외화",2,3,hmov); //그림 번호는 default 로 0이 들어간다..


49. List Control 사용하기

        m_list.ModifyStyle(LVS_TYPEMASK, LVS_ICON); //리스트를 큰아이콘형태로 보인다

        m_list.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);  //리스트를 작은아이콘형태로 보인다

        m_list.ModifyStyle(LVS_TYPEMASK, LVS_LIST); //리스트를 리스트형태로 보인다

        m_list.ModifyStyle(LVS_TYPEMASK, LVS_REPORT); //리스트를 자세히형태로 보인다


        CImageList m_treeimage; //이미지리스트

        CImageList m_small, m_large;

        m_large.Create(IDB_LARGE,32,0,RGB(255,255,255)); //이거는 클래스에서 추가해준거다

        m_small.Create(IDB_SMALL,16,0,RGB(255,255,255)); (bmp ID값,

        m_list.SetImageList(&m_large,LVSIL_NORMAL);

        m_list.SetImageList(&m_small,LVSIL_SMALL);

        CString name[]={"홍길동","진달래","한국남","개나리"};

        CString tel[]={"400-3759","304-7714","505-9058","700-9898"};

        CString born[]={"1980-1-1","1981-12-20","1980-05-15","1981-08-31"};

        CString sex[]={"남자","여자","남자","여자"};

       

        m_list.InsertColumn(0,"이름",LVCFMT_LEFT,70);

        m_list.InsertColumn(1,"전화번호",LVCFMT_LEFT,80);

        m_list.InsertColumn(2,"생일",LVCFMT_LEFT,90);

        m_list.InsertColumn(3,"성별",LVCFMT_LEFT,50);

        LVITEM it; //리스트 구조체

        char temp[100];

        for(int a=0;a<4;a++)

        {       

                int n=(sex[a]=="남자")?0:1;

                m_list.InsertItem(a,name[a],n); //insert item 은 행을 만들고..

                it.mask=LVIF_TEXT|LVIF_IMAGE; //마스크 설정

                it.iItem=a;

                it.iSubItem=1; //열 설정

                strcpy(temp,tel[a]); //이거 모하는거냐..

                it.pszText=temp;

                m_list.SetItem(&it);                      // setitem 열에 정보를 넣는다.


                it.iSubItem=2; //열 설정

                strcpy(temp,born[a]); //이거 모하는거냐..

                it.pszText=temp;

                m_list.SetItem(&it);                      // setitem 열에 정보를 넣는다.


                it.iSubItem=3; //열 설정

                strcpy(temp,sex[a]); //이거 모하는거냐..

                it.pszText=temp;

                m_list.SetItem(&it);                      // setitem 열에 정보를 넣는다.



50. Bitmap Button 사용하기

  CBitmapButton 을 사용한다! CButton 에서 상속 받는클래스임..

        m_button1.Create(NULL,

                WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,CRect(310,20,370,50),

                this,IDC_MYBUTTON); //버튼만들기

        m_button1.LoadBitmaps(IDB_UP,IDB_DOWN,IDB_FOCUS,IDB_DISABLE); //버튼의 그림설정

        m_button1.SizeToContent(); //버튼을 그림 크기로 맞춰 준다!!


 그냥 버튼을 비트맵버튼으로 바꾸기 -> 버튼을 만든다 속성에서 OWNERDRA 속성에 체크!!

        m_button2.LoadBitmaps(IDB_UP,IDB_DOWN,IDB_FOCUS,IDB_DISABLE); //버튼의 그림설정

        m_button2.SizeToContent(); //버튼을 그림 크기로 맞춰 준다!!


51. 중복없는 난수발생하기

        int su; //발생된 난수저장

        int a,b;

        BOOL bDasi; //숫자가중복될경우 다시하기위한 변수

        for(a=0;a<9;a++)  //난수 9개 발생

        {

                bDasi=TRUE;

                while(bDasi)

                {

                        bDasi=FALSE;

                        su=rand()%10; //난수발생

                        for(b=0;b<a;b++) //중복검사

                        {

                                if(temp[b]==su)  //중복이면

                                {

                                        bDasi=TRUE; //중복이 잇으면 다시while 문을 실행한다

                                        break;

                                }//if

                        }//for

                }//while

                temp[a]=su; //중복이 아니면 대입한다


52. 메뉴 범위로 사용하기

  ON_COMMAND_RANGE(ID_LEVEL3,ID_LEVEL9,OnLevel); //범위메세지 발생

  //메뉴 ID의 값이 연속된 숫자일 경우 범위로 지정해서 사용할수잇다


53. 한,영 전환함수

void CCustView::SetHangul(BOOL bCheck) //T:한글 F:영문 이건 외우자..

{

        HIMC hm=ImmGetContext(this->GetSafeHwnd()); //뷰클래스의 윈도우 핸들포인터를 얻는다.

        if(bCheck)

        {

                ::ImmSetConversionStatus(hm,1,0); //1은 한글 0은 영문

        }

        else

        {

                ::ImmSetConversionStatus(hm,0,0); //영문으로 바꿔준다

        }

        ::ImmReleaseContext(this->GetSafeHwnd(),hm); //장치를 풀어준다

}

#include "imm.h" //헤더 반드시 추가하고

imm32.lib (라이브러리 파일)를 반드시 링크해주어야 한다!

**** 라이브러리 추가하기

프로젝트메뉴 -> 셋팅 -> 링크탭


54. DLL함수정의하기

임포트함수 :  extern "C"  __declspec(dllimport)   리터형  함수명(매개변수,...) ;

  - 메인프로그램에서 DLL에 있는 함수를 호출할때 사용한다.


엑스포트함수 :  extern "C"  __declspec(dllexport)   리터형  함수명(매개변수,...)

                      {

                             내용;

                      }

Trackback 0 Comment 0

[VC++] MFC 헤더와 라이브러리 설명

 MFC 헤더와 라이브러리 설명 (The Foundation Classes Headers and Libraries)

1. Header Files

아래 테이블은 모든 MFC 헤더 파일들과 사용 목적, 그리고 어떤 파일전에 어떤
파일들이 Include 될수 있는지에 대해 나와있습니다. 거의 모든 헤더들이 다른
헤더들에 의해 Include 된다는 것을 주의하십시오.
당신의 코드에서 직접 Include 하는것은 약 4-5개 정도입니다.

----------------------------------------------------------------------------
헤더 (Header)설명
----------------------------------------------------------------------------

Afx.h       Windows 를 사용(?)하지 않는 MFC 프로그램을 작성할때 Include
            하는 Main Header 파일입니다. 콘솔용 MFC 응용프로그램을 작성할때
            이 헤더만 있으면 됩니다. 이것은 Windows 외에서 사용될수 있는
            콜렉션 클래스와 Application Framework 클래스들를 포함한 모든
            클래스를 선언합니다. 콘솔용 프로그램을 작성한다면 다른 MFC 헤더
            들을 Include 하기전에 이 파일을 Include 하여야 됩니다.
            만약 윈도우용 프로그램을 작성한다면, 이 파일대신 Afxwin.h 를
            사용하십시오.

Afxcmn.h    이 파일은 윈도우의 공용 컨트롤(Common Control)에 대한 Definition
            들을 가지고 있습니다. Afxwin.h 를 Include하지 않았다면 이 파일을
            사용할수 없습니다.
           
Afxcoll.h   이 파일은 MFC 컨테이너 클래스들에 대한 Declaration(선언)을
            가지고 있습니다. 이 파일은 Afx.h 의 내용에 의존합니다.
            Afxcoll.h 는 CObject-style 과 type-safe 콜렉션에 대한
            Definition 을 포함하고 있습니다. 템플릿 콜렉션 클래스들은
            Afxtempl.h 안에 있습니다.

Afxctl.h    이 파일은 ActiveX 컨트롤을 작성하는데 필요한 클래스와 선언들을
            가지고 있습니다. 컨트롤 작성 프로젝트에서는 이 파일을 Afx.h 나
            Afxwin.h 대신에 Include 해야 합니다.

Afxcview.h  이 파일은 Tree 와 List 공용 컨트롤을 기초로 하는 CView 파생
            클래스들에 대한 Definition 들을 가지고 있습니다. 이 파일은 좀더
            작고 효율적인 링킹을 위해 Afxwin.h 와 Afxcmn.h 파일로부터
            분리되었으며, 이것은 좀더 작고 빠른 실행화일을 생성할수 있도록
            해줍니다. 만약 CTreeView 나 CListView를 사용한다면 Afxwin.h 파일
            다음에 이것을 Include 하여야 합니다.
           
Afxdao.h    이 파일은 DAO 에 기반한 데이터 억세스를 지원하기 위한 클래스들
            (CDaoDatabase 와 CDaoRecordset 같은)을 담고있습니다. 이 헤더가
            필요하다면 Afxwin.h 와 Afxdisp.h 다음에 Include 하여야 합니다.
           
Afxdb.h     이 파일은 ODBC 에 기반한 데이타 베이스 프로그램을 개발하기 위한
            클래스들(CDatabase 와 CRecordset 같은)을 담고 있습니다.
            이 파일은 또한  "RFX_*" 와 같은 [레코드 필드 교환 명령]들 같은
            데이터베이스 프로그램 개발에 필요한 전역 함수들을 정의하고
            있습니다. 데이터베이스 클래스를 사용하려면 먼저 Afx.h 와
            Afxwin.h 를 Include 한다음 이 파일을 Include 하여야 합니다.

Afxdb_.h    이 파일은 ODBC 와 DAO 에 공통적인 definition 들과 클래스들을
            포함하고 있습니다. 이 파일은 전혀 Include 할 필요가 없습니다.
            이것은 Afxdb.h 나 Afxdao.h 를 Include 할때 따라오게 됩니다.
           
Afxdd_.h    이 파일은 다이알로그 데이타 교환(DDX) 함수들에 대한 선언들을
            포함하고 있습니다. 끝이 _ 로 끝나는 다른 화일들과 마찬가지로,
            이 파일도 직접 Include 할 필요가 없습니다.
            이것은 Afxwin.h 에 의해 포함됩니다.

Afxdisp.h   이 파일은 COM dispatch인터페이스에 대한 선언과 정의들을 포함하고
            있윱求?이것은 CCmdTarget에 의해 처리되는 Automation을 작성하기
            위한 모든 확장들과 MFC 가 COM 프로그램을 쉽게 하기위해 제공하는
            모든 자료형들, Wrapper 클래스들을 포함하고 있습니다.
            COM 을 사용할때만 이 파일을 Include 하십시오. 만약 그렇지 않으면
            필요치 않은 런타임DLL들에 연결되게 되며,이것은 작성된 프로그램의
            시작을 느리게 할것입니다. 이 파일은 Afxwin.h 뒤에 Include 되어야
            합니다. 만약 Afxcmn.h 를 사용하고 있고, OLE 클래스들을 사용할
            필요가 있다면 이 파일을 Include하십시오

Afxdlgs.h   MFC 의 확장 다이알로그 클래스들이 이 파일에 선언되어 있습니다.
            이 클래스들은 CPropertySheet와 CPropertyPage를 포함하여 윈도우의
            공통 대화상자(Common Dialog)에 대한 MFC Wrapper 들입니다.
            이 파일은 Afxext.h 에 의해 포함되게 됩니다.
           
Afxdllx.h   이 파일은 MFC 확장DLL을 작성할때 소스 모듈들에 포함되는 소스코드
            를 포함하고 있습니다.(ExtRawDllMain)
           
Afxdll_.h   이 파일은 MFC 가 확장 DLL 에 대한 정보를 관리하도록 도와주는
            클래스들을 포함하고 있습니다.
            이 파일은 당신의 프로그램이 _AFXDLL Precompiler플래그를 사용하여
            작성될때 Afxwin.h 에 의해 포함됩니다.

Afxext.h    Afxext.h 화일은 '확장' MFC클래스들을 선언합니다.
            이것은 CStatusBar와 CToolBar같은 진보된 User-Interface클래스들을
            포함하고 있습니다. 이 클래스들을 사용한다면, 먼저 Afxwin.h 를
            포함하십시오.

Afxinet.h   CHttpConnection 같은 클래스들을 선언합니다. 이 파일에 선언된
            클래스들을 인터넷 클라이언트 프로그램을 작성가능하게 합니다.

Afxisapi.h  ISAPI 인터페이스를 사용하는 인터넷 서버 프로그램 작성용 클래스들
            선언입니다.

Afxmsg_.h   이 파일은 간접적으로 Afxwin.h에 의해 참조됩니다. 따로 Include 할
            필요는 없습니다. 메시지맵 항목들에 대한 정의를 포함하고 있습니다

Afxmt.h     Multithreaded Application 을 위한 동기화(Synchronization) 객체를
            포함하고 있습니다. 이 클래스들은 Console 프로그램에서도 사용이
            가능하며, 먼저 Afx.h 를 Include 해야 합니다.

Afxodlgs.h  이 파일은 MFC 에서의 OLE 대화상자 구현을 위한 클래스 선언들을
            포함하고 있습니다. 만약 이 대화상자들 사용하거나 서브클래싱 할
            경우에는 이 파일을 직접 Include 하여야 합니다.
            물론 먼저 Afxwin.h 가 Include 되어야 합니다.

Afxole.h    이 파일은 OLE를 위한 핵심 클래스들을 선언하고 있습니다.
            이 클래스들은 COleDocument 기반의 클래스들과 OLE 아이템들 그리고
            그들과 같이 사용되는 Drag-and-Drop 지원을 포함합니다. 프로그램이
            OLE 를 사용한다면 Afxwin.h 다음에 이 파일을 포함해야 합니다.

Afxplex_.h  이 파일은 MFC 에서 CObject기반의 콜렉션 클래스들 구현에 사용되는
            CPlex 클래스를 구현하고 있습니다.

Afxpriv.h   이 파일은 MFC 구현에 필요한 내부적인(사적인) 것을을 포함하고
            있습니다. 만약 안을 들여다본다면, 당신의 일을 도와줄수 있는
            깔끔한 자료구조나 클래스들을 찾을수 있을겁니다.
            하지만, 조심해서 사용하십시오. 이 파일에 있는 것들은 MFC 버젼이
            바뀌면 예고없이 바뀔수도 있습니다.
            이런것을 인지한 다음에 직접 Include 하여 사용하십시오.

Afxres.h    이 파일은 MFC 프로그램을 위한 Resource Script(.rc 파일) 에 의해
            사용됩니다.(Include 됩니다.)
            이 파일은 Afxwin.h 에 의해 간접적으로 참조됩니다.
            이 파일은 거의 직접 참조될 필요가 없습니다. 이 파일은 미리
            정의된 모든 MFC 리소스들에 대한 Preprocessor Symbol Definition
            들을 포함합니다.

Afxrich.h   이 파일은 CRichEditCtrl 과 관련된 약간의 클래스들에 대한 정의를
            포함하고 있습니다. 만약 Rich Edit컨트롤을 사용한다면 Afxcmn.h와
            Afxwin.h 다음에 이 파일을 Include 해야 합니다. 또한 Afxole.h
            파일도 Include 되어야 합니다.Rich Edit 컨트롤은 매우 강력합니다
            이것은 완벽하게 OLE 를 지원합니다.

Afxsock.h   CSocket 과 CAsyncSocket 클래스에 대한 정의를 포함하고 있습니다.
            이 클래스들은 Windows Sockets API(네트워크 기반의 통신 API)를
            감쌉니다.(Wrapping)

Afxstat_.h  이 파일은 동작중인 프로그램에 대해 MFC 가 관리하는 상태정보
            저장용 구조체들을 정의합니다. 이 상태정보는 MFC 에 의해
            사용되며 프로그램이 어떻게 동작해야 할지를 알수 있게 합니다.
            이 파일은 직접적으로는 참조되지 않으며, Afx.h에 의해 Include
            됩니다.

Afxtempl.h  이 파일은 MFC 콜렉션 클래스들에 대한 템플릿 기반의 구현들을
            포함하고 있습니다. Afx.h 뒤에 Include 되어야 합니다. 

Afxtls_.h   MFC 가 각 어플리케이션별 또는 쓰레드별 상태정보를 관리하기 위한
            Thread-Local Storage 매크로 들을 포함합니다. 이 매크로들은
            Afxstat_.h 에 있는 많은 구조체들에 의해 사용되며, 이 파일은
            직접적으로 참조되지 않습니다. Afx.h 에 의해 참조됩니다.

Afxver_.h   이 파일은 MFC 프로그램이 만들어질때(Build) 여러가지 설정을 위해
            사용되는 많은 Preprocessor macro 들을 가지고 있는 중요한 파일
            입니다. 당신이 MFC 어플리케이션을 Build 할때 이 헤더는 당신의
            프로그램이 정확하게 MFC 에 링크되는지를 확인하는 약간의 설정도
            추가하게 됩니다. 이 파일은 전혀 직접 참조할 필요가 없으며,
            실제로 이 파일을 읽어볼 필요도 없습니다. 이 파일은 아주
            저수준(Low-Level)의 매크로와 내부구현들로 가득차 있기때문입니다.

Afxv_cfg.h  이 파일은 한가지의 일을 합니다: 이것은 _AFX_PORTABLE 이란
            플래그에 의해 동작됩니다. 만약 당신이 MFC 를 Build 하기위해
            제작되지 않은 컴파일러(Watcom 이나 Symantec 등)를 사용한다면
            Preprocessor 심볼인 _CUSTOM 을 정의하여 이 파일이 Include되도록
            해야 합니다. 이 파일은 절대로 어플리케이션에 의해 직접적으로
            참조되지 않으면, 일반적인 상황에서는 MFC 에 의해 전혀 사용되지
            않습니다.

Afxv_cpu.h  Afxver_.h 에 의해 참조되며,이 파일은 Macintosh,Power PC,MIPS,
            Alpha용 MFC 에 대한 약간의 설정을 합니다. 이 파일은 절대로
            어플리케이션에 의해 직접적으로 참조되지 않습니다.

Afxv_dll.h  이 파일은 DLL 기반의 MFC Build 에 대한 설정을 하기위해
            사용됩니다. 이 파일은 DLL Build에 대한 많은 특수심볼을 정의하여
            DLL 의 Segment Layout 을 최적으로 만듭니다. 이것은 Afxver_.h 에
            의해 참조되며 절대로 어플리케이션에 의해 직접적으로 참조되지
            않습니다.

Afxv_mac.h  이 파일은 Macintosh용 MFC 에 대한 여분의 설정변경을 가지고
            있습니다. 이것은 Afxver_.h에 의해 참조되며 절대로 어플리케이션에
            의해 직접적으로 참조되지 않습니다.

Afxv_w32.h  이 파일은 Win32 용 MFC 를 설정합니다. 이것은 항상 Include 되며,
            이것은 MFC 가 Win32 의 변형들(Win32s,Win32c..) 상에서 동작될때도
            마찬가지입니다. 이 파일은 시스템관련, 표준 C, C++ Include 파일을
            참조하게됩니다.이 파일이 Windows.h와 그 친구들을 불러오는
            파일입니다. (또한 Tchar.h 나 String.h 같은 헤더도 포함됩니다.)

Afxwin.h    이 파일이 윈도우 상에서 동작하는 MFC 어플리케이션에 대한 주 헤더
            (Primary Header) 파일입니다. Windows 용 프로그램을 작성한다면
            Afx.h 후에 이 파일을 Include 하십시오. 콘솔 프로그램을 만든다면
            이 파일을 사용하지 마십시요.
            이 파일은 CWnd 와 CWnd의 파생 클래스와 같은 기본클래스들을 정의
            합니다.

Winres.h    이 파일은 MFC 어플리케이션에 의해 사용되는 Resource Identifier
            들에 대한 부분집합을 정의합니다. 이것은 Afxres.h에 의해 참조되며
            Windows의 헤더가 일반적으로 정의하는 것들의 부분집합을
            제공합니다. MFC 어플리케이션에서 직접 참조되지 않습니다.


-------------------------------------------------------------------------------



int fputc (int ch, FILE *stream);
   지정된 stream의 현재의 파일 위치에 문자 ch를 기록한 후 파일위치표시기의 값을 1 증가시킨다. 에러가 발생하면 EOF가, 정상적으로 실행되면 ch의 값이 되돌려진다.

int fputs(const char *str, FILE *stream );
   지정된 stream의 현재의 파일 위치에 문자열 str을 기록한다. 하지만 문자열 str의 끝을 나타내는 null 은 삽입되지 않는다. 에러가 발생하면 EOF가, 정상적으로 실행되면 비음수의 값이 되돌려진다.

int fseek(FILE *stream, long int offset, int origin);
   stream에 연결된 파일 위치표시기의 값을 offset 과 origin의 값에 따라 설정한다. 이 함수는 임의접근 형태의 입출력을 지원하기 위해 사용된다. offset은 origin으로부터의 숫자를 의미한다.

origin의 값으로는 다음의 세 가지중의 하나가 된다.

   SEEK_SET   파일의 맨 처음
   SEEK_CUR   현재의 위치
   SEEK_END   파일의 맨 끝

성공적으로 수행되면 0이 되돌려지고 실패했을 경우 0이 아닌 값이 되돌려진다. fseek()함수는 이진파일에서만 사용한다.

int getc(FILE *stream);
   지정된 입력 stream으로부터 다음 문자를 되돌리고 파일위치표시기의 값을 1 만큼 증가시킨다. 파일의 끝에 도달하거나 에러가 발생하면 EOF가 되돌려진다. 하지만 이진파일에서는 파일의 끝을 feof()를 이용하여 확인해야 한다.

int getchar(void);
   stdin에서 다음 문자를 unsigned char 로 읽어 정수로 변환한 후 되돌린다. 파일의 끝이나 에러가 발생하면 EOF를 되돌린다.

char gets(char *str);
   stdin으로부터 문자를 읽어 str 에 의해 지정된 문자열에 저장한다. 문자는 새로운 라인(\n)이나 EOF를 만날 때까지 읽혀진다. 성공적으로 실행되면 str 문자열을 되돌리고 실패하면 null을 되돌린다.

int printf(const char *format, ...);
   format에 의해 지정된 문자열에 정의된 대로 인수들을 stdout에 기록한다.

format에 의해 지정되는 문자열에는 두 가지 형태가 있는데 첫째는 화면에 출력될 정보(변수 또는 리터럴)를 나타내는 문자열과 둘째 이들 정보가 출력되는 형식을 정의하는 문자열이다.

두 번째에서 정보가 출력되는 형식을 지정하기 위해 % 기호와 출력의 형식을 지정하는 문자열을 함께 사용해야 한다.

int putc (int ch, FILE *stream);
   정수 ch 의 가장 오른쪽 바이트에 포함된 문자를 stream에 의해 지정된 파일에 기록한다. 성공적으로 실행되면 문자를 되돌리고 실패하면 EOF를 되돌린다.

int putchar(int ch);
   ch 의 가장 오른쪽 바이트에 포함된 문자를 stdout 에 출력한다. 성공적으로 실행되면 문자를 되돌리고 실패하면 EOF를 되돌린다.

int puts(const char *str);
   str에 의해 지정된 문자열을 표준 출력장치에 기록한다. 성공적으로 실행되면 비음수의 값을 되돌리고 실패하면 EOF를 되돌린다.

int scanf (const char *format, ...);
   printf()함수가 stdout에 출력하는 기능을 갖고 있음에 반해 scanf()함수는 stdin에서 입력받는 기능을 정의한다. 즉 scanf()는 스트림 stdin에서 정보를 읽어 이를 지정된 인수가 가리키는 변수에 저장한다.

scanf()에서 사용할 수 있는 입력형식은 아래와 같다.



------------------------------------------------------------------------------



<ctype.h>

int isalnum(int ch)
   인수 ch 가 알파벳이나 숫자인 경우 0이 아닌 값을 되돌린다.

int isalpha(int ch);
   인수 ch 가 알파벳인 경우 0이 아닌 값을 되돌리고 아니면 0을 되돌린다.

int isblank (int ch);
   인수 ch 가 빈칸이면서 동시에 단어를 띄우기 위해 사용된 경우 0이 아닌 값을 되돌린다.(C-99에 추가됨);

int isdigit(int ch);
   인수 ch 가 0에서 9사이의 숫자인 경우 0이 아닌 값을 되돌리고 그외의 경우 0을 되돌린다.

int islower(int ch);
   인수 ch가 알파벳의 소문자인 경우 0이 아닌 값을 되돌리고 아니면 0을 되돌린다.

int isspace(int ch);
   인수 ch가 빈칸(space)인 경우 0이 아닌 값을 되돌리고 아니면 0을 되돌린다.

int isupper(int ch);
   인수 ch가 알파벳의 대문자인 경우 0이 아닌 값을 되돌리고 아니면 0을 되돌린다.


----------------------------------------------------------------------------


<string.h>

char *strcat(char *str1, const char *str2);
   문자열 str1에 문자열 str2를 덧붙인 후 null을 첨가한다.

int strcmp(const char *str1, const char *str2);
   str1 과 str2를 비교한 후 str1 이 str2 보다 작으면 음수의 값을,

str1 이 str2 보다 크면 양수의 값을, 같으면 0 값을 되돌린다.

char strcpy(char *str1, const char *str2);
   str2의 문자열을 str1의 문자열에 복사시킨다. str2 는 null이 첨가된 문자열에 대한 포인터가 되어야 한다.

size_t strlen(const char *str);
   문자열의 길이를 되돌린다.

int tolower(int ch);
   ch가 문자일 때 이에 해당하는 소문자를 되돌린다.

int toupper(int ch);
   ch가 문자일 때 이에 해당하는 대문자를 되돌린다.



-----------------------------------------------------------------------------------



<math.h>

double cos(double arg);
   인수 arg의 코사인 값을 되돌린다. 인수 arg는 래디안이다.

double exp(double arg);
   자연대수의 밑수 e(2.718282) 에 대하여 arg 제곱을 값을 되돌린다.

double fabs(double num);
   인수 num에 대한 절대값을 되돌린다

double fmod(double a, double b);
   값 a를 값 b 로 나눈 후 나머지 값을 되돌린다.

double log(double num);
   num에 대한 자연대수를 되돌린다. num의 값이 음수나 0 이면 에러가 발생한다.

double log10(double num);
   num에 대한 상용로그 즉 밑수 10에 대한 로그 값을 되돌린다. num의 값이 음수나 0 이면 에러가 발생한다.

double pow(double base, double exp);
   base를 exp 제곱한 값을 되돌린다. pow(2,4) 는 2^4 즉 16을 되돌린다.

double sin(double arg);
   인수 arg의 사인의 값을 되돌린다. 인수 arg는 래디안으로 표시되어야 한다.

double sqrt(double num);
   num의 제곱근의 값을 되돌린다. num의 값이 음수인 경우 에러가 발생한다.

double tan(double arg);
   인수 arg의 탄젠트 값을 되돌린다. 인수 arg는 래디안으로 표시되어야 한다.


sin(), cos(), tan(), exp(), log(), sqrt(), abs(), fabs(), pow(), fmod()
이 함수들은 수학 계산 함수입니다.
싸인, 코싸인, 탄젠트에 대한 함수들이 sin(), cos(), tan()이고,
exp()는 지수승, log()는 로그를 계산하는 함수죠.
sqrt()는 루트를 계산하는 함수구요.
abs()와 fabs()는 절대값을 구하는 함수인데요, abs()는 정수에 대해, fabs()는 실수에 대해 절대값을 구해줍니다.
pow()는 제곱근을 계산하는 함수입니다.
fmod()는 나눗셈의 나머지를 구하는 함수인데요, 실수에 대한 나머지입니다.


-------------------------------------------------------------------------



<time.h>
double difftime(time_t time2, time_t time1);
   time1과 time2의 차이 즉, time2-time1의 계산값을 초단위로 되돌린다.

time_t time (time_t *time);
   시스템의 현재 시간을 되돌린다.




<stdlib.h>
int abs(int num);
   num에 대한 절대값을 되돌린다.

double atof(const char *str);
   str에 의해 지정된 문자열을 실수(double) 값으로 변환한다.

int atoi(const char *str);
   str에 의해 지정된 문자열을 정수(int) 값으로 변환한다.

long int atol(const char *str);
   str에 의해 지정된 문자열을 long 정수(long int) 값으로 변환한다.

void exit(int exit_code);
   정상적으로 프로그램을 종료시킨다. 이때 열려진 파일은 모두 자동적으로 flush되며 닫힌다.

long int labs (long int num);
   long 정수(long int) num 에 대한 절대값을 되돌린다.

int rand(void);
   난수를 발생시킨다. 난수는 0에서 RAND_MAX 사이인데 RAND_MAX의 값으로는 최소 32,767이 할당된다.

double strtod(const char *start, char **end);
   start에 의해 지정된 문자열에 저장된 숫자의 문자열표현을 double로 바꾼 후 그 결과 값을 되돌린다.

long int strtol(const char *start, char **end, int radix);
   start에 의해 지정된 문자열에 저장된 숫자의 문자열표현을 long int로 바꾼 후 그 결과 값을 되돌린다.

int system(const char *str);
   str에 의해 지정된 문자열(시스템 명령어)를 운영체제의 명령어 처리기로 보낸다.



----------------------------------------------------------------------------------



텍스트화면 처리함수 <conio.h>

함수명 기능
텍스트입출력 cprintf
cputs
putch
getche
화면에 형식 지정된 출력
화면에 String 출력
화면에 단일문자 출력
화면에서 Echo 있는 단일문자 입력
화면 제어 clrscr
clreol
deline
gotoxy
insline
movetext
텍스트 윈도우의 clear
커서 위치에서 줄의 끝까지 clear
커서가 위치한 행 삭제
지정된 x, y로 커서 이동
커서가 위치한 행에 새로운 행 삽입
지정된 left, top, right, bottom에 해당하는 사각 텍스트의 복사
블록 이동 gettext
puttext
화면의 텍스트를 메모리로 복사메모리의 텍스트를 화면으로 복사
모드 textmode
window
텍스트 모드의 설정
텍스트 윈도우의 설정
속성 제어 highvideo
lowvideo
no rmvideo
textcolor
textbackground
textattr
고해상도 모드 설정
저해상도 모드 설정
정상 모드 설정
전경의 텍스트 색상 지정
배강의 텍스트 색상 지정
전경과 배경의 텍스트 색상 지정
화면 정보의획득 gettextinfo
where x
where y
현재 사용 중인 윈도우의 정보 획득
커서 위치의 획득(x)
커서 위치의 획득(y)


 

1) clrscr()
화면을 깨끗이 지우고 커서를 좌표 (1,1)로 이동한다.
2) clreol()
현재 커서위치에서 그 행의 끝까지 모든 문자를 지운다. 커서위치는 이동하지 않는다.
3) delline()
현재 커서가 있는 행의 모든 내용을 지운다. 커서위치는 이동하지 않는다.
4) gotoxy(x,y)
커서의 위치를 (x,y) 위치로 이동한다. cf)(1,1) ~ (80,25)
5) insline()
현재 커서위치에 공백 행을 삽입한다.
6) movetext(left, top, right, bottom, newleft, newtop)
left, top, right, bottom의 좌표값을 갖는 사각형 안의 내용을 newleft, newtop 위치로 복사한다.
7) gettext(left, top, right, bottom ,*destin)
left, top, right, bottom의 좌표값을 갖는 사각형 안의 내용을 destin으로 지정된 메모리 영역으로 저장한다.
직사각형에서 요구하는 공간은 다음과 같다.
bytes = 행 수 * 열 수 * 2
8) puttext(left, top, right, bottom, *source);
left, top, right, bottom의 좌표값을 갖는 사각형 안에 포인터 source가 지정한 메모리의 내용을 써넣는다.
9) textmode(mode)
텍스트 모드를 mode로 설정한다. cf)mode값 : 1,2

10) window(left, top, right, bottom)
스크린 상의 텍스트 윈도우를 정의한다.
ⓐ left와 top은 윈도우의 맨 윗쪽 왼쪽 코너 축이다.
ⓑ right와 bottom은 윈도우의 맨 아래 오른쪽 코너 축이다.
ⓒ full screen일 경우 default 값은 다음과 같다.
80칼럼 : 1, 1, 80, 25
40칼럼 : 1, 1, 40, 25

11) hightvideo()
현재 선택한 foreground색을 고밀도 텍스트 문자로 선택한다.
12) lowvideo()
저밀도 텍스트 문자로 비디오 상태를 선택한다.
13) normvideo()
보통 밀도 문자를 선택하는 비디오 상태로 한다.
14) textattr(attribute)
텍스트의 속성을 설정한다.
attribute 파라미터의 색상 정보는 다음과 같다.
비트 3 ~ 비트 0 : foreground 색상
비트 4 ~ 비트 6 : background 색상
비트 7 : 블랭크 비트, 여기서 비트 7 = 1 이면 문자는 블랭크가 된다.

15) textbackground(color)
새로운 텍스트의 배경색을 color 색으로 설정한다.
color : BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY
DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
16) textcolor(color)
새로운 문자에 대한 색을 color 색으로 설정한다.
17) gettextinfo(*inforec)
inforec으로 지정된 장소의 현재 텍스트 비디오 정보를 얻는다.
18) wherex()
커서의 x 좌표값(가로)을 알아낸다.
19) wherey()
커서의 y 좌표값(세로)을 알아낸다.


예제)
#include<stdio.h>
#include<conio.h>

void main()
{
/*char * str;
str = (char *)malloc(200);*/
/*textmode(1);*/
/*textmode(2);*/
/*window(5,3,50,10);*/
/*textattr();*/
/*textbackground(BLUE);
textcolor(YELLOW);*/

clrscr();
printf("%-4s내가 당신을 얼마만큼 사랑하는지 당신은 알지 못합니다.\n","1.");
printf("%-4s하지만 언젠가는 당신도 느낄 수 있겠죠.\n","2.");
printf("%-4s내가 당신을 얼마만큼 사랑하는지 당신도 느낄 수 있겠죠.\n","3.");
printf("%-4s비록 그 날이 우리가 이마를 맞댄 채 입맞춤을 나누는 아름다운 날이 아닌\n","4.");
printf("%-4s서로가 다른 곳을 바라보며 잊혀져 가게 될 각자의 모습을 안타까워하는\n","5.");
printf("%-4s그런 슬픈 날이라 하더라도 나는 후회하지 않습니다.\n%-4s\n","6.","7.");

printf("%-4s내가 당신을 얼마만큼 사랑하는지 당신은 알지 못합니다.\n","8.");
printf("%-4s그러나 내가 당신을 사랑하는 건 당신께 사랑을 받기 위함이 아닌\n","9.");
printf("%-4s사랑을 느끼는 그대로의 사랑이기 때문입니다.\n%-4s\n","10.","11.");

printf("%-4s\n%-4s\n","12.","13.");

/* printf("%-4s당신이 나를 얼마만큼 사랑하는지 나는 알 수가 없습니다.\n","14.");
printf("%-4s어두어진 방구석의 낡은 시계가 고개를 떨구어 할 즈음\n","15.");
printf("%-4s힘들게 잠들어야 하는 육체적 괴로움 속에서도\n","16.");
printf("%-4s지난 그리움에 허덕이며\n","17.");
printf("%-4s나 당신을 그리워하듯 당신도 그러할지 알 길이 없답니다.\n%-4s\n","18.","19.");

printf("%-4s당신이 나를 얼마만큼 사랑하는지 나는 알 수가 없습니다.\n","20.");
printf("%-4s아카시아 향내의 거리를 오가며 가슴속으로 다가오는\n","21.");
printf("%-4s당신에 대한 한없는 감정은 세월의 강인함에 고개 숙여버린\n","22.");
printf("%-4s꺾여진 고목의 그늘아래서도 나의 힘겨운 어깨 위의 사랑에는\n","23.");
printf("%-4s당신의 그 아름다운 마음마저 얹혀져 있습니다.\n","24.");*/


/*gotoxy(1,1);*/
/*gotoxy(80,25);*/
/*gotoxy(3,5); clreol();*/
/*gotoxy(6,6); delline();*/
/*gotoxy(3,10); insline();*/
/*movetext(5,4,44,6,30,19);*/
/*gettext(5,4,44,6,str); puttext(5,15,44,17,str);*/
/*printf("커서의 위치를 잘 봐두세요. ^^\r");
getch();
printf("\nx : %d, y : %d\n",wherex(), wherey());*/
}


/* 주석을 하나씩 지워가며 실행해 보세요. ^^ */








=====================================================================================



2. 런타임 라이브러리 (Run-time Libraries)

이 테이블은 Visual C++ 과 함께 제공되는 라이브러리와 Pre-Compiled Object 들의
기능에 대한 짧은 설명을 보여줍니다.

------------------------------------------------------------------------------
런타임 라이브러리 (Run-time Libraries)
------------------------------------------------------------------------------

파일설명

[Advapi32.lib]
레지스트리나 보안 관련 API 같은 진보된 API 서비스 들에 대한
임포트 라이브러리 입니다. 이 임포트 라이브러리와 링크하는 것은
당신의 프로그램에서 Advapi32.dll에 포함된 함수들을 사용가능하게
합니다.

[Atl.lib]
MS의 Active Template Library에 대한 라이브러리입니다.

[Binmode.obj]
이 모듈과 링크하면 C 런타임 라이브러리에 의해 오픈되는 화일들이
기본적으로 Binary 모드로 열리도록 만듭니다.

[Cap.lib]
Call Attributed Profiler 에 대한 인터페이스 입니다.
이 툴은 함수 호출 패턴(Function Call Patterns)을 분석함으로써
Win32 어플리케이션을 튜닝하게 해줍니다.

[Chkstk.obj]
런타임용 Stak-Depth 체킹 모듈입니다.
이 모듈은 모든 함수 호출전에 스택의 크기(Depth)를 체크함으로써
Stack Overflow 가 났는지 체크하는 것을 도와줍니다.
Windows NT 에서는 프로그램의 스택 세그먼트를 조심스레 체크하며,
스택 오버플로우가 난다면 프로그램을 깨끗히 종료시켜주므로
이 파일은 거의 필요가 없습니다.

[Comctl32.lib]
윈도우 공용 컨트롤(Windows common controls)에 대한 라이브러리
입니다.

[Comdlg32.lib]
윈도우 공용 대화상자(Windows common dialogs)에 대한 라이브러리
입니다. 이 라이브러리는 표준 화일오픈,화일저장,폰트선택,프린트
,컬러 선택 다이얼로그에 대한 인터페이스를 제공합니다.

[Commode.obj]
전역적인 File Commit Flag 값을 Commit 으로 설정합니다.
이 파일과 링크하는것은 오픈되는 모든화일이 기본적으로 Commit
모드에서 열리도록 합니다.

[Compmgr.lib]
컴포넌트에대한 임포트 라이브러리입니다.

[Ctl3d32.lib]
3차원(Three-D) 컨트롤에대한 지원 라이브러리입니다.
이 라이브러리는 다이알로그와 컨트롤이 3차원으로 보이도록 합니다.
이 파일은 거의 안쓰입니다. 단지 이전버젼과의 호환을 위해
제공됩니다.

[Ctl3d32s.lib]
Win32s 용 프로그램에대한 Ctl3d 라이브러리 입니다.

[D3drm.lib]
Direct3D 렌더링 모델(Rendering Model) API에 대한
라이브러리입니다.

[Daouuid.lib]
DAO 객체들에 대한 UUID 값을 가지고 있는 라이브러리입니다.

[Ddraw.lib]
DirectDraw API용 라이브러리입니다.

[Dflayout.lib]
Compound Document File(복합문서파일)에 대한 저장소 관리
(Storage Management)를 하는 OLE 함수들에 대한 임포트
라이브러리입니다.

[Dlcapi.lib]
DLC 3270 연결을 위한 라이브러리 입니다.

[Dplay.lib]
DirectPlay API용 라이브러리 입니다.

[Dsound.lib]
DirectSound API용 라이브러리입니다.

[Fp10.obj]
이 모듈과 링크하는것은 프로그램이 기본적으로 53비트 대신 64비트
부동소수점(Floating-Point Precision) 형식으로 알고리즘을
사용하게 합니다.

[Gdi32.lib]
Windows GDI 임포트 라이브러리 입니다. 이 라이브러리와 링크하는
것은 프로그램이 Windows 의 Graphic Device Interface 에 있는
SelectObject(),CreateFont(),LineTo() 와 같은 루틴을 호출하여
디스플레이나 프린터에 그리기를 수행할수 있도록 합니다.

[Glaux.lib]
OpenGL 보조 함수 라이브러리 입니다. 거의 모든 프로그램에서
사용되지 않으나, 이것은 OpenGL의 핵심(Core) 라이브러리의 기능을
향상시키도록 합니다. Opengl32.lib도 참조하십시오.

[Glu32.lib]
OpenGL 그래픽의 핵심 함수 라이브러리 입니다.
Opengl32.lib도 참조하십시오.

[Hlink.lib]
IHlink 와 관련 인터페이스 지원용 라이브러리 입니다.
이 인터페이스들은 ActiveX 객체가 일반적인 하이퍼링크 스타일
(Hyperlink-Style)의 이동을 구현하는것을 도와줍니다.

[Imagehlp.lib]
디버거 같은 시스템 툴들이 다른 프로세스를 관리하고 디버그
정보를 추출하도록 하는 루틴이 들어있는 라이브러리 입니다.

[Imm32.lib]
Input Method Editor(IME)의 사용에 라이브러리입니다.
IME는 조그만 팝업윈도우창으로 보이며,다른나라 글자를 선택하도록
해줍니다. (한글윈도우 사용자는 다들 아시죠..? )

[Kernel32.lib]
Windows Kernel 의 임포트 라이브러리입니다. 이 라이브러리와
링크함으로써 Windows kernel 안에 들어있는 루틴의 호출이 가능해
집니다. Windows Kernel 에는 CreateSemaphore() 나 GlobalAlloc()
같은 함수들이 포함되어 있습니다.

[Largeint.lib]
수학계산용 Large Interger지원 라이브러리입니다. 이 라이브러리는
단지 호환목적으로 제공됩니다. Visual C++ 의 컴파일러는
기본적으로 64Bit Integer 를 지원합니다.

[Libc.lib]
표준 C Runtime 라이브러리입니다. 이 라이브러리는 sprintf() 나
strcpy() 같은 함수들이 포함되며,프로그램에 정적으로 링크됩니다.
이것은 멀티쓰레드나 재진입(re-entrant) 프로그램에는 안전하지
못합니다.

[Libcd.lib]
표준 C Runtime 라이브러리의 Debug 버젼입니다. Debug 빌드에선
Libc.lib 대신 이것을 사용합니다. 이것은 프로그램에 정적으로
링크됩니다.

[Libci.lib]
표준 C 라이브러리입니다.이 라이브러리는 Libc.lib 와 비슷하지만,
이것은 이전 버젼의 Visual C++ 에서 제공된 표준 라이브러리에서
지원된 표준 iostream 라이브러리와의 호환성을 제공합니다.
(iostream이 구형이라는 얘기죠..) 이것은 프로그램에 정적으로
링크됩니다.

[Libcid.lib]
구형 iostream 버젼이 포함된 표준 C 라이브러리의 Debug버젼입니다.
역시 프로그램에 정적으로 링크됩니다.

[Libcimt.lib]
구형 iostream 버젼이 포함된 표준 C 라이브러리의 멀티쓰레드에
안전한 버젼입니다. 역시 프로그램에 정적으로 링크됩니다.

[Libcimtd.lib]
구형 iostream 버젼이 포함된 표준 C 라이브러리의 멀티쓰레드버젼의
Debug 빌드입니다. 역시 프로그램에 정적으로 링크됩니다.

[Libcmt.lib]
멀티쓰레드 프로그램이나 재진입 프로그램에서도 사용이 안전한
sprintf() 나 strcpy() 같은 함수들이 포함된 C 런타임 라이브러리의
멀티쓰레드 버젼입니다. 역시 프로그램에 정적으로 링크됩니다.

[Libcmtd.lib]
바로위의 Libcmt.lib의 디버그 버젼입니다.
역시 프로그램에 정적으로 링크됩니다.

[Libcp.lib]
표준 C++ 런타임 라이브러리 입니다. 이것은 호출하는 프로그램에
정적으로 링크되며, 멀티쓰레드나 재진입 프로그램에 안전하지
못합니다.

[Libcpd.lib]
표준 C++ 런타임 라이브러리의 Debug 버젼입니다.
역시 프로그램에 정적으로 링크됩니다.

[Limcpmt.lib]
표준 C++ 런타임 라이브러리의 멀티쓰레드 버젼입니다.
역시 프로그램에 정적으로 링크됩니다.

[Libcpmtd.lib]
멀티쓰레드 C++ 표준 라이브러리의 디버그 버젼입니다.
역시 프로그램에 정적으로 링크됩니다.

[Loadperf.lib]
이 임포트 라이브러리는 Performance Counter 에 관련된 레지스트리
값들의 초기화를 지원하는 루틴들을 포함합니다.
이 라이브러리는 보통 인스톨 프로그램들에 사용됩니다.

[Lz32.lib]
Lempel-Ziv압축해제 루틴 라이브러리입니다. 보통 인스톨 프로그램에
의해서 사용됩니다. 이 라이브러리는 압축루틴이 없으며,
단지 압축해제루틴만 들어있습니다.

[Mapi32.lib]
Microsoft Mail API 라이브러리 입니다..

[Mfcapwz.lib]
Custom Wizard의 개발을 가능하게 해주는 클래스와 함수들이 포함된
라이브러리입니다.

[Mfcclwz.lib]
Custom Wizard의 개발을 가능하게 해주는 클래스와 함수들이 포함된
라이브러리입니다.

[Mfcuia32.lib]
OLE 공통 사용자 인터페이스(Common User Interface)에 대한 MFC 의
구현부분이 들어있습니다. Oledlg.lib 와 비슷하지만 Unicode 대신
ANSI 인터페이스를 지원합니다.

[Mgmtapi.lib]
SNMP(Simple Network Management Protocol) Management API입니다.

[Mpr.lib]
연결관리(Connection Management)를 위한 LAN Manager 스타일의
네트웍 API 가 들어있습니다. 이 API 들은 Windows 상에서 Connect와
DIsconnet 를 가능하게 합니다.

[Msacm32.lib]
Microsoft Audio Compression Manager API(오디오 압축 관리자 API)
입니다. 이것은 Audio Waveform 데이타를 압축하고 해제하는
유틸리티들입니다.

[Msconf.lib]
Microsoft ActiveX Conferencing API 에 대한 라이브러리입니다.

[Mslsp32.lib]
License Service API 에 대한 임포트 라이브러리입니다.

[Msvcirt.lib]
구형 iostream 버젼이 포함된 표준 C 라이브러리의 DLL Build에 대한
임포트 라이브러리 입니다. 이 라이브러리는 Libci.lib 라이브러리의
DLL 버젼에 대한 임포트 라이브러리입니다.

[Msvcirtd.lib]
Mscvirt.lib 라이브러리의 디버그 버젼에 대한 임포트 라이브러리
입니다.

[Msvcprt.lib]
표준 C++ 라이브러리의 DLL Build 에 대한 임포트 라이브러리입니다.
이것은 Libcp.lib 라이브러리의 DLL 버젼에 대한 임포트 라이브러리
입니다.

[Msvcprtd.lib]
Msvcprt.lib 라이브러리의 디버그 버젼에 대한 임포트 라이브러리
입니다.

[Msvcrt.lib]
표준 C 라이브러리의 DLL Build 에 대한 임포트 라이브러리입니다.
이것은 Libc.lib 라이브러리의 DLL 버젼에 대한 임포트 라이브러리
입니다.

[Msvcrtd.lib]
Msvcrt.lib 라이브러리의 디버그 버젼에 대한 임포트 라이브러리
입니다. Retail Build 에서 Msvcrt.lib 를 사용한다면 Debug Build
에서 이것을 사용하십시오.

[Mswsock.lib]
Windows Sockets 2 API 에 대한 Microsoft 의 특정 확장부분
(MS-Specific Extension)에 대한 임포트 라이브러리입니다.

[Mtx.lib]
Microsoft Transaction Server(MTS) 프로그래밍 인터페이스
라이브러리입니다.

[Mtxguid.lib]
MTS 에 의해 지원되는 객체들의 Guid 들을 가지고 있는
라이브러리입니다.

[Nddeapi.lib]
Network DDE API 입니다. DDE 스타일의 서비스를 네트웍을 통하여
시스템간에 사용가능하도록 해줍니다.

[Netapi32.lib]
LAN Manager API Interface 입니다. 이 라이브러리는 MS 의 NOS
(Network Operation System)에 의해 제공되는 저수준의 기능들을
사용하도록 해주는 함수들을 포함하고 있습니다.

[Newmode.obj]
당신의 Application 이 malloc() 함수 호출에 실패했을때 new
연산자의 에러 처리 메커니즘을 사용하도록 하여줍니다. 기본적으로,
이것이 동작하지는 않습니다: malloc() 이 실패한다면, NULL 을
리턴하지 예외를 발생시키지(Throw) 않습니다.
이 모듈과 링크하는것은 malloc() 호출 실패시 new 연산자의 에러
처리루틴을 호출하는 것으로 C 런타임 라이브러리의 동작을
변경합니다.

[Ocx96.lib]
OCX 96 스펙(Specification)에 명시된 인터페이스들에 대한
UUID들이 포함된 라이브러리입니다.

[Odbc32.lib]
ODBC API 라이브러리입니다. 이 라이브러리는 데이터베이스
응용프로그램에 대한 하부 독립적인 API 들을 제공합니다.
이 라이브러리는 MFC 에 의해 다시 추상화 됩니다.

[Odbccp32.lib]
ODBC control panel applet(제어판에 등록되는 응용프로그램) 에
관한 인터페이스가 포함된 라이브러리입니다.

[Oldnames.lib]
"Kernighan and Ritchie C" 와 호환되는 이름을 가진
표준 C 런타임 라이브러리 함수들입니다. 이 라이브러리는 K&R-C의
execv() 같은것을 ANSI-C 의 같은 함수인 _execv() 에 매핑(Mapping)
해줍니다.

[Ole32.lib]
32-bit OLE 지원을 위한 Core 라이브러리입니다.

[Oleaut32.lib]
32-bit Automation interface에 대한 라이브러리입니다.

[Oledlg.lib]
OLE 공통 사용자 인터페이스(Common User Interface)에 대한 System
Implementation입니다. OleUiEditLinks() 나 OleInsertObject()와
같은 함수들을 포함합니다.

[Olepro32.lib]
OLE Property Frame API 입니다. 또한 OLE Font (IFont) 나 Picture
(IPicture) 프로퍼티 들에 대한 구현도 포함하고 있습니다.

[Opengl32.lib]
OpenGL 의 Core 함수 라이브러리입니다.
OpenGL 은 Silicon Graphics에 의해 정의되고 Microsoft 에 의해
Win32 용으로 구현된 Graphic Rendering Language 입니다.
Glu32.lib 와 Glaux.lib 도 참조하십시오.

[Pdh.lib]
Performance Data 헬퍼함수들에 대한 임포트 라이브러리 입니다.
이 Win32 API의 부분들은 프로세스에대해 Performance Counter 들을
작성하고,질의하고,갱신하는것을(Create,Query,Update) 도와주는
쉬운 인터페이스들을 포함하고 있습니다.

[Penwin32.lib]
Pen Computing 용 Windows에 대한 확장 라이브러리입니다.

[Pkpd32.lib]
Pen Windows 의 커널함수들입니다.

[Rasapi32.lib]
클라이언트용 Remote Access Service(RAS) API 입니다.
이 라이브러리에 있는 함수들은 모뎀이나 그 비슷한 저속회선 연결을
통해 원격지 컴퓨터에 연결하도록 해줍니다.

[Rasdlg.lib]
RAS 응용프로그램에 대한 Common User Interface 요소들을 포함하고
있는 라이브러리입니다.

[Rassapi.lib]
RAS 서버쪽 API 들입니다.

[Rpcndr.lib]
Remote Procedure Call(RPC) Helper Function API 들입니다.

[Rpcns4.lib]
RPC Name Service 함수들 입니다.

[Rpcrt4.lib]
RPC Windows run-time 함수들 입니다.

[Scrnsave.lib]
화면보호기(Screen saver) 에 대한 인터페이스입니다.

[Setargv.obj]
이 모듈과 링크하는 것은 콘솔 프로그램이 Wildcard(*,?) 를 사용한
Command Line Parameter들을 실제 파일이름들로 지정하도록 확장하여
줍니다. 각 파일은 main() 의 argv 인자에 들어가게 됩니다.
윈도우에서 사용하려면 Wsetargv.obj 를 살펴보십시오.

[Setupapi.lib]
파일 설치와 삭제에 관련된 함수들입니다. 셋업프로그램에서
사용됩니다.

[Shell32.lib]
Windows Interface Shell API 들입니다. 이 API 들은 예를 들어
Norton Desktop for Windows와 같은 프로그램에 사용된 실행파일에서
아이콘을 추출하거나 Command Line Parameter 를 사용해 다른
프로그램을 실행하는등의 기능을 제공합니다.

[Snmpapi.lib]
Simple Network Managerment Protocol(SNMP)에 관련된 주 API 함수들
입니다. TCP/IP 네트웍에 대해 이 프로토콜은 Gateway 나 연결될
네트웍들을 모니터링하는데 사용됩니다. Mgmtapi.lib 와 연관되어
있습니다.

[Svrapi.lib]
Inter-Server Communication 에 관한 Network API 들입니다.

[Tapi32.lib]
Microsoft Telephony API(TAPI) 라이브러리입니다. lineOpen() 과
같은 telephony API 들을 구현합니다.

[Th32.lib]
32-bit Toolhelp 라이브러리입니다. 이 라이브러리는 Debugger 나
저수준의 툴을 작성할때 도움을 주는 함수들을 제공합니다.
예를들어 이 라이브러리의 루틴들을 윈도우상에서 프로세스나
쓰레드들을 Enumerate 하게 해줍니다.

[Thunk32.lib]
Thunk 컴파일러의 런타임 지원 루틴들입니다.
(Thunking 이 뭔지 아시죠?)

[Url.lib]
이 파일은 URL 을 Parsing 하거나 MIME 헤더를 해석하는데 사용하는
루틴입니다. 이 라이브러리에 있는 함수들은 현재 문서화가 되어있지
않으며, 이것은 Win32 SDK 의 이후 버젼이나 Visual C++ 의 이후버젼
에서 더 정제되고, 무리없게 지원될것입니다.

[Urlmon.lib]
URL 모니커(moniker)의 런타임 지원 라이브러리에 대한 임포트
라이브러리입니다.

[User32.lib]
윈도우즈의 USER.EXE 에 대한 임포트 라이브러리 입니다.
이 라이브러리와 링크하는 것은 프로그램이 Windows 의 UI 부분을
사용할수 있도록 해줍니다. 이 라이브러리는 CreateDialog() 나
CreateWindow() 같은 함수를 포함합니다.

[Uuid.lib]
Stock(내장된) OLE 객체에 대한 표준 UUID 들입니다.

[Vdmdbg.lib]
이 라이브러리에 있는 함수들은 NT VDM 안에서 디버깅 하는것에
관련된 기능들을 지원합니다.

[Version.lib]
GetFileVersion() 과 같은 버젼 확인 API 들입니다.

[Vfw32.lib]
Video for Windows API 들입니다. 이 라이브러리에 있는 함수들은
Multimedia 비디오와 오디오를 재생,녹음,수정,저장 하는것을
가능하게 합니다.

[Webpost.lib]
WebPost API 임포트 라이브러리입니다. 이 라이브러리는 ISP
(internet Service Provider)에 의해 제공되는 웹 사이트에 사용자의
컴퓨터에서 데이타를 올리는것이 가능하도록 도와줍니다.

[Win32spl.lib]
Win32 spooler API 입니다. 이 파일에 있는 루틴들은 다른 프로그램
이나 컴퓨터들로부터 Print Spooler Status에 접근하는것을 가능하게
해줍니다.

[Wininet.lib]
Windows Internet Client API 들입니다.

[Winmm.lib]
Windows Multimedia API 들입니다. Multimedia Device Management,
Timer, Wave 파일, Multimedia I/O 제어함수 같은 것을 포함합니다.

[Winspool.lib]
The Win32 spooler API 입니다. 이 라이브러에 보이는 루틴들을
프로그램이 프린트 하는 동안 Windows Print Spooler 의 기능을
사용하도록 해줍니다.

[Winstrm.lib]
Windows NT의 TCP/IP interface들 입니다. 이 파일은 TCP/IP Routing
함수같은 것들을 제공합니다.

[Wintrust.lib]
ActiveX 객체에 대한 Trust Verification(신용확인) 에 관한 API들의
임포트 라이브러리입니다. 이것은 WinVerifyTrust() 같은 함수들을
사용가능하도록 합니다.

[Wow32.lib]
이 라이브러리는 16-Bit 와 32-Bit 객체간에 핸들을 변형하도록 하는
Generic Thunking 메커니즘에 의해 사용됩니다. 이 라이브러리는
또한 16 Bit 프로세스에서 32-Bit 메모리를 관리하도록 하는것을
도와줍니다.

[Ws2_32.lib]
Windows Sockets 2.0 API 입니다.

[Wsetargv.obj]
이 모듈과 링크하는 것은 Windows 프로그램이 Wildcard(*,?) 를
사용한 Command Line Parameter 들을 실제 파일이름들로 지정하도록
확장하여 줍니다. 각 파일은 main()의 argv 인자에 들어가게 됩니다.
콘솔 프로그램에 사용하려면 setargv.obj 를 살펴보십시오.

[Wsock32.lib]
Windows Sockets APIs.

[Wsock32.lib]
Windows Sockets API 입니다.

[Wst.lib]
Working Set Tuner DLL 에 대한 인터페이스 입니다.
Working Set Tuner DLL 은 프로그램을 조사하여 프로그램의
Working Set 을 최소화하도록 도와줍니다.


============================================================================

참고할점은 주 API 들과, 헤더 파일 그리고 라이브러리들의 요약이 Lib 디렉토리에 있는 Win32api.csv 에 들어있다는 것입니다.
이 파일은 Comma Separated Variable File(*.csv) 이며,  엑셀같은 스프레드쉬트 프로그램에서 읽어들일 수 있습니다.

Trackback 1 Comment 0

[MFC] dialog기반 반투명 다이알로그 만들기

1. dialog기반 생성

 

 

2. 다이알로그 편집.

 

3. 소스 편집

  1) 헤더파일에 다음을 추가한다.

#define WS_EX_LAYERED           0x00080000
#define LWA_COLORKEY            0x00000001
#define LWA_ALPHA                   0x00000002
#define ULW_COLORKEY            0x00000001
#define ULW_ALPHA                   0x00000002
#define ULW_OPAQUE                0x00000004

 

typedef BOOL (WINAPI *SLWA)( HWND hwnd, COLORREF crKey,

                     BYTE bAlpha, DWORD dwFlags );

 

  2) slider컨트롤은 control변수 edit 컨트롤은 value변수를 생성한다.(m_ctrlSlider와 m_nEdit)

 

  3) 소스파일을 편집한다.

      OnInitDialog()에 초기화할 값 m_ctrlSlider.SetRange(0,100);으로 값의 범위를 준다.

      m_nEdit는 100으로 초기화 하도록 생성자에서 설정해주고, 다이알로그가 생성되면서

      초기에 Slider의 눈금 위치가 100을 가리키도록  m_ctrlSlider.SetPos(100); 을 넣어준다.


      SetTransparency()함수를 생성하고, SetTransparency()을 다이알로그가 생성되는

      곳, 또는 여기서는 slider 컨트롤에 따라 다이알로그의 투명도를 설정하므로

      OnHScroll에 넣어주면 된다. 또한 Edit 컨트롤러의 값을 변경시에도 그 결과가

      다이알로그에 반영되도록 하기위해서 OnChangeEdit1() 를 만들어 넣어준다.

소스파일내 다음 세 함수를 참고

void CSemitransparentDlgDlg::SetTransparency(int percent)
{
   ...
}

 

void CSemitransparentDlgDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
   ...
}


void CSemitransparentDlgDlg::OnChangeEdit1()

{
   ...
}

 

 

- 각 위치별 스크린 샷




Trackback 4 Comment 1

[VC++] 개발팁 모음

트루 칼라를 사용하는 방법을 알고 싶거든요...???
pop3서버와 관련된 질문입니다.
다이얼로그 박스기반의 윈도우에 메뉴를 띄우려면???
DAO에서 두개의 테이블 조인???
모달리스 다이얼로그와 작업표시줄...
뷰윈도우에서 차일드 윈도우 만들기..
OCX를 만드는데
현재 어플리케이션에 HWND얻어오는 방법
16bit 비트맵 파일의 헤더정보에 대해...
vb에서 만든 dll을 vc에서 쓰는법좀 가르쳐줘요...
메세지 훅킹에 의한 상하 좌우 키보드 조작법을 알고 싶습니다.
edit control에서 입력되는 FontSize를 줄이는 방법?
현재 프린트 스풀러에 대기중인 모든 작업에 대한 정보를 얻는 방법
비주얼씨에는 비주얼베이직의 DoEvents같은게 없나요??
ASX에 있는 ASF 파일을 다운로드 받을 수 있는 방법은?
Visual C++ 를 처음 시작하려 합니다. 도움이되는 사이트좀
실행프로그램을 항상 최상위 화면에 띄울려면..
숫자를 String으로 바꾸는 방법은?
DialogBar에 클래스를 만들었는데, 메인프레임에서도 핸들러 함수를
vfw 함수중 hwnd 의 핸들은 어떻게...
슬라이더 컨트롤 사용법 중에서... ( CSliderCtrl )
2개의 txt파일을 읽어 비교하고 새 txt파일에 다시 저장하기
[ActiveX]Visual C++가 설치 되지 않은PC에서 사용방법
mdi에서 활성화된 뷰 포인터 얻어오는게 잘 이해가..
화면출력할때 출력변수와 도큐먼트변수의 차이점이 뭔지요...
불안한데..
ACM을 이용한 음성 압축 방법에 대해
c파일을 c++로 전환하기..
waveform..
다이얼로그의 크기 조절은 어떻게..
avi 를 asf로 변환하는 방법?
여러종류의 MDI ChildFrame을 갖고싶은데....
다이얼 로그 화면에 있는 그림 제어하기
리스트 컨트롤에서....
VC에서의 에러 메시지
유니코드 정의는 어떻게...
분할윈도우에서 툴바의 활성화 상태를 체크 하는법
메일체커 프로그램을 만들고 싶습니다...
GetDescendantWindow()가 뭐하는 거죠?
activex에서 다른 프로젝트에 있는dialog form을 불러들이려면
컨트롤에 대한 질문
M/HTML 즉 HTML 기반 E-MAIL 프로그램을 만들고 싶습니다.
컨트롤을 제거하려면?
다이얼로그를 다른데서 붙여 넣기하니까 "빈문서 작성 실패" 메세지가 나와
압축된 *.bmp 을 풀어주세요
Dialog 스크롤
DAO로 작성한 프로그램 배포
CTreeControl의 특정아이템 폰트색바꾸기
VARIANT 사용법에 대하여...
[코덱]에 대해서...
컨트롤..
다이얼로그 박스에 선그리기
CFileDialog 에서...
디버그
static text 컨트롤에 그래프를 나타내려면..
CWinThread클래스를 얻으려고 합니다.
MDIGetActive()와 GetActiveFrame()의 차이는 뭐죠
다이얼로그 박스에 비디오로 찍은 화상을 원하는 위치에 디스플레이하려면??
mdi에서 활성회된 모든 뷰 없애기
홈페이지에서 링크를 눌러 pc의 프로그램을 실행시키는 방법
activex에서 버튼..을 만들려면
[질문]슈팅겜 유도탄 알고리즘은 어떻게 구현하나용 ^^;
이미지를 Formview 에 깔기..
컨트롤 리스트에 저장된 파일을 불러올수는....
비트맵을 이용한 하이퍼링크
DLL 함수에서 일반 application 내부 함수를 호출하려면?
변수들의 메모리해제 문제거든요?
조건문에서 like문 사용에 관해서...???
아주간단한 질문.진짜 쉬운거요...
다이얼로그 박스를 일정시간 지나면 사라지게 하려고요...??
시리얼 통신에서 0x13과 0x11이 안들어옵니다
여드름 없애려먼 어떻게 해야하나요?확실한 답변 부탁드려요..;
CArray 템플릿 사용에서 에러가 나는군요.
[급]ODBC 또는 ADO로 원격 Database접속 방법
영진출판사 bible 의 automation 예제 따라하다 가 이상한 메
E-Mail Client 를 짜려합니다. 로컬 vs 서버의 처리 부분이?
OpenGL에서 2D로 원을 그리는 함수가 뭐죠?
CreateSemaphore() 의 인자설명에 대해서
세마포어에서왜 for 문을 돌때마다 ReleaseSemaphore해주는지
html help workshop 는 어디에?
비쥬얼 C++ 에서비트맵 여는 소스
여러 함수에서 특정 클래스를 접근하려고 할때...
Formview 에서 글자 변경
[질문]소켓프로그래밍에서..서버쪽의 Accept에 대하여..
ListCtrl에서 몇번째item을 선택했는지 어떻게 알죠?
함수를 Parameter로 사용하고 싶은데요..
이 함수좀 알려 주세요....T.T
원자를 무한하게 쪼개면 어떻게 되나?
이미지의 윤곽만을 나타내고 싶습니다.
포인터 관련 질문
thread를 통한 다이얼로그 생성
RichEditView에서 이미지 추가시 추가 파일의 경로 아는법??
Printer 제어
버튼을 누르면 해당곳에 list가 나오도록
자신의 IP 주소를 아는 방법
파일에서 문자열 읽어오기
Win 32 Internet API (WinInet)에 대하여...
Makefile에 대한 궁금한점
OnInitialUpdate()호출하는 방법이 어떻게 되죠?
[질문] 다이얼로그에서 뷰로 SendMessage...
iehelper object에 대해서..
에러원인좀 ....
방화벽에 관해서
[질문] 이쁜 윈도우프레임과 버튼 만들어 붙이는 방법.....
파일 입출력에서 날짜가 있는 부분만 추출하고 싶습니다.
인스턴스를 종료시키는 방법
파일 삽입
자동으로 파일 카운트되어 파일 생성
프로그램 내에서 액셀 파일 생성 방법..
컴퓨터의 행동 기록하기-- 일종의 스크립트?
간단한 질문 하나 ~
용어 설명좀 부탁드립니다.
CStatic 클래스 다루기....
윈도우를 수동으로 만드는 예제
MFC 용 DLL 을 여러개 삽입해서 사용하는 방법이 궁금합니다.
capGetDriverDescription..
리스트 컨트롤 큰아이콘으로 보기에서 아이콘의 간격 조절하기..
리스트박스에서 멀티셀렉트 아이템 얻기
static에 그림 그릴때 이런경우는.....?
local function definitions are illegal?
PropertySheet에서의 창크기 조절...
텍스트 화일을 읽고 이진화일로 저장하기
c++관련한 oop?
파일 Size를 바꿀수 있나요...
VC++로 메일 보내기
CBitmap 형태의 비트맵을 DIB 로 변환하는 방법?
mdb파일에서 필드 속성을 날짜 시간으로 했는데, 그것을 ado를 써
에디트 박스에서....
변수선언에서 에라가 ..
폰트를 이용해서 글자의 색을 바꿀수가 있나요?
TV카드를 사용해서 VFW함수를 이용해 다이얼로그 박스에 화면 출력까진
빠르게 폴더 겟수 얻기
CFtpConnection::GetCurrentDirectory() 사용
아주 간단한 질문
http 를 사용해 post 방식으로 데이타나 파일을 보낼려고 하는데,
include
익스플로러의 경로알아내기
클래스와 클래스에서 데이터 교환
툴바의 위치 복원 문제
웹서버에 내용을 읽어 오는 mfc함수
CProperty sheet 의 생성은 어디에서 하나요?
[진짜진짜급한질문] 다이얼로그 박스를 SDI형식으로 만들기...
DLL작성시 LNK2005에러...
타이머를 2개 사용하여 각각 다른 행동을 하려 합니다
AfxMessageBox 를 자동으로 닫는다?
게임 프로그래머가 되기 위해서는?
포토샵의 layer처럼....
ie 의 인터넷 옵션값 읽어오기(레지스트리 뒤져서)
카운터 2개의 이용시 값이 같이 카운팅
MFC 오랜 경험자 우대 ~!
[질문] FTP에서 폴더 전체를 업다운로드시키는 방법...
파일 입출력???
클래스에 관한 질문입니다.
timer..
html preview는 어떻게...?
<질문>read only 컴파일에 대해서..
콤보박스의 사용법에 대한 질문
새로운 클래스에 이벤트를 넣고 싶어요..
RegQueryValueEx() 함수를 사용해 인터넷 옵션값을 읽어오는데
프로젝트 설계시 역할분담?
긴 문자열에서 원하는 문자열 짤라오기
다이얼로그 박스를 외부 프로그램에서 메세지 보내기.
한글에서와 같은 눈금 표시는 어떻게 하나요???
네트워크 프로그래밍에 대한 조언 부탁해요.
링크에라..?
capCreateCaptureWindow..?
[질문]메뉴와 툴바등을 DLL로 만들어서 프로그램에 적용시키기.
SendMessage에 대해서 해결 좀....
시계 사용법..
ListControl 에 검색에 관하여
MDI 에서 child frame을 화면중앙에 위치시키려면
초급이지만 급한 것!!! 다얄록 베이스에서 마우스 바꾸기~
turboC 에서 프로그램의 실행결과를 보려면
CLIstCtrl 에서 검색하기..
Dialog base에서 툴팁
프로그램실행에 대해??
쓰레드 종료시 생기는 메모리 릭에 대해서..
VC에서 .C 파일을 C++로 컴파일하도록 지시하는 법
질문]SendMessage에서...
CPropertySheet 폰트변경
H 로 시작하는 데이타 타입..
다이얼로그기반에서 (비)활성화는 어떻게...
[질문] MFC확장 DLL 실행.
LDAP로 oracle연동...
winsock2 programming?
C++에서..
c++의 새로운 형변환에 대해
MFC에서 캠자원 쓰는 프로그램을 하고싶은데.. 가이드할만한 자료좀 부탁
WM_ERASEBKGND
[질문] 익스플로러를 보면 앞으로 뒤로가 있고...
CFileDialog에서 선택한 파일을 열려면...
좌표계를 바꿀려면...?
여러개의 다이얼로그를 사용하는 프로그램
employee* employee::list = 0;의 의미는???
무슨 뜻의 에러인지 알려주세요
ocx등록?
하노이 타워 & 재귀함수...
윈플밍 초보자로서 질문 !
패기지,배포..
IE의 SaveAs ?
zip module
scanf함수에서..
32x32이상의 아이콘
DB를 리스트 컨트롤로 나타내려면...
ODBC 나 DAO 화일처리시......
런타임오류에 대해
Media Player OCX Source를 구합니다
SendMessage, PostMessage, Message 핸들러..
최대화 버튼을 내가 만든 비트맵으로 바꿔칠수 았나요?
double 형 변수를 출력하려고 하는데 문제가...
스트링 리소스..
PtInRect() 함수에서 마이너스 좌표 계산에서 뭔가 이상해요
DLL작성중 String Table의 ID로String처리를 하고자할경우
ftp에서 진짜 진짜 궁금하고 빠른답변을원하는질문....
[질문] 파일을 바이너리로 저장하는 방법
[질문] activeX 만들때 Size 조절을 못하게 하려고 합니다
텍스트 박스 동적으로 En/Disable 시키기
마우스 커서를 바꾸려고 하는데..
slider control를 비트멥(bitmap)이미지를 이용?
ftp에서 다운로드받을때 진행사항을나타내는 박스를 만드는법...
탐색기에서 오른쪽 마우스 눌렀을때
특정버퍼의 프린터 출력..
외부 html화일 실행시키기..
스플래쉬 윈도우 띄우는 방법
text_control ?폰트크기변경
다른 윈도우의 컨트롤을 제어하는법...
프로그램 실행화일이 위치한 절대 경로 받기..
class들의 비교가 가능한가요??
마우스포인터가 위치한 곳의 문자열 가져오기(훅킹관련)
다이얼로그 base중에...
어들레스에 관한 질문
에러 해결
스태틱 콘트롤의 BN_CLICKED이벤트
키보드의 키를 동시에 2, 3, 4개를 눌렀을 경우 처리
다이얼로그를 항상 화면의 맨 위에 띄우게 하려면
모달리스 박스에서 저절로 닫힙니다.(에딧박스에서 엔터시)
로그온하는 dialog 이외의 부분을 누르면 띵 소리나며 반드시 로그온이
디이얼로그기반에 db연결할려면
WIN32 기반으로 EditBox를 구현하고 싶은데요.
5.0프로그램 열기?
에디트박스에 커서 위치시키기
스페이스 문자의 넓이조정...
일반뷰에서 데이터베이스 출력
변수 에라?
DC를 이용한 버튼만들기 질문입니다.
알고리즘영??
[급]다른 프로그램 실행...
함수를 알고 싶습니다.
[급..급..]og기반 Program에서
DC와 Bitmap의 관계?
전역 변수 사용법을 알려주세여...
splash는 꼭 SDI나 MDI에서만 되는지...
[질문] ActiveX에서 structure와 비슷한 형태로 사용하기..
내가 만든 클래스를 4대 클래스에 접근할 수 있는 방법
CEditView 클래스 의 클라이언트영역에 폰트를 바꿀려면.
조이스틱을 MFC에서 다루는 방법좀 알려주세요.
마스터 볼륨에서 마이크 옵션 컨트롤하기
타이틀바 속성 뺀 다이얼로그 에서 작업표시줄에 아이콘 표시하려면?
도형 이동하는 방법 알려주세요
고급기술 한가지 가르쳐 주세요
릴리즈모드에서 디버그모드로 바꾸는 법
다이얼로그에 jpg 올리려면 어떻게 하죠?
SendMessage로 데이타를 보내려는데......
시리얼화(serialization)에 대한 개념이 궁금해서요???
공부하는 방법이 영..; 감을 못잡겠네요
CEdit 개체에서 키보드 입력을 받지 않도록 하는 방법이요?
Bitblt()에 대하여
fgets()에 대하여
SDI에서 MoveWindow()를 통해 윈도우 전체 영역 이동하기...
IHTMLDocument3 Interface 를 사용하고 싶을경우는??
이런 오류를 경험 해보신분.........
바탕화면 위,아래에 도킹되는 윈도우
split window에서 보더 없애는 법.
메신져의 자리비움 기능
[질문]바꿀 수 있는 다이얼로그의 바탕색 수(종류)????
윈도우에서 실행중인 프로그램을 가져오는 방법
ShellExecute와 Win2000 ?
스트리밍기술을 배우고싶은데 어떻게 해야..
원하는 디렉토리 안의 디렉토리 리스트를 캐취해오고 싶습니다.
Tiff 그림 화일 포맷에 관한 c소스를 찾습니다.
[질]release 컴파일 후 OCX의 소켓이 다운되는 이유....
Window 좌표setting 함수에 대해
초기 화면view에 propersheet를 삽입하려고 합니다.
음성소켓의 전송 G723.1 코덱으로...
답변부탁드립니다꼭이요
장난치다가 제가 개 안경을 밟았다고 돈 반값만 달래요!!! 어떻게 해야돼
에러좀 잡아주세요!!
MFC SDI>> 이게 왜 지역 변수 선언이 안된다는 것인지?
sql server 7.0 연동..시작할때 로그인문제..
리스트컨트롤에 색깔 넣기..
Html help를 어떻게..
Internet Explorer 의 Temp Directory
Picture 콘트롤에 있는 비트맵 이미지 바꾸기
모드 변환하는거............(0점 좌표)
클라이언트 영역에 아이콘 그리는 방법????
현재 화면의 크기를 구할려면..??
저 좋아하는 사람이 있어요.
bitmap파일을 직접 로드하고 싶어요.
Out-of-band 라는 것이 머죠??
프로세스 동기화문제..
간단하지만 풀지 못하는 에러???;;
TWIP에 관하여
파일 입력..
메세지를박스 자동으로 없앨수 있나요?
트리의 TVN_ENDLABELEDIT에 관해서...
string형을 char배열에 치환하는 함수..?
하드웨어통신 프로그램에 대한 조언 부탁합니다.
인간관계에서 이상적인 관계를 맺기 위해 필요한 것은?
C++프로그램을 웹에...???
데이타베이스에 관한 문제??
USB 포트를 이용하여 2대의 PC사이에서 통신을 할려고 합니다.
경로(폴더) 선택 대화상자
프로퍼티 시트의 위치 조정..
담배/마약 ?
MFC 클라이언트 배경화면에 대하여 질문입니다.
오라클 db에 접속하는 방법좀...
Group Box에 색깔 입히기....
ActiveX Web에 올릴때..
포인터..?
odbc 데이터 원본이 없는경우는?
StretchDIBits함수의 인자를 어떻게 채우지요..
sizeof() 외 2개 더...
acmStream 계열 함수에 관한 질문
공용다이알로그에서 멀티Selectting하기
디버깅중 어셈블리 코드로 넘어갑니다.
부모 다이얼로그 포인터 얻어오는 방법
라디오 버튼에 관한 질문 입니다.
배열로 저장된 이미지 데이터를 화면에 뿌려주려면??
동적으로 생성한 리스트 컨트롤의 항목이 픽쳐 컨트롤 때문에 안보여요.
개인 방화벽과 같은 프로그램은 어떻게 만드나요?
OCX 웹브라우저와 연동하여 Debug하기
Window에도 fork라는 함수가 있나여..??
새로운 윈도우의 생성이 않됩니다.
DoDataExchange 같은 함수를 SDK 에서 쓰려면 ?
P/G 로딩될때 dialogBar에 그림을 넣고 싶은데요...
부탁드립니다. 오류검사
프로퍼티에서 질문 또다시..
급합니다. 적분하는 프로그램짜는 법좀 가르쳐주세요...
이런 함수 있나요?
인류 최악의 범죄는?
int형과 float형에 관한 질문 ?
vc++6 에서..
Wav파일 재생시 이상한 소리가....
Detected Memory Leak?
스플리트윈도를 이용한 탐색기를 만들때....
콤보박스
이것이 도대체 무슨 에러인지??
디렉토리 만드는법
[질문]마우스를 클릭했을때 스크롤 되는 방법?
DrawText 에서 글자배경 투명하게 하려면 ??
라디오 버튼의 기본 설정 방법은 ......
"C"를 배워보고자 합니다.
CRect::PtInRect()에 대한 설명 좀 부탁합니다.
구조체에서 CString을 사용할수 있는지요...
형 변환시 에러가 뜹니다.
도와 주세요
Install Shield로 인스톨 실행 화일을 만들고자 합니다.
임의의 값을 Edit해보려고 합니다.
구조체를 연결리스트로 구성할수 있는 방법....
스레드에 데이터 전송하기
어떻게 해서 키가 크나염..?
소켓 프로그램에서....
CTreeCtrl에서 item 순서 바꾸는 방법 좀 ...
CString 값을 int 형(16진수)으로 변환하려면
왜 ON_COMMAND_RANGE가 지워지죠?
win2000에서...
그래픽 프로그램에서의 필터를 ....!
폴더 알아내기....
주어진데이타(x,y)로 그래프를 그리는 방법
답변 부탁드림다..
TCP ->UDP
파일찾기
ComboBox 에 관하여
Application을 자동으로 저장하려면???
스트링다루는문젭니다.
게임을 만들고싶습니다.
[질문] MFC왕초보의 두가지 질문입니다.
View에서 DialogBar의 RadioButton의 control
CDROM에 CD가 들어있는 지 없는 확인하는 방법..
에디트창에서
G가 'ㅈ'소리가 나는때...
리스트 컨트롤에 색깔 넣고 싶어요
그래프를 표현하기 위한 ActiveX Control소개 부탁...
원격강의 관련 질문
[급]avi플레이어에관한질문?
다른 언어로 작성된 소켓 프로그램
링크에러
nt 4.0 에서 directX8.0 과 direct8.0 SDK 가 설
다이얼로그바 여러개 바꿔가며 쓰는 법
strcpy와 lstrcpy의 차이점이 뭐죠?
CEditView..의 내용..
Active X 만들 때 프로퍼티 추가 방법요~~~
가상키보드를 이용하여 웹페이지의 에디터창에 글쓰는 방법
auto run 프로그램
raw파일이 어떻게 저장되는지?
프로그램 실행중에 콘트롤(edit, button) 옮기기..
ActiveX Server Component 에서...
Top,Left 구하기
초 단위를 시-분-초로 바꾸는 방법??
slider control 만들기
com 객체에 인터페이스를 추가하려면 어떻게 하죠?
dllimport, dllexport를 설명해주세요.. 자세히,,
[질문] 이미지데이터를 가장 빠르게 화면 출력하려면...
메모리 사용을 최소화 하는 방법...
프로그램 실행 도중 window에서 컨트롤 움직이기
현재 OS 알아내는 API
고수님들 제발~~~
DirectX에 관하여...
ERROR_SUCCESS ?
간단한 배열입니다.
dialog 에서
Access Violation...
installshield 프로그램 사용법 있으신분..
BMP 파일로 Wallpaper 셋팅하기
[질문union] 에러가 나네여
우리 아이들 집안에서의 바람직한 성교육은?
시리얼통신 프로그램 구합니다.
DIRECT X 공부를 시작하는데용... MFC 에서 구현할까.. 아님.
여러 cast 연산자의 구분?
동적메뉴
일출과 일몰중 더 멋있는 것은 요?
다이알로그박스나 폼뷰에서 탭 순서를 바꾸려면..
리스트컨트롤에서 컬럼단위로 정렬하기.
왜 미인은 잠꾸러기 라고 할까요??
[질문] MSND Development Platform ?
UI(user interface)Thread 에서 작업스레드 생성해서
sub classing된 에디트 박스에서의 copy&paste문제..
SendMessage에서...
하드웨어 정보를 알 수 있는 방법이 있을 까요?
애니메이션 컨트롤에 쓸수있는 AVI 만드는 법이나 구할수....
socket 프로그램에서 타이머 질문인데요.
레지스트리 값 읽어오기..
정수의 금액표시
c++과 msdn을 설치하려면 ...?
Remote Desktop Protocol에대해서..
회원인증에 관한 내용입니다.
시스템메뉴손대기
[질문] dialog based에서 redraw..
Tab Control에서 질문
후킹에 대한 질문.....
제발.....트리 컨트롤......
VC에서 자바 Function들을 사용할 수 있나요?
[급-질문]ReadEventLog 사용법
다이얼로그바에 배경색을 넣고 싶거든요.
두개의 MDB File 을 동시에 open할수있는지요.
VC++초보 핸들뜻이 무엇입니까?
프로젝트에서 파일을 삭제 할려면..
assert 관련 질문
웹하드 구현하기?
CAsyncSocket에서 Create를 하려는데요..
Message Queue 사용법에 대해서 알고싶습니다.
GetWindowLong() 과 GetClassLong() 은 뭐하는 거
서비스로 등록시킨 프로그램에서...
이상해요 이상해요 이상해염!!!!!!!!!!!!!!!!!황당.;;
작업표시줄에 아이콘 넣기
트리 컨트롤에서요.....
리스트 컨트롤에서 원하는 색으로 리스트 추가
ODBC(RECORDSET)으로 연결해서 INSERT처리는 어떻게...
제가...
[급질문!!] 소켓 프로그래밍 전문가님 꼭 좀 도와 주세영.
연결리스트 (Linked list)에 대해서....
다이얼로그???
Edit Box에서..
리스트 박스에서.....
DAO 배포문제.
fopen()에 대해서.....
뭐가 문제죠?
스레드를 잠시 멈추게 하려면?

시작 > 실행과 같은걸 만들려고 합니다...
::MoveFile()에 대해서......
API 와 MFC 어느것을.....!
슬라이더 (slider) 컨트롤 사용
API함수중에.....
대화상자가 안떠요.....
CFile에 관한 질문다시 올립니다.
분할윈도우에 대한 질문입니다.
대화상자의 크기영역을 알아내는 함수
MDB 파일에서 Requery로 찾은 데이타
다이얼로그에서 현재 포커스가 있는 컨트롤 찾기.
메뉴에 대해서.....
클라이언트/서버에서 회원인증에 관한 것입니다.
도와주세요...
윈도우 사이즈 조절
Excel 파일 저장시 다른 쉬트 사용하기??
익스플로어 형태의 툴바구성
구조를 모르는 DB 테이블의 레코드 삭제.
비주얼C++ 에서 OCX를 사용하고 싶은데...
Asp 에서 OCX 를 붙이는방법??
view클래스의 멤버를 쓸려면 어떻게......
윈도에서 네트웍상의 패킷을 잡는 방법.
CEdit 에서 글자수 제한과 마지막에 캐리지 리턴 넣는 방법
Unhandled exception 에러가 나는데 어디가 잘못된건지??
등록 정보랑 프로그램 연결 대화상자........
GetLastError에 대해서......
[질문]Windows CE를 PC에 포팅할려면..
공용컨트롤 사용하는 방법........이....
MainFrame에서 ViewClass를 사용할때 에러가 나요..
DB를 오라클을 쓸려고 하는데??
App에서 View의 함수 호출
VC++내에서 직접 DAO를 써서 mdb를 만드는데 데이타 타입때문에..
프로그램 실행중 중단하는 방법?????
워드 가져다 쓰기..
메모리 관리에 대해
다른 클래스의 함수 호출 방법.
윈도우 만들기...
이거 뭐가 문제인지 좀 가르쳐주세요...
CFile에서 정해진 경로에서 파일 불르기에 관한 질문입니다.
볼이 뭐예요?
[질문] WIN32_LEAN_AND_MEAN ?
시간을 SETTING하는법 ( SetLocalTime을 이용하여...
가로방향 인쇄를 하고 싶습니다.
화일입출력에서...
서버로부터 클라이언트가 메세지 받을때
view 를 만들려고 합니다.
ODBC에서 DB table 연결...
NT에서 서비스 프로그램 등록
lan tcp/ip 통신중에
그래프와 도표..
버튼들이 사라집니다.....
eeswt.dll 요청 !!
ListView의 특정 라인에 바탕색을 넣는 방법?
자식윈도우에서 발생한 이벤트를 부모 윈도우 프로시저에서 처리하는 방법..
현재 위치한 폴더 알아내는 방법과 폴더생성하는 방법
다이얼 로그 클래스 포인터 얻기...................
포커스가 가 있는 버튼에 엔터키가 안먹습니다.
Edit 박스에 글을쓰면 그 글을..멤버변수로 저장할수있나여?..
CIPAddressCtrl 을 char배열로 변환하는 방법이 있나요?
다이얼로그에서 뷰 사용하기
고수님들의 조언부탁드립니다. (이것때문에 죽겠습니다. ㅜ.ㅡ)
SetTitle() 함수에 대한 설명좀 부탁^^..
레코드삭제시의 궁금한점.
[형변환]long->CSting 형으로
움직이는 메뉴나 프레임 만드는 법좀 가르켜주세용
정말 간단한거
버튼의 포인터???
시간형 레코드값에 NULL값을 넣을 수 있나요?
Random 함수에 관하여
(ODBC)sql data type (꼭 좀 부탁..)
다른 PC의 레지스트리값을 바꿔보고 싶습니다.
모달리스 에서...
특정 위치의 픽셀 정보(색상) 알아내기..
BIOS정보는 OS에 따라 어떻게 가져오는지요?
ActiveX에 Listcontrl
CRecordset에서 login dialog box 안뜨게???
switch()함수에 대해서???
파일이 잘 안 열어져요...
.tlb 파일에 관하여
제발 도와주세요...
키보드 반응에 관해...
[질문]이런 콘트롤은 있는지요...
record를 sort하고 싶은데요..
LineIn Assembly에서의 배열...
api socket server/client 자료 구함
넘 쉬운질문인가..?
스레드 중지..
WAB화일의 위치를 가져오고 싶습니다.
좀 이상해서 질문드립니다..
보고 싶은 영역만 보기...
API 에서 DB연결....
다른프로그램의 확인버튼누르기
WideCharToMultiByte 함수 설명 부탁드립니다.
제발 답변좀 해주세요~~~~~~~~~~
점수가 없어서리..
Visual c++을 설치하고 나서....
CTreeCtrl::GetNextSiblingItem 에 대해서.....
소켓으로 포인터 데이터를 전송하고 싶습니다.
Direct Sound로 Play할 때 문제점
다이얼로그박스에서 분할뷰의 포인터 얻기
[질문]다이얼로그바 에 프로퍼티 시트 삽입할려면?
알집의 ToolBar이미지를 어떻게 구현해야될지.. ㅜ.ㅡ
데이터 형 변환시에 데이터 손실이 어느 정도 인가요?
프로퍼티 페이지의 크기 변경...
일반적인 메신져 프로그램에서....
비주얼 C++ 6.0의 기능이라면... 어떤것들이 있을까요?
추가된 form view의 static control 변수 바꾸기
CComObject<> 포인터 선언하는 방식을 이렇게 하면 안되나요?
스토어드 프로시져 사용법을 알고싶습니다.
자연출산 보다 제왕절개를 권하는 이유는?
EDIT BOX에서 줄바꿈 할때 말인데요.
DLL 에서 소켓통신하기...
idl 로 생성되는 파일을 다른 프로젝트에서 공유하고 싶어요
MDI에서 새로운 ChildFrame생성
Win32 Api함수를 이용해서 문자열에서 문자 축출하기..
텍스트 파일의 내용을 받아서 그래프로 뿌리기
Outlook Express 핸들 하기
CRecordSet의 m_pSet의 초기화는 어디서..
아주 초보적인 오비리스트 질문..
프린터포트를 각각 제어하고 싶어요.
좀 봐주세여...
자신 IP알아내려는 함수가 있는지요...???
Active x 에서 html로 값을 넘기려고 하는데요...
파일 fragment하는 소스좀 가르쳐 주세요......
Value is not within allowable range....?
메모리 릭이 뭐죠..
[질문]Invalidate()를 하면 리소스를 계속 잡아먹던데...
keydary 님...
Win32 Shell Programing. ㅡㅡa;
툴팁한 관한 짧은 질문..
dll을 만들었는데요.
delay 주는 방법.
CListCtrl 에서 글씨 색 변경
mfc에서 메뉴항목 추가를 공부하는중에...초보가..ㅜ.ㅜ
리스트 컨트롤에서.......
P2P 에 대해서 자세히 알고 싶습니다.
왜 메시지가.......
[급함]2차원 배열을 함수에서 인수로 받아야만 해요
다이얼로그를 플랫스타일로 만들려면...
다이얼로그바
CMonthCalCtrl 에서의 버그...?
Debug Assertion Failed Error
제발 봐주세요~~~~~~~~
debug로 컴파일시에는 에러가 발생치 않는데.. release시 에러.
CEdiView에서 Edit창의 맨앞에 라인 번호를 추가하려면...
리스트 컨트롤을 리소스서 정렬기능을 활성화하여 사용하려는데요
리스트의 헤더를 왼쪽에 위치하는 방법
난 바보인가.........
Burst모드 vs Handshake모드
띄어쓰기요~~~~~~이게 왜 않되죠~~?
남편을 이해할수 없네여..
Edit control 에서여
마우스 동작 영역 조정....?
쓰레드에서의 메모리 동적 할당/해제
EditBox에 임의의 코드넣기
뷰에서 함수를 추가하면
MDI에서 Child를 종료시키는 과정에 일어난 에러
MS사의 "Visual Studio 6.0 Service 이게...
초본데 주석 좀..
뷰 전환에 대해서 질문 드립니당..
소켓에 대한 질문입니다.
주석을 좀...
파일선택 다이얼로그에서 선택된 파일이름얻기..
스트링(CString)을 내 하드에 저장하는 방법을 가르쳐 주세여....
Edit박스에서 hexa로 출력
odl 파일
멤버함수창이 안뜹니다.
vcm 사용법에 대해서 도움을 요청드립니다....
Internet Explorer 새로고침...
뷰에서 라인 그리기 급합니다..제가 초보라서^^
과자봉지 안에 들어있는 과자모양들은 모두 다른데 어떻게 그렇게 다른모양을
50대 남자분인데...
16진수 관련 도와주세요.
이런 에러를 해결하려면
API 소스를 MFC로 불러와 ODBC 사용하기??
[초보질문] EditView에서
UDP통신을 하고 있는데요.
Cab 파일을 등록하고 설치하는 배포 프로그램 만들기
리소스 Load Failed..
LPCSTR을 BYTE로 형변환
ddk를 공부하려고 합니다. 도움을 부탁드립니다.
분할뷰(폼뷰와 뷰)에서..뷰 내용을 선택한후 폼뷰에서 삭제시...질문
VC에 있는 워크스페이스와 같은 기능을 하는 소스나 참고자료 부탁합니다.
ATL에서 여러개의 class를 만들어서 사용하는 방법
ListView의 일부 칼럼을 우측정렬하기
InitDialog에서 DTPICKER컨트롤에 특정날짜를 셋팅하는 방법
메인 프레임 클래스 이름 만들어 주기
ChartFX 어떻게 사용하나요?
점수 다걸고 질문있습니다.
Link 에러가 나서 그러는데요.
리소스를 열수 없습니다.
CDC 에 그려져 있는 일정 영역의 내용을 CBitmap으로 내릴려면.
이 화면에서도 보이는 툴바와 View 사이의 구분선 구현은...?
dll 분석방법좀 알려주세요
MDI에서
listview에서 한 item이 여러 라인을 가질수 있는지.
Api 에서 DLL 연결해서 사용하기
visual C++에서 모터제어 법
쓰레드 프로그램에 관련된 질문을 드립니다.
CreateThread 에서여
2개의 ASF 파일을 합치는 방법?
CString -> LPCOLESTR 형변환
특정 컨트롤이 위치해 있는 좌표값 얻기
new 로 컨트롤 동적생성시킨 다음 delete 시키기
listCtrl에서의 드래그를 할려구
Application간의 Message전달
중국어 NT에서...
DB Table list에서 primary key 얻어 오는 방법좀...
CAsyncSocket을 사용한 파일전송시 잘라보내는 방법 갈켜주세요.
레지스트리의 값을 읽어올때요.. 데이터가 자꾸 깨집니다.
include 문에 관해??
특정디렉토리의 파일 갯수를 알아내기
INVALIDARG 로 리턴하는 메소드 는 클라이언트에서 어떻게 에러 체
생성자 함수의 파라미터..
계산기 만들기
clrscr명령은 쓰면 안되나요?
메세지에서 int 형을 CString으로 바꾸어 출력하는법
ActiveX에서 ftpconnection 이럴때는...
바탕화면 영역 바꾸기
system idle process가 뭐하는건지 가르쳐 주세요
E메일 클라이언트..
oledb 에서 필터조건주기
다른 Dll을 로드해서 다른 Dll 만들기...
CRgn사용법에 대하여...
OPEN GL 관련 사이트 소개 부탁합니다...
이상하네요..초보임다..
랜상의 컴퓨터 리스트 알아내기
비주얼 씨에서 이진수에 관한 질문입니다.
NT4.0에서 작업관리자의 프로세서 마침을 구현하고 싶습니다.
하드웨어 장치에서 읽은 그림을 빨리 출력하기
메시지 박스를 자동으로 없애고 싶으면
settimer() 함수사용법
트리컨트롤에서 아이템 선택시 왜 이미지가 바뀔까요?
메소드의 인자가 올바르지 않으며 리턴시킬려고 하거든요
주석을 ...
out 파리미터를 2개 주면 스마트 포인터 쓸수 있나요?
CRichEditView에서 CStringArray의 값을 화면에
[질문] Edit box에서 영문만 입력받고 싶습니다.
팔,다리가얇아서고민이에요,굵어지고싶어요
죄악에 적합한 색은?
소켓프로그램에서요...상대방의 IP를 얻어오는 방법의 정석은 과연?
[질문]MDI에서 활성화된 차일드윈도우얻기의 에러가...(Plz...)
ActiveX에서 웹브라우저를 종료시키려면
미리 알수 없는 컨트롤 삭제하기
FTP 에 관한 질문입니다...(MFC...혹은...API)
FormView에서 오픈한 Dialog의 Edit 값을 가져오고 싶어요~
windows98se인데 내 컴퓨터 들어갈때 문제가 있어요
산부인과
아웃룩 익스프레스를 띄우고 자동으로 특정화일을 첨부 하도록 하고 싶슴다
VB의 Chr() 함수와 동일한 C++ 함수는?
제 프로그램에서 다른 프로그램을 호출....
연결자가 무엇인지...
리모콘 만드는법...
콘솔모드에서요...MFC클래스를 사용하는 방법은 무엇인가요?
화살표 키보드 메세지에 대해서...
ntdll 에서 error가 나거든요.
툴바(리바)에서 256컬러 비트맵 아이콘을 사용하는데 배경을 투명하게..
[질문]MDI에서 뷰클래스의 멤버함수 참조하는 방법좀 부탁합니다.
vb 에서 obuffer5 = Chr(2) 를 vc++ 로 바꾸려면 어떻
GDI 객체에 대해서 질문이 있습니다.
URL decoder
collection class 에 관한..(map/dictionary)
[질문] 자식윈도우의 위치를 얻는 방법
프로그램 패키지를 만들기(인스톨 쉴드 없이)
Url을 입력받아 html파일 가져오기..근데 아뒤와 패스워드 필요!!
질투에 적합한 색
인스톨쉴드에서 파일 존재체크 방법
다이알 로그 베이스에서 버튼 하나를 눌러서 다른 다이알 로그 박스 띄우는
Edit Box에 입력이 않됩니다.
리스트컨트롤(Report 스타일)안에다가 콤보박스를 넣는 방법
도스 명령어중 IP 주소 얻는 명령어..
시리얼 통신에서 버퍼에 있는 데이터를 editbox로 출력하는 방법..
oledb 에서 말하는 bookmark 가 뭐죠?
[급합니다]2차원동적배열할당을 삭제하는 방법
HBRUSH CTestView::OnCtlColor에서의 메모리 누수
윈도우 크기 조정
SDK 질문있습니다.........
[질문]레지스트리에 값 쓰기
Accept함수에 대해 좀 알려주세요..
sndPlaySound함수 실행시 에러...
프로그램 실행과 동시에 트레이 실행
대인관계잘하는법좀..
내 컴의 도메인 이름을 알 수 있는 방법이 있을까요..???
VISUAL C++로 FTP프로그램을 짜보고 싶습니다.
멀티스레딩시 이렇게 하는것이 괜찮을까요?
초보자들이 알수 있는 OpenGL 소스 좀~~~
File의 내용을 읽어서 메모리에 저장할때...
주소록을 MFC로 짤려면 다이알로그기반으로 해야함니까
클래스는 어떻게 삭제하나요?
DB에 관련한 기본적인 질문입니다. 좀 봐주세요..
pDoc가 포인터 변수인데 왜 &pDoc라고 쓴 것인가요?
마우스가 다이알로그 밖에 나갔을 때 이벤트는?
교복이 비싼 이유는?
다이얼로그 한번만 뛰우기
아주 초보적인 질문.. UNICode로 컴파일 할려면....
AFX_DATA
멀티 테스킹 기능 해제.
윈도우내에 놓여있는 DlgItem의 위치를 알아내는 방법은?
[질문] SDI에 도킹된 바.. 보였다 안보였다...
ISAM 화일에 관하여....
파일 생성 어떻게 하나요.
집에 불났을 때 가장 먼저 갖고 나올 세가지는?
[질문]activex 관련 질문.( 웹페이지 새로고침에서..)
포인터에 관한 질문이에여..
버전체크 & 작업표시줄에 안나타나게 하려면?
sync, async 소켓 프로그래밍...
vc++ 왕초보질문
문자열 짜르기
소켓 프로그램 내에서 소켓 2개 생성...
CALLBACK로 TIMER 응용하기
클라이언트에서
edit box에 입력한 CString값을 배열에 입력하는 방법....
자동차 보험 가입 (본인차를 타인 명의로 가입?)
제 컴퓨터에 있는 어떤 프로그래을 찾아서 실행시키려고 합니다.
원소켓에서여
[왕초보] 2개이상 리턴값쓰기...
초보의 질문(웨이브파일은 어케 만들거나 얻을 수 있나여?)
이상한 AppWizard
간단한 부탁입니다...
이놈의 vc가 미쳤나.........
Static Control에서 AutoScroll은??
웹페이지에서 디버그창 뜨는문제.
vc++ 왕초보질문
DrawBitmap()의 사용법이 궁금합니다.
IErrorInfo는 어떻게 사용하는 것인지?
전문개발자님께 질문드립니다.
리소스 파일 추가할때 질문요...
MFC 로 생성한 뷰의 색깔 바꾸는 방법
와~! 이해 X MFC WIN32 로 넘아가야 겠는데 질문!!!
ODBC를 거치지 않고 원격지 db를 접속할 수 있나요?
sdk에서 파일 입출력문제입니다.
1:1 통신 가능한 프로그램 입니다..1:다 연결을 하고 싶은데요..
ShowWindow()함수에서요
UI Thread
MACRO 에서. 날짜 넣는 법이요..
서버와 클라이언트간의 통신.
분할뷰에서 포인터 얻기
콤보박스에서 프로그램 종료후에도 값받기..
에러 좀 해결해 주세요
첨 보는 문법입니다. 제발 도와주세여...^^;;
한문자 읽어오기
COM에서 QueryInterface와AddRef등이 안보여요
[질문]콤보박스에서여 디폴트로 어떤 값이 보여지게 할 수 있나요??
[급질문]파일오픈창 열때 원하는 경로를 디폴트디렉토리로 지정할수 없나요?
남자 성기가 이상합니다..;;
Editbox에서 Enter값의 들어왔는지 알고 싶은데요..
MySql안의 데이타를 검색, 수정, 삽입 하려면...
대장암은 어떻게 고칠수 있나요?
SetTimer 함수에 대해...
처음 타인을 만났을 때 그 들이 생각할까봐
CFile 위치지정
listcontrol에 글자색을 변환시킬수 있나염???
리눅스의 C와 윈도우의 MFC간의 소켓통신 어떻게 하나요?
ordinal에 대해...
Win API프로그램에 OCX넣기
익스플로러에서 새창이 생성될때 그 창의 포인터를 얻는 방법
선생님이, 방학때도 월급을받는이유?
한번 실행된 프로그램이 또다시 실행되는걸 막으려면...
소캣통신에서 두개의 패킷이 가끔 붙어요..
gif animation Load & Save
에디트박스에서 엔터키 인식
다중 널문자가 포함된 BYTE 정보를 널 문자 포함, 다른 바이트 변수로
FarPoint사의 Spread사용중.....
이 알고리즘좀 알려 주세여..
모달리스와 모달 다이알로그..
View Class 중OnPaint
레지스트리에 저장..
툴바에 관해..
특정 폴더를 감시하여..
sql 구문에서...
문제좀 해결해 주셔요~~~~~~~~
이 어셈블리좀 번역 부탁드립니다.. (아주 급함,. 꼭 필요.. ㅠㅠ)
CStringList::GetTail함수,...
잘못 등록한 클래스 삭제..
CView_SDI 프로그램에서 메인창의 색깔 및 메뉴 색깔 바꾸기..?
MS FLEX GRID CONTROL 6.0(CMSFlexGrid)
VB dll 을 vc++에서 호출하려고 하는데......
ATL control에서 해당 컨트롤이 시작되고 종료될때 수행할 코드
(아주 급함) 다중접속 프로그램을 짜고 있습니다.. 연결리스트 노드 삭제
(아주 급함) 다중접속에서 연결리스트에서 자꾸 에러가 남니다...
리스트컨롤 파일저장에서 업로드
(꼭 필요함) X 버튼을 눌렀을때.. 종료하지말고 다른 함수 호출하기
리스트 컨트롤에 눌린 키 얻는 방법
리스트 컨트롤에서 선택모드(한개만, 멀티 선택) 변경방법
분할 윈도우안에 또 분할하기~~~
[질문] Win32API로 만든 클래스를 어떻게 DLL로 바꾸나요...?
variables 창은 프린트가 안 되나여?
툴바 높이 설정..
사운드음소거가삭제되서,,ㅠ,ㅠ소리가안나와염,,어떻하져,, ?
CListCtrl DrawItem에서 메모리 문제...
코가펩시와 펩시콜라 성분은 똑같나요?
outlook 을 이용한 메일보내기
Menu의 font는 어떻게 변경하나요..?
API와 함수의 파라미터에 대한 자세한 설명 부탁드립니다.
에디트박스에서...
간단한 질문.. 프로그램 스타일문제인데.. #define문의 이용에 대해
다이알로그박스의 스크롤이 되지않아요...왜 그런가요?
html문서 다이얼 로그에서 보여주기
교차로에서 우회할때 사고가 많이나는데..줄일 수 있는 획기적인 방법이 없
컴 퓨 터 호 ㅏ면 이 ,..
리니지2 게임 NVIDIA RVIA TNT2 Model64/Model64
산부인과에서는
홈페이지 제작 아르바이트
(PHP,자바스크립) 로그인등..
키스하는 법을 좀.;;
물때문에 귀가맞혔어요.
안경을 밟은 느낌도 안났는데 밟았다고 돈 달래요 줘야되요?
메모리가 이상해요.
다르게 한글을 열수 있는 방법이나 복구할 수 있는 방법은 없는건가요?
테크닉???
다리를 빠른시간에 쉽게 쨀순없나요?
수녀님 머리에 쓰는 것을 두건이라고 하나요
전세기간 만기전 이사를 하려는데요...
컴퓨터를자꾸키면이상한게나오던데.......
미사때 여자들은 왜 하얀 천을 머리에 쓰죠?
처녀막이 찢어지면 어떻게 돼나요
재미있는 게임 소개좀;
요즘 퇴직연령은 몇 살이죠
개가 안경을 밟았다고 돈달래요!!!!!!보새요!
산부인과
안녕하세요 좋은 기회에 글올립니다..
표현력을 기르는 법은?
수능 재수에 관한 질문이요
홍길동에 대한것
안경을 밟았다고 돈달래요 밟은 느낌도 안났는데 막 이상한 이유 대면서 달
컴퓨터 비아칩 설치에 관한 문의
레스포삭
김정민의 "바닷가에서" 리메이크한걸로 알고있는데 원곡은
한 사람과 평생부부가 가능하나요
세법법전 구입할려면 어떤책 어디에서 구입합니까?
무궁화는 왜 밤에 지고 낮에 피나요?
답변기다리겠습니다..
힐리스 타면 다이어트 되나요?
쉽고 성과가 좋은 운동 없을까요?
사실저...
'만들다'를 줄이면 '만듬'이 맞나요? 아니
파일을 켜면 에러 메세지가 떠요 어떻게하져...
[수성]의 관하여서~~^^(30포인트)
행복에 적합한 색
행복할 때 필요한 것
금붕어비늘인지?뭔지 모르겠지만 하얀게 벗겨져요..
혼전 성관계는 필요하나요
ip공유기 연결 시 컴퓨터가..
클릭비 4집앨범 의상 협찬은 어디서 받았나여?
화가 날때 필요한 것?
상 많이 받으면요.
코덱은 어떻게 다운받나요?
화장과 매장 중 어느 게 더 낫죠?
스타크래프트할때 다운됩니다 (게임중 아님)
압축파일을 다운받을때...
가장 싸고 믿을 만한 레스포삭 인터넷 쇼핑몰은?
관계후 이상하게 피가 나와요...
버뮤다삼각지가무엇인가여
팽이버섯이 우리몸어디에 좋은가요..??
머리숱을 줄일순 없나요?
왜 1.5리터 야쿠르트는 없는 걸까?
세상에서 제일 돈이 많은 부자는 누구인가요?
'만듦'이 맞는 이유도 좀 적어 주시면
아인슈타인의 뇌의 가치는어느정도죠?
클립을 어떻게하면 자화시킬 수 있을까요?
자꾸 손가락을 빨아서...
중국을 왜 이웃나라라고 안하나요?
D드라이브랑 E드라이브가 없어요...컴에 관한거
음..
포맷하는 과정에서..
처녀막이 터지면 소리도나요?피는 얼마나/
우유에 밥 말아 먹으면 어떠세요?
땅을삽으로계속파면서들어가면지구반대쪽까지가나요?
컴을 업하려는데..(지식지수30점 꼭 도움이 될만한 답변좀)
토마스 만
태그에 대해 알고 싶습니다.
리눅스를 사용 할려고 하는데...50점..
여드름없애는 방법좀..
LCD게임도 베틀넷 되나요?
무진기행

Trackback 0 Comment 1

VC++ 숭실대 강의자료


 
Trackback 0 Comment 0

Visual C++ 6 완벽가이드 & 세미나(강의)자료


 
Part 1 기본 프로그래밍
Chapter 1 사전학습
Chapter 2 프로그램의 뼈대
Chapter 3 GDI를 이용한 그래픽
Chapter 4 대화상자와 컨트롤
Chapter 5 사용자 인터페이스
Chapter 6 도큐먼트의 데이터 관리

Part 2 고급 프로그래밍
Chapter 7 분할 윈도우와 다중 뷰
Chapter 8 다중 도큐먼트 프로그램
Chapter 9 MFC의 안쪽
Chapter 10 GDI를 이용한 고급 그래픽
Chapter 11 GDI+를 이용한 그래픽
Chapter 12 고급 컨트롤 제어
Chapter 13 고급 사용자 인터페이스
Chapter 14 동적 링크 라이브러리(DLL)
Chapter 15 멀티 스레딩

Part 3 고급 프로그래밍
Chapter 16 COM(Component Object Model)
Chapter 17 자동화
Chapter 18 OLE
Chapter 19 ActiveX 컨트롤
Chapter 20 ATL
Chapter 21 ATL 자동화
Chapter 22 ATL ActiveX 컨트롤

Part 4 응용 프로그래밍
Chapter 23 이미지 프로세싱 프로그램
Chapter 24 데이터베이스 프로그래밍
Chapter 25 프린터 출력의 모든 것
Chapter 26 게임 프로그래밍
Chapter 27 인터넷 프로그래밍

Appendix A 컴파일 에러 해결하기
Appendix B 디버깅
Appendix C 프로젝트 속성 설정
Trackback 0 Comment 1

[C] printf 함수의 내부 구조 이해하기

Visual Studio를 사용하면, printf 함수의 내부 구조를 쉽게 연구해 볼 수 있다.

물론 다른 함수들도 같은 방법으로 확인해 볼 수 있다. 우리는 C 언어의 표준함수가 

어떻게 만들어졌는지 확인해 봄으로써 좀 더 깊이 있는 C 언어를 공부할 수 있게 된다.

 

아래의 화면은 F9키를 사용해 break point를 설정한 후, F5키(Go)를 사용하여 디버깅 중인 모습니다.

F5키를 사용하면, 프로그램은 break point가 있는 곳까지 실행이 되고, 멈춘다. 그러면 아래와 같이

노란색 화살표가 보여지며, 이 때 F11키를 누르면 함수의 내부로 들어가게 된다. 자 한 번 따라해 보자.

 

 

 

아래의 그림은 F11키를 사용하여 printf 함수 내부로 들어 온 모습이다. F10키를 사용하여 노란색 화살표가

있는 곳 까지 실행을 해 보자. 그러면, _output 함수가 있는 곳 까지 이동이 되며, _output 함수에서 다시

F11 키를 사용하여, 내부로 들어가 보면, 우리들이 사용하는 모든 형식 문자열에 대해 이해할 수 있게 된다.


 


 

 

아래의 그림은 F11키로 _output 함수로 이동한 모습이다.


 

그리고, 위 그림에서 빨간색 네모 박스한 곳은 Context라는 것으로 호출순서를 보여주고 있다.

함수의 호출은 아래에서 위로 호출된 것이며, main() -> printf() -> _output() 순으로 호출이 되었음을 알 수 있다.

그리고, main() 함수도 mainCRTStartup()이란 곳에서 호출되었음도 알 수 있다.

참고로, 현재 함수를 빠져나가기 위해서는 Shift+F11키를 누르면 된다.

 

디버깅시, 단축키를 활용하면 좋으니까.. 다시 한 번 정리를 해 보겠다.

F7 : 컴파일 & 링킹 (실행 파일 생성)

Ctrl + F5 : 프로그램 실행

F5 : Go (디버깅 모드로 실행)

Shift + F5 : 디버깅 모드 종료(프로그램 실행 정지)

F10 (Step over) : 현재 줄 실행, 함수로 들어가지 않고 무조건 한 줄 실행

F11 (Step into) : 호출되는 함수안으로 이동, 현재 줄이 함수가 아니면.. F10과 기능 같음

Shift + F11 (Step out) : 함수를 호출한 곳으로 탈출

Ctrl + F10 (Run to cursor) : 커서가 깜빡이는 곳까지 실행

 

프로그래머는 기본기 + 디버깅 능력,,, 우리 모두 단축키를 잘 활용합시다...

다들 오락할 때 단축키 쓰는 거 알고 있으니까, 꼬오옥~ 외웁시다.

 

앗.. 그리고 참고로 프로젝트를 만들면 Debug 모드로 생성이 됩니다. 이를 Release 모드로 바꾸려면,

메뉴에서 Build -> Set Active Configuration... 을 눌러서 아래의 그림처럼 Release를 선택하면 됩니다.

또한... 주절.. 주절.. Release 모드는 디버깅이 안되니까.. 절대로 F5키로 디버깅을 하지 마세용(<-암기사항)

가끔 다른데서 소스 코드를 다운 받아서 디버깅이 안된다고 하는 분덜 있는데... 아래처럼 설정이 잘 되어 있는지

꼬옥 확인해 봅시다.. 앗.. 아래처럼 하면.. 안되고.. 아래는 Release 모드니까 Win32 Debug 모드로 설정해야겠졈...

Release 모드는 왜 해야 하는지 아시나요? ㅋㅋㅋ 잘 모르는 초보 분들이 많던데.. 프로그램을 다른 사람한테

배포하려면, Debug 모드 보다는 Release 모드가 좋습니다. 왜냐하면.. 얘네들이 mfc42.dll 을 사용하는데,

일반적으로 이 파일은 대부분의 컴퓨터에 설치되어 있습니다. 하지만.. 만약 Debug 모드로 실행 파일을 만들어서

다른 사람한테(프로그래머가 아닌) 건네주면, 'mfc42d.dll을 찾을 수 없습니다' 라는 에러가 나지요...

어.. 내 PC에서는 잘되는데.. 니 피씨에서는 왜 안되냐? 이렇게 질문을 하고.. 고생 고생해서 결국은 해결은

하는데... 이런거 해결하느라 2틀 동안 고생한 넘(???) 옛날에.. 제가 봤거든!!! 요.. ㅋㅋ

꼬옥.. 잘 알아서..이런 실수를 하지 마셈~!!

 

 

아래는 소스 코드입니다... printf의... ㅋㅋ

자.. printf( "%d %#x ... " ); 이런 애덜... 연구가 되겠죠!! good luck!

 

int __cdecl printf ( const char *format, ... )
/*
 * stdout 'PRINT', 'F'ormatted
 */
{
        va_list arglist;
        int buffing;
        int retval;

        va_start(arglist, format);

        _ASSERTE(format != NULL);

        _lock_str2(1, stdout);

        buffing = _stbuf(stdout);

        retval = _output(stdout,format,arglist);

        _ftbuf(buffing, stdout);

        _unlock_str2(1, stdout);

        return(retval);
}

 

int __cdecl _output (
    FILE *stream, const TCHAR *format, va_list argptr )
{
    int hexadd;     /* offset to add to number to get 'a'..'f' */
    TCHAR ch;       /* character just read */
    int flags;      /* flag word -- see #defines above for flag values */
    enum STATE state;   /* current state */
    enum CHARTYPE chclass; /* class of current character */
    int radix;      /* current conversion radix */
    int charsout;   /* characters currently written so far, -1 = IO error */
    int fldwidth;   /* selected field width -- 0 means default */
 

 

... 생략...

Trackback 0 Comment 1

Mobile and Embedded Development

Mobile and Embedded Development

Microsoft® Mobile and Embedded Development includes all the mobile and embedded information that you need to build applications and platforms for devices. Content includes Windows® Mobile Software for Pocket PC and Smartphone, Windows XP Embedded, Windows CE, Windows Automotive and more.


Visit the Mobile Developer Center

You'll find in-depth content, community resources, downloads, product information, and more at this one-stop resource for mobility and embedded developers.

Visit the Windows Embedded Developer Center

This is the site for embedded platform developers where you'll find in-depth content, community resources, downloads, product information, and more.



Trackback 0 Comment 0

PocketC and COM -- File System Control

by Kevin Cao cao@orbworks.com

Introduction:

In the past, PocketC developers for the WindowsCE platforms are limited to the 225 default APIs. The APIs covers most areas of the devices. However, developers have been asking more and more access to the features provided by the OS. My solution to this problem is to open up the COM access. With this article, I will show you how to use FileSystem Control through PocketC.

All the activeX controls availiable for the WindowsCE platfroms from Microsoft are included in Embedded Visual c++ 3.0 which can be downloaded for free from http://msdn.microsoft.com

Brief Note on the File System Control:

File System Control is an ActiveX control provided by Microsoft. This control has a COM object. It offers a few methods for you to access to the file system. There are many similar ActiveX controls that allow you to access many other parts of the operating system.

Each ActiveX control is identified by an unique ID. This unique id is generate when the original file system control author created this control. It reduces the chances of two ActiveX control having the same identity greatly.

#define CEFILESYS_GUID "{3F0C2794-5C3A-11D1-A717-00AA0044064C}"

In order to use the activeX control, you have to register it on the windows os first. On the WindowsCE, you need to have regsvrce.exe to register COM components.

This following code registered the dll on the device, assuming you downloaded regsvrce.exe to the windows directory, and mscefile.dll into the windows directory. They don't have to be in the windows directory.

Regsvrce.exe has a few options you can pass in. It also has an UI interface to allow you to register components manually.  To obtain a regsvrce.exe for your device, please download here.  http://www.pocketc.net/release/Distribute/regsvrce.zip

/i = install

/u =unstall

/s =silent, without a notification dialog popup for registering the control successfully.

register_filesystem()

{

exec("open", "/windows/regsvrce.exe", "/i \\windows\\MSCEFile.dll") ;

}

Implementation:

Now we have registered the File System ActiveX control on our device. We need to initialize the control, and keep the handle to the control, so we can keep reuse this

control over and over again. Just remember to release the control at the end of your program.

pointer globalptr_filesystem = 0;

startup_filesystem()

{

if (!comdispatch(CEFILESYS_GUID, globalptr_filesystem))

{

alert("Failed to initialize filesystem control");

return 0;

}

return 1;

}

cleanup_filesystem() { comrelease(globalptr_filesystem); }

After we have the filesystem control started, it is time to explore some of the methods. It is rather complex to complete a COM call, so I suggest you wrap the complexity within a simple PocketC function. In my example, I will show you how to find out a file length by using the file system control.

According to the Microsoft documention, the filesystem control has a method called FileLen. We need to find out the method's id using comgetidbyname. It takes the pointer to the filesystem control pointer, and a string, and an integer passing by reference.

FileLen also requires one input parameter for the actual file path. We first clean COM function argument buffer in memory by using comargclr(). comargadd is used to add the first parameter. VT_BSTR is an integer to tell the COM interface that I am passing a string. The second parameter for comargadd is a pointer. We passed in a string pointer. This string is the file path.

Now just use cominvoke function to do the actually calling on FileLen. The cominvoke takes a pointer for return values. We know that FileLen returns an integer, so i passed in a integer's pointer.

#define VT_BSTR 8

fsFileLen(string f)

{

int dispid = 0;

int size = 0;

comgetidbyname(globalptr_filesystem, "FileLen", dispid);

comargclr();

comargadd(VT_BSTR, &f);

cominvoke(globalptr_filesystem,dispid,&size);

comargclr();

return size;

}

Now let us see if it works by writing a testing function.

test_filesys()

{

startup_filesystem();

putsl("hello.txt size = " + fsFileLen("hello.txt"));

cleanup_filesystem();

}

Since we hide all of that complexity with a few wrapper functions. Our testing function can be very clean. In our testing function, it assumes that you have a "hello.txt" file on the root directory.

Conclusion

In PocketC, there are a few helper functions to allow you load an activex control, call its method and set/get properties.  This opens 20-30 current VBcontrols to PocketC developers.

Trackback 0 Comment 0

Mobile Web Forms를 사용하여 모바일 웹 응용 프로그램 만들기

Visual Studio .NET에서 Mobile Web Forms를 사용하여 모바일 웹 응용 프로그램 만들기

내용 수정일: 2002년 9월 27일

웹 폰이나 개인용 정보 단말기(PDA) 등 다양하고 새로운 장치를 포용할 수 있을 만큼 차세대 컴퓨터 플랫폼이 성장함에 따라, 개발자들은 지금까지 쌓아온 도구, 기술 및 경험을 토대로 하여 새로운 도전을 시도하고 있습니다. 새로운 형식으로 확산된 기술 덕분에 소비자와 기업에서 선택할 수 있는 장치의 종류는 많아지고 있으며 이에 따라 소프트웨어 개발자는 독특한 개발 상의 문제에 부딪치게 되었습니다.

Microsoft는 개발자가 이러한 새로운 씬 클라이언트 장치용 응용 프로그램을 빠르게 작성할 수 있도록  Mobile Internet Toolkit으로 알려진 ASP.NET 모바일 컨트롤을 Visual Studio .NET 환경에 직접 통합했습니다. 이 도구 키트와 Visual Studio .NET을 함께 사용하면 개발자는 제공된 장치의 고유 기능을 그대로 이용하면서, 장치마다 다르게 지능적으로 렌더링되는 응용 프로그램을 만들 수 있습니다. 개발자는 Visual Studio .NET에서 모바일 웹 응용 프로그램 프로젝트를 만들 수 있으며, 사용자는 비주얼 디자이너를 사용하여 Mobile Web Forms 페이지를 만들고 편집할 수 있습니다.

Mobile Internet Toolkit은 서버측 Mobile Web Forms 컨트롤 집합과 사용자 인터페이스 제작용 Mobile Internet Designer로 구성되어 있으며, 이밖에 퀵 스타트 자습서, 개발자 설명서, 장치 어댑터용 소스 코드를 포함하고 있습니다.

Mobile Web Forms 컨트롤은 ASP.NET과 Microsoft .NET Framework의 기능을 확장하여 주는 만큼, 개발자가 웹 폰이나 PDA 같은 무선 모바일 장비에 사용할 모바일 웹 응용 프로그램을 개발하는 데 도움을 줍니다. 또한 Mobile Web Forms 컨트롤은 여러 장치에 맞는 마크업 언어(Markup Language)를 생성할 뿐 아니라, 출력 렌더링을 적용하며 WML(Wireless Markup Language) 버전 1.1, HTML 버전 3.2, cHTML(Compact HTML) 등을 지원합니다.

Mobile Internet Designer는 Visual Studio .NET 디자인 환경이 제공하는 강력한 기능을 활용하여, 프로그래머가 Mobile Web Forms를 대화식으로 설계하고 개발할 수 있도록 합니다. 개발자는 Mobile Internet Designer에서 사용이 간편한 "드래그-앤-드롭" 기능을 사용하여 다양한 종류의 사용자 장치에서 브라우징될 수 있는 응용 프로그램을 작성할 수 있습니다.  

Mobile Web Forms 컨트롤

Microsoft Mobile Web Forms 컨트롤은 .NET Framework에서 만들어지며 이렇게 하면 ASP.NET 웹 개발 모델의 이점을 모바일 응용 프로그램 분야에 적용할 수 있습니다. 또한 Mobile Web Forms 컨트롤은 다음과 같은 기능을 제공합니다.

  • 다양한 도구 지원. 풍부한 도구 상자와 디자이너, 끌어서 놓기 서버 컨트롤, 자동 배포 및 기타 많은 기능과 더불어 완벽한 Visual Studio IDE(통합 개발 환경) 지원의 이점을 활용할 수 있습니다.
  • 다양한 장치 지원. 씬 클라이언트 WML 기반 휴대용 전화에서 HTML 기반 Pocket PC에 이르기까지 다양한 종류의 모바일 장비를 지원합니다.
  • 한 번만 만들면 되는 웹 페이지. 웹 응용 프로그램을 한 번 작성하여 지원되는 모든 모바일 장비에 구축할 수 있습니다. WML이나 기타 마크업 언어(Markup Language)에 대한 필수 지식이 없어도 개발자는 Mobile Web Forms 컨트롤 집합을 사용하여 복잡한 응용 프로그램을 개발할 수 있습니다. 적응 서버측 컨트롤은 브라우저, 장치 및 게이트웨이에서의 구현 시 나타나는 많은 차이를 처리해 줍니다.
  • 모듈식 디자인. "코드 숨김" 페이지를 사용하여 사용자 인터페이스에서 프로그래밍 논리를 분리할 수 있습니다. 이러한 페이지는 Microsoft Visual C# 또는 Microsoft Visual Basic으로 작성될 수 있습니다. 프로그래머가 인터페이스와 프로그래밍 논리를 분리할 때, Mobile Web Forms 페이지의 "browse anywhere" 기능을 잃지 않고도 특정 장치를 위해 사용자 인터페이스를 사용자 지정할 수 있습니다.
  • 사용자 지정 기능 및 확장성. 장치 유형에 맞게 컨트롤을 사용자 지정할 수 있습니다. 기존 컨트롤을 확장하거나 결합하여 특수화된  컨트롤을 만들거나 처음부터 완전히 새로운 Mobile Web Forms 컨트롤을 만들 수도 있습니다. 또한 확장성 모델을 사용하면 향후 출시되는 새 장치를 지원할 수도 있습니다. 따라서 오늘날의 개발자가 만든 Mobile Web Forms 응용 프로그램을 차세대의 스마트 장치에서도 사용할 수 있습니다.  

Mobile Web Forms

Mobile Web Forms 페이지는 특수화된 ASP.NET Web Forms 페이지로, 확장자가 .aspx인 텍스트 파일이며 지원되는 모바일 장비에 맞추어 렌더링될 수 있는 모바일 컨트롤을 포함하고 있습니다.

포켓 PC Microsoft Mobile Explorer 폰 에뮬레이터

그림 1. Pocket PC

그림 2. Microsoft Mobile Explorer 전화 에뮬레이터

개발자는 장치 독립적인 속성, 메서드, 이벤트를 사용하여 Mobile Web Forms 페이지와 컨트롤을 만들 수 있습니다. 지원되는 장치에서 Mobile Web Forms 페이지를 요청하면 해당 페이지와 컨트롤은 자동으로 장치 유형을 식별하고 해당 장치의 기능에 적합한 렌더링을 생성합니다. 예를 들어 일부 장치에서는 다른 장치보다 많은 텍스트 줄을 표시할 수도 있고, 일부 장치에서는 다른 장치에서는 할 수 없는 그래픽을 표시할 수도 있으며, 일부 장치는 전화를 걸 수도 있습니다.    

모든 Mobile Web Forms 페이지에는 다음과 같이 모바일 페이지를 구분해 줄 수 있는 표준 헤더 지시문이 있어야 합니다. 언어 속성은 선택한 개발 언어에 따라 달라지며, 현재 개발자가 사용할 수 있는 언어는 Visual C# 또는 Visual Basic입니다.

<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage"
 Language="C#" %>
<%@ Register TagPrefix="mobile"
 Namespace="System.Web.UI.MobileControls"
  Assembly="System.Web.Mobile" %> 

Mobile Internet Designer는 이 헤더 지시문을 자동으로 삽입하지만, Mobile Internet Designer를 사용하지 않는 경우에는 개발자가 수동으로 이 헤더 지시문을 삽입해야 합니다.

Mobile Web Forms 페이지의 모든 모바일 컨트롤 태그에는 다음과 같이 runat="server" 속성이 있어야 합니다.

<mobile:Form runat="server">
</mobile:Form>

Mobile Web Forms 페이지는 Mobile Web Forms 응용 프로그램의 모든 컨트롤을 보유하고 있습니다. 개발자는 Mobile Web Forms 페이지를 작성할 때 해당 페이지에 하나 이상의 Form 컨트롤을 배치합니다. Form 컨트롤은 주로 컨테이너이며 페이지를 컨트롤과 콘텐트의 논리 그룹으로 분리합니다. ASP.NET 페이지와 달리, Mobile Web Forms 페이지는 둘 이상의 Form 컨트롤을 포함할 수 있습니다. 하지만 폼은 한 번에 하나씩만 활성화되며 응용 프로그램은 항상 활성화된 폼만 표시합니다.

개발자가 링크를 제공하면 사용자는 현재 페이지의 다른 폼으로 찾아갈 수 있습니다. 응용 프로그램은 다른 페이지의 기본 폼으로만 링크될 수 있습니다. 또한 개발자는 활성화시켜야 할 폼을 프로그래밍적으로 변경할 수 있습니다.

StyleSheet 컨트롤을 제외한 모든 컨트롤은 Form 컨트롤에 보관해야 하며 StyleSheet 컨트롤은 Mobile Web Forms 페이지에 직접 놓아야 합니다. 폼은 다른 Form 컨트롤을 포함할 수 없습니다. 하지만 Mobile Internet Toolkit는 Form 컨트롤과 비슷한 컨테이너인 Panel 컨트롤을 제공합니다. Panel 컨트롤은 Form 컨트롤과 마찬가지로 콘텐트와 컨트롤을 보유합니다. Form 컨트롤과 Panel 컨트롤의 주요 차이점은 Form 컨트롤은 페이지에 직접 배치해야 하는 반면, Panel 컨트롤은 폼이나 다른 패널에 배치한다는 점입니다.

Mobile Internet Toolkit에서 제공하는 Mobile Web Forms 컨트롤은 ASP.NET Web Forms 서버 컨트롤을 토대로 합니다. ASP.NET 서버 컨트롤과 마찬가지로, Mobile Web Forms 컨트롤은 속성, 메서드 및 이벤트를 포함하는 개체 모델을 제공합니다. 이 개체 모델을 사용하면 개발자는 응용 프로그램을 사용할 장치와 상관 없이 페이지를 수정하거나 페이지와 상호 작용할 수 있습니다.

Mobile Web Forms 페이지를 만드는 두 가지 방법

Mobile Web Forms 프로그래밍은 Visual Basic 개발자가 전통적인 Microsoft Windows용 응용 프로그램을 만드는 방식을 표본으로 하여 만들어졌습니다. Visual Basic에서 Windows Forms 응용 프로그램을 만들려면 우선 폼을 프로젝트에 추가한 후 컨트롤을 폼에 끌어다 놓고 속성을 설정한 다음, 컨트롤을 두 번 눌러 코드 숨김 폼을 작성합니다. 수많은 개발자에게 인기가 있는 이 모델은 데스크톱 응용 프로그램을 빠르게 만드는 데 유용합니다. Mobile Web Forms 기술을 사용하면 Visual Basic과 동일한 설계 원리와 생산성 수준으로 모바일 웹 응용 프로그램을 작성할 수 있습니다. 

Mobile Web Forms를 사용하여 광범위한 Mobile 웹 응용 프로그램을 만들려면 간단하게 프로젝트에 새 Mobile Web Forms 페이지를 추가한 후 페이지에 Form 컨트롤을 끌어 놓고, 폼에 콘텐트와 컨트롤을 추가한 다음 컨트롤을 두 번 눌러 코드 숨김 페이지를 추가하기만 하면 됩니다. Mobile Web Forms 페이지의 프로그래밍 논리를 구현하기 위해 Microsoft Visual C# .NET이나 Microsoft Visual Basic .NET을 사용할 수 있습니다.

다음 예는 Visual Studio .NET Mobile Internet Designer를 사용하거나 Mobile Internet Toolkit과 명령줄을 사용하여 Mobile Web Forms 응용 프로그램을 만드는 방법을 보여줍니다.

Visual Studio .NET Mobile Internet Designer

다음 예에서는 Visual Basic .NET과 Calendar 컨트롤을 사용하여 단일 Mobile Web Forms 페이지 내에서 정의된 여러 폼을 처리하는 방법을 보여줍니다. 클라이언트 브라우저에 페이지가 로드되면 기본적으로 페이지의 첫 번째 폼이 브라우저에 표시됩니다. 모바일 페이지의 ActiveForm 속성을 설정하여 프로그램적으로 다른 폼을 탐색하거나, Link 컨트롤을 사용하여 사용자가 페이지의 다른 폼을 탐색하도록 만들 수 있습니다. 다음은 ActiveForm 탐색의 예로, 두 개의 폼이 있는 페이지를 보여주고 있습니다.

TwoFormsApp 만들기

먼저 TwoFormsApp라는 새 디렉터리를 만듭니다.

  1. Visual Studio 시스템 요구 사항에 나열된 지원되는 운영 체제에서, 인터넷 정보 서비스(IIS)를 실행하는 테스트 컴퓨터에 Visual Studio .NET과 Mobile Internet Toolkit를 설치합니다.
  2. Visual Studio .NET을 시작합니다. 파일 메뉴에서 새로 만들기를 가리킨 후 프로젝트를 클릭합니다.
  3. 새 프로젝트 대화 상자의 프로젝트 형식 목록에서 Visual Basic 프로젝트를 선택합니다. 템플릿 목록에서 모바일 웹 응용 프로그램을 클릭합니다. 프로젝트 이름으로 TwoFormsApp를 입력한 후 확인을 클릭합니다.
새 프로젝트 대화 상자

그림 3. 새 프로젝트 대화 상자

MobileWebForm1.aspx 사용자 인터페이스 만들기

기본적으로 응용 프로그램을 만들 때 MobileWebForm1.aspx라는 Mobile Web Forms 페이지가 나타납니다. 이는 사용자 인터페이스 파일로서, 여러 가지 서버측 모바일 컨트롤로 구성되며 클라이언트 장치의 기능에 따라 HTML 3.2, cHTML 또는 WML 1.1을 렌더링합니다. 프로그래밍 논리를 처리할 컴파일된 코드 숨김 파일인 MobileWebForm1.vb는 나중에 만듭니다.

  1. Mobile Forms 도구 모음에 있는 Label, TextBoxCommand 단추를 Form1에 끌어 놓습니다.
  2. Form1에서 Label을 누른 다음, 화면 오른쪽 방향에서 속성 창을 찾습니다. Label1 Text 필드에 날짜를 입력하십시오(mm/dd/yyyy)를 입력합니다. 그러면 입력한 텍스트가 폼의 Label에 나타납니다.
  3. Show Form2 문자열을 Command 단추의 Text 속성 값으로 입력합니다.
  4. Form1 아래의 디자인 화면에 추가 폼을 끌어서 놓습니다. 새 폼의 이름은 Form2입니다. Command 단추와 Calendar 컨트롤을 추가합니다. Command 단추의 Text 속성 값으로서 Show Form1 문자열을 입력합니다.

디자인 시 폼 화면이 그림 4와 같이 나타납니다.

Screen shot of the form surface in the Mobile Internet Designer

그림 4. Visual Studio .NET Mobile Internet Designer

MobileWebForm1.aspx.vb 코드 숨김 파일 만들기

Show Form2 단추를 두 번 누르십시오. 그러면 MobileWebForm1.aspx.vb라는 새 파일이 열리면서 커서가 Public Sub Command1_Click 옆에 놓입니다. 다음 코드 줄을 추가하십시오.

Public Sub Command1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Command1.Click
        Dim datetext As Date
        datetext = TextBox1.Text
        ActiveForm = Form2()
        Calendar1.SelectedDate = datetext
        Calendar1.VisibleDate = datetext
End Sub 

디자인 뷰에서 Show Form1 단추를 두 번 누르십시오. 그러면 커서가 Public Sub Command2_Click 옆에 놓입니다. 다음 코드 줄을 추가하십시오.

Private Sub Command2_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Command2.Click
        Dim dateval As Date
        dateval = Calendar1.SelectedDate
        ActiveForm = Form1()
        TextBox1.Text = dateval
End Sub

TwoFormsApp 응용 프로그램 실행

  1. 솔루션 탐색기에서 MobileWebForms1.aspx 파일을 마우스 오른쪽 단추로 클릭하고 시작 페이지로 설정을 선택합니다.
  2. 응용 프로그램을 저장한 후 F5 키를 누르거나 디버그 메뉴에서 시작을 선택하여 응용 프로그램을 빌드하고 디버깅합니다.
  3. 응용 프로그램이 실행되면 지정된 형식으로 날짜를 입력한 후 Show Form1 단추를 누릅니다. 그러면 Form2가 나타나면서 Calendar 컨트롤을 표시합니다.
  4. 달력을 누르고 Show Form2 단추를 누르면 다른 날짜를 선택할 수 있습니다.

모바일 장비를 사용하여 응용 프로그램을 테스트하려면 웹 서버의 정적 IP 주소가 필요합니다

Microsoft Mobile Internet Toolkit 및 명령줄

Visual Studio .NET을 사용하면 Mobile Internet Toolkit를 개발 환경 상에서 직접 통합할 수 있으며 디자인, 개발, 디버깅 중 상당 부분을 자동화할 수도 있습니다. 하지만 자주 사용하는 편집기인 Mobile Internet Toolkit와 명령줄 컴파일러를 사용하면 모바일 응용 프로그램을 수동으로 만들 수도 있습니다. 다음 예는 Visual C#을 사용하여 모바일 응용 프로그램을 수동으로 만드는 방법과, Command 컨트롤에서 OnClick 이벤트를 처리하는 방법을 보여주고 있습니다. 코드에서 이 이벤트를 수신하면 이 이벤트는 프로그램 차원에서 다른 폼으로 이동합니다. 새로 활성화된 폼은 OnActivate 이벤트를 발생시키며 나중에 이 이벤트를 처리하여 폼을 초기화할 수 있습니다.

응용 프로그램 개발을 시작하려면 개발 컴퓨터에서 Name이라는 디렉터리를 만든 후 Name 디렉터리에 다음의 두 파일을 만드십시오.

  • Name.aspx는 사용자 인터페이스 파일로, 여러 가지 서버측 모바일 컨트롤로 구성되어 있으며 클라이언트 장치에 따라 HTML 3.2, cHTML 또는 WML 1.1을 렌더링합니다.
  • Name.cs는 코드 숨김 파일입니다. 이 파일의 확장명은 파일을 작성한 언어에 따라 달라집니다. 이 예에서는 C# 구성 요소로 컴파일되었습니다. 구성 요소가 Visual Basic 구성 요소인 경우 파일 이름은 Name.vb입니다.

Name.aspx Mobile Web Form 만들기

이 예를 실행하려면 다음 코드를 Name.aspx 파일의 콘텐트로 사용하십시오.

<%@ Page Codebehind="Name.cs"
 Inherits="NameApp.NamePage" Language="C#" %>
<%@ Register TagPrefix="mobile"
 Namespace="System.Web.UI.MobileControls"
  Assembly="System.Web.Mobile" %>

<mobile:Form runat="server">
   <mobile:Label
    runat="server">What is your name </mobile:Label>
   <mobile:Textbox
    runat="server" id="NameEdit"/>
   <mobile:Command
    runat="server" OnClick="GoCommand_OnClick" Text="Go!"/>
</mobile:Form>

<mobile:Form runat="server" id="SecondForm"
 OnActivate="SecondForm_OnActivate">
   <mobile:Label runat="server" id="Greeting"/>
</mobile:Form>

Name.cs 코드 숨김 파일 만들기

다음 Visual C# 코드를 Name.cs 파일의 콘텐트로 사용하십시오.

using System;
using System.Web.UI.MobileControls;

namespace NameApp
{
    public class NamePage : MobilePage
   {
      protected Form SecondForm;
      protected TextBox NameEdit;
      protected UI.Label Greeting;
      private String greetingText;

      protected void GoCommand_OnClick(Object sender,
       EventArgs e)
      {
         greetingText = "Hello, " + NameEdit.Text + "!";
         ActiveForm = SecondForm;
      }

      protected void SecondForm_OnActivate(Object sender,
       EventArgs e)
      {
         Greeting.Text = greetingText;
      }
   }
}

Name.cs 파일 컴파일

  1. Name 디렉터리에서 bin이라는 폴더를 만듭니다.
  2. 명령 프롬프트에 다음 명령줄을 입력하여 Name.cs 파일을 컴파일합니다.
csc /r:System.Web.dll /r:System.Web.Mobile.dll_
   /target:library /out:bin\NameApp.dll Name.cs

결론

차세대 Visual Studio 개발 도구를 사용하면 모바일 웹 응용 프로그램을 간단하게 만들 수 있습니다. Visual Studio .NET을 사용하면, 개발자는 다양한 마크업 언어(Markup language)를 몰라도 기존의 웹 및 Windows 클라이언트 응용 프로그램을 만드는 것과 동일한 프로그래밍 모델을 사용하여 단일 ASP.NET 페이지에서 거의 모든 모바일 장비와 웹에 적용할 수 있는 응용 프로그램을 만들 수 있습니다. 모바일 웹 응용 프로그램을 만드는 간략화된 새로운 기술과 XML이나 WAP와 같은 산업 표준에 대한 지원을 통해, Microsoft는 개발자가 차세대 모바일 웹 응용 프로그램을 만드는 데 필요한 모든 지원을 아끼지 않을 것입니다.

Trackback 0 Comment 1

PC 키보드 PDA용으로 개조하기

[원문]=> http://todaysppc.dreamwiz.com/main/bhtml.php?pgname=/gm/archives/00001187.htm

 

안운기님이 2005/11/21 todaysppc에 올려주신 내용입니다.

한번 만들어 보고 싶지 않나요?ㅋ 대단해요~ 운기님^^

혹 아래 링크중 안되시는 분은 직접 위 원문을 보시고 다운 받으시길...


2005 /11/21
[개조] PC 키보드 PDA용으로 개조하기

PDA의 문자 입력 방법은 화면 위에서 필기 인식으로 글자를 입력하는 방식인데, 이 방식은 사이즈를 줄이고 휴대를 편하게 한다는 장점이 있다.
그렇지만 이런 장점의 너머에는 언제나 단점이 있으니 생각보다는 생산성이 높지 않다는 것이다.
간단한 메모들이나 연락처를 입력하기에는 적합하지만 보다 편하게 데이터를 입력하기 위해서는 역시 컴퓨터의 키보드를 이용한 입력이 편리하다.

대부분의 가정에는 PC용 컴퓨터가 1-2개쯤 굴러다닐 것이다 .그것도 오래되어서 버릴까 하는 고민이 되는...
이런 PC용 키보드를 이용해서 PDA에서입력하는 방법을 소개한다.
물론 쉽지는 않다. 그렇지만 키보드를 만들기 위한 모든 소스와 방법은 준비되어 있으니, 이제 찬찬히 읽어보면서 공부하기만 하면된다.
읽고 그대로 따라하기만 하면 전자에 대한 아주 특별한 지식이 없어도 쉽게 멋진 키보드를 만들 수 있을 것이다.

멋진 개조에 대한 정보를 올려주신 안운기님께 감사드린다.


- 제작자 : 안운기 / awkonly@hanshin.ac.kr.NOSPAM

1. PDA키보드의 원리

기존 시중에 나와있는 PDA의 키보드의 동작 원리를 분석해 보았습니다.
물론 전에도 말했듯이 직접 사는게 돈이 아깝다는 생각이 들어 구입해서 분석하진 못했고 각 판매 사이트를 돌아다니며 동작원리를 추론해 보았습니다.

기본적으로 PDA는 PC와 달리 PS/2입력을 받을 방법이 없습니다.
PDA컨넥터 구성을 보면 시리얼(RS232), USB의 입력을 받을 수 있고 그 외에 적외선, 블루투스등의 입력 방법이 있지만 USB, 적외선, 블루투스 세가지 모두 PDA내부에서는 COM포트처럼 동작을 하기 때문에 결과적으로 PDA는 시리얼 통신 외에는 외부에서 입력 받을 방법은 없습니다. (무선랜 제외^^)
때문에 기존 판매되고 있는 키보드 역시 시리얼 통신으로 데이터를 PDA에 전송하고 PDA에 설치된 드라이브 프로그램이 그 데이터를 받아서 키 이벤트를 발생시키는 방법이라는 점을 추론할 수 있었습니다.


2. 개조를 위한 기본 구성

a. [PC용 키보드]


b. [PS/2 to RS232]


c. [PDA용 드라이브 프로그램]

d. [키 이벤트 발생]

PS/2방식은 쌍방향 통신이기 때문에 위의 화살표가 양방향임을 주목하세요
키보드가 왜 쌍방향 통신이지? 라고 의문을 갖는 분도 있으리라 생각하는데 PC에서 키보드를 리셋시킨다던지 Num ock, Caps lock, Scroll lock 등의 LED를ON/OFF시키는 작업, 키 입력주기를 변경하는 작업 등은 PC에서 키보드로 명령어를 주게끔 되어있고 이런 명령을 받지 않으면 키보드는 이니셜되지 않아서 올바로 동작하지 않게 됩니다.
이제 제작에 앞서 위의 구성에서 직접 제작해야할 항목은 b, c 이렇게 두가지 라는점은 다들 아실테고 선행되어야할 지식을 소개 합니다.

1) 약간의 하드웨어 지식 : 회로도를 보고 꾸밀 수 있을 정도
2) 약간의 소프트웨어 지식 : 제가 이미 만든 프로그램을 올려 드릴 예정이니 이 부분은 솔직히 모르셔도 상관 없습니다.
3) 약간의 손재주 : 되도록 휴대하기 편하고 이쁘게 만들려면 손재주도 좀 있어야 하고요
4) 약간의 시간 : 저는 1주일의 시간이 걸렸지만 제가 올려드리는 자료를 이용 하신다면
하루면 충분히 만들 수 있을거라 생각 됩니다.
(주로 자료 검색에 시간을 보낸지라)


3. 첨부 자료 소개

부폼의 데이터시트 및 PDA핀구성 PPC 가상키코드 문서 doc.zip

- AT90S2312.pdf, MAX232.pdf
: 개조에 사용된 메인 부품의 데이터시트
- RX3715_pin.pdf, 24pin.pdf
: PDA용 컨넥터 핀 구성, 정통부 24pin 규격은 스마트폰 사용자를 위해서 첨부 합니다.
RX3715호환 모델이 아닌 경우엔 이 자료를 찾아 보셔야 합니다. 22pin으로 되어있으면
대부분 호환될 것으로 생각되지만요.
- PS2.pdf, VirtualKeyCode.pdf
: PS/2의 인터페이스에 관한 글과 PPC가상키코드 입니다.
PPC가상 키코드는 PC용 가상키코드와 동일합니다.

자 제작을 위한 기초는 전달 했으니 본격적으로 제작을 해보겠습니다.

이제부터 PS2 to RS232 제작을 해보도록 하겠습니다.

1. 회로의 구성

첨부한 회로도를 보시고 회로를 직접 제작하시면 되는데 부품구매는 www.devicemart.co.kr 에서 구매하셔도 되고 직접 용산이나 종로에서 구매하셔도 됩니다.
신호 변환을 위해 사용된 MCU는 ATMEL사의 AVR 시리즈 AT90S2313 입니다.

[주요 부품]
AT90S2313 MCU
MAX232 TTL <-> RS232
6 pin DIN Connector DS1093-6P
PDA 22pin Connector http://www.cable49.com/ 에서 구할 수 있습니다.
Crystal 8 MHz 크리스탈은 8MHz를 사용하시기 바랍니다.

* 나머지 부품은 회로도를 참고하여 구하시면 됩니다.

또 AVR은 ISP 방식으로 프로그램을 Write할 수 있는데 저는 패러럴통신용 ISP회로를 구성하여 사용하였습니다. 네이버에서 "AVR용 ISP회로도" 로 검색하면 관련자료를 쉽게 구할 수 있을 것입니다.
또 Write용 유틸리티인 Ponyprog를 함께 첨부 합니다. 이 프로그램의 사용 방법 역시 네이버에서 "Ponyprog"라고 입력하면 쉽게 찾을 수 있을 것입니다.


2. 전원 및 주의사항

전원은 5V DC 어뎁터를 사용하시거나 PC에서 USB전원을 뽑아서 사용하셔도 됩니다.
대신 PDA와 인터페이스시 아래 내용을 참고 하셔서 실수가 없도록 해주세요
휴대성을 위해서 전지를 사용하고 싶으신 분은 PC키보드가 5V 입력이 있어야 동작을 하기 때문에 전압을 꼭 확인해 주시기 바랍니다.

[키보드 사용시 PDA충전을 겸하고 싶은 경우]
PDA 충전시 최대 전류가 700mA 까지도 올라가는것을 실험으로 확인했습니다.
때 문에 PDA 충전을 겸하고 싶은 경우에는 그에 맞는 용량의 아답터를 사용해 주시고 회로도 PDA CONNECTOR 부분에 VCC 5V를 4번 핀으로, GND를 22번 핀으로 수정해 주셔야 합니다. (PC USB 전원 사용시에는 절대 변경하지 마세요)
만약 스마트폰을 사용하시는 경우라면 24pin 규격서를 참고하셔서 적절히 바꿔 주시기 바랍니다. 스마트폰이 없는 관계로 직접 테스트해보지 못했습니다.
또 스마트폰은 RS232레벨이 아닌 TTL레벨로 시리얼 통신이 되는것으로 알고 있습니다.
그렇기 때문에 MAX232 부분을 제거하고 PDA TXD(13번 핀)과 RXD(12번 핀)을 연결하고, PDA RXD(14번 핀)과 TXD(11번 핀)을 연결해 주면 됩니다.


3. 마무리

회로가 제작되면 ISP와 Ponyprog를 이용해 함께 첨부한 kb.a90 파일을 MCU에 Write 해줍니다. (이 부분의 소스코드는 공개하지 않겠습니다.)

PS2 TO RS232C 변환 회로도 doc2.zip

자~ 이제 PDA용 드리이브 프로그램을 만드는 일만 남았습니다.


자 마지막으로 PDA용 드라이브 프로그램을 한번 만들어 봅시다.
이번 내용은 소프트웨어 개발자를 위한 내용이니 잘 이해가 안되는 분은
[4. 키보드 사용] 이부분만 보시시면 됩니다.

1. 기본원리

첫번째 강좌에서도 말한것 처럼 PDA는 시리얼 통신 말고는 외부 입력을 받을 방법이 없습니다.
때문에 시리얼로 입력된 키값을 keybd_event 함수로 키보드가 눌렸다는 이벤트를 발생시켜주는 아주 간단한 원리 입니다.
물론 드라이브 프로그램 이기 때문에 백그라운드로 실행을 시켜줘야 하는데요...
이부분에서 귀차니즘이 발동하는 바람에 처리하지 않았습니다. 뭐 사용하는데 불편함은 없으니까요...
혹시 누군가 제 소스를 변경해서 백그라운드로 동작하게 해주신다면 감사할 텐데요 ^^


2. 개발환경

- 사용 개발툴 : Embedded Visual C++4.0
- 서비스팩 : Embedded Visual C++4.0 sp4
- SDK : Pocket PC2003 SDK (스마트폰인 경우는 스마트폰용으로 받으세요)

- 개발환경 다운경로
http://www.microsoft.com/downloads/details.aspx?FamilyID=1dacdb3d-50d1-41b2-a107-fa75ae960856&displaylang=en
http://www.microsoft.com/downloads/details.aspx?familyid=9996B314-0364-4623-9EDE-0B5FBB133652&displaylang=en
http://www.microsoft.com/downloads/details.aspx?familyid=A6C4F799-EC5C-427C-807C-4C0F96765A81&displaylang=en
http://www.microsoft.com/downloads/details.aspx?FamilyID=4a4ed1f4-91d3-4dbe-986e-a812984318e5&displaylang=en

- 개발환경 설치 순서
1) Embedded Visual C++4.0
2) Embedded Visual C++4.0 sp4
3) Pocket PC2003 SDK


3. 스캔키코드와 가상키코드

소스를 이해하기 위해서는 스캔키코드와 가상키코드의 개념을 알아야 하는데요
스캔키코드는 말 그대로 키보드가 주는 코드 입니다. ps2.pdf 문서를 참고하세요
PC나 PDA에서는 이 스캔키코드를 그대로 사용하지 않고 가상키코드로 변환해서 사용하게 되는데요...
이 부분을 처리하지 않으면 올바른 동작을 하지 않습니다.
소스의 keyboard_map 을 참고하세요


4. 키보드 사용

파일의 압축을 풀어보면 소스와 이미 컴파일된 "SerialCommunication.exe" 파일이 있습니다.
이 파일을 PDA의 적당한 위치에 복사하시고... 뭐 아이콘으로 지정해 두면 더욱 편리하겠지요?
키보드를 연결 합니다. 연결시에는 PS/2 컨넥터를 먼저 연결하시고 전원을 넣은 다음 PDA를 연결해 주세요 되도록 순서를 지켜 주는것이 좋습니다. 키보드 초기화가 먼저 되는것이 좋다는 뜻입니다.
그런 후 PDA 드라이브 프로그램을 실행 하시고 "키보드 접속" 버튼을 클릭 합니다.
이제 모든 준비가 끝났습니다. 메모장이라도 켜서 키보드를 실험해 보세요

1.키보드 드라이브 소스 다운로드 Wince.zip

5. 참고할만한곳
www.devpia.com / 개발자 포럼 > 모바일

Trackback 0 Comment 0

TodaysPPC 6100 세팅관련 링크 모음

출처 블로그 > JH Blog
원본 http://blog.naver.com/jhlmkf/12915947

TodaysPPC 6100 세팅관련 링크 모음

1부 메모리

6100 메모리 최적화(1)

6100 메모리 최적화(2)-사진저장위치바꾸기

6100 메모리 최적화(3)

6100 메모리 최적화(3)+a

6100 메모리 최적화(3)+aa

6100 메모리 최적화(번외)-일반 PDA 적용 가능


2부 기본 세팅 및 사용

6100 Tweak 이용하여 최적화하기

하드리셋후 자동설치 막기

IPAQStore 용량 확보하기

폰UI긴급복구법

iTask로 스크린캡춰하기

Nespot CM 옮기기

Nespot CM 위치바꾸기

액정보호지 붙이기


3부 고급세팅

폰트바꾸기-키드체 사용하기

한자사용하면서 키드체 사용하기

외산프로그램 시스템폰트

폰트파일지우기

폰UI바꾸기(1)-LC8000 (6100과 다름)

폰UI바꾸기(2)

폰UI바꾸기(3)

RW6100폰UI바꾸기

폰메시지배경화면바꾸기

바뀐 HPPhone.exe swingstore에 설치하기

배터리 오래 사용하기


4부 전화사용

MP3벨 지정하기

MP3벨 지정하기-프로그램으로 간단히 지정하기

전화시스템 메뉴 암호

상대방 단축번호로 문자보내기

슬라이드 소리없이 매너모드로 전환하기

전화올때 벨소리만 죽였다가 전화받기

전화 수신 거부 버튼 사용하기

폰돈영상 대기화면 편집하기

폰벨소리 저장방법

밧데리 충전 안될때 처리 방법

전화모뎀으로 이용하기-301/6100

FIMM 이용 리얼벨 만들기

Trackback 0 Comment 0

Windows CE의 소개

출처 블로그 > Coming Soon!!
원본 http://blog.naver.com/stable/140001069461
제 1 회. Windows CE OS 의 소개
우선, 개발 강좌를 시작하기 전에, Windows CE.NET 4.1 기반의 모비원과 PocketPC 계열의 OS 와의 차이점을 이해하셨으면 하는 의미에서, 간단히 Windows CE OS 의 종류를 소개 해보도록 하겠습니다.

Windows CE 라는 OS 는 Microsoft 에서 개발 한 Embed 기기 용 OS 로서, 주로 PDA, 셋톱박스, 차량용 기기 등의 CPU를 탑재한 전자제품을 겨냥 한 경량화 된 OS 라 할 수 있습니다.

Windows CE 기반의 OS 제품들 중, 본 강좌를 보고계신 여러분들의 주 관심사인 PDA용 OS 의 종류에는 대략 3가지가 있다고 할 수 있습니다.

A.PocketPC 계열 제품
Windows CE 기반의, MS 에서 지정한 표준 하드웨어 스펙을 지켜 제작 된 , PDA 전용 OS 입니다. 1999년도에 선보인 Palmsized PC 2.11, 2000년도에 나온 Windows CE 3.0 기반의, PocketPC 2000 , 2002년, PocketPC 2000 에서 Shell 과 보안 부분 및 Application 등을 보강한 PocketPC 2002 가 나오게 되었습니다. 또한, PocketPC 2002 제품 이후부터 MS 에서는 더 이상 SH3 / MIPS 등의 CPU 는 지원하지 않도록 하였습니다.

가장 최근 MS 에서 발표한 PocketPC OS 제품은 Windows Mobile 2003 PocketPC 이며, 이는 기존의 Windows CE 3.0 기반에서 Windows CE.NET 4.2 기반의 OS 로, OS 의 Core 를 새롭게 교체한 OS 입니다.



B.embedded Windows CE 제품
Windows CE OS 는 위에 설명 드린대로 embed 기기들을 대상으로 한 OS 입니다. 즉, Windows CE OS 는 카오디오, 세탁기, 키오스크, 자동판매기, 냉장고… Windows CE OS 가 지원할 수 있는 CPU (ARM : 30여종 / MIPS: 30여종 / SH: 80여종 / x86: 180여종)를 탑재한 전자제품이라면, 어디건 포팅이 가능합니다. 그래서, 위 Windows CE OS 를 포팅하여 개발한 PDA 들이 상당 수 있는데, 이러한 OS 의 단말기를 PocketPC 와 구분지어 부르기 위해, Windows CE PDA 혹은 embedded Windows CE PDA 라고 부릅니다.

현재 Windows CE 는 Windows CE.NET 4.2 가 가장 최신버젼으로써, 불과 몇 개월 전에 MS 에서 공식 릴리즈 발표를 하였으며 (물론 PDA 개발 업체들에게는 올해 초에 베타버젼의 OS 가 배포 되었기는 합니다), 현재 Mobione 은 그 바로 전 버전인 Windows CE.NET 4.1 을 사용하여 개발 된 PDA 입니다.



C. PocketPC Phone Edition
PocketPC Phone Edition 은 A 항목의 PocketPC 기반에 CDMA 나 GSM 등의 통신모듈을 사용한 음성통화가 가능한 소프트웨어를 내장하고 있는 OS 입니다. PocketPC 에 기능이 추가 된 정도라고 생각하시면 됩니다.



[PocketPC Phone Edition 2003]

D.PocketPC 와 embedded Windows CE PDA 와의 차잇점
i. OS 의 차잇점
우선, 모비원과 같은 embedded Windows CE OS 와, iPaq, PD600C와 같은 PocketPC OS 는 모두 Windows CE 기반의 OS 입니다.

무슨 말이냐고요? 우선, 아래 그림을 살펴보도록 하겠습니다.



[Windows CE OS 와 PocketPC OS 와의 관계]

위 그림처럼, Windows CE OS 는 커다란 OS 컴포넌트의 집합니다. 이러한 Windows OS 컴포넌트들을 추가/삭제/수정/최적화 하여 셋톱박스, 차량용 오디오, 자동화기기 등에 쓰이는 OS 를 만드는 것입니다. 이에 물론 PDA 도 포함됩니다. 또, 그렇게 만들어진 PDA를 embedded Windows CE PDA라고 부르기도 하고, Windows CE PDA 라고 부르기도 합니다.

즉, Windows CE OS 로 만들어진 PDA는 Windows CE OS 전체의 방대한 컴포넌트들을 조합하여 만들어진 PDA입니다. 그리고 이때, PDA의 디스플레이 해상도, 통신 인터페이스, CPU, OS의 겉모양 (Shell), 소프트웨어, 드라이버 등을 PDA를 제조하는 업체에서 그들의 목적에 맞게 조정 할 수 있으며, 이에 MS에서는 아무런 제약도 가하지 않습니다. 이유는 위에 말씀 드린대로, Windows CE OS라는 것은 어떤 기기에나 포팅이 가능한 OS 이기 때문입니다.

다음으로, PocketPC를 간략히 정의하자면, “Windows CE OS 의 컴포넌트의 일부와, MS에서 제공하는 별도의 Shell 및 S/W 를 탑재한 OS” 라고 할 수 있습니다. 즉, PocketPC 2003을 예로 들자면, 내부의 코어나 각종 컴포넌트는 Windows CE.NET 4.2와 같으며, 밖으로 보이는 Shell 과 Pocket Word, Pocket Excel 등과 같은 Application 들에서 Windows CE.NET 4.2와 차이가 나게 되는것입니다. 이외에 Windows CE.NET 4.2 와 Windows Mobile 2003 PocketPC 와의 자세한 차잇점은
http://www.microsoft.com/downloads/details.aspx?FamilyID=111fe6d5-b0e1-4887-8070-be828e50faa9&DisplayLang=en 에서 정보를 얻으실 수 있습니다.

ii.기기 개발에서의 차잇점
PocketPC 와 Windows CE 기반의 PDA 의 H/W 개발 과정사으이 차잇점은 그리 많지 않습니다. 하지만, 개발에 따른 제약이 다르게 됩니다. PocketPC는, MS 에서 규정한 PocketPC 2000 / 2002 / 2003 등의 하드웨어와 드라이버 등의 소프트웨어 규격에 맞추어 제작되어져야 하며, 이 규격을 맞추었는지를 검사하는 과정 또한 상당히 까다롭습니다. 하지만, Windows CE 기반 PDA 는, 제조사나 사용자의 요구에 맞추어 자유롭게 제작이 가능합니다.

iii.OS 개발에서의 차잇점
Windows CE라는 OS 는 Windows 98/2000/XP 등과 같이, 설치 프로그램을 실행하여 PC에 설치하는 OS와는 많은 차이가 있습니다. Windows CE 는 수많은 컴포넌트와 드라이버들로 구성 되어있으며, 이들을 Platform Builder 나 Target Designer 와 같은 툴로 OS를 만들게 됩니다. 이때, 네트워크, 디스플레이, 외부입출력장치, 보안, 언어 … 과 같은 기능들과 관련된 수많은 컴포넌트들을 추가하거나 제거하여 만들 수 있습니다.

이때, Windows CE 기반의 PDA들은 사용자의 요구에 맞추어 혹은 개발사의 의도에 맞추어 컴포넌트들을 마음대로 조정하고, 취향에 맞게 수정하여 사용이 가능합니다. 그러나, PocketPC 의 경우, MS 에서 요구하는 SPEC 에 맞추어 OS를 제작하게 되고, 이에는 OS의 크기를 고려하여 많은 부분의 컴포넌트를 제외 시켜 놓았습니다.

E.강좌를 마치며
본 강좌로, Windows CE OS 에 대한 이해에 조금이나마 도움이 되셨는지 모르겠습니다. 짧은 시간과 글재주로, 되도록 쉽게 설명을 드리고자 하였으나 그렇지 못한 점이 눈에 띄는 것 같습니다.
다음 강좌는 개발 툴에 대한 설명이 있을 예정입니다. 다음에는 좀더 자세하고 성의 있는 가오자가 되도록 노력하겠습니다. 그럼 부족한 글이나마 읽어주신 분들께 감사 말씀 드립니다.
Trackback 0 Comment 1

eMMbedded Visual C++ 에서의 한글.

eMMbedded Visual C++ 에서한글.

작성일 : 02.04.10

작성자 : 정동헌

리소스(Resource)의 한글.

 

프로젝트 생성 위저드에서 한글을 지원하지 않기 때문에 리소스 설정이 자동으로 한글 코드로 설정되지 않는다. 이 때문에 리소스에 한글을 사용하면 한글을 깨어져서 나오게 된다.

 

 

Step 1. AppWizard의 처음 스텝에 보면 아래에 표시한 것과 같이 리소스의 언어를 설정하는 부분이 있다. 이곳에 한글이 없으므로 여기서 영어를 선택하자.

 

 

 

Step 2. 이제 프로젝트를 만들었다면 리소스를 한글로 설정 해보자. 우선은 메뉴 항목 “Project/Settings”를 눌러서 프로젝트 세팅 박스를 띄운후에 “Resources" 텝으로 이동하면 다음 그림에 표시한 Language" 옵션을 볼 수 있는데 “영어(미국)“으로 설정되어 있는데 이를 ”한국어“로 바꾸자. 이렇게 해두면 이제부터 새로 만드는 모든 리소스 아이템은 기본 언어가 한글로 설정되어 생성된다.



 

Step 3. 위저드에서 기본으로 생성된 모든 리소스는 영어로 설정되어 있으므로 이는 각각 “한글로 바꾸어 주어야 한다. "Workspace View"리소스뷰(ResourceView)에서 리소스 아이템의 속성을 보면 아래와 같이 언어(Language)“영어(English)”로 설정되어 있는걸 볼 수 있다. 이를 Korean"으로 변경하자. 그런후에 리소스에 한글을 사용하면 한글은 깨어지지 않고 재대로 출력이 될 겄이다.

 

 

 

에뮬래이터(Emulator)에서의 한글 설정.

 

1. 에뮬레이터의 래지스트리를 편집.

 

래지스트리 키HKEY_LOCAL_MACHINE/nls에 다음과 같이 3가지 값이 설정한다.

"DefaultACP"  0x03b5 ( 949 )

"DefaultLCID" 0x0409 ( 1033 )

"DefaultOCP"  0x03b5 ( 949 )

 

에뮬레이터의 래지스트리 편집은 C:/Windows CE Tools/BIN“에 가보면 "CEREGEDT.EXE"라는 WinCE용 래지스트리 에디터가 있는데 이를 이용하면 에뮬래이터의 래지스트리 그리고 실재 PDA의 래지스트리를 싱크 상태에서 편집이 가능하다.

 

2. "C:Windows CE Toolswce300MS Pocket PCemulationpalm300windows"에 있는 wince.nls 파일 변경.

 이 파일은 “국가 언어설정”이 들어 있다. "디오펜“ 깔려 있는 PDA의 Windows"폴더에 들어있는 "wince.nls" 파일은 언어 설정이 한글로 되어 있으므로 이 파일을 복사해와서 위에 표시한 에뮬래이터 폴더에 덮어쓰면 에뮬래이터의 언어 설정이 한국어로 변경 된다.

 

위의 과정을 거친 후에 에뮬래이터에서 예제를 실행해보면 한글이 깨어지지 않고 나옴을 확인할 수 있다.

 

 

 

ANSII 코드 문자열 UNICODE로 변환하기.

 

WinCE OS는 모든 문자를 UNICODE로 처리한다. 따라서 다른 OS에서 일반적으로 쓰이는 ANSII기반의 데이터는 UNICODE로 변환이 필요하게 되는데 이를 변경하기 위해서는 아래에서 볼 여러 가지 함수들을 활용하여 변경이 가능하다.

 

 1. MultiByteToWideChar() 함수 이용.

 이 함수를 이용하는 것이 가장 복잡하며 코드가 길지만 변환시에 새부적인 설정이 가능하다. 함수의 원형은 다음과 같으며, "Winnls.h"에 정의되어 있다.

 

int MultiByteToWideChar(

UINT CodePage,

DWORD dwFlags,

LPCSTR lpMultiByteStr,

int cbMultiByte,

LPWSTR lpWideCharStr,

int cchWideChar );

 

매개변수를 살펴보면 ;

 "CodePage" ANSII 문자열이 어떤 언어인가를 지정하는 매게변수이다.

 "dwFlags" 일반적으로는 사용되지 않으며 새부적인 내용은 MSDN을 살펴보기 바란다.

 lpMultiByteStr” UNICODE로 변경을 원하는 ANSII 문자열이다.

 cbMultiByte 변경하고자 하는 ANSII 문자열의 길이 이다. "-1"을 넣으면 길이를 이 함수가 계산한다.

 lpWideCharStr UNICODE로 변경된 문자열이 들어갈 버퍼이다.

 cchWideChar 변경된 UNICODE 문자열의 길이이다.

 

사용예 :

 

WCHAR lpszUnicode=NULL;

 

//         Note : 처음 호출로 UNICODE로 변경시 문자열의 길이를

//         알아낸다.

int nConvertedLen = MultiByteToWideChar ( CP_ACP, 0, lpsz, -1, NULL, NULL );

 

//         Note : UNICODE로 문자열을 변환한다.

//

lpszUnicode = new WCHAR [ nConvertedLen+1 ];

MultiByteToWideChar ( CP_ACP, 0, lpsz, -1, m_pchData, nConvertedLen );

 

 위에서 "CP_ACP"는 OS에 기본 언어로 설정된 언어 코드를 사용하여 변환한다는 것이다. 즉, WinCE PDA의 “Start Menu/Settings/System"에 있는 "Regional Setting"에서 설정된 언어로 변환을 한다는 뜻이다. 만약 이것이 한글(Korean)”으로 설정되어 있지 않을때 한글 ANSII 코드를 변경한다면 깨어져서 변환이 된다. 만약 이 설정을 무시하고 강제로 지정하고 싶다면 "CP_ACP"와 같이 쓰지 말고 "949“ 값을 넣으면 된다. 이 값이 한글 코드 패이지를 나타낸다.

 그리고 위에서 보듯이 MultiByteToWideChar() 함수를 두 번 호출하는 이유는 ANSII 코드가 UNICODE로 변경시에 변경된 문자열의 길이가 어떻게 될지는 계산을 해보아야 알수가 있는데 이는 UNICODE는 모든 문자가 2Byte를 차지하지만 ANSII 문자는 2Byte와 1Byte가 혼제해 있기 때문이다.

 위의 함수를 단순화한 _mbstowcsz() 라는 함수가 있다. 함수의 원형은 다음과 같으며, 매개변수가 단순하게 되어 있다.

size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );

 

2. CString을 이용하기.

 이것을 이용하면 매우 간단하게 UNICODE로 변경이 가능하다. 단 내부적으로 MultiByteToWideChar() 함수가 호출되는데 이때 코드페이지가 “CP_ACP”로 설정되므로 이를 유의하여야 한다. 만약 위에서 설명한 “Regional Setting”이 제대로 되어 있지 않으면 한글 변환이 되지 않을 것이다. CString 에 ANSII 코드를 UNICODE로 변경해주는 대입 연산자가 만들어져 있으므로 단순 대입으로 변환이 일어난다.

Trackback 1 Comment 2

NASM 설치

 
리눅스 어셈블리어(ASSEMBLY Lan~) 프로그래밍을 위한 NASM 설치 Linux

2006/09/20 18:37

http://blog.naver.com/limhy0128/60028882603

첨부파일hello-2719-limhy0128.asm
Intel Architecture and Linux Platform 에서의
어셈블리어 프로그래밍을 위해서 다음과 같다..

리눅스에서 목적코드 생성을 위해 NASM을
목적코드를 실행코드를 바꾸기 위해 ld를 사용한다.

본인은 NASM을 통한 어셈블리어 프로그래밍을 준비하고자 한다.

[NASM 설치]
- 현재 우분투가 설치된 관계로 시냅틱을 통하여 설치하였으며
  터미널에서는 $ sudo apt-get install nasm 의 방법이 있다.

- RPM을 통한 설치 rpm Uvh 패키지명.rpm
  패키지 다운로드는 자신의 시스템에 맞추어 다운 받는다 [클릭]

- 소스설치
  설치방법에 대한 링크 [클릭], 다운로드 [클릭]
  1) tar xvzf xxx.tar.gz 또는 tar xvfj xxx.tar.bz2 로 압축해제
  2) mv xxx /usr/local/src (압축푼 폴더를 /usr/local/src 이동)
  3) 해당 폴더로 이동하여 ./configure 또는
     ./configure --prefix=원하는 주소 (원하는 주소에 설치하고자 하는 경로 입력)
  4) make
  5) make install

[실행파일 만들기]
1. 소스코드 작성 => xxx.asm 저장 (xxx는 파일명)
2. 목적코드 생성 => nasm -f elf xxx.asm
3. 실행파일 생성 => ld -s -o xxx xxx.o

소스코드 타이핑 귀차니즘을 위해 파일 첨부^^(성균관대 화학과 수업자료중 발췌)

자.. 설치를 끝내고서 봐야할 것이 바로 메뉴얼!^^
메뉴얼에 대한 링크는 [
클릭]

추가로 Linux Assmebly HOWTO KLDP 링크이다 [
클릭]
Trackback 0 Comment 0

이제 이런것도 나오려나

재밌는 발상인데 얼마나 실용화가 될런지 책상 상태는 나랑 비슷하다 ㅋㅋ

")


출처 : http://tristen.tistory.com/trackback/5

Trackback 0 Comment 2

QT.. 완전 삽질

QT 완전 삽질했다..--;;

콜백 Function에서는 어떤 컨트롤들도 업데이트 시켜서는 안된다.

만약 업데이트 시키게 된다면 Xlib 에러를 토해낼 것이다.

QApplication::postEvent()를 활용하자!

Trackback 0 Comment 0
prev 1 ... 8 9 10 11 12 13 14 15 next