728x90
300x250

[MFC] 윈도우 프로그래밍 기초 - 프로그래스 컨트롤

 

프로그래스 컨트롤은 아래와 같이 진행되고 있는 데이터의 상태를 보여주기 위해 사용하는 컨트롤입니다.

 

 

(윈도우 탐색기의 프로그래스 컨트롤)

 

프로그래스 컨트롤이 어떠한 원리로 사용되는지 소개하겠습니다.

 


1. 배경지식


1. CProgressCtrl 클래스


a) CProgressCtrl의
멤버 함수

 

 

 * GetPos( ) 

  int GetPos( ) ;

 

  -> Return 값 : 현재 Position 값

 

 

 * GetRange( )

 void GetRange( int & nLower, int & nUpper)

 

  ->

  nLower : 영역의 최저 값을 받을 int 형 변수

  nUpper : 영역의 최대 값을 받을 int 형 변수

 

 

 * SetBkColor

 COLORREF SetBkColor( COLORREF clrNew ) ; 

 

 ->

   clrNew : 프로그래스 컨트롤의 배경색으로 지정할 색상 값

   Return 값 : 변경하기 전의 배경색 색상 값 

 

 

 * SetPos

  int SetPos( int nPos );

 

 ->

   nPos : 프로그래스 바의 포지션을 변경할 값

   Return 값 : 변경하기 전의 프로그래스 바의 포지션 값

 

 

 * SetRange

  void SetRange( short nLower, short nUpper ) ;

 

  void SetRange32 ( int nLower, int nUpper ) ;

 

 ->

   nLower : 프로그래스 바의 최저 값 (색이 채워지지 않는 값)

   nUpper : 프로그래스 바의 최대 값 (색을 모두 채우는 값)

 

  최저값 : 0

  최대값 : 100까지

 

 


2. 결과물

 

오늘의 실습 주제 : 파일 복사 프로그래스로 측정해보기

 

 

 

 결과물

 

 

 버튼 - 원본파일) 찾아보기

 

버튼 - 복사 경로) 찾아보기

 

 

 버튼 - 파일 복사) 클릭시 결과

 

 

 곰돌이.mp3 복사된 것을 확인 할 수 있음.

 


3. 레이아웃 디자인

 

변수 설정할 부분만 설명해놨습니다.

버튼은 여러분이 이벤트 처리기로 하시면 됩니다. (이 부분은 여러분의 감각 믿습니다.)

 

 컨트롤

 캡션

 범주(T)

 변수 이름(N)

 택스트 컨트롤

 X

 Value

 m_original

 택스트 컨트롤 

 X

 Value 

 m_copydir

 프로그래스

 X

 Control

 m_progress

 


4. 소스코드

 

 // CProgressDlg.h : 헤더 파일
 //

 #pragma once
 #include "afxcmn.h"

 

 #define PROGRESSVALUE(a, b) (int)((double)( a * 100 ) / (double) b )

 

 // 이 부분은 메크로 함수로 PROGRESS 값을 반환하도록 했는데, 여러분이 함수형으로 구현하셔도 되고 상관없습니다.

 CProgressDlg.h

 

 

 
// 원본 파일
 void CCProgressDlg::OnBnClickedButton1()
 {
      TCHAR szFilter[] = _T("All Files (*.*)|*.*|");

      CFileDialog dlg(TRUE, _T("*"), _T("*.*"), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilter);

 

      if (dlg.DoModal() == IDOK)
     {
            m_original = dlg.GetPathName();

            // 데이터 갱신
            UpdateData(FALSE);

     }
}

 원본 파일 찾기 - 구현 

 
