태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.

'IT'에 해당되는 글 16건

  1. 2009/04/15 PSNR(peak signal to noise rate)이란?
  2. 2009/02/27 VS 2005 원격 디버깅
  3. 2009/02/17 VS 2005 설치 프로그램 만들기
  4. 2008/08/16 k-means 알고리즘 (2)
  5. 2008/08/16 영상처리 용어 해설
  6. 2008/08/13 비트맵 버튼(CBitmapButton)
  7. 2008/08/12 vc++ 개발팁
  8. 2008/08/12 CRoundButton2 - A fancy graphical button
  9. 2008/08/12 AquaButton: A sample custom button control with a Mac OS X look
  10. 2008/08/11 CxSkinbutton

PSNR(peak signal to noise rate)이란?

PSNR(peak signal to noise rate)이란?
 
SNR을 구할 때는 10log(신호전력/ 잡음전력)으로구합니다. 이 때 신호전력과 잡음전력은 모두 "평균전력"을 의미합니다.
PSNR은 평균전력을 이용하지 않고 peak 전력을 이용하여 SNR을 계산하는 것입니다. 신호에 순간적으로 나타날 수 있는 최대 전력으로 계산하는 것이지요.
예를 들어서 정현파 교류신호의 최대전력과 평균전력은 2배 차이가 됩니다. 교류 삼각파 신호는 3배 차이가 납니다.  교류 구형파는 같습니다.  
따라서 사용된 신호가 어떤 성질을 가지는가에 따라서 SNR과 PSNR은 그 계산값이 달라집니다.
===================================================================================
뭔소린지 몰라서 더 찾아보니 아래와 같은 내용이 있었다..
===================================================================================
인터넷 기반 Streaming은 흔히들 MS의 WMV Encoder를 많이
사용 하시고 계실 것입니다.
이유는 일단 인코딩 및 디코딩 되는 솔루션 자체가 개인이 사용하기에
무리가 없고 또한, 무료라는 강점이 있습니다(단, 비영리목적)

하지만 문제는 어떻게 하면 화질과 대역폭의 상관 관계를 따져서
효율적으로 인코딩 하느냐가 관건인데 문제는 나름대로 표준이
없다는데 일단 처음 인코딩을 접하시는 분들은 남감 하실 겁니다.

화질을 평가 한다는 것은 대부분 주관적이라고 판단하기 쉬우나
나름대로 화질의 객관적 평가 기준이 있습니다.
그 첫번째가 바로 PSNR(Peek Signal To Noise Rate)값으로
평가 되는데 이 PSNR값 이외에도 많은 수치들이 있습니다만
통상 PSNR값을 국제표준에서는 화질의 척도로 삼는게 통례입니다.

본론으로 넘어가서 이 PSNR(Peek 전력에 따른 SNR)값으로
각각의 입력 해상도 및 출력 해상도, 그리고 Target Bitrate와의
상관 관계를 비교하여 보면 대략적인 수치 환산이 가능해 집니다.
(WMV로 인코딩 시)

예를 잠깐 들자면

1.입력 영상 해상도:320*240
   출력 영상 해상도:320*240
   영상 특성:움직임 小(강의 및 설교 등)
   Target Bitrate:250~450Kbps(영상 220Kbps + 음성 128Kbps)
   PSNR 값: 평균 32~36db

2.입력 영상 해상도:640*480
   출력 영상 해상도:640*480
   영상 특성:움직임 大(스포츠 및 액션 씬)
   Target Bitrate:950Kbps~1.5Mbps
   PSNR 값: 평균 34~42db

등의 결과가 나옵니다.
통상적으로 30db 이상의 영상은 인간의 시각 특성상 화질 저하로
판단하기 쉽지 않은 영상입니다.
그러므로 입력 영상 및 출력 영상 그리고 대역폭 관계를 고려 하시어
Target Bitrate를 적절하게 설정 하시면 됩니다.

참고적으로 WMV역시 MPEG4를 기본으로한 DCT(Discrete Cosine
Transform)변환기법이 기본 압축 알고리즘인데 DCT 특성 자체가
저주파(화면영역에서 볼때엔 비교적 큰 면적으로 차지하는 부분)
성분(이를 DC성분이라고 함)의 데이터 할당은 많게하고 고주파
(화면 영역에서 디테일을 나타내는 부분)성분(이를 AC성분이라고 함)
의 데이터 할당을 줄여서 전체 데이터를 줄이는(동영상에서는 Motion
Vector를 이용한 인접 Frame의 차이 성분까지 코딩함) 특성을 가지기에
영상 특성상 Preprocessing(전처리-샤프니스 및 컬러 코렉션 등)을
실시하게 되면 인간의 시각 특성상 저주파 필터(Low Pass Filter)
역활을 하게 되어 부드러운 이미지 효과를 볼수 있으나 사실적인
해상도의 향상은 기대하기 어렵습니다.

특히, WMV 알고리즘 자체가 기본 MPEG4 베이스에
독자적인 Key Frame 상관성 코딩 기법을 적용하고 있어서
양자화 매트릭스 테이블(Quantization Matrix Table)을 외부에서
따로 수정하지 못하기 때문에 좀더 낳은 화질을 위해서는
CBR MODE(Constant Bit Rate Mode-고정 비트레이트 할당)
보다는 VBR MODE(Variablr Bit Rate-가변 비트레이트 할당)
로 인코딩 하시는게 질적인 향상을 가져 옵니다.
------------------------------------------------
PSNR(Peak signal to noise ratio)맞구요.
영상처리에서 많이 쓰이는데, 어떤 두 영상에 대한 차이를 사람들 사이에 감을 가질 수 있도록 숫자로 나타내기 위한 값입니다.
PSNR = 10*log_{10} [(255*255)/MSE]
MSE = 1/N^2 *SUM_{x=1}^{N}[SUM_{y=1}^{N}[(f(x,y)-g(x,y))^2]]
: 모든 동일위치의 픽셀값의 차이의 제곱의 합 / 모든 픽셀 갯수의 제곱
x : 영상의 x resolution
y : 영상의 y resolution
N (=x*y) : 모든 픽셀의 갯수
SUM : sigma operation
f(x,y) : 좌표(x,y)의 비교영상 픽셀값
g(x,y) : 좌표(x,y)의 원래영상 픽셀값
Signal power를 noise power로 나누는 개념은 기존의 SNR과 비슷한데,
수많은 서로다른 영상을 모두 대표하는 signal power가 없으므로,
8bit 픽셀의 최고값(peak)인 255의 제곱으로 signal power를 대신합니다.
두 영상의 차이가 없다면 분자부분이 0이 되어 PSNR은 무한대가 되겠죠.
보통 30dB가 넘으면 두 영상의 차이를 눈으로 구분할 수 없는 정도라고 얘기되어 집니다
 
----------------------------------------------------------
S/N or SNR (signal-to-noise ratio) ; 신호 대 잡음비
아날로그디지털 통신에서, 신호 대 잡음비, 즉 S/N은 신호 대 잡음의 상대적인 크기를 재는 것으로서, 대개 데시벨이라는 단위가 사용된다.
여기서, 들어오는 신호의 세기(단위는 마이크로볼트)를 Vs라 하고, 잡음을 Vn이라 하면(이것도 단위는 역시 마이크로볼트), 신호 대 잡음비는 아래와 같은 공식으로 표현된다.
S/N = 20 log10(Vs/Vn)
이때 만약 Vs = Vn 이면, S/N = 0 이 된다. 이 경우에는 잡음의 수준이 신호와 심하게 맞서기 때문에, 신호경계를 읽을 수 없게 된다. 따라서, 디지털 통신에서는 이 경우에 아마도 데이터 속도의 저하가 생기게 되는데, 그 이유는 빈번한 에러로 인해 데이터 패킷 중 일부를 재전송해야하기 때문이다.
가장 이상적인 것은, Vs가 Vn 보다 커서 S/N이 양수가 되는 경우이다. 한 예로서, Vs = 10.0이고 Vn = 1.00이라고 가정하면,
S/N = 20 log10(10.0) = 20.0 dB
로서 신호를 명확하게 읽을 수 있게 된다. 만약 신호가 매우 약하지만, 그래도 잡음보다 우위에 있다면 (이를테면 1.3 마이크로볼트라든가)
S/N = 20 log10(1.30) = 2.28 dB
로서 한계 상황을 맞게 된다. 이러한 상황하에서는 어느정도의 데이터 속도저하가 일어날 수 있다.
만약 Vs가 Vn 보다 적으면, S/N은 음수가 된다. 이러한 경우에는, 수신하는 컴퓨터나 터미널에서 신호수준을 증가시키거나 또는 잡음수준을 감소시키는 조치를 취하지 않는 한, 일반적으로 신뢰성 있는 통신이 불가능하다.
통신기술자들은 항상 S/N 비율을 최대화시키기 위해 노력한다. 전통적으로, 이것은 원하는 데이터 속도에 수신시스템의 대역폭을 가능한한 일치시키는 노력을 통해 달성되어 왔다. 그러나, 또다른 방법들이 있다. 몇몇 경우에서는, 대역확산 기술이 시스템 성능을 증가시킬 수 있다. S/N 비율은 필요하다면, 원천신호에 더 높은 수준의 신호출력을 제공함으로써 증가될 수 있다. 전파 망원경과 같은 몇몇 고수준 시스템에서는, 수신회로의 온도를 절대온도(-273℃)에 근접하도록 낮춤으로써 내부 잡음을 최소화시킨다. 무선시스템에서는, 송수신 안테나의 성능을 항상 최적화하는 것이 중요하다.
 
--------------------------------------------------------------------------------
 
Fundamental Image Class
가장 기본적인 이미지 클래스들입니다. CBaseImage 클래스가 최상위 기반 클래스이고, 나머지는 거기서 파생된 클래스들입니다. 내부 저장 타입이 unsigned char or BYTE(8bit) 형이면 CCharImage, float(32bit)이면 CFloatImage입니다. CImage와 CFrame은 template을 이용해서 다양한 저장 타입에 대한 객체를 생성할 수 있는 클래스들입니다.
Name
Description
Main Files
Download
CBaseImage
이미지 클래스의 최상위 기반 클래스
CCharImage
내부 저장 데이터 형식이 BYTE(unsigned char)인 이미지 클래스
CFloatImage
내부 저장 데이터 형식이 float인 이미지 클래스
CImage
템플릿을 이용한 이미지 클래스
CColorImage
템플릿을 이용한 컬러 이미지 클래스.
CFrame
템플릿을 이용한 동영상 프레임 클래스, CImage의 변종
CColorFrame
템플릿을 이용한 컬러 동영상 프레임 클래스, CColorImage의 변종
 
Utility Class
Name
Description
Main Files
Download
DCT 클래스, 1D, 2D, Fast
CWavelet
 
 
JPEG 인코더, 디코더, "visual C++ bible(이상엽, 영진출판사)"에 수록되어 있음, kenti가 수정.
CPNM
sanguni가 만든 ppm, pgm을 읽고 쓸 수 있는 클래스입니다.
CRandom
uniform random number를 발생시키는 클래스, Bernoulli 분포를 발생시키는 함수 포함.
CColorSpaceConversion
컬러 공간을 변경하는 클래스, RGB, YCbCr
CChromaSubsampling
4:4:4 -> 4:2:0
 
CIOBitStream
bit 단위 입출력을 수행할수 있게 하는 클래스, CInBitStream과 COutBitStream의 기반 클래스
CInBitStream
bit 단위 입력을 수행할 수 있는 클래스, 이미지 혹은 비디오 코딩시 유용하다.
COutBitStream
bit 단위 출력을 수행할 수 있는 클래스, 이미지 혹은 비디오 코딩시 유용하다.
CBMA
BMA(Block Matching Algorithm) 혹은 Motion Estimation
 
CPrintString
여려 환경에서 사용가능한 출력 도구 클래스
CPSNRUtil
두 시퀀스 사이의 PSNR을 구해주는 클래스
초절정 간단 벡터 양자화기 클래스(vector quantization)
CStopWatch
프로그램의 수행 시간을 측정하는 클래스
low level API를 이용한 녹음, 재생 클래스
 
