MFC 다이얼로그에서 폰트를 수정하는 눈에 띄는 방법은
다이얼로그의 Properties를 눌러서 다이얼로그 전체의 폰트를 변경하는 것이다.




RichEditCtrl 사용해도 된다고 하지만, RichEditCtrl은 구동도 번거로운지라 다른 방법을 찾아 보게 되었다.

Step 1. CFont 변수를 Member Variable로 추가한다.(Private 추천)
Step 2. Class Wizard에서 컨트롤 변수를 선언해준다.
class CPrjNameDlg : public CDialog
{
// Construction
public:
    CFont m_fedit;

// Dialog Data
    //{{AFX_DATA(CBarcodeDlg)
    enum { IDD = IDD_DIALOG_ID };
    CEdit    m_edit;
}

Step 3. OnInitDialog() 에서 Cfont 변수를 CreateFont로 생성한다.
m_fedit.CreateFont(52, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0, DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS,
        "Courier New");
처음의 52는 폰트 크기, FW_BOLD는 폰트 특성(현재 굵게-Bold), 마지막의 "Courier New"는 변경할 폰트 이름이다.

Step 4. Cfont 변수를 원하는 컨트롤에 SetFont 메소드를 이용하여 설정한다.
m_edit.SetFont(&m_fedit);

주의 할 사항은, 지역 변수로 사용하면 CFont 내용이 사라지므로 커서만 커진 채 글씨가 커지지는 않는다.
[링크 : http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=299]


참고 사항으로
한글폰트는 "~체" 라는 것들은 고정폭 폰트이다.
영문폰트는 Courier / Courier New / Lucida Console / Fixedsys 정도?