// 복사 경로
void CCProgressDlg::OnBnClickedButton2()
{
       TCHAR szFilter[] = _T("All Files (*.*)|*.*|");

       CFileDialog dlg(FALSE, _T("*"), _T("*.*"), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilter);

 

       if (dlg.DoModal() == IDOK)
       {
             m_copydir = dlg.GetPathName();

             // 데이터 갱신
             UpdateData(FALSE);

       }

 복사 경로 찾기 - 구현

 // 파일 복사 DWORD CALLBACK buksa( )

DWORD CALLBACK buksa(LARGE_INTEGER TotalFileSize,
 LARGE_INTEGER TotalBytesTransferred,
 LARGE_INTEGER StreamSize,
 LARGE_INTEGER StreamBytesTransferred,
 DWORD dwStreamNumber,
 DWORD dwCallbackReason,
 HANDLE hSourceFile,
 HANDLE hDestinationFile,
 LPVOID lpData)
{
         CCProgressDlg* pDlg = (CCProgressDlg*)lpData;

        

         int pos = PROGRESSVALUE( TotalBytesTransferred.QuadPart,
                      TotalBytesTransferred.QuadPart );

 

         // Pos 설정
         pDlg->m_progress.SetPos(pos);

 

         // 100 퍼센트 전송되지 않을 때
         if (pos < 100)
               return PROGRESS_CONTINUE;

        

         // 100 퍼센트 전송되었을 때
         MessageBox(NULL, _T("복사가 완료되었습니다. "), _T("확인"), MB_ICONINFORMATION + MB_OK);

 

         return PROGRESS_QUIET;

 이 부분 원형은 외우지 말 것 (파일 복사 Routine 때문에 구현)

 

   // 대상 파일 복사
  void CCProgressDlg::OnBnClickedButton3()
  {
         // 프로그래스 초기 설정
         m_progress.SetRange(0, 100);
         m_progress.SetPos(0);

       

         // 복사 진행
         CopyFileEx(m_original, m_copydir, buksa, this, NULL, COPY_FILE_FAIL_IF_EXISTS);
}

 대상 파일 복사

 

소스코드 : CProgress.zip

 

이번 글은 약간 어려울 수 있는데, 별거 없습니다.

특히나 DWORD CALLBACK buksa( ) 의 경우 WinBase.h 정의로 이동해서 그대로 가져다가 사용하면 저 원형 그대로 사용할 수 있습니다.

이번 글에서 의도한 것은 기본적인 부분은 프로그래스를 사용하실 수 있게 해드리는 것이고, 두 번째로 코드는 힘들게 외우지 말라는 것을

알려드리고 싶어서 아래의 자료와 함께 올려드렸습니다.

 

아래의 자료는 MSDN의 CopyFileEx와 CopyRoutine 원형의 설명이 담긴 자료입니다.

저 설명은 다 외우지 말고 여러분이 원하는 방법으로 변경할 때 참고하시면 됩니다.

 


5. 참고사항1) CopyFileEx

 


BOOL
WINAPI
CopyFileEx(
    _In_        LPCWSTR lpExistingFileName,
    _In_        LPCWSTR lpNewFileName,
    _In_opt_    LPPROGRESS_ROUTINE lpProgressRoutine,
    _In_opt_    LPVOID lpData,
    _When_(pbCancel != NULL, _Pre_satisfies_(*pbCancel == FALSE))
    _Inout_opt_ LPBOOL pbCancel,
    _In_        DWORD dwCopyFlags
);

 

 CopyFileEx 함수 원형

 

 

 파라메터

 설명

 lpExistingFileName

 원본 파일 지정

 lpNewFileName

 새로 복사할 위치 지정

 lpProgressRoutine

 파일 복사 콜백 함수(Routine 함수 지정)

 lpData

 부모 함수를 포인터로 전달할 것인지에 대한 판단

 (ex : this (자기 자신을 함수 포인터로 전달)

 dwCopyFlags

 복사 플래그 지정

 

* dwCopyFlags

 

dwCopyFlags [in]

Flags that specify how the file is to be copied. This parameter can be a combination of the following values.

 

Value Meaning
COPY_FILE_ALLOW_DECRYPTED_DESTINATION
0x00000008

An attempt to copy an encrypted file will succeed even if the destination copy cannot be encrypted.

COPY_FILE_COPY_SYMLINK
0x00000800

If the source file is a symbolic link, the destination file is also a symbolic link pointing to the same file that the source symbolic link is pointing to.

Windows Server 2003 and Windows XP:  This value is not supported.

COPY_FILE_FAIL_IF_EXISTS
0x00000001

The copy operation fails immediately if the target file already exists.

COPY_FILE_NO_BUFFERING
0x00001000

The copy operation is performed using unbuffered I/O, bypassing system I/O cache resources. Recommended for very large file transfers.

Windows Server 2003 and Windows XP:  This value is not supported.

COPY_FILE_OPEN_SOURCE_FOR_WRITE
0x00000004

The file is copied and the original file is opened for write access.

COPY_FILE_RESTARTABLE
0x00000002

Progress of the copy is tracked in the target file in case the copy fails. The failed copy can be restarted at a later time by specifying the same values for lpExistingFileName and lpNewFileName as those used in the call that failed. This can significantly slow down the copy operation as the new file may be flushed multiple times during the copy operation.

 

 


6. 참고사항2) CopyProgressRoutine

CopyProgressRoutine callback function

An application-defined callback function used with the CopyFileEx, MoveFileTransacted, and MoveFileWithProgress functions. It is called when a portion of a copy or move operation is completed. The LPPROGRESS_ROUTINE type defines a pointer to this callback function. CopyProgressRoutine is a placeholder for the application-defined function name.

Syntax

C++
DWORD CALLBACK CopyProgressRoutine(
  _In_      LARGE_INTEGER TotalFileSize,
  _In_      LARGE_INTEGER TotalBytesTransferred,
  _In_      LARGE_INTEGER StreamSize,
  _In_      LARGE_INTEGER StreamBytesTransferred,
  _In_      DWORD dwStreamNumber,
  _In_      DWORD dwCallbackReason,
  _In_      HANDLE hSourceFile,
  _In_      HANDLE hDestinationFile,
  _In_opt_  LPVOID lpData
);

typedef DWORD (WINAPI *LPPROGRESS_ROUTINE)(
    _In_      LARGE_INTEGER TotalFileSize,
    _In_      LARGE_INTEGER TotalBytesTransferred,
    _In_      LARGE_INTEGER StreamSize,
    _In_      LARGE_INTEGER StreamBytesTransferred,
    _In_      DWORD dwStreamNumber,
    _In_      DWORD dwCallbackReason,
    _In_      HANDLE hSourceFile,
    _In_      HANDLE hDestinationFile,
    _In_opt_  LPVOID lpData
);

Parameters

TotalFileSize [in]

The total size of the file, in bytes.

TotalBytesTransferred [in]

The total number of bytes transferred from the source file to the destination file since the copy operation began.

StreamSize [in]

The total size of the current file stream, in bytes.

StreamBytesTransferred [in]

The total number of bytes in the current stream that have been transferred from the source file to the destination file since the copy operation began.

dwStreamNumber [in]

A handle to the current stream. The first time CopyProgressRoutine is called, the stream number is 1.

dwCallbackReason [in]

The reason that CopyProgressRoutine was called. This parameter can be one of the following values.

 

Value Meaning
CALLBACK_CHUNK_FINISHED
0x00000000

Another part of the data file was copied.

CALLBACK_STREAM_SWITCH
0x00000001

Another stream was created and is about to be copied. This is the callback reason given when the callback routine is first invoked.

 

hSourceFile [in]

A handle to the source file.

hDestinationFile [in]

A handle to the destination file

lpData [in, optional]

Argument passed to CopyProgressRoutine by CopyFileEx, MoveFileTransacted, or MoveFileWithProgress.

Return value

The CopyProgressRoutine function should return one of the following values.

Return code/value Description
PROGRESS_CANCEL
1

Cancel the copy operation and delete the destination file.

PROGRESS_CONTINUE
0

Continue the copy operation.

PROGRESS_QUIET
3

Continue the copy operation, but stop invoking CopyProgressRoutine to report progress.

PROGRESS_STOP
2

Stop the copy operation. It can be restarted at a later time.

 

Remarks
An application can use this information to display a progress bar that shows the total number of bytes copied as a percent of the total file size.

Requirements

Minimum supported client

Windows XP [desktop apps only]

Minimum supported server

Windows Server 2003 [desktop apps only]

Header

WinBase.h (include Windows.h)

 


7. 참고자료(Reference) 

 

1. https://msdn.microsoft.com/en-us/library/windows/desktop/aa363852(v=vs.85).aspx, 접속일자 2015-03-31

2. https://msdn.microsoft.com/en-us/library/windows/desktop/aa363854(v=vs.85).aspx, 접속일자 2015-03-31

반응형
728x90
300x250

[MFC] 윈도우 프로그래밍 기초 - 체크 박스 + 버튼 응용 예제

 

오늘 만들어볼 예제는 체크 박스를 선택하면 내용이 출력되는 것을 만들도록 하겠습니다.

VB6 수준으로 정말 쉽습니다.

 

실습을 하기에 앞서 이론적인 지식을 잠시 넣도록 하겠습니다.

 


1. 구현에 관한 기본 지식

afxwin.h

-> void SetCheck(int nCheck)

-> int GetCheck( ) const

 

SetCheck( )는 말 그대로 체크박스의 값을 변경하는 일을 수행하며

GetCheck( )는 아래의 인자값으로서 체크박스의 현재 상태를 출력한다.

상태값은 아래와 같이 두 가지로 구분된다.

 

 인자 값

 내용

 BST_UNCHECKED

 체크박스 컨트롤이 체크 안된 상태를 의미

 BST_CHECKED

 체크박스 컨트롤이 체크된 상태를 의미 

 


2. 결과 - 완성 프로그램

 

 


3. 실습

 

 

 

위처럼 디자인을 합니다.

 

 컨트롤 ID

 변수 이름

 변수 형식

 범주(T)

 IDC_CHECK1

 m_CheckBox1

 CButton

 Control

 IDC_CHECK2 

 m_CheckBox2

 CButton 

 Control 

 IDC_CHECK3

 m_CheckBox3

CButton

 Control

 IDC_BUTTON

 

 

 

 

IDC_BUTTON은 이벤트 처리기로 OnBnClickedButton1()을 생성해줍니다.

(사용자프로젝트명)Dlg.h에 가면 아래와 같이 잘빠지게 생성된 것을 확인할 수 있습니다.

 

 

(사용자프로젝트명)Dlg.cpp 코드 부분

 

맨 위의 #ifdef _ #endif 아래에 이와 같이 코드를 짜봅니다.

- 0번째 줄부터 보면 찾기 쉽습니다.

 

 

 

BOOL CMFCControlDlg::OnInitDialog()  - 약 74줄 근방에 위치함

{

         (생략)

         
          // TODO: 여기에 추가 초기화 작업을 추가합니다. - 약 103줄 근방에 위치함.
           SetDlgItemText(IDC_BUTTON1, _T("확인"));
           SetDlgItemText(IDC_CHECK1, pszName[0]);
           SetDlgItemText(IDC_CHECK2, pszName[1]);
           SetDlgItemText(IDC_CHECK3, pszName[2]);

 

           m_CheckBox1.SetCheck(BST_CHECKED);
           m_CheckBox2.SetCheck(BST_UNCHECKED);
           m_CheckBox3.SetCheck(BST_UNCHECKED);


}

 

 

void CMFCControlDlg::OnBnClickedButton1() // 약 166줄 위치
{
        // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

         CString szMsg;

        if (m_CheckBox1.GetCheck() == BST_CHECKED)
        {
               GetDlgItemText(IDC_CHECK1, szMsg);
               szMsg.Append(_T("님"));
        }

        if (m_CheckBox2.GetCheck() == BST_CHECKED)
        {
               GetDlgItemText(IDC_CHECK2, szMsg);
               szMsg.Append(_T("님"));
         }

         if (m_CheckBox3.GetCheck() == BST_CHECKED)
         {
               GetDlgItemText(IDC_CHECK3, szMsg);
               szMsg.Append(_T("님"));
         }

         szMsg.Append(_T("\n안녕하세요."));

         AfxMessageBox(szMsg);

}

 

이렇게 짜보면 예제를 실행할 수 있습니다.

 

반응형
728x90
300x250

[MFC] 윈도우 프로그래밍 기초 - 버튼 클릭 사용하기

 

"나는 착하다"라는 버튼 이벤트를 만드는 예제를 실습해보겠습니다.

 


1. 결과 - 완성 프로그램

 

 

 


2. 실습

 

 

이벤트 처리기 추가(A)를 클릭합니다.

 

 

 

추가 및 편집(A)를 클릭합니다.

 

 

이렇게 코드를 입력하면 결과물을 만들어낼 수 있습니다.

반응형
728x90
300x250

[MFC] 윈도우 프로그래밍 기초 - 대화 상자 실습

 

이번 글에서는 이전에 소개한 대화 상자 글을 바탕으로 실제 대화 상자를 구현하는 방법에 대해 소개하겠습니다.

 


1. 실습 주제) MFCModal 창 만들어 보기

 

 

 

  동작 전 결과

 

 동작 후 결과

 

 