Useful functions & tiny programs
Name
Description
Executable or SRC
Download
Fast_IDCT
mmx를 사용한 fast idct 함수, Project Mayo에서
 
Fast_DCT
mmx를 사용한 fast dct 함수
 
mmx를 사용한 fast color conversion, From Project Mayo
random_fn
uniform random number 발생 함수, CRandom 클래스의 코어 부분
calc_psnr
두 장의 흑백 이미지 사이의 PSNR(peak signal to noise)를 구하는 프로그램
avi_info
avi 파일의 내용을 분석해 주는 프로그램, windows 환경, Qian's homepage에서 가져옮
avi2yuv
avi 파일을 yuv 형식으로 변경해주는 프로그램, windows 환경, FourCC가 UYVY인 경우만 동작, Qian's homepage에서 가져옮
결합된 yuv(concatednated yuv)형식을 avi 동영상으로 만들어 주는 함수, windows 환경, Qian's homepage에서 가져옮, kenti 수정
Said와 Pearlman의 산술부호화방법(arithmetic coding) 구현, I.H. Witten, R. Neal, J.G. Cleary, "Arithmetic Coding for Data Compression", Comm ACM., 30(6):520-541, June 1987.
 
Windows Application
Name
Description
Executable
Download
DirectDraw를 이용한 시퀀스 뷰어, DirectX runtime이 필요합니다. qcif,cif,yuv,raw,gray 지원
이미지 및 시퀀스를 보여주면서 PSNR을 계산해 주는 뷰어
Stats
데이터의 통계를 내어주는 프로그램
Stats.exe
 
Example Images
여러 가지 예제 프로그램에 사용할 이미지들입니다. 확장자가 gray인 이미지는 헤더가 없는 회색조 이미지입니다. 리눅스 환경에서 이미지를 보려면 ImageMagic을 설치하고, display -size 512x512 lenna.gray 라고 입력하면 됩니다. 윈도우 환경에서는 확장자를 raw로 변경하고 포토샵 등과 같은 이미지 처리 프로그램을 이용하면 볼 수 있습니다. 위의 VIPAViewer를 통해서도 볼 수 있습니다. :-)
Name
Description
sample
Download
lena.gray
512x512 크기의 흑백 이미지
 
zelda.gray 
512x512 크기의 흑백 이미지
 
 
Example Sequences
여러 가지 예제 프로그램에 사용할 동영상 시퀀스들입니다.
Name
Description
sample
Download
akiyo.qcif
QCIF 형식(176x144)의 컬러 시퀀스(300 프레임), 사람의 움직임이 작은 시퀀스
 