[링크 : http://www.lowing.org/fonts/]


신고
Posted by 구차니

댓글을 달아 주세요

  1. 퍼가고 싶습니다..?

    퍼갈께요-ㅁ-....

    2009.08.18 11:46 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 이제 막 티스토리 시작을 하셨나보네요 ^^
      다른 포털 블로그를 시작하시다가 티스토리를 하면 가장 힘든게 스크랩의 충동이죠 ㅎ

      그래도 티스토리로 오셨다면 copy에 가까운 펌질보다는 재가공하고 링크를 걸고, 부분인용을 하시는 것을 추천드립니다 ^^

      저의 모토는, 직접해보지 않은 내용은 올리지 않는다 랍니다.

      2009.08.18 11:51 신고 [ ADDR : EDIT/ DEL ]
  2. 흐헙...지송함다..ㅠ_ㅜ
    찾던게 딱하니 나와서 그만..~_~;;

    좋은 충고 감사히 받겠습니다..

    담부턴 안그럴께용ㅠㅠ

    2009.08.18 17:43 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 저도 원래는 네이버 블로그 하다가 티스토리로 넘어 오면서 이러한 점들이 불편했답니다 ㅎ
      그래도 단순퍼가기 보다는 정말 자신의 지식창고를 만들기 위해 노력하시는게 더 좋지 않을까라는 생각에 약간의 조언을 드리려고 한건데 너무 주제 넘지 않았나 모르겠네요 ㅠ.ㅠ

      모르거나 궁금하신거 있으면 성심성의껏 대답해드리도록 노력하겠습니다 ^^

      2009.08.18 18:01 신고 [ ADDR : EDIT/ DEL ]


Ctrl-W 를 눌러,
클래스 위저드에서 다이얼로그 Object를 선택
Messages 에서 PreTranslateMessage를 선택하여
Add Function / Edit Code 를 한 뒤 아래의 코드를 넣어준다.


BOOL ClassName::PreTranslateMessage(MSG* pMsg)
{
     // TODO: Add your specialized code here and/or call the base class
     if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
          return TRUE;
          
     return CDialog::PreTranslateMessage(pMsg);
}

[링크 : http://lafirr.tistory.com/20]
신고
Posted by 구차니

댓글을 달아 주세요

PreTranslateMessage() 를 추가 후에

if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) return TRUE;

를 사용하면 엔터, ESC로 종료되는것을 막을 수 있다.


만약에 Editbox에서 엔터로 입력을 받아들여야 할 경우에는, 위와 같이 하면 인식을 못하게 되므로

CWnd *w;
w = GetFocus();
if (w->GetDlgCtrlID() == IDC_CTRL_ID) ...

이런식으로 특정 포커스에서 인식하도록 연결해주면 될 듯?


[링크 : http://lafirr.tistory.com/20] PreTranslateMessage
[링크 : http://www.dreamy.pe.kr/zbxe/?mid=codeclip&category=5904&document_srl=5958] PreTranslateMessage
[링크 : http://purelab.org/zbxe/?mid=guruin&page=3&document_srl=250] 서브클래싱
신고
Posted by 구차니

댓글을 달아 주세요

MFC에서 RichEdit 라는 녀석이 있다.

바로 요녀석


근데, 추가하고 컴파일 하고 실행하면.. 화면이 안뜬다!!!
이유는 모르겠지만, 해결 방법은

AfxInitRichEdit();

를 적정위치에 넣어주는 것이다.
메인 프로젝트의 컨스트럭터의 TODO에 넣어 주자!

[링크 : http://bear.sage.kr/60]
신고
Posted by 구차니

댓글을 달아 주세요

  1. 반 이상도 못알아 듣는 용어들 속에 아주 친숙한 표현이 하나 있네요. "녀석"

    2009.06.12 18:34 신고 [ ADDR : EDIT/ DEL : REPLY ]

K&R Style
int main(int argc, char *argv[])
{
    ...
    while (x == y) {
        something();
        somethingelse();
        if (some_error)
            do_correct();
        else
            continue_as_usual();
    }
    finalthing();
    ...
}

ANSI Style(Allman Style)
while(x == y)
{
    something();
    somethingelse();
}
finalthing();

BSD KNF Style
while (x == y) {
        something();
        somethingelse();
}
finalthing();

Whitesmiths style
void MyFunc ()
    {
    while (x == y)
        {
        something();
        somethingelse();
        }
 
    finalthing();
    }

GNU Style
static char *
concat (char *s1, char *s2)
{
    while (x == y)
      {
        something ();
        somethingelse ();
      }
    finalthing ();
}

Horstmann style
while (x == y) 
{   something();
    somethingelse();
    //...
    if (x < 0)
    {   printf("Negative");
        negative(x);
    } 
    else 
    {   printf("Positive");
        positive(x);
    }
}
finalthing();



[링크 : http://en.wikipedia.org/wiki/Indent_style]
신고
Posted by 구차니

댓글을 달아 주세요

일반적으로 사용하는 구조체 초기화 방법은 아래와 같다.
struct address {
                 int street_no;
                 char *street_name;
                 char *city;
                 char *prov;
                 char *postal_code;
               };

struct address temp_address =
               { 0,
                 "st. green",
                 "Hamilton",
                 "Ontario",
                 "123-456");

위의 방법은 C89 의 방법이고
C99에서는 아래와 같이 특정변수만 제한적으로 초기화가 가능하다.

struct address {
                 int street_no;
                 char *street_name;
                 char *city;
                 char *prov;
                 char *postal_code;
               };

struct address temp_address =
{ .city = "Hamilton", .prov = "Ontario" };


[링크 : http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic]
신고
Posted by 구차니

댓글을 달아 주세요

libjpeg.a 라는 녀석을 발견하고는 어떻게 생겼나 궁금증이 생겼다.

$ ll libjpeg.a
-rw-r--r-- 1 root root 166012 2007-10-01 23:36 libjpeg.a

$ file libjpeg.a
libjpeg.a: current ar archive

$ nm -A libjpeg.a
libjpeg.a:jcapimin.o:00000330 T jpeg_CreateCompress
libjpeg.a:jcapimin.o:         U jpeg_abort
libjpeg.a:jcapistd.o:         U jinit_compress_master
libjpeg.a:jcapistd.o:000001b0 T jpeg_start_compress
libjpeg.a:jctrans.o:000000c0 t compress_output
libjpeg.a:jctrans.o:         U jinit_c_master_control
libjpeg.a:jcparam.o:000008a0 t add_huff_table
libjpeg.a:jcparam.o:000000e2 r bits_ac_chrominance.3846
... 파일별로 반복
'
U,T,r 등은 symbol type 이라고 하며,
위의 U는 Undefined 을, T는 Text section(code) 을 의미한다.

$ nm --help


$ man nm (DESCRIPTION)


$ ar -t libjpeg.a
jcapimin.o
jcapistd.o
jctrans.o
jcparam.o
jdatadst.o
...

$ ar --help


$ objdump -x libjpeg.a
In archive libjpeg.a:

jcapimin.o:     file format elf32-i386
rw-r--r-- 0/0   2296 Oct  1 23:36 2007 jcapimin.o
architecture: i386, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x00000000

Sections:
SYMBOL TABLE:
RELOCATION RECORDS FOR [.text]:
... 파일별로 반복

$ objdump --help



mangling은 컴파일러에서 이름이 중복되지 않도록 독특한 이름을 지어주는 것으로
C++에서 overloading을 지원하기 하는데 사용되기도 한다고 한다. [링크 : http://rubyeye.kr/]

int _cdecl    f (int x) { return 0; }	//	_f
int _stdcall  g (int y) { return 0; }	//	_g@4
int _fastcall h (int z) { return 0; }	//	@h@4

위키피디아에서 참조한 녀석으로 MS 컴파일러가 C언어 맹글링하는 방식의 예제이다.
[링크 : http://en.wikipedia.org/wiki/Name_mangling]

그리고 이러한 녀석을 원래이름으로 돌려주는 유틸리티로 c++filt가 존재한다.
[참고 : http://kldp.org/node/68410]

$ c++filt --help


신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

indent style  (0) 2009.06.09
C99 구조체 초기화 하기  (0) 2009.05.28
binutils - ar, nm, objdump  (0) 2009.05.26
신기한 코드 사이즈  (0) 2009.05.19
double형을 int 형으로 출력하면?  (0) 2009.05.15
전처리기를 이용한 디버깅용 선언문(#define)  (0) 2009.05.15
Posted by 구차니

댓글을 달아 주세요

8051에서는 for문으로 돌리면 용량이 팍팍 줄어드는데..
x86 intel visual studio 에서 컴파일 하면 용량이 차이가 전혀 나지 않는다

#include "stdio.h"

void main()
{
	int idx = 0;
	char temp = 0xAA;
#if 1
	for(idx = 0; idx < 8;idx ++)
		printf("%d\n",temp & (0x01 << idx));
#else
	printf("%d\n",temp & 0x01);
	printf("%d\n",temp & 0x02);
	printf("%d\n",temp & 0x04);
	printf("%d\n",temp & 0x08);
	printf("%d\n",temp & 0x10);
	printf("%d\n",temp & 0x20);
	printf("%d\n",temp & 0x40);
	printf("%d\n",temp & 0x80);
#endif
}

어찌된게.. for문으로 돌리던, 그냥 하던 4개를 주석처리하던 용량은 똑같은 40,960 바이트이다
자체 압축을 지원한다고 해도 한두바이트 정도는 차이가 나지 않을까 싶긴한데..
그게 아니라면 블럭단위로 저장을 해서 티가 안나는 것일려나.. (정확하게 40KB이다)

 



신고
Posted by 구차니

댓글을 달아 주세요

cinfo.output_gamma [930841904] <- int 형으로 출력
cinfo.output_gamma [1.000000]   <- double 형으로 출력


libjpeg 사용하다 디버그 문장을 제대로 안골라서 발생한 오류 -ㅁ-
신고
Posted by 구차니

댓글을 달아 주세요

Before


void main()
{
int test = 13;
printf("\ntest [%ld:0x%lX]",test,test);
}

After
#define debug_print(name) printf("\n%s [%ld:0x%lX]",#name,name,name);
void main()
{
int test = 13;
debug_print(test);
}

#define debug_print(name) printf("\n%s [%ld:0x%lX]",#name,name,name);
전처리기에서 #name은 name의 내용을 문자열로 치환해주는 역활을 한다.

다른 용법은 아래 참고, ## 라는 용법도 있는데 두개를 하나로 붙여 준다.
[참고 : http://cafe.naver.com/devctrl/1921]
신고
Posted by 구차니

댓글을 달아 주세요