1-1. BITMAP 리소스 추가

 

 

리소스 추가(A) 클릭

 

 

새로 만들기(N) 클릭 

->참고로 "가져오기" 하셔도 됩니다.

 

 

전 이렇게 그렸습니다.

 

 

이번에 그린 그림의 이름(ID)은 IDB_EARTH로 하겠습니다.

 

 


1-2. 컨트롤 박스 배치하기

 

 

 

 

 컨트롤 꾸며보기 - 이 부분은 여러분이 도구상자 탭을 이용하여 직접 하셔야 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

컨트롤 

 ID

 Caption

 Image

Type

Dialog

IDD_MFCMODAL_DIALOG

 

 

 

Edit Box

IDC_INPUT_NAME

 

 

 

Edit Box 

IDC_INPUT_SCHOOL

 

 

 

Edit Box

IDC_INPUT_DEPT

 

 

 

Edit Box

IDC_INPUT_GRAD

 

 

 

Static

IDC_STATIC

이름

 

 

Static

IDC_STATIC 

학교

 

 

Static

IDC_STATIC

학과

 

 

Static

IDC_STATIC

학년

 

 

Picture Control

IDC_INPUT_IMAGE

 

 IDC_EARTH

 Bitmap

Edit Box

IDC_OUTPUT_NAME

 

 

 