foreman.qcif
QCIF 형식(176x144)의 컬러 시퀀스(300 프레임), 배경과 사람이 모두 움직이는 시퀀스
 
 
 
 
Documents
여러 가지 유용한 문서들입니다. 쉽게 얻을 수 없는 정보들을 올려 놓을 생각입니다.
Name
Description
Using x86 assembly language with Microsoft Visual c++ 6 (원본은 http://www.cs.virginia.edu/~csadmin/pc/pclabs/vc_faq/vc_asm.html 입니다.)
많이 쓰이는 fourcc에 대하여 설명해 놓은 자료입니다. 원본은 http://www.am-soft.ru/fourcc.html 입니다.)
paper를 작성할 때 Type 1 폰트를 사용하는 방법에 대한 글입니다. (원본은 http://www.math.hawaii.edu/~ralph/MathOnWeb/TeXPDF.html 입니다.)
visio에서 그린 그림이 LaTeX에 잘 붙지 않는 경우가 있는데, 그런 문제를 해결하기 위한 방법입니다. (원본은 http://www.win.tue.nl/latex/visioeps.html 입니다.)
여러가지 wavelet image codec의 성능을 비교해 놓은 문서입니다. (원본은 http://www.icsl.ucla.edu/ipl/psnr_results.html 입니다.)
progressive JPEG과 SPIHT의 성능을 비교해 놓은 문서입니다. (원본은 http://www.code.ucsd.edu/~sherwood/image_examples/comparison/compare.html 입니다.)
여러 가지 비트율에서 SPIHT 코덱의 성능을 보여주고 있는 문서입니다. (원본은 http://www.code.ucsd.edu/~sherwood/image_examples/progressive/progressive.html 입니다.)
여러 BER에서 progressive JPEG과 SPIHT의 성능을 비교해서 보여 주는 문서입니다. (원본은 http://www.code.ucsd.edu/~sherwood/image_examples/noisy_chan/noisy_ex.html 입니다.)
표준 C++ 라이브러리를 이용하여 Huffman Encoder를 구현하는 예제 문서입니다. 고통스러운 코딩 없이도 복잡한 일을 간단히 처리할 수 있다는 것을 보여줍니다. :-) (원본은 http://www.dogman.net/markn/articles/pq_stl/priority.htm)
 
Useful Links
여러 가지 유용한 사이트들입니다. 간단한 코멘트를 첨가해 놓겠습니다.
Name
Description
ETC
FFmpeg Multimedia System, 다양한 포맷을 지원하는 libavcodec을 제작하는 project. 다양한 동영상 포맷에 대한 소스코드를 얻을 수 있다. windows 함수들을 사용하지 않는다는 것이 강점. linux에서 쉽게 컴파일 가능하다. visual c에서는 컴파일 실패 -.-
 
C++을 기반으로 한, wavelet을 이용한 영상 압축을 위한 SDK. Geoff Davis가 작성한 것으로 널리 사용되고 있다. Very Goooood!
 
Mark Nelson이 관리하는 압축에 관한 광범위한 내용(특히 소스 코드)을 정리, 링크해 놓은 웹페이지. 방문 강추 !
 
출처:http://www.video-processing.pe.kr/

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

'IT > 이미지 프로세싱' 카테고리의 다른 글

PSNR(peak signal to noise rate)이란?  (0) 2009/04/15
k-means 알고리즘  (2) 2008/08/16
영상처리 용어 해설  (0) 2008/08/16
Trackback 0 Comment 0

VS 2005 원격 디버깅

Written by 안재우(Jaewoo Ahn), 닷넷엑스퍼트(.netXpert)

 

고객사에서 Visual Studio 2005에서의 원격 디버깅 사용법에 대한 문의가 온 김에, 내용을 좀 정리해볼까 합니다. 원격 디버깅은 상당히 유용한 기능 임에도 불구하고, 대부분의 개발자들이 좀처럼 사용하지 않는 기능입니다. 간혹 여러가지 여건 때문에 쓸 수 없는 상황에 처해 있는 경우도 있겠지만, 대다수는 사실 '몰라서' 사용하지 못하고 있는 형편입니다.

 

이번 글에서는 원격 디버깅의 개념, Visual Studio 2005에서의 원격 디버깅에 대해 알아보고, 몇가지 주의할 사항도 함께 살펴보도록 하겠습니다.

 

원격 디버깅이란?

네이버 용어 사전 설명으로는 '원격 시스템에서 사용되는 원격 제어 콘솔에서 프로그램을 수정하고 시험하는 것'이라고 합니다. 사실 이걸로는 정확하게 무슨 말이 잘 와 닿지 않을 수 있으므로, 좀 풀어서 설명해보도록 하죠.

 

일반적으로 우리가 디버깅을 시작하려면 개발툴(Visual Studio)에서 디버그 모드(F5 키)로 애플리케이션을 시작하게 됩니다. 디버그 모드로 애플리케이션을 구동하면, 당연히 애플리케이션을 호스트하는 프로세스가 만들어질테고, 프로세스는 자신이 필요한 모듈(.exe, .dll)을 로드하게 됩니다. 이 때, 디버그 모드에서는 모듈에 해당하는 디버그 심볼 파일(.pdb)을 같이 로드하게 됩니다.

 

그런데, 디버그 모드로 '시작'한다는 의미는 애플리케이션을 처음부터 새로 시작한다는 의미입니다. 그리고 디버그 모드를 '종료'하면 애플리케이션도 같이 종료되어 버립니다. 당장 코드를 개발 중일 때는 이러한 방법으로 디버깅을 할 수 있겠지만, 항상 개발을 하다보면 멀쩡하게 잘 돌아가던 애플리케이션에서 말썽이 생기는 경우가 많습니다. 즉, 이미 돌아가고 있는 애플리케이션에 대해 디버깅을 할 수 있는 방법은 없느냐는 것이죠. 이 형태의 디버깅은 In-Process 모드와 유사하다고 볼 수 있습니다.

 

여기에서 먼저 도입된 개념이 '프로세스 디버깅'입니다. Visual Studio에서는 이미 실행 중인 프로세스에 연결(Attach)시켜서 디버깅을 수행할 수 있습니다. 디버깅을 종료하면 프로세스에서 분리(Detach)시키고, 애플리케이션 프로세스 자체는 여전히 구동되게 됩니다. 이 형태의 디버깅은 Out-Of-Process 모드와 유사하다고 볼 수 있습니다.

 

원격 디버깅은 프로세스 디버깅을 로컬 컴퓨터의 바운더리를 벗어나도록 확장한 개념입니다. 즉 원격 컴퓨터에서 실행되고 있는 프로세스를 내 로컬 컴퓨터의 디버거를 사용하여 디버깅할 수 있게 해줍니다.

 

참고로 약간 변칙적인 녀석 중 하나로 실행 중인 프로그램에 심각한 오류가 발생하면 Visual Studio 디버거를 자동으로 실행할 수 있게 해주는 Just-In-Time 디버깅도 있습니다.

 

원격 디버깅이 왜 필요한가?

로컬 디버깅의 경우, 로컬에 디버거(개발툴)가 설치되어 있다는 것을 전제로 합니다. 그러나 항상 모든 컴퓨터에 디버거(개발툴)이 설치되어 있지는 않겠죠?

예를 들어, 개발자 컴퓨터에서는 이상없이 잘 돌던 프로그램이 서버나 다른 PC에서 실행하면 문제가 발생하는 경우가 있습니다. 이런 경우, 디버깅을 해보기 위해 서버나 그 PC에 디버거(개발툴)를 설치해야 할까요?

실제로 제가 경험한 몇몇 회사에서는 서버에 Visual Studio를 설치해서 디버깅을 하는 웃지 못할 형태로 작업을 하기도 했습니다. 그런데 간혹 가다보면 Visual Studio를 설치하고 나면 제대로 동작해버리는 상황도 발생하더군요. :-)

 

전통적으로 애플리케이션을 배포하고 난 후에는 디버깅이 아닌 다른 방법을 사용해서 문제점을 추적해야 합니다. 문제점 추적 방법에 대한 다양한 개발자들의 행태(?)를 살펴보면...

 

1. 초급: Hello World를 사랑하는 사람들(Windows 애플리케이션에서는 메시지 박스를, Java 스크립트에서는 alert를, ASP나 ASP.NET에서는 Response.Write를 찍어대는 사람들을 의미합니다)

2. 중급: 로그 찍기. 파일, 이벤트 로그 등에 로그를 기록합니다.

3. 고급: 기본적으로는 2번과 동일하지만, 해당 PC에 로그를 기록하는 것이 아니라 원격 로그 수집기에 로그를 기록하게 합니다. DB에 기록하거나 에러 발생 시 원격 통신으로 전송한다든지.. 성능 카운터를 활용하거나 WMI를 이용하기도 합니다.

 

로그 기록 형태가 가장 일반적이지만, 이를 통해 문제를 정확하게 파악하는 것은 디버깅에 비해 상대적으로 쉽지 않습니다. 과거에 일어난 일을 '단서'를 가지고 추정해 나가야 하기 때문입니다.

 

원격 디버깅은 이러한 상황, 즉 로그 기록만으로는 정확한 내용을 알 수 없는 경우에 사용할 수 있는 해결책 중 하나입니다. 원격 컴퓨터에 개발툴을 설치하지 않고도 원격에서 디버깅을 수행할 수 있게 해줍니다.

 

Visual Studio에서 원격 디버깅의 구동 원리

Visual Studio 2005에서 원격 디버깅이 구동되는 형태를 도식화하면 대략 다음 그림과 같습니다. 그림을 보면 이해가 갈 것이라고 판단되므로 별다른 설명은 하지 않겠습니다.

 

사용자 삽입 이미지

 

위 그림처럼 디버거 역할을 하는 로컬 컴퓨터의 VS2005와 실행 중인 프로세스(App1.exe)를 중개하는 역할은 원격 디버깅 모니터(Remote Debugging Monitor)인 msvsmon.exe가 수행합니다. 과거에 일부 원격 디버깅 시나리오에서만 유사한 역할을 수행한 Machine Debug Manager(mdm.exe)가 있었지만, 이는 더이상 사용되지 않습니다. VS2005에서는 T-SQL 디버깅을 제외한 모든 원격 디버깅 시나리오에서 msvsmon.exe가 사용됩니다. 커맨드라인의 MDM에 비해 msvsmon.exe는 GUI를 제공합니다.

 

Visual Studio에서 원격 디버깅 구성

 

위 그림을 살펴보다 보면 원격 디버깅을 하기 전에 몇가지 설정이 필요할 것이라는 점을 추측할 수 있습니다.

1. 원격 디버깅 모니터(msvsmon.exe)를 원격 컴퓨터에 설치

2. 원격 디버깅을 위한 보안 권한 설정

3. 네트워크 방화벽 설정(개인 방화벽 포함, 로컬/원격 모두)

 

1, 3번에 대한 것은 다음 MSDN 문서를 참조하기 바랍니다. 아직 한글판이 나오지 않아서 임시 URL인 것 같습니다.

http://msdn2.microsoft.com/ko-kr/library/y7f5zaaa.aspx

 

2번은 상대적으로 간단해졌는데, 과거에 권한 설정 문제가 비교적 복잡했던 것에 비해서 이제는 원격 디버깅 모니터의 Tools/Permission 메뉴에서 설정할 수 있습니다.

 

원격 디버깅 사용법

구성이 끝났으면, 이제 사용법은 간단합니다.

 

1. 원격 컴퓨터에서 원격 디버깅 모니터를 실행합니다. 다음은 실행된 모습입니다.

사용자 삽입 이미지

 

2. 디버깅할 대상이 되는 프로세스가 아직 실행되어 있지 않다면, 실행합니다. 이 프로세스와 관련 DLL들은 당연히 디버그 모드로 빌드되어 있어야 하며, 디버깅이 사용가능한 상황이어야 합니다.

 

3. 로컬 컴퓨터에서 VS 2005를 실행하고, 디버깅할 프로세스 및 DLL이 포함된 솔루션 또는 프로젝트 파일을 엽니다.

 

4. Debug 메뉴에서 Attach to Process를 선택합니다. Qualifier에 msvsmon.exe를 실행하고 있는 원격 컴퓨터의 이름(또는 IP)을 입력 후, 엔터 키 또는 Refresh 버튼을 누릅니다.

사용자 삽입 이미지

 

5. Available Processes에서 디버깅할 프로세스를 선택한 후 Attach 버튼을 누르면...

이제 디버깅 시작입니다!

 

원격 디버깅 시 주의할 사항

이제 사용법은 알았고, 원격 디버깅에는 몇가지 주의할 사항이 있습니다.

 

첫째, 기본적으로 원격 디버깅은 로그 추적/ 트레이스 등으로 해결할 수 없을 때 사용되는 보조적인 방법이라는 것입니다. 무조건 모든 문제를 원격 디버깅으로 해결하려고 드는 것은 바람직한 것이 아니라는 점입니다.

 

두번째, 디버깅을 하면서 브레이크를 걸었을 때, 실행 중인 프로세스 자체도 정지되어 있는 상태가 된다는 것입니다. 일반적인 애플리케이션이라면 별 상관없지만, 웹 애플리케이션처럼 서버 애플리케이션인 경우에는 문제가 심각해질 수 있습니다.

예를 들어 ASP.NET 애플리케이션을 원격 디버깅하고 있다고 가정해 봅시다. 내가 브레이크 포인트를 걸고 디버깅을 하고 있는 도중에는 ASP.NET 웹 애플리케이션이 다른 사용자의 요청에 응답할 수 없게 됩니다.

실제로 있었던 웃지못할 사건 중 하나는.. 모 고객사에서 실행 중인 서버에서 이상한 문제점이 발견되었는데, 로그나 트레이스를 하는 것이 아무것도 없어서 결국 원격 디버깅을 걸어서 문제점을 찾아 해결했습니다. 그러면서 원격 디버깅 사용법을 가르쳐 주고 나왔는데.. 그 담부터 그 개발자가 원격 디버깅을 지나치게 남발하면서 문제가 생겼습니다. 툭하면 서버가 먹통이 되어 버린다고 사용자들이 난리가 난거죠. 알고보니 개발자가 원격 디버깅을 걸어 둔 채 점심식사를 하러 갔다고 합니다. -_-;;

 

결론적으로 Visual Studio 2005에서 원격 디버깅은 보다 설정 및 사용법이 간편해지긴 했지만, 원격 디버깅은 어쩔 수 없는 경우에 사용하는 히든 카드(?)라는 점이며, 사용 시에는 가급적 빠른 시간 내에 작업을 마치는 것이 바람직하다는 것입니다.

마지막으로 원격 디버깅은 .NET으로 작성된 프로그램뿐만 아니라 Native, Script, T-SQL 등에 모두 사용이 가능하다는 점을 유념하시기 바랍니다.

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

'IT' 카테고리의 다른 글

VS 2005 원격 디버깅  (0) 2009/02/27
Trackback 0 Comment 0

VS 2005 설치 프로그램 만들기

http://tjstory.tistory.com/120
저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License

'IT > MFC' 카테고리의 다른 글

VS 2005 설치 프로그램 만들기  (0) 2009/02/17
비트맵 버튼(CBitmapButton)  (0) 2008/08/13
vc++ 개발팁  (0) 2008/08/12
CRoundButton2 - A fancy graphical button  (0) 2008/08/12
AquaButton: A sample custom button control with a Mac OS X look  (0) 2008/08/12
CxSkinbutton  (0) 2008/08/11
Trackback 0 Comment 0

k-means 알고리즘

군집분석, 군집탐색(clustering)이라는 말이 있죠..

여러 데이터가 있을때, 이 데이터들을 '군집'이라는 단위로 나누는 것을 말하는데,,,,

이것은 아래와 같은 특징이 있습니다.

 

- 군집분석의 장점

    1. 탐색적인 기법 : 대용량에 대한 탐색적인 기법이므로 사전적인 정보없이 의미있느 자료구조를 얻는다.

    2. 다양한 형태의 데이터에 적용가능 : 거의 모든 형태의 데이터에 적용가능

    3. 분석방법의 적용 용이성 : 변수들에 대한 역할정의가 필요없으므로 적용이 쉽다.

- 군집분석의 단점

    1. 가중치와 거리정의 : 비유사성 거리정의와 가중치결정 어렵다.

    2. 초기 군집수 설정 : K평균 군집분석의 경우 군집수 K가 적합지 않으면 결과가 나쁘다.

    3. 결과해석의 어려움 : 사전에 주어진 목적이 없으므로 결과해석이 애매하다.


이 기법은 데이타 마이닝이나, 영상처리 등에서 응용이 됩니다.


이 중에서도 K-means(K평균)라는 기법을 소개해 드리겠습니다.

이것은 거리에 기반을 둔 clustering방법으로 가까운 곳에 있는 데이터들끼리 같은 군집으로 두겠다는 것이죠.


1. 여러 데이터가 있을때, 임의로 K개의 군집수를 정하고, 이것의 군집중앙위치를 임의로 정합니다.

2. 각각의 데이터에 대해서, K개의 군집중앙까지의 거리를 구하고, 가장 가까운 군집에 속하게 합니다.

3. 각 군집에 속해진 데이터들을 통해서, 그 데이터로부터 군집중앙까지의 평균을 구해서, 군집중앙을 새롭게 정해줍니다.

4. 만약 새롭게 정해준 군집중앙이 이전의 군집중앙과 동일하다면, 알고리즘은 종료합니다.

5. 동일하지 않다면, 2번의 과정부터 되풀이 하게 됩니다.



이 과정을 거치면, 임의로 정해준 K개의 군집으로 데이터들이 나뉘게 됩니다.

하지만, 이 방법은 앞의 단점에서 말씀드렸듯이 군집수 K를 임의로 정해줘야 한다는 것에 있죠. 그리고, 군집의 갯수(K), 초기 군집 중심의 선택, 어떤 데이터부터 처리를 해줄 것인가 등의 영향을 받게 됩니다.

그래서 이 알고리즘을 적용할때는 서로 다른 초기 군집중심 뿐 아니라 다양한 K값에 대해서 실험을 해봐야 합니다.


실행 예:

크리에이티브 커먼즈 라이선스
Creative Commons License

'IT > 이미지 프로세싱' 카테고리의 다른 글

PSNR(peak signal to noise rate)이란?  (0) 2009/04/15
k-means 알고리즘  (2) 2008/08/16
영상처리 용어 해설  (0) 2008/08/16
Trackback 0 Comment 2

영상처리 용어 해설

  • AAchromatic 색상이 없음. 색상이 없다는 것은 검정색에서 흰색의 범위에 해당하는 회색을 의미한다.
  • Adaptive algorithm(적응적 알고리즘) 어떤 자료를 그 자료에 대한 사전 지식없이 처리하는 알고리즘.
  • Additive color(부가적 컬러) 서로 다른 주파수 분포를 가지는 빛의 조합으로 생성되는 색상. 기본색상은 빨강, 녹색, 파랑이다. 부가 시스템은 방사성이므로 빛을 생성한다.
  • Affine Transform(어파인 변환) 회전, 전이, 크기 변화와 이들의 조합으로 이루어지는 선형 기하 변환.
  • Algorithm(알고리즘) 어떤 문제를 해결하거나 작업을 수행하기 위한 단계들의 집합.
  • Aliasing(에일리어싱) 영상의 최고 공간 주파수의 두 배 보다 적은 비율로 영상을 샘플링했을 경우 발생하는 결과. 영상의 에일리어싱은 대각선의 경계를 따라 톱니 모양의 계단 형태로 영상을 확장할 수 있다.
  • Alpha channel(알파 채널) 알파 블렌딩(alpha blending)에 사용되는 값들과 알파을 위한 저장소. 알파 블렌딩은 기존의 두 화소들을 결합하여 새로운 화소를 만들어 내는 수단을 제공한다. 알파 채널에 있는 자료들은 객체의 반 투명성을 제공한다.
  • Analog-to-Digital converter(A/D, D/A 변환기) 아날로그 전압을 디지털 전압으로 변환하는 장치.
  • Anti-aliasing(엔티 에일리어싱) 에일리어싱 현상에 의해 톱니바퀴 모양으로 변한 선의 경계를 부드럽게 해주는 기술. 이 기술에서는 인접 화소를 평균화하기 위해 건형 보간법이 주로 사용된다.
  • Area process(영역 처리) 하나의 화소를 그 화소와 인접 화소들의 값들에 따라 변경하는 영상처리.
  • Aspect ratio 영상의 가로와 세로의 크기 비율. 텔레비젼의 경우 4:3이다.
  • Barrel distortion(배럴 왜곡) 영상을 물고기 눈으로 본 것과 같이 만드는 일반적인 왜곡.
  • Basis function(기저 함수) 다른 함수를 구성하는 함수들의 집합.
  • Bilinear interpolation(양선형 보간법) 4개의 주어진 값들 사이의 새로운 값을 만들어내는 방법. 두 방향의 선형 보간법과 관련된다.
  • Bilinear transformation(양선형 변환) 목표 화소의 소스주소를 결정하기 위한 선형 보간법을 사용하는 변환.
  • Bilevel(이진 레벨) 0과 1, 검정색과 흰색 둘 중 하나의 값으로 이루어 진다.
  • Bit-mapped graphics(비트 맵 그래픽스) 화소들의 배열로 이루어지는 영상. 레스터 그래픽스(raster graphics)라고도 불린다.
  • Blurring(블러링) 영상에서 상세한 부분을 제거하는 과정. 화소의 정보들이 입접 화소들에 스며드는 경향이 있다. 이 효과는 카메라에서 초점이 맞지 않을 때 나타난다.
  • Brightness(밝기) 광원이 발산하는 빛의 정도를 나타내는 시각, 지각의 요소.
  • CAT(Computer-aided tomography) 컴퓨터 지원 단층 촬영.
  • CCD(Charg coupled device) CCD는 영상을 획득하기 위해 사용되는 빛의 센서이다. 대부분의 캠코더들이 CCD의 기반이다.
  • CCIR 국제 라디오 자문 회의.
  • CCIR recommandation 601-1A NTSC와 PAL을 모두 지원하기 위해 정의된 컬러 비디오 표준.
  • CCITT 표준을 설정한는 국제 표준의 약자. 본 명칭은 International Telephone and Telegraph Consultative Committee이다.
  • CT 컴퓨터 단층 촬영. X-선을 이용한 영상 획득 시스템. 전형적으로 골격 영상을 얻기위해 사용된다.
  • Checksum(체크섬) 오류 검출을 위해 사용되는 자료. 한 영상의 모든 바이트들이 오버플로우를 무시하면서 더해진다. 그 결과 바이트가 체크섬이다. 영상의 전송시에 체크섬이 영상자료와 함께 전송된다. 만약 체크섬이 영상을 받은 컴퓨터에서 계산한 값과 다르면, 전송 오류가 발생한 것이다. 체크섬은 때때로 영상의 헤더 부분에 저장되기도 한다.
  • Chrominance(색상) 하나의 색상과 같은 밝기값을 가지는 기준의 흰색사이의 차이.
  • CMY Cyan, Magenta, Yellow의 기본 값들로 구성된 차분 색상 공간. 이것은 RGB 컬러 공간의 반대이다.
  • CMYK 출력 산업에서 기본적으로 사용되는 차분 컬러 공간. CYMK는 Cyan, Magenta, Yellow, blacK을 대표한다. 대부분의 출력 장치들은 부가색상 공간을 사용한다. CYMK는 Cyan, Magenta, Yellow, blacK 색소를 적용함으로써 흰색 표면으로부터 색상을 제거해 만들어진다는 의미에서 차분이다.
  • Codebook(코드북) 각각이 그에 해당하는 색인을 가진 영상 패턴들의 집합. 영상 압축은 영상 전체의 패턴을 대신해서 코드북의 색인만으로 영상의 부분을 표현함으로써 이루어질 수 있다.
  • Color gamut(색상 전역) 기본 컬러들의 비율을 바꾸어 혼합함으로써 얻어질 수 있는 전체 색상의 스펙트럼.
  • Color space(색상공간) 색상의 수학적 표현. RGB는 카테션 좌표 시스템에 기반을 두며, HSI는 극 좌표 시스템에 기반을 둔다.
  • Compositing(합성과정) 여러 영상의 부분들을 결합하여 하나의 영상을 만드는 과정.
  • Compression(압축) 자료를 좀더 작은 양의 자료로 표현하는 과정. 이것은 중복되는 정보를 제거함으로써 이루어질 수 있다. 또 다른 기술은 가장 자주 사용되는 자료를 짧은 자료로 표현하는 것이다.
  • Compression ratio(압출률) 압출률은 자료가 얼마나 압축되는가 하는 정도를 말한다. 만약 2메가 바이트 영상을 100킬로 바이트로 압축하는 압축 알고리즘을 적용한다면, 압축률은 20이 된다. (2,000,000 bytes / 100,000 bytes)
  • Cone(콘) 색상과 상세한 부분을 감지할 수 있는 눈 속의 감광기관.
  • Continuous tone(연속된 색조) 일관성 있고 끊기지 않는 밝기값. 사진은 연속된 색조이다.
  • Contouring(컨투어링) 영상을 충분한 비트로 표현하지 않으므로써 만들어지는 영상 제작물. 윤곽영상은 영상에서 부드러운 전환 대신에 날카로운 데비를 가진다. 이러한 색상 영역은 지리적 윤곽 지도와 유사하게 영상을 만든다.
  • Contrast(대비) 영상에서 어두운 부분과 밝은 부분 사이의 밝기값의 변화.
  • Contrast stretching(대비 확장) 대비가 낮은 영상에서 대비를 높이는 기술.
  • Control points(제어점) 영상 왜곡에 사용되는 기준점들. 전형적으로 제어점들은 근원 영상에서의 지리적 위치와 그에 대응하는 목표 영상에서의 위치로 구성된다.
  • Convolution(회선) 영상의 스무딩(smoothing)과 샤프닝(sharpening)과 같은 효과를 위해 사용되는 영상 작업. 이 과정은 매우 간단하다. 중심화소의 인접화소들에 대한 가중화된 합이 중심화소의 위치에 할당된다. 이 가중치들은 회선 커널이나 마스크로 불리는 배열로 구성된다.
  • Convolution coefficient(회선 계수) 회선 커널이나 마스크의 개별적 가중치.
  • Convolution kernel(회선 커널) 회선 계수들의 배열, 회선 마스크라고도 불린다.
  • Convolution mask(회선 마스크) 회선 계수들의 배열, 회선 커널이라고도 불린다. 
  • Cornea 눈의 동공과 홍채를 감싸고 있는 투명한 외피막
  • Cross dissolve 화소 대 화소의 보간을 통해 한 영상을 다른 영상에 혼합시키는 기술
  • CRC(Cyclic Redundancy Check) 오류 검출 기술. 다항식 기반의 알고리즘이 한 블록의 자료에 적용되어 CRC문자를 만든다. 이 문자는 저장되어 자료와 함께 전송된다. 수신측에서는 CRC 알고리즘을 수행하여 새로운 CRC문자를 생성한다. 만약 이들이 일치하지 않으면 자료가 손상된 것이다. 이것은 때로 영상 헤더에 포함되기도 한다.
  • CRT(Cathod Ray Tube) 텔레비젼 화면과 컴퓨터 출력 장치를 위해 사용되는 커다란 진공관
  • DCT(Discreat Cosine Transform) 영상압축을 포함한 많은 응용프로그램에 사용되는 변환
  • DFT(Discreat Fourier Transform) 이산 퓨리어 변환
  • DIP(Document Image Processing) DIP 시스템은 서류들을 디지털화하여 획득, 저장, 출력할 수 있는 종이 없는 환경에 사용된다.
  • Decoder(해석기) 암호화된 자료를 원래의 자료 또는 합당한 표현으로 해석 해주는 시스템의 일부
  • Densitometer(사진 농도계) 필름을 통해 전송되는 빛의 양을 측정하는 장치
  • Difference image(차영상) 하나의 영상을 화소 단위로 다른 영상에서 뺀 결과 영상
  • Digital-to-Analog converter(D/A) 디지털 값들을 아날로그 전압으로 변환하는 장치
  • Digitize(디지타이즈) 연속된 영상을 디지털 자료로 변환하는 과정. 이것은 샘플링(sampling)과 양자화를 포함한다.
  • Dithering(디더링) 회색 색조를 검은 점들로 흉내내는 방법. 이것은 또한 작은 색상들의 집합으로부터 많은 색상들을 생성하기 위해 사용된다.
  • Downsampling(다운샘플링) 하나의 영상을 더 작은 샘플로 표현하는 과정. 가장 대표적인 예가 영상을 1보다 작은 비율로 축소하는 것이다.
  • Encoder(인코더) 인코딩을 수행하는 시스템의 일부. 인코딩은 자료를 다른 형태로 변환하는 과정이다. 이것은 자료의 압축과 암호화를 포함한다.
  • Entropy coding(엔트로피 코딩) 원래의 자료를 좀더 효율적으로 표현하기 위해 통계적 중복성을 사용하는 인코딩 방법
  • Error diffusion(오류 유포) 컬러 영상이나 흑백 영상을 좀더 적은 양의 bits/pixel로 표현하기 위한 기술. 이것은 하나의 값을 추정하고 실제 값과 추정된 값 사이의 오류를 계산한다. 이 오류는 이웃화소들에게 유포 된다.
  • FFT(Fast Fourier Transform) Fourier 변환을 빠르게 수행할 수 있는 알고리즘
  • Filter(필터) 하나의 신호에서 특정한 부분을 제거하기 위한 기술 또는 장치. 영상에서 특정한 요소를 제거한다.
  • Finite impulse response filter(FIR) 출력이 현재의 입력과 이전 입력에 의존적인 비재귀적 디지털 필터.
  • Fovea 망막에서 cone들이 집중해 있는 작은 타원형의 파인 곳
  • Fourier Transform(퓨리어 변환) 영상 자료를 공간 영역에서 주파수 영역으로 변환하는 방법
  • Fractal compression(프렉탈 압축) 영상을 조각들로 표현될 수 있는 객체들의 집합으로 표현하는 영상 압축 기술.
  • Frame(프레임) 전체 영상. 비디오에서 프레임은 비디오 스트림에서 하나의 정지 영상이다.
  • Frame buffer(프레임 버퍼) 그래픽 시스템에서 출력 장치에 보여지는 자료를 저장하는 메모리. 이중버퍼 그래픽을 사용한다면 출력 장치는 두 개의 프레임 버퍼를 왔다갔다할 수 있다. 이것은 애니메이션에서 두 번째 프레임 버퍼에서 새로운 프레임을 만드는 동안 하나의 프레임을 화면에 표시하기 위해 사용된다.
  • Frame grabber(프레임 획득기) 비디오 시그널을 디지털화하기 위한 장치. 프레임 획득기로 NTSC 신호로부터 프레임들을 획득할 수 있고 이들을 디지털 영상 자료로 변환할 수 있다.
  • Frame process(프레임 처리) 두 개 이상의 영상에서 화소들에 대한 작업을 통해 화소값을 만들어 내는 과정
  • Frequency domain(주파수 영역) 하나의 신호를 그것의 기본 주파수 요소들로 표현 하는 것.
  • Frequency transform(주파수 변환) 하나의 영상을 기본적인 주파수 요소들로 변환하는 작업.
  • Gamma(감마) 영상 장치들의 비선형 특성들. 비선형 출력 장치에서, 낮은 밝기값의 작은 변화는 밝기값이 클 때와 같은 정도의 변화가 아니다.
  • Gamma correction(감마 보정) 영상 자료를 영상 장치들의 비선형성을 보정하기 위해 변경하는 기술. 이 변화는 출력 장치들이나 카메라에서 발생할 수 있다. 또한 자료들은 이러한 비 선형성을 보정하기에 앞서 소프트웨어적으로 처리할 수 있다.
  • Gaussian noise(가우시안형 잡음) 가우시안 히스토그램을 가진 형태의 잡음.
  • Geometric process(기하학 처리) 영상에서 화소들의 밝기값이 아니라 위치를 변화시키는 과정.
  • Gray scale(그레이 스케일) 검정색에서 백색에 이르는 밝기값들의 영역. 회색 영역은 전형적으로 256개지만 256개로 한정되지는 않는다.
  • Halftoning(간색) 이진 요소들의 배열을 통해 연속된 색조의 환상을 만들어 내는 과정. 이 요소들은 출력 장치의 화소가 될 수도 있고 종이나 제한된 숫자의 상태를 가지는 다른 영상 매체에 사용되는 검은 점일 수도 있다.
  • High pass filter(고주파 통과 필터) 저주파를 약화시키는 반면고주파를 허용하는 디지털 필터
  • Histogram(히스토 그램) 영상에서 화소의 밝기값을 표현하는 막대 그래프
  • Histogram equalization(히스토그램 평활화) 전체의 가능한 영역을 모두 채우기 위해 영상의 화소값들을 균일하게 분산시키는 기술.
  • HSI 또 다른 색상 공간. 이것은 색상, 채도, 밝기를 나타낸다. HSI 색상 공간은 원통 좌표계에 기반을 두고 있다. 밝기는 수직축인 Z축을 따라 증가한다. 색상은 각도이고 채도는 반지름이다.
  • Hue 주로 색상으로 참조되는 값. 기술적으로 hue는 색상의 파장에 대응된다.
  • Huffman coding(허프만 코딩) 무손실 자료 압축의 한 유형. 작은 비트 스트림이 자료의 발생 확률이 적다는 것을 나타낸다. 발생 확률이 높은 자료들은 더 많은 비트들을 요구한다.
  • Image analysis(영상 분석) 영상의 내용을 결정하기 위해 영상을 분석하는 연구 분야
  • Image compression(영상 압축) 하나의 영상을 표현하는 데 필요한자료의 양을 감소시키기 위한 기술의 부류
  • Image enhancement(영상 신장) 영상에서 선택적인 강조와 억제를 위해 사용되는 기술의 부류.
  • Impulse noise(충격 잡음) 극 값의 무작위 잡음
  • Infinite impulse response filter(IIR) 출력이 현재의 입력과 이전의 입력, 그리고 이전 출력에 의존적인 재귀적 필터.
  • Intensity(밝기) 빛의 크기나 힘.
  • Interpolation(보간) 주어진 주변의 점들로부터 잃어버린 자료를 생성해 내기 위해 사용되는 기술의 부류. 예를들어 양선형 보간법은 주어진 두 점들 사이의 선형 관계를 가정한다.
  • ISO(International Organization of Standardization) 국제 표준화 기구
  • JPEG(Joint Picture Experts Group) JPEG는 이 그룹에서 개발된 영상 압축 표준안으로 일반적으로 알려져 있다. 이러한 형태의 영상압축은 응용에 따라 손실이 있을 수도 있고 손실이 없을 수도있다.
  • Jaggies 영상에서 대각 윤곽선의 계단 형태. 이것은 에일리어싱의 결과이다.
  • Lightness(밝기) 스스로 빛을 발하지 않는 물체의 밝기
  • Look-up table(LUT:룩업 테이블) 색인들이 값을 가리키는 도표
  • Lossless encoding(무손실 코딩) 압축 과정에서 정보가 손실되지 않는 자료 압축 방법. 만약 어떤 영상이 무손실 알고리즘으로 압축되고 풀린다면 압축을 푼 영상은 원래의 영상과 일치한다.
  • Lossy encoding(손실 인코딩) 압축 과정에서 정보가 손실되는 자료 압축 방법. 손실된 정보는 북구될 수 없다. 원래의 영상과 압축되었다가 압축을 푼 영상의 차이는 감지될 수도 있고 감지되지 않을 수도 있다. 전형적으로, 손실 압축은 정보의 손실이 많을 수 록 압축률은 더욱 증가한다. 영상의 질과 압출률 사이에는 서로 장단점이 있다.
  • Low pass filter(저주파 통과 필터) 저주파를 보존하면서 고주파를 약화시키는 디지털 필터. 이 필터는 영상을 부드럽게 만들거나 흐리게 만든다.
  • Luminance(휘도) 화소의 밝기값
  • LZW(Lempel-Ziv-Welch algorithm) 중복되는 패턴들을 도표나 디렉토리에 저장하는 손실 자료 압축 알고리즘이다.
  • MRI(Magnetic resonance imaging;자기 공명 영상) 상호 중첩되는 단편 영상을 획득할 수 있는 단층 영상.
  • MSI(Magnetic source imaging) 생각중에 있는 뇌의 전기적 신호를 감지할 수 있는 영상 시스템.
  • Mach band effect(Mach 밴드 효과) 시각 시스템에서 서로 다른 밝기값을 가지는 경계선을 약화시키는 효과.
  • Machine vision(머신 비젼) 생산 환경의 제어를 위해 획득된 영상을 처리하는 기술
  • Magnification(확대) 영상을 확대하는 작업
  • Maximum filter(최대값 필터) 영상에서 한 화소의 주변 화소들에 윈도우를 씌워서 이웃 화소들 중에서 최대값을 출력 영상에 출력하는 필터링.
  • Median filter(중간값 필터) 영상에서 한 화소의 주변 화소들에 윈도우를 씌워서 이웃 화소들 중에서 중간값을 취하여 출력 영상에 출력하는 필터링.
  • Minification(축소) 영상을 축소하는 작업
  • Minimum filter(최소값 필터) 영상에서 한 화소의 주변 화소들에 윈도우를 씌워서 이웃 화소들 중에서 최소값을 출력 영상에 출력하는 필터링.
  • Moire patterns(무아레 패턴) 영상에서 감지 가능한 간섭 패턴. 흑백 영상을 스캔하는 과정에서 발생할 수 있다. 이러한 패턴들은 또한 컬러 출력에서 CMYK 중 하나 이상의 요소가 다른 요소들에 상대적으로 잘못 위치 하였을 때 발생한다.
  • Monochrome(모노크롬) 하나의 색상으로 이루어진. 이 용어는 흑백 영상과 초록색(또는 노랑색)의 그래픽 출력 장치를 표현하는 데 주로 사용되었다.
  • Morphing(모핑) 두 개 이상의 영상을 워핑과 상호 분해를 통해 혼합하는 과정
  • MPEG(Motion picture experts group) 이 그룹에서 비디오를 압축할 수 있는 알고리즘을 개발하였다. 전형적으로 MPEG 압축 알고리즘을 일컫는다.
  • NTSC(National Television System Committee) 미국의 컬러 텔레비젼을 위한 표준 협회
  • Nearest neighbor interpolation(가장 인접한 이웃 화소 보간법) 가장 인접한 값을 보간값으로 시용하는 간단한 보간 기법
  • Noise(잡음) 디지털 시스템에서 디지타이징, 전송 또는 다른 처리를 하는 동안 발생하는 신호값의 무작위 변환
  • Nyquist criterion 신호가 최고 주파수의 두 배 이상의 비율로 샘플되어야 한다는 제안 사항. 영상 획득시 이러한 제한 사항이 지켜지지 않으면 에일리어싱이 발생한다.
  • OCR(Optical character Recognition) OCR 시스템은 텍스트 문서를 스캐닝한 후, 결과 영상을 ASCII 파일로 변환할 수 있다.
  • PAL(Phase Alternation Line) 비디오 신호에 대한 유럽의 표준안
  • PET(Positron Emission Tomography) 횡단 자료을 획득할 수 있는 단층 영상 시스템. 기본적으로 신체의 화학적 처리를 감시하기 위해 사용된다.
  • Palette(팔레트) 실제 색상을 측정할 수 없는 시스템에서 전체 범위의 색상으로부터 선택된 색상의 집합. 컬러 맵의 룩업 테이블 부분이다.
  • Pel 'Picture element'의 약자
  • Perspective transform(투시 변환) 투영 정합이라고 불리는 기하 변환. 하나의 점을 통해 하나의 평면이 다른 평면으로 투영한다.
  • Photometer(포토미터) 밝기값을 측정하는 광학 장치
  • Photopic vision(포토픽 비젼) 좋은 조명하에서의 시각. Cone vision(콘 비젼)이라고도 불린다.
  • Pixel(화소) 영상의 기본 요소. 영상은 수많은 작은 점들로 이루어진다. 이들 점들을 화소라고 한다.
  • Point process(점 처리) 화소의 원래 밝기값이나 위치를 기반으로 화소의 밝기값을 변경시키는 영상처리
  • Posterization(포스터리제이션) 영상을 너무 작은 비트로 표현했기 때문에 발생할 수 있는 영상의 윤곽화 현상.
  • Pseudo color(유사 색상) 색이 없는 자료에 색을 부여하는 색 정합. 온도 표현을 위해 사용된다. 영상에서 낮은 온도는 푸른색으로 표현된다. 높은 온도는 붉은색으로 표현된다.
  • PX64 이산 코사인 변환(DCT)에 기반한 비디오 화상회의에 사용되는 영상압축 표준
  • Quantize(양자화) 아날로그 신호의 디지털 값을 결정하는 과정
  • Quantization error(양자화 오류) 연속적인 신호가 제한된 양자화 레벨로 표현될 때 발생하는 오류로 정밀도의감소를 초래한다. 오류는 원래 신호와의 차이이다.
  • Raster(래스터) 컴퓨터 출력 장치나 TV화면에 나타나는 스캔라인의 집합. 래스터 그래픽스는 열과 행으로 배치된 화소들의 배열로 구성된 영상을 말한다.
  • Reflectance(반사율) 물체로부터 반사되는 빛의 비율
  • Registration(등록) 두 개의 독립된 영상들을 재배열하는 처리. 주로 두 영상을 화소 단위로 비교하기 위해 사용된다.
  • Resampling(재추출) 이미 샘플된 자료를 다른 비율로 다시 샘플링 하는 것. 영상을 축소, 확대하는 작업을 포함한다.
  • Resolution(해상도) 영상 샘플의 척도. 프린터에서는 인치당 점수 수(dpi)로 정의한다. 이 용어는 영상의 면적을 나타낼 때도 사용된다.
  • Retina(망막) 빛의 처리를 담당하고 있는 눈 내부의 피막
  • RGB 빨강 초록, 파랑으로 구성된 부가 색상 공간. 이 색상 모델은 대부분 컴퓨터 그래픽스 출력 하드웨어에 사용된다.
  • Rods(간상체) 빛의 명암을 감지하는 눈의 감광장치
  • Run length encoding 간단한 비손실 자료 압축 알고리즘. 만약 255라는 같은 값을 가지는 50개의 화소가 연속적으로 나열되어 있으며, 이들 화소들은 50과 255의 두 숫자로 표현될 수 있다.
  • Salt and pepper noise 영상의 최소값과 최대값으로 구성된 잡음
  • Sampling 아날로그 비디오 신호를 이산 화소들로 나누는 것. 이 처리의 원래의 저의는 양자화를 포함하지 않는다.
  • Saturation(채도, 포화) 색상이 희색 빛으로부터 자유로운 것처럼 보이는 정도
  • Scaling 영상을 확대하거나 축소하는 기하학적 처리
  • Scanner(스캐너) 영상을 읽고 디지털로 바꿔주는 장치
  • Scan line(스캔 라인) 영상이나 출력 장치의한라인 또는 열
  • Scientific visualization(과학적 시각화) 직접적으로 관찰할 수 없는 자료들을 그래픽으로 표현하기 위한 연구 분야
  • Scotopic vision(암순응 시각) 어두움에 적응해야하 하는 환경하에서의 시각이 색상을 인지할 수 있는 능력이 감소한다는 특성을 가진다.
  • Segmentation(분할) 영상을 유사한 특성을 가지는 영역들로 나누는 처리. 이 처리는 주로 패턴 인식에서 첫번째로 수행된다.
  • Separability(분리성) 2차원의 연산이 2개의 1차원 연산으로 분할될 수 있도록 허용하는 특성. 이것은 계산상의 관점에서 볼 때 매우 효과적인 특성이다.
  • Sharpening(샤프닝) 고주파 보존 필터링에 기반을 둔 영상처리로 영상의 시각적 날카로움이 증가한다.
  • Spatial frequency(공간 주파수) 영상의 주기적 요소에 대한 특성화. 인접 화소들 사이의 밝기값의 변화가 고주파이다. 같은 밝기값을 가지는 영역이나 영상의 밝기값이 천천히 변화하는 부분은 저주파이다.
  • Subtractive color(차분 영상) 기본값을 흰색으로부터 뺌으로써 생성되는 색상.차분 색상의 기본 요소는 cyan, magenta, yellow이다.
  • Spatial domain(공간 영역) 영상자료의 일반적 영역. 위치에 대한 밝기값
  • Tile 비트 맵의 2차원 영역. JPEG 압축은 8*8 화소의 tile 연산을 수행한다.
  • TIFF(Tagged image file format) 그래픽 파일 포맷의 일종. 배우 유명하고 전자 출판에서 많이 사용된다.
  • Translation(이동) 영상이나 그 일부를 이동시키는 연산
  • Tristimulus values 어떤 특정한 색상 공간에서 색상을 표현하기 위한 세 가지 숫자.
  • True color(실 색상) 비트 수를 충분히 사용함으로써 색상이 시각적으로 완전하게 보이도록 그래픽을 표현하는 데 사용되는 형용사. 대부분의 책이나 응용 프로그램에서, 실 색상은 24비트 색상을 의미한다. 각 화소는 빨강색, 초록색, 파랑색의 3바이트 정보로 표현된다. 이 용어는 수년 동안 많이 사용되어 왔다. 이 용어는 그래픽 제품의 공급자 마다 서로 다른 의미로 사용되기도 한다.
  • Uniform noise(정규 잡음) 정규 히스토그램을 가지는 잡음
  • Unsharp masking 영상을 날카롭게 하기 위해 원래 영상에서 흐린 영상을 빼는 기술
  • Unsampling 이미 샘플된 영상의 샘플링 비율을 증가시키는 것. 이것은 스케이링 요소를 1보다 크게 함으로써 가능하다.
  • Vector graphics(벡터 그래픽스) 형태가 만들어지는 것을 기술함으로써 영상을 표현하는 방법. 벡터 그래픽스 파일은 선, 상자, 원을 그리기 위한 명령어와 인수들로 이루어진다.
  • Vector quantization(벡터 양자화) 영상의 타일들을 코드북의 색인으로 표현하는 손실 영상 압축 기법. 코드북은 많은 영상 패턴들에 대한 룩업 테이블이다.
  • Visual acuity(시각적 차이) 서로 다른 두 객체들이 서로 구분되는 정도
  • Volume rendering(볼륨 렌더링) 획득된 영상 자료의 3차원 모델을 나타내는 기술
  • Voxel(복셀) 3차원 화소. 화소와 같은 정보뿐 아니라 관찰점에서의 거리를 명시하는 정보도 포함한다.
  • Warping(워핑) 영상을 늘리거나 크기를 조절하는 기하학적인 처리. 순수한 스케일링과 달리 크기 변화의 정도가 영상 전체에 대해 균일하지 않다.
  • Wavelet transform(웨이블릿 변환) 하나의 신호를 매우간단한 기본 함수들로 재구성하는 변환
  • Windowing function(윈도우 함수) 퓨리어 변환을 적용하기 전에 영상에 적용되는 함수. 퓨리어 변환에서 주기적인 함수를 해석할 때 발생하는 영상 경계선의 불연속성을 감소시키기 위해 사용된다.
  • YIQ 북미 NTSC broadcast television에 사용되는 색상 모델. Y는 밝기값을, I와 Q는 색상을 나타낸다.
  • YUV 유럽 PAL broadcast television에 사용되는 색상 모델. Y는 밝기값을, U와 V는 색상을 나타낸다.
  • Zoom(확대) 영상이나 그 일부분을 확대하는 작업
  • 크리에이티브 커먼즈 라이선스
    Creative Commons License

    'IT > 이미지 프로세싱' 카테고리의 다른 글

    PSNR(peak signal to noise rate)이란?  (0) 2009/04/15
    k-means 알고리즘  (2) 2008/08/16
    영상처리 용어 해설  (0) 2008/08/16
    Trackback 0 Comment 0

    비트맵 버튼(CBitmapButton)

    비트맵 버튼(CBitmapButton)

    —비트맵으로 만들려는 버튼의 속성을 열어 <Owner draw>속성을 설정..

     

    버튼이 갖는 상태

    —UP: 버튼이 눌려지지 않은 상태

    —DOWN: 버튼이 눌려진 상태

    —FOCUS: Tab Key에 의해 선택되어 버튼 주위에 점선이 나타난 상태

    —DISABLE: 버튼을 사용할 수 없는 상태

     

    IDCANCEL CButton형식의 m_Ok를 추가한다. 헤더 파일에서 회색 글자로된 CButton m_Ok라인을 찾아 CButton CbitmapButton으로 수정하고, CBitmapButton타입의변수 m_Cancel을 하나 추가한다.

    —CButton m_Ok를 그대로 사용하면 객체 m_Ok는 일반 버튼으로 작동하지만 이를 CBitmapButton m_Ok로 변경하면 일반 버튼으로 작동하지 않고 CBitmapButton에 의해 행동양식이 규정된다. 이것이 객체 m_Ok를 비트맵 버튼으로 작동하도록 하는 서브클래싱하는 간단한 방법이다.

     

    è만약 CButton형으로 변수를 취하여 CBitmapButton으로 바꾸지 않고, CBitmapButton형식으로 변수를 추가하면 CWnd::SubclassDlgItem()을 사용하여 서브 클래싱한다.

     

    èCBitmapButton::SizeToContent()을 사용하여 비트맵 버튼에서 사용할 이미지 크기에 맞춰 버튼 크기를 조절한다.

    크리에이티브 커먼즈 라이선스
    Creative Commons License

    'IT > MFC' 카테고리의 다른 글

    VS 2005 설치 프로그램 만들기  (0) 2009/02/17
    비트맵 버튼(CBitmapButton)  (0) 2008/08/13
    vc++ 개발팁  (0) 2008/08/12
    CRoundButton2 - A fancy graphical button  (0) 2008/08/12
    AquaButton: A sample custom button control with a Mac OS X look  (0) 2008/08/12
    CxSkinbutton  (0) 2008/08/11
    Trackback 0 Comment 0

    vc++ 개발팁

    지식인내용 개발팀및즐겨찾기

    2004/09/18 14:22

    복사 http://blog.naver.com/youtoo2/20005859784

    트루 칼라를 사용하는 방법을 알고 싶거든요...???
    pop3서버와 관련된 질문입니다.
    컴터를 산지 5개월정도밖에 되지 않았는데....느려지고...
    다이얼로그 박스기반의 윈도우에 메뉴를 띄우려면???
    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 연동..시작할때 로그인문제..
    워크레프트3
    리스트컨트롤에 색깔 넣기..
    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 새로고침...
    뷰에서 라인 그리기 급합니다..제가 초보라서^^
    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게임도 베틀넷 되나요?
    무진기행

    [출처] 지식인내용|작성자 버드나무

    크리에이티브 커먼즈 라이선스
    Creative Commons License

    'IT > MFC' 카테고리의 다른 글

    VS 2005 설치 프로그램 만들기  (0) 2009/02/17
    비트맵 버튼(CBitmapButton)  (0) 2008/08/13
    vc++ 개발팁  (0) 2008/08/12
    CRoundButton2 - A fancy graphical button  (0) 2008/08/12
    AquaButton: A sample custom button control with a Mac OS X look  (0) 2008/08/12
    CxSkinbutton  (0) 2008/08/11
    Trackback 0 Comment 0

    CRoundButton2 - A fancy graphical button

    Introduction

    I needed a button for a skinnable user-interface, where the user could change the visual aspects. My first idea, a button that is skinned by bitmaps, was a little unhandy for my interface, so I searched for a button that could draw itself using an internal formula and some user-given parameters. A long story told short, I found no class that fitted my needs, so I started coding.

    My first attempt was a disaster ;-). An application using about 15 buttons started in 10 secs - because the buttons needed the time to be drawn. The second attempt was much better. The time critical graphics are drawn once in a universal way and are then used by the buttons to draw their own images. With this structure it was also possible to generate a global button-style for the complete project.

    Introducing the used classes and structs

    CRoundButton2 needs two classes: "CRoundButton2" and "CRoundButtonStyle". Each button needs an object of type "CRoundButton2". This class represents the button and its functionality. Only one object (OK, OK, one per used button-style) is needed of type "CRoundButtonStyle". This object controls the style of all buttons using it. Let's start with it...

    CRoundButtonStyle

    CRoundButtonStyle has some public functions, but the two that are of interest to us besides the constructor and the destructor are:

    • GetButtonStyle(tButtonStyle* _ptButtonStyle)

      which is used to fill a tButtonStyle structure with the current set style.

    • SetButtonStyle(tButtonStyle* _ptButtonStyle)

      which is used to set the current style to the one given in the tButtonStyle structure.

    Both functions need a pointer to an object of type tButtonStyle.

    tButtonStyle

    tButtonStyle is a structure containing all changeable options of the style. The image shows the main parameters of the button-style:

    The button's geometry is calculated by the shown function.

    The parameters are given in detail:

    • double m_dSizeAA

      The size in pixels of the used Anti-Aliasing zone to make the image smooth.

    • double m_dRadius

      The radius of a button-edge. If the button is too small for the selected radius, it is scaled down, but be careful, the scaling routine is not very good. If you have to use very small buttons along with big ones, use a second button-scale which is different only in this parameter.

    • double m_dBorderRatio

      The ratio (between 0.0 and 1.0) between the border and the radius. If you are given a radius of 16.0 and m_dBorderRatio is 0.25, the button's border would be 4.0 pixels wide.

    • double m_dHeightBorder

      The color of the border is calculated by the function y=x^2, with this height. You have to experiment a little to find a good value for your button.

    • double m_dHeightButton

      The color of the button is calculated by the function y=x^2, with this height. You have to experiment a little to find a good value for your button.

    • double m_dHighLightX

      The position of the button's highlight in X-direction. Use this and the next value to change the 3D-effect.

    • double m_dHighLightY

      The position of the button's highlight in X-direction. Use this and the previous value to change the 3D-effect.

    • double m_dRadiusHighLight

      The radius of the used highlight. You have to experiment a little to find a good looking value.

    • double m_dPowerHighLight

      The power of the used highlight. More of this and the highlighted area turns to white ;-)

    • tColorScheme m_tColorBack

      This is the color for the button's background. Because the button doesn't draw itself transparent, you can give the color of your dialog face here, so the button looks round rather than rectangular.

    • tColorScheme m_tColorBorder

      This is the color shown at the highest point of the button's border.

    • tColorScheme m_tColorFace

      This is the color shown on the button's face, the area in the middle of the button.

    tColorScheme

    The coloring of the button is done by this structure, which includes colors for all different states of the button.

    These are given in detail here:

    • COLORREF m_tDisabled

      This color is used if the button is disabled.

    • COLORREF m_tEnabled

      This color is used if the button is enabled, but not clicked.

    • COLORREF m_tClicked

      This color is used if the button is clicked. This means checked, if the button is a checkbox or selected if the button is a radio button.

    • COLORREF m_tPressed

      This color is used if the button is pressed. This means, the mouse is over the button and the left mouse button is clicked.

    • COLORREF m_tHot

      This color is used if the button is a hot-button and the mouse pointer is hovering over the button.

    So each button uses an object of class....

    CRoundButton2

    This class includes some Set and Get routines which are needed to control the behavior of the button. These are given in detail here:

    • bool SetRoundButtonStyle(CRoundButtonStyle* _ptRoundButtonStyle)

      This routine sets a pointer in the button object to the global button-style object. With this, you can control which button uses which button-style.

    • bool GetFont(LOGFONT* _ptLogFont)

      You have to provide the address of an object of type LOGFONT, which is filled by the function with the actual set font-data. LOGFONT is the structure used by MFC's CreateFontIndirect.

    • bool SetFont(LOGFONT* _ptLogFont)

      You have to provide the address of an object of type LOGFONT, which is used by the function to set the actual font of the button. LOGFONT is the structure used by MFC's CreateFontIndirect.

    • bool GetTextColor(tColorScheme* _ptTextColor)

      This routine fills the object at _ptTextColor with the current set color of the button's text. This color is given as tColorScheme, so you can use a different color for a disabled button, or you can mark a checked button by another font color.

    • bool GetTextColor(tColorScheme* _ptTextColor)

      This routine sets the font color of the button to the values given in _pttextColor. This color is given as tColorScheme, so you can use a different color for a disabled button, or you can mark a checked button by another font color.

    • void SetCheckButton(bool _bCheckButton)

      Changes the status of the button to check button or back. If _bCheckbutton is true, the button is a check button. With each mouse click, the checked status is changed.

    • bool GetCheckButton()

      Returns true if the button is a check button, otherwise false.

    • void SetRadioButton(bool _bRadioButton)

      Changes the status of the button to radio button or back. If _bRadiobutton is true, the button is a radio button. Each mouse click will check a radio-button. The un-checking of other radio buttons of the group has to be done manually (for now). (See an example on this later.)

    • bool GetRadioButton()

      Returns true if the button is a radio button, otherwise false.

    • void SetHotButton(bool _bHotButton)

      Changes the status of the button to hot-button or back. If _bRadiobutton is true, the button is a hot-button. If the mouse hovers over the button's face, the button will change its appearance to the hot-button style so it is more noticeable.

    • bool GetHotButton()

      Returns true if the button is a hot-button, otherwise false.

    • void SetCheck(bool _bIsChecked)

      Checks or unchecks the button.

    • bool GetCheck()

      Get the actual check-status of the button. true means the button is checked.

    Using the code

    First of all, you have to include these four files in your project:

    • RoundButton2.h
    • RoundButton2.cpp
    • RoundButtonStyle.h
    • RoundButtonStyle.cpp

    The easiest way to use the code is to generate variables for each used button. The first step to do this: go to your dialog's header-file and include:

    .
    .
    .
    #include "..."
    
    #include "RoundButton2.h"
    #include "RoundButtonStyle.h"
    
    class CMyDialog : public CDialog
    {
    .
    .
    .

    The next step would be to go to the dialog-editor. First we need a button-style to use. Right-click onto the dialog-title and select "Add variable...". In the dialog, change the variable type to "CRoundButtonStyle" and give a name to the variable. This example uses m_tMyButtonStyle. Press "OK" and your first global button-style is generated.

    Now, we need a variable for each used button. To get them, follow these steps for each button:

    Right-click on the button you want to change and select "Add variable...". In the upcoming dialog, select your variable-name (this example uses m_tMyButton1 and so on) and change the variable-type to CRoundButton2. Press "OK" and the button's variable is included.

    The last step needed is to associate the style with the buttons. Go to your dialog's OnInitDialog() routine and set the following line for each button:

    BOOL CMyDialog::OnInitDialog()
    {
        .
        .
        .
        All other initialization
        
        m_tMyButton1.SetRoundButtonStyle(&m_tMyButtonStyle);
        m_tMyButton2.SetRoundButtonStyle(&m_tMyButtonStyle);
        m_tMyButton3.SetRoundButtonStyle(&m_tMyButtonStyle);
        m_tMyButton4.SetRoundButtonStyle(&m_tMyButtonStyle);
        m_tMyButton5.SetRoundButtonStyle(&m_tMyButtonStyle);
        
        return TRUE
    }

    Now you can use your button like any other button from MFC.

    Checkbox

    If you want to use your button as a checkbox, you simply have to call...

    BOOL CMyDialog::OnInitDialog()
    {
        .
        .
        .
        All other initialization
        
        m_tMyButton1.SetCheckButton(true);
    
        return TRUE
    }

    ...in your OnInitDialog() routine. The button will change the check-status with each click or you can change the status yourself with a call to void SetCheck(bool). You can get the actual check-status by calling bool GetCheck().

    Radio button

    A radio button is a little more complicated to implement. Let's pretend, for this example, that you want to use "MyButton2" to "MyButton4" as a radio button group. First, you have to set the button's status to "radio button" by using the following code:

    BOOL CMyDialog::OnInitDialog()
    {
        .
        .
        .
        All other initialization
        
        m_tMyButton2.SetRadioButton(true);
        m_tMyButton3.SetRadioButton(true);
        m_tMyButton4.SetRadioButton(true);
    
        return TRUE
    }

    A radio button is "checked" each time, the user clicks on it. You have to uncheck the unselected buttons of a radio button group by yourself. To do this, implement the OnBnClicked() function for each button of the radio button group. These functions include the following code:

    void CMyDialog::OnBnClickedMyButton2()
    {
        // Uncheck the two other Buttons
        m_tMyButton3.SetCheck(false);
        m_tMyButton4.SetCheck(false);
    }
    
    void CMyDialog::OnBnClickedMyButton3()
    {
        // Uncheck the two other Buttons
        m_tMyButton2.SetCheck(false);
        m_tMyButton4.SetCheck(false);
    }
    
    void CMyDialog::OnBnClickedMyButton4()
    {
        // Uncheck the two other Buttons
        m_tMyButton2.SetCheck(false);
        m_tMyButton3.SetCheck(false);
    }

    This will uncheck all the buttons of your radio button group that were not clicked.

    Hot Button

    To make a button hot, you have to call...

    BOOL CMyDialog::OnInitDialog()
    {
        .
        .
        .
        All other initialization
        
        m_tMyButton5.SetHotButton(true);
    
        return TRUE
    }

    ... in your OnInitDialog() routine. A hot button will change its appearance if the mouse cursor hovers over the button

    Redesign of the button

    You have two possible parts in redesign. The first is the...

    ButtonStyle

    To redesign the style of the button you have to follow this simple concept:

    // Generate local struct-object for style-data
    tButtonStyle tStyle;
    
    // Get the current style of your button-style-object
    m_tMyButtonStyle.GetRoundButtonStyle(&tStyle);
    
    // Do your changes here. As example lets change the radius 
    // of the button and the color of the checked button face:
    tStyle.m_dRadius = 16.0;
    tStyle.m_tColorFace.m_tChecked = RGB(0xFF, 0xFF, 0);
    
    // Save the style back
    m_tMyButtonStyle.SetRoundButtonStyle(&tStyle);

    Now, you have changed the button style, so all the buttons using this style will have a changed look.

    The second style to change is the...

    FontStyle

    The FontStyle is a part of the CRoundButton2 class, because it's more often needed to change the font of a button than its graphical details. Think for example of a button with a symbol on it, like the tall thin button in the demo application. It uses a double arrow of "WingDings". This example shows the changing of both the font and the font-color of a button's caption.

    // Generate local font object
    LOGFONT tFont;
    
    // Get the current font of your button-object
    m_tMyButton1.GetFont(&tFont);
    
    // Do your changes here. As example lets change the 
    // font to "WingDings" and the font-size to 14:
    strcpy(tFont.lfFaceName,"WingDings");
    tFont.lfHeight = 14;
    
    // Save the Font back
    m_tMyButton1.SetFont(&tStyle);
    
    // Generate local ColorSheme object
    tColorScheme tColor;
    
    // Get current Color of Caption
    m_tMyButton1.GetFontColor(&tColor);
    
    // Do your changes here. As example lets change the 
    // captions' color of a checked button to yellow:
    tColor.m_tChecked = RGB(0xFF, 0xFF, 0);
    
    // Set Color of Caption
    m_tMyButton1.SetFontColor(&tColor);

    History

    • 12.09.2005 - Initial release.
    • 29.09.2005 - Added HotButton-function (Thanks to AndrewSmirnov) and fixed two bugs (Thanks to Thomas Kayser and Bhalvinder).

    License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here

    크리에이티브 커먼즈 라이선스
    Creative Commons License

    'IT > MFC' 카테고리의 다른 글

    비트맵 버튼(CBitmapButton)  (0) 2008/08/13
    vc++ 개발팁  (0) 2008/08/12
    CRoundButton2 - A fancy graphical button  (0) 2008/08/12
    AquaButton: A sample custom button control with a Mac OS X look  (0) 2008/08/12
    CxSkinbutton  (0) 2008/08/11
    codeprject round slider control  (0) 2008/08/10
    Trackback 0 Comment 0

    AquaButton: A sample custom button control with a Mac OS X look

    Sample Image - AquaButton.png

    Introduction

    You can learn a lot about .NET Windows Forms programming by building a custom control. There are several books on the topic, but you'll soon find yourself reaching for Google to answer questions about Forms, GDI+, and Visual Studio you don't even know how to ask. When you find answers, they will be frustratingly incomplete.

    What better way to learn?

    That's how it went for me when I wrote Aqua Button. Since this was a learning project and I wasn't bound by practicality, I set out to build a button that looks and feels like push buttons in Apple Mac OS X. Apple's user interface is called Aqua®, and it's alive with transparent, colorful controls. Aqua buttons and Windows buttons have some things in common, but they also have several rather large differences:

    • Aqua buttons pulse when they are the default button
    • Aqua buttons are not in the tab order
    • Aqua buttons generally do not have keyboard equivalents
    • Aqua buttons do not press down when clicked -- they change color instead

    So, it's safe to say that AquaButton won't satisfy Windows interface guidelines. But it may help you make that leap from using Windows Forms controls to designing and building your own custom controls.

    Drawing the 3D button

    AquaButton has a 3D look with text shadows, button shadows, and highlights. While it may be possible to recreate this look with GDI+ in OnPaint, I took the easier path and created the button bitmaps in Photoshop. I used PixelJerk's Photoshop action to create my initial source bitmap, then removed the background layer and merged the remaining layers to make the button partially transparent. I sliced that bitmap into three segments: a left end cap (left.png), a right end cap (right.png), and a single-pixel column from the middle (fill.png). Each time AquaButton paints itself, it uses DrawImage to quickly draw the two end caps, and FillRectangle to fill in the body. This means that you can set the width of AquaButton, but not the height.

    If you need taller or thinner buttons, replace the source bitmaps with your own, then set the ButtonHeight class constant to the height of your bitmap. If your bitmaps have a shadow, set the ButtonShadowOffset class constant so that it specifies the distance from the bottom of the button to the bottom of the image. AquaButton uses this last constant to center the label on the button.

    Aqua buttons are aqua-colored when they are the default button (specified with the Form.AcceptButton property). Non-default buttons draw in grayscale. I didn't need to manage separate source bitmaps just to draw the button in grayscale -- it's easy enough to draw the button in grayscale using GDI+ ImageAttributes. AquaButton declares ImageAttribute and ColorMatrix variables for each state:

       protected ImageAttributes iaDefault, iaNormal;
    
       protected ColorMatrix cmDefault, cmNormal;
    
    

    I setup the image attributes and color matrices in InitializeGraphics. I use the cmDefault color matrix to make the button lighter (you'll see why in a minute, when I explain how I use gamma correction to simulate the pulse effect):

       // lighten the default image by reducing opacity
       cmDefault = new ColorMatrix();
       cmDefault.Matrix33 = 0.5f;
       iaDefault = new ImageAttributes();
       iaDefault.SetColorMatrix( cmDefault, ColorMatrixFlag.Default,
                                 ColorAdjustType.Bitmap );

    and I use the cmNormal color matrix to desaturate and lighten the image:

       // desaturate the normal image
       cmNormal = new ColorMatrix();
       cmNormal.Matrix00 = 1/3f;
       cmNormal.Matrix01 = 1/3f;
       cmNormal.Matrix02 = 1/3f;
       cmNormal.Matrix10 = 1/3f;
       cmNormal.Matrix11 = 1/3f;
       cmNormal.Matrix12 = 1/3f;
       cmNormal.Matrix20 = 1/3f;
       cmNormal.Matrix21 = 1/3f;
       cmNormal.Matrix22 = 1/3f;
    
       // lighten the normal image by reducing opacity
       cmNormal.Matrix33 = 0.5f;
    
       iaNormal = new ImageAttributes();
       iaNormal.SetColorMatrix( cmNormal, ColorMatrixFlag.Default, 
         ColorAdjustType.Bitmap );

    Now all I have to do is draw the three button bitmaps (left.png, right.png, and fill.png) using iaDefault or iaNormal, which is a parameter to DrawButtonState:

       protected virtual void DrawButtonState (Graphics g, ImageAttributes ia)
       {
          TextureBrush tb;
    
          // Draw the left end cap
          g.DrawImage( imgLeft, rcLeft, 0, 0, imgLeft.Width, imgLeft.Height, 
                      GraphicsUnit.Pixel, ia );
    
          // Draw the right end cap
          g.DrawImage( imgRight, rcRight, 0, 0, imgRight.Width, imgRight.Height, 
                      GraphicsUnit.Pixel, ia );
    
          // Draw the middle
          tb = new TextureBrush( imgFill, new Rectangle( 0, 0, 
                                       imgFill.Width, imgFill.Height ), ia );
          tb.WrapMode = WrapMode.Tile;  
    
          g.FillRectangle ( tb, imgLeft.Width, 0, 
                            this.Width - (imgLeft.Width + imgRight.Width), 
                            imgFill.Height);
    
          tb.Dispose( );
       }

    That's all there is to drawing AquaButton in it's basic states. With just a little more code, we can extend this to make AquaButton pulse.

    Making the button pulse

    Aqua buttons pulse with a glow that seems to originate inside the button. I considered using a GIF-like animation with a sequence of bitmaps showing the button in several intermediate states of illumination, controlled by a timer. While this would allow me to create realistic lighting in Photoshop, I would need many intermediate bitmaps to create a fluid animation.

    I decided instead to use Gamma Correction, a simpler technique that sacrifices some lighting quality. Earlier I showed you how I lightened up the default and normal button images using a ColorMatrix. I did this so that I can use gamma correction to draw lighter (1.8 gamma) and darker (0.7 gamma) versions of the image using gamma correction. Change PulseGammaMin and PulseGammaMax if these look too light or dark.

    This is how it works. AquaButton starts a timer to invalidate itself every 70 milliseconds (PulseInterval). On each timer tick, AquaButton uses gamma correction to draw itself progressively lighter or darker, with almost seamless transitions. My first attempt looked more like blinking than pulsing -- the button bounced almost immediately from light to dark. So I added logic to slow the lighting change as it approaches min or max gamma. If you're not happy with the way it looks, tune the PulseGammaShift, PulseGammaReductionThreshold, and PulseGammaShiftReduction constants. Here is the gamma shift logic from TimeOnTick:

    if ((gamma - Button.PulseGammaMin < Button.PulseGammaReductionThreshold ) || 
        (Button.PulseGammaMax - gamma < Button.PulseGammaReductionThreshold ))
        gamma += gammaShift * Button.PulseGammaShiftReduction;
    else
        gamma += gammaShift;
    
    if ( gamma <= Button.PulseGammaMin || gamma >= Button.PulseGammaMax )
        gammaShift = -gammaShift;

    Now all we have to do is update the ImageAttributes with the new gamma value and repaint the button. In Aqua, only the default button pulses, so I just need to update iaDefault:

    iaDefault.SetGamma( gamma, ColorAdjustType.Bitmap );
    
    Invalidate( );
    Update( );

    Supporting Visual Design

    AquaButton exposes several properties to support the Visual Studio designer:

    • Pulse - determines whether an AquaButton pulses when it is the default button.
    • SizeToLabel - determines whether AquaButton automatically sets it's width based on it's label. Set this to true, then set the button label. The AquaButton will automatically size itself at design time.

    AquaButton also shadows several properties from System.Windows.Forms.Control:

    • Size - AquaButtons have a fixed height, so it doesn't make sense to allow you to set Size (which includes Height) in the Visual Studio property grid. For lack of a better solution, I hid this property from the Visual Studio property grid using a custom designer (see below).
    • Height - AquaButtons don't reveal their Size property, so you need another way to see Height. I shadowed Control.Height and made it browsable and read only in the property grid.
    • Width - As with Height, I shadowed this property and made it browsable in the property grid. You decide whether to set width explicitly, or use SizeToLabel to automatically size the button.

    I also wrote a custom designer, Wildgrape.Aqua.Controls.ButtonDesigner, to filter out properties that don't make sense for AquaButton: AllowDrop, BackColor, BackgroundImage, ContextMenu, FlatStyle, ForeColor, Image, ImageAlign, ImageIndex, ImageList, Size, and TextAlign. I did this to simplify visual design, but I did not bother to shadow them to prevent callers from setting them in code.

    Extending AquaButton

    I've already mentioned a few ways to customize AquaButton. If you're looking for a learning project, here are a few ideas.

    AquaButton looks like an Aqua button, but behaves differently when it comes to selection. You could extend AquaButton to implement these missing behaviors to make AquaButton more faithful to the Aqua look and feel:

    • Aqua buttons are not in the tab order, but AquaButton leaves that decision to you.
    • Aqua buttons do not receive focus, so the default button is always the default button, and pulses even when another control has focus. AquaButton inherits .NET button selection behavior, which means you can make another button the default button simply by tabbing or mousing to it.

    Or you could go the other way and make AquaButton behave more like .NET Windows Forms buttons:

    • Add focus hints
    • Make the selected button pulse (even if it isn't the default button)
    • Allow users to set the button's height (one reader has suggested a solution -- see the feedback for this article)

    I'm interested to see how you extend AquaButton. I would be happy to post your enhancements here and give you credit.

    References

    1. CodeProject, www.codeproject.com
    2. GotDotNet, www.gotdotnet.com
    3. Microsoft .NET Windows Forms news groups, microsoft.public.dotnet.windowsforms and microsoft.public.dotnet.windowsforms.controls
    4. Microsoft Developer Network, msdn.microsoft.com
    5. Apple Computer, Aqua, www.apple.com/macosx/technologies/aqua.html
    6. Apple Computer, Aqua Human Interface Guidelines, developer.apple.com/techpubs/macosx/Essentials/AquaHIGuidelines/
    7. Charles Petzold, Programming Microsoft Windows with C#, Microsoft Press, 2002
    8. Richard L. Weeks, .NET Windows Forms Custom Controls, SAMS Publishing, 2002
    9. Ted Faison, Component-Based Development with Visual C#, M&T Books, 2002
    10. Andrew Troelsen, C# and the .NET Platform, Apress, 2001

    Credits

    AquaButton is an independent creation and has not been authorized, sponsored, or otherwise approved by Apple Computer, Inc. Aqua is a trademark of Apple Computer, Inc.

    Revisions

    • September 12, 2002 - Readers pointed out that the button wasn't forwarding Click events to the form. The problem was that I was doing too much in the mouse tracking code, and not giving the base class a chance to process events. After experimenting with Button events, I rewrote the mouse tracking logic and made it much simpler.

    License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here

    크리에이티브 커먼즈 라이선스
    Creative Commons License

    'IT > MFC' 카테고리의 다른 글

    vc++ 개발팁  (0) 2008/08/12
    CRoundButton2 - A fancy graphical button  (0) 2008/08/12
    AquaButton: A sample custom button control with a Mac OS X look  (0) 2008/08/12
    CxSkinbutton  (0) 2008/08/11
    codeprject round slider control  (0) 2008/08/10
    codeproject round button  (0) 2008/08/10
    Trackback 0 Comment 0

    CxSkinbutton

    Sample Image - sample.gif

    With this class you can easily give a skin to your buttons in few steps:

    1. Add xSkinButton.cpp and xSkinButton.h to the project.
    2. Include xSkinButton.h in the header file where the controls are defined
    3. Create (or edit) a member variable for each button you want to customize as CxSkinButton. If the Class Wizard doesn't show the CxSkinButton type, select CButton and then edit the code manually.
    4. Add the bitmap resource for the buttons:
      • NORMAL bitmap: default button image.
      • DOWN bitmap: pushed button image.
      • OVER bitmap:(optional) image to shown when the mouse is over the button. If NULL, NORMAL bitmap will be used.
      • DISABLED bitmap: (optional) image for the disabled state. If NULL, NORMAL bitmap will be used.
      • FOCUS bitmap: (optional) image for the focused state. If NULL, NORMAL bitmap will be used.
      • MASK bitmap: (optional) clipping region. If you don't use the MASK, the button will be a rectangular owner-draw control. The default transparent color is RGB(255,255,255).
    5. In the window initialization add the CxSkinButton methods:
      BOOL CxSkinButtonDemoDlg::OnInitDialog()
      {
      //    ...
          m_btn1.SetTextColor(RGB(255,0,0));
          m_btn1.SetToolTipText("Button1");
          m_btn1.SetSkin(IDB_B1NORM,IDB_B1DOWN,IDB_B1OVER,IDB_B1GRAY,
                             0,IDB_B1MASK,0,0,0);
      //    ...

      The SetTextColor and SetToolTipText are self explaining; SetSkin is:

      void CxSkinButton::SetSkin(UINT normal,UINT down,UINT over, 
                                 UINT disabled, UINT focus,UINT mask, 
                                 short drawmode, short border, 
                                 short margin)
      • normal, down, over, disabled, focus, mask = bitmap resource IDs
      • drawmode = if mask is not NULL, this should be 0 (normal); else you can try 1 (stretch) or 2 (tiled).
      • border = if mask is not NULL or is not rectangular, this should be 0; else you can try 1 to draw the standard 3D border around the button.
      • margin = if mask is not NULL or is not rectangular, this should be 0; else you can try to change this value to draw a dotted rectangle over the button when the control has the focus.

    Remarks

    • The BS_OWNERDRAW style is added automatically, you don't need to set the "Owner draw" property in the resource editor.
    • only NORMAL and DOWN bitmaps are essential; OVER bitmap is a plus.
    • DISABLED bitmap is not necessary if the button is always enabled. You can also use the button text (automatically etched) to show the disabled state.
    • MASK bitmap is not necessary if the button is rectangular.
    • for rectangular buttons you should set the margin parameter greater than 0 (4 is a good choice), or use the FOCUS bitmap.
    • for rectangular buttons you can use 'flat' bitmaps and set the border parameter to 1. In this situation, NORMAL and DOWN bitmaps can also share the same resource.

    Release History

    v1.00 - 15/03/2001
    - basic implementation and interface.
    v1.10 - 28/03/2001
    enhanced mouse tracking implementation (by Milan Gardian).
    - SetCapture removed: accelerators now are dispatched.
    - Double-click handling.
    - Better behavior during "button-pressed" (mouse button down & holding) phase
    v1.20 - 02/04/2001
    - New CreateRgnFromBitmap() implementation. Mask bitmap now works in any display color mode, any mask color depth and any mask size.
    v1.21 - 14/04/2001
    - OnMouseLeave cast error fixed.
    - Fixed FocusRect defect when OVER bitmap was NULL.
    v1.30 - 25/04/2001
    - Fixed CreateRgnFromBitmap failure under WinNT4.0
    v1.40 - 29/06/2001
    - check & radio button add on.
    - added "focus" bitmap.
    - fixed CreateRgnFromBitmap bug.
    - fixed shortcut bug.
    - fixed text drawing code.
    v1.41 - 27/10/2001
    - Fixed memory leakage in CreateRgnFromBitmap
    v1.50 - 07/07/2008
    - fixed memory leaks using SelectObject and GetDC (thanks to sachelis and Bernd Giesen)
    - added SetToolTipColor (thanks to Mykel)

    Compatibility

    Win95,WinNT = Yes, requires IE3.0 or higher
    Win98, WinME, W2k, WinXP = Yes

    Thanks to all the Code Project developers!
    Special thanks to:
    Milan Gardian for mouse and keyboard tracking code.
    Fable(at)aramszu(dot)net for ExtCreateRegion replacement code.
    Rainer Mangold for radio-button and check-box code.
    Andy Green and Cameron Epp for suggestions & debugging.

    License

    This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

    About the Author

    크리에이티브 커먼즈 라이선스
    Creative Commons License

    'IT > MFC' 카테고리의 다른 글

    CRoundButton2 - A fancy graphical button  (0) 2008/08/12
    AquaButton: A sample custom button control with a Mac OS X look  (0) 2008/08/12
    CxSkinbutton  (0) 2008/08/11
    codeprject round slider control  (0) 2008/08/10
    codeproject round button  (0) 2008/08/10
    Round Button Control - mfc 아님  (0) 2008/08/10
    Trackback 0 Comment 0
    prev 1 2 next


    티스토리 툴바