Programming/C Win32 MFC2009. 6. 22. 15:57

int nCount = m_var1.GetCount();
if (nCount > 0)
 m_var1.SetCurSel(nCount - 1);

간단하게 구현되는데, 깔끔하지는 않다.
(무조건 마지막꺼를 선택하게 해서 강제로 스크롤 되기 때문에, 중앙에 놔두었을때 멈춰있지 못하다)

[링크 : http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesnative/thread/9e54372f-c784-4c8f-ab4c-adc6bbe8810a]

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

CTreeCtrl - 트리구조로 데이터 넣어주기  (0) 2009.07.13
CFile / CTime  (0) 2009.06.23
MFC PreTranslateMessage() 리턴값의 의미  (0) 2009.06.17
signed type의 %X 출력  (0) 2009.06.17
CEdit Multiline사용시 개행 방법  (0) 2009.06.17
Posted by 구차니
Programming/C Win32 MFC2009. 6. 17. 16:26
PreTranslateMessage() 는, 키를 먼저(Pre) 해석해서 처리하는 메소드이다.
아래의 내용처럼, 내부에서 처리할 것 들 다 처리하고

return TRUE;
를 할 경우에는 0이 아닌 값이므로, 더 이상 처리하지 않고,

return FALSE;
일 경우에는 0이므로 계속 처리를 하도록 한다.

Return Value
Nonzero if the message was translated and should not be dispatched;
0 if the message was not translated and should be dispatched.

[링크 : http://msdn.microsoft.com/en-us/library/kkbhxcs2(VS.80).aspx]

[발견 : http://a.tk.co.kr/252]
Posted by 구차니
Programming/C Win32 MFC2009. 6. 17. 14:58
char 형의 변수를
Format("%02X");
로 출력을 했더니 0xFFFFFFFF 이런식으로 출력이된다. OTL
내가 원한건 0xFF 이런식!


해결책 : char 형 변수를 BYTE로 선언해준다.
            BYTE는 unsigned char 형으로 선언되어 있고, 이로 인해 의도한대로 출력이 될 것이다.

[링크 : http://kuaaan.tistory.com/58]
Posted by 구차니
Programming/C Win32 MFC2009. 6. 17. 14:21
CEdit에서는 DOS 답게, CR/LF로 개행을 한다.
그런 이유인지 모르겠지만?


아무튼 multiline을 설정했을때, 개행을 하기 위해서는
"\n"이 아니라 "\r\n"을 해주어야 한다.

위는 \n
아래는 \r
Posted by 구차니
Programming/C Win32 MFC2009. 6. 17. 14:15

여기 Edit Properties에 Auto VScroll을 선택해주면 스크롤은 되는데 실제로 작동하지는 않는다.
내용이 추가 될 때 마다, 마지막 줄로 스크롤을 이동해주기 위해서는 다음의 코드를 사용하면된다.

CEdit editctrl;
int len;

len = editctrl.GetWindowTextLength();
editctrl.SetSel(len, len);

터미널 프로그램에서 처럼 일시적으로 스크롤을 하지 않게 하려면, 다른 편법이 필요 할 듯 하다.
(예를 들어 GetScrollPos 라던가 해서 가장 아래가 아니면 SetSel을 해주지 않는다던가?

[링크 : http://www.codeguru.com/forum/showthread.php?t=318921]
Posted by 구차니
Programming/C Win32 MFC2009. 6. 15. 17:25
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 구차니
Programming/C Win32 MFC2009. 6. 15. 17:06

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 구차니
Programming/C Win32 MFC2009. 6. 15. 10:21
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 구차니
Programming/C Win32 MFC2009. 6. 12. 13:47
MFC에서 RichEdit 라는 녀석이 있다.

바로 요녀석


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

AfxInitRichEdit();

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

[링크 : http://bear.sage.kr/60]
Posted by 구차니
Programming/C Win32 MFC2009. 6. 9. 22:20
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 구차니