Edit Box

IDC_OUTPUT_SCHOOL

 

 

 

Edit Box

IDC_OUTPUT_DEPT

 

 

 

Edit Box

IDC_OUTPUT_GRAD 

 

 

 

Picture Control

IDC_OUTPUT_IMAGE

 

 

 Bitmap

Static

IDC_STATIC

이름

 

 

Static 

IDC_STATIC 

학교

 

 

Static

IDC_STATIC

학과 

 

 

Static 

IDC_STATIC

학년

 

 

Group Box

IDC_STATIC

최종입력결과

 

 

Button

IDB_BTN_COMPLETE 

입력완료 

 

 

 

리소스를 이처럼 편집해주시기 바랍니다.

 


1-3 변수 추가

 

하나를 대상으로 변수 추가 방법을 소개해드리겠습니다.

나머지는 여러분들이 아래의 테이블을 참고하여 만들어주시기 바랍니다.

 

 

 

변수 추가(B) 클릭

 

 

 

 범주(T)를 Value로 변경

 

 

변수 형식 : CString,

변수 이름 : m_staticName

최대 문자수 : 20

 

마침을 클릭합니다.

 

변수 추가 후에 코드가 변동됩니다.

변동되는 코드는

MFCModalDlg.h와 MFCModalDlg.cpp입니다.

 

 

 

 MFCModalDlg.h

 

 

 MFCModalDlg.cpp의 DoDataExchange()

-> 여기에서 사용하는 역할을 간접적으로 학습하셨으면 합니다.

 

참고로 DDX와 DDV는

앞서 살펴보셨겠지만, 대화상자에서의 최대 문자 수와 같은 제약조건을 다루는 함수입니다.

 

 

이 예제에서 만들어야 할 멤버 변수 설정 값 테이블입니다.

첫 번째 예제를 통해 변수 하나는 만들었으므로 나머지에 대한 테이블을 소개하겠습니다.

 

 컨트롤 ID

변수 형식

범주

최대 문자 수

 IDC_INPUT_SCHOOL

CString m_staticSchool

Value

50

 IDC_INPUT_DEPT

CString m_staticDept

Value

20

 IDC_INPUT_GRAD

CString m_staticGrad

Value

5

 IDC_OUTPUT_NAME

CString m_strName

Value

20

 IDC_OUTPUT_SCHOOL

CString m_strSchool

Value

50

 IDC_OUTPUT_DEPT

CString m_strDept

Value

20

 IDC_OUTPUT_GRAD

CString m_strGrad

Value

5

 IDC_OUTPUT_IMAGE

CString m_strImage

Control

 

 


1-4. 이벤트 처리기 추가

 

입력완료 버튼에서 오른쪽 버튼을 클릭한 후 이벤트 처리기 추가(A)를 클릭합니다. 

 

 

 

기본값으로 두가 추가 및 편집을 클릭합니다.

 

 

OnBnClickedBtnComplete( )라는 함수가 생성됩니다.

 

MFCModalDlg.h와 MFCModalDlg.cpp의 파일이 영향을 받게 됩니다.

어떻게 코드가 생성되었는지 확인해보겠습니다. 

 

 

 

결과)

 afx_msg void OnBnClickedBtnComplete( )라는 함수가 추가되었습니다. 

 

 

 결과)

  MFCModalDlg.cpp의 void CMFCModalDlg::OnBnClickedBtnComplete( )라는 함수 구현부가 완성되었습니다.

 


1-5 기능 구현

 


{
         CBitmap MyImageView;

       

         UpdateData(TRUE);  // UpdateData(TRUE)함수를 통해 데이터가 전송됩니다.

         m_strName = m_staticName;
         m_strSchool = m_staticSchool;
         m_strDept = m_staticDept;
         m_strGrad = m_staticGrad;

 

         MyImageView.LoadBitmap(IDB_EARTH);

         m_staticImage.SetBitmap(MyImageView);

 

         UpdateData(FALSE);

 
}
 

 OnBnClickedBtnComplete( ) 구현

 


1-6. 동작해보기

 

반응형
728x90
300x250

[C#.NET] foreach 문
 

 

using System;
class Program
{

    static void Main(string[] args)
    {

        string[] studylang = { "C#", "Java", "Scala", "Powershell", "C", "Assembly", "XML" };

        foreach (string lang in studylang)
            Console.WriteLine(lang);

    }

}


데이터베이스 핸들링할 때 많이 사용합니다.
개념은 이렇습니다.

 C# Java Scala  Powershell  Assembly  XML 

studylang의 배열이 lang이라는 변수에 각각 한 번씩 들어가서 출력합니다.

반응형
728x90
300x250

[C#.NET] 구조체 설명

using System;
class Program
{

struct student{
public string name;
public byte age;

// 메서드 선언
public student(string n, byte b)
{
name = n;
age = b;
}
}

static void Main()
{
student Person;

Person.name = "정원영";
Person.age = 20;

// 메서드 이용
// student Person = new student(string n, byte b)

Console.Writeline("Person의 이름 : {0}, 나이 : {1}", Person.name, Person.age);
}
}


구조체는 C언어와 C++의 핵심이자 객체지향의 핵심입니다.
클래스라는 개념도 바로 구조체라는 것을 통해 만들어졌습니다.
위의 예제는 구조체를 쉽게 이해하고자 하는 분께 많은 도움이 될 것입니다.

반응형
728x90
300x250

[PC활용] Winamp 5를 활용한 mid파일 mp3로 변환하기

이 글을 작성하기에 앞서 mid파일을 mp3로 변환하고자 많은 시간을 소모하였습니다.
Direct Mid to Mp3 Converter라는 외국 프로그램과 MidiMeow라는 프로그램을 필드테스트 해본 결과로 음질이 매우 저조하거나 음원이 손상되는 것을 체험할 수 있었습니다. 그리하여 Winamp의 Output 플러그인을 활용한 Mid파일을 mp3로서 변환하는 방법을 시도해보았습니다.
음원의 품질을 그대로 유지할 수 있다는 사실을 알게 되었습니다.
그리하여 이 글을 작성하게 되었습니다.


1. 윈엠프 설치
winamp556_lite_ko-kr.exe

운영체제: 윈도우 XP(Microsoft Windows XP)


2. 사용 방법
1.
Winamp 5를 설치한 후에 실행합니다.
오른쪽 버튼을 누르시면 아래와 같이 메뉴가 뜹니다.
옵션(O)에서 기본 설정(P)를 클릭합니다.

 

 


2.
기본 설정 창이 뜨면 왼쪽에 플러그인에 '입력'을 클릭합니다.
NullSoft Midi 플레이어 3.17을 선택한 후 '구성'을 클릭합니다.


3.
MIDI 플레이어 구성이 실행되었으면 장치가 'midiOut / Microsoft MIDI 매퍼'로 기본값이 설정되어있는 것을 확인할 수 있습니다. 장치 탭을 선택한 후에 'DirectMusic / Microsoft Synthesizer (출력 포함)'을 선택합니다.
확인을 누릅니다.


4.
다음은 '출력'을 선택합니다.
Nullsoft Disk Writer v 2.14를 선택한 후에 '구성'을 클릭합니다.


5.
아래 그림과 같이 설정합니다.
변환 형식에 채크 후 'PCM 44,100kHz, ~~'를 클릭합니다.


6.
형식을 MPEG Layer 3로 설정합니다.
특성은 56 kBit/s, 24,000 Hz, Stereo로 설정합니다. (MP3 코덱을 설치하시면 128~320kBit의 음질로서 설정하실 수 있습니다.)
확인을 클릭합니다.


7.
초기 Winamp 화면으로 돌아가서
변환할 midi파일을 불러온 후 재생합니다.


8.
파일 이름을 입력 후에 열기를 클릭합니다.
주의 : 한 곡이 재생이 끝날 때까지 기다립니다.(녹음을 이용한 방식임)

예제에 사용된 음원
coke.zip
2011/02/20 수정


3. 코덱

lameACM-3.98.4.zip

 


4. 참고자료(Reference)

 

1. http://www.winamp.com
2. https://www.driverguide.com/driver/detail.php?driverid=1460701&action=filfo
3. http://www.rarewares.org/index.php

반응형
728x90
300x250
[C언어] 포인터 변수에 번지 할당


태스트 : Visual Studio 2008

#include <Stdio.h>

main()
{

 int imsi;
 int *imsip;

 printf("[1. Address]\n");
 printf("IMSI : %#010x\n", &imsi);
 printf("*IMSIP : %#010x\n", imsip);

 imsip = &imsi;

 printf("[2. Address]\n");
 printf("IMSI : %#010x\n", &imsi);
 printf("*IMSIP : %#010x\n", imsip);

}

결과 :

[1. Address]
IMSI : 0x0012ff60
*IMSIP : 0xcccccccc
[2. Address]
IMSI : 0x0012ff60
*IMSIP : 0x0012ff60

반응형

+ Recent posts