WM_DESTROY 메세지

OS/Windows 2008. 7. 21. 10:18

WM_DESTROY 메세지는 윈도우가 파괴될때 발생합니다.
윈도우가 파괴되는 경우는 Alt+F4, 종료버튼을 누를때 입니다.
특이한 점은 윈도우 구조체가 메모리 해제되고 나서 이 메세지가 발생합니다.
따라서 WM_DESTROY에서 DC를 얻어서 그리기를 시도하면 실패합니다.

윈도우 종료시에 마지막으로 그리기 작업이 필요하다면 WM_CLOSE에서
해주셔야 합니다. 이 메세지는 윈도우 구조체를 메모리 해제하기 바로 전에
발생하는 메세지 입니다. 따라서 DC를 정상적으로 얻을수 있습니다.

WM_DESTROY는 DC와 연관되지 않은 데이터 정리 작업을 하기 좋은 곳 입니다.

posted by 뚱2

Sony HANDYCAM HDR-TG1

뚱2's 이야기 2008. 7. 19. 01:07

울 이쁜 딸 옹알이 끝날까 두려워서 급히 구입한 캠코더
막상 구입하고 정보를 찾아보니 나름데로 잘 선택한듯 합니다.
이젠 늙었는지 사진도 잘 안찍어서 오늘도 여러장 찍을까하다가 2장만 달랑올리네요
배경도 좀 지우고 해야하는데 왜이리 귀찮은거야
아무래도 날씨가 너무 더워서 그런가 봅니다. ㅎㅎ

사용자 삽입 이미지
사용자 삽입 이미지

'뚱2's 이야기' 카테고리의 다른 글

최근에 사용한 문서 지우기  (0) 2008.09.12
Takata04-neo  (0) 2008.08.17
SanDisk Extreme III  (2) 2008.07.19
드디어 노트북 밀었다~~~!!  (0) 2008.06.20
손전화 SCH-B510 구입하다!!  (8) 2008.06.14
posted by 뚱2

SanDisk Extreme III

뚱2's 이야기 2008. 7. 19. 00:27


전 대부분의 사진을 Raw 파일로 찍습니다. 5D에서 한장당 약 12M 정도 되는데
기존의 살때 받았던 2G CF 메모리도는 약 120~130장 정도 나옵니다.
(이렇게 계산하면 2048/12 == 170(?) 그렇지만 사진이 명암에 따라서 그넘의 저장 용량이 제멋데로 변합니다.)
그런데 곧 돌아올 울딸 100일 사진을 찍기에는 적어서 이번에 하나 구입했습니다.
ExtremeIV과 고민을 많이 했는데 안정성은 둘다 비슷하고 결국 속도 차이인데
5D에서 연사속도는 고만고만 해서 III로 선택했습니다.
30MB/s  속도도 충분히 만족합니다.

'뚱2's 이야기' 카테고리의 다른 글

Takata04-neo  (0) 2008.08.17
Sony HANDYCAM HDR-TG1  (0) 2008.07.19
드디어 노트북 밀었다~~~!!  (0) 2008.06.20
손전화 SCH-B510 구입하다!!  (8) 2008.06.14
토요일날 도착한 T61p 8991-CTO  (0) 2008.04.22
posted by 뚱2

간단하지만 유용하게 사용하는 함수입니다.

CCmdTarget::BeginWaitCursor(); // 모래시계중 작업들... CCmdTarget::EndWatiCursor();

저 같은 경우는 MFC로 프로그래밍 할때 중간에 로딩시간이나 소켓통신이 길어질때
사용합니다.

posted by 뚱2

대부분 모달(Modal)은 스택으로 생성을 합니다.
그리고 모달리스(Modeless)는 힙을 사용해서 동적으로 사용을 많이 합니다.
이럴때 모달리스 다이알로그를 종료시키고 다시 실행시켜도 안나타날때가 있습니다.
이건 대부분 힙으로 할당한 모달리스 다이알로그를 해제 안해줘서 그렇습니다.
모달리스 다이알로그의 CWnd::PostNcDestroy()의 가상함수를 만들어서 그 안에서
메모리를 해제 시켜 주면 됩니다.
PostNcDestory() 함수는 윈도우가 소멸된 후 OnNcDestroy함수에 의하여 불려지는 함수입니다.

ps. 모달리스 다이알로그 종료시 메모리 해제 방법은 아래와 같이 해주시면 됩니다.

void CXXXXXXDlg::OnClose() 
{ 
        // TODO: Add your message handler code here and/or call default 
        DestroyWindow(); 
       //CDialog::OnClose(); 
} 

posted by 뚱2

유용한 NETSTAT 명령어

Network 2008. 7. 14. 14:42

소켓프로그램을 개발할때 포트 확인시 유용합니다.

LISTENNING 대기상태인 포트
ESTABLISHED 연결상태인 포트
TIME-WAIT 연결종료 중인 포트 (TCP/IP의 TIME-WAIT 상태)
CLOSED 연결 종료된 포트

NETSTAT [-a] [-b] [-e] [-n] [-o] [-p 프로토콜] [-r] [-s] [-t] [-v] [시간]
  -a 모든 연결 수신 대기 포트를 표시합니다.
  -b 연결 또는 수신 대기 포트를 만드는 관련된 실행 프로그램을
표시합니다. 알려진 실행 프로그램에서 여러 독립 구성 요소를
호스팅하는 경우에는 연결 또는 수신 대기 포트를 만드는
관련된 구성 요소의 시퀀스가 표시됩니다. 이런 경우에는
실행 프로그램 이름이 아래쪽 대괄호 안에 표시되어 있고 위에는
TCP/IP 도달할 때까지 호출된 구성 요소가 표시되어 있습니다.
옵션은 시간이 오래 걸릴 있으며 사용 권한이 없으면
실패합니다.
  -e 이더넷 통계를 표시합니다. 옵션은 -s 옵션과 같이 사용될
있습니다.
  -n 주소 포트 번호를 숫자 형식으로 표시합니다.
  -o 연결의 소유자 프로세스 ID 표시합니다.
  -p 프로토콜 지정한 프로토콜에 해당되는 연결을 표시합니다. 프로토콜은
TCP, UDP, TCPv6 또는 UDPv6 하나입니다. -s 옵션과 함께
사용하여 프로토콜별 통계를 표시할 경우 프로토콜은 IP, IPv6,
ICMP, ICMPv6, TCP, TCPv6, UDP 또는 UDPv6 하나입니다.
  -r 라우팅 테이블을 표시합니다.
  -s 프로토콜별로 통계를 표시합니다. 기본값으로 IP, IPv6, ICMP,
ICMPv6, TCP, TCPv6, UDP UDPv6 관한 통계를 표시합니다.
기본값의 하위 집합을 지정하는 -p 옵션을 사용할 있습니다.
  -t 현재의 연결 오프로드 상태를 표시합니다.
  -v  -b 옵션과 함께 사용하면 모든 실행 프로그램에 대한 연결
또는 수신 대기 포트를 만드는 관련된 구성 요소의 시퀀스를
표시합니다.

'Network' 카테고리의 다른 글

[KT EGG] 스트롱에그 KWD-B2600  (0) 2012.09.20
[Ping] KT 핑 테스트  (0) 2012.06.30
[Util] Ping Test Easy  (0) 2012.04.06
아이피 위치 확인 하는 방법  (0) 2012.02.07
hosts 파일 수정  (0) 2011.09.22
posted by 뚱2
warning C4013: 'XXXXX' undefined; assuming extern returning int
요로코롬 생긴 warning이 뜰때가 있습니다. 뭐 컴파일 제대로 되고 실행시켜도 제대로 됩니다.
그렇지만 warning!! 이게 찝찝하죠... ^^;

우선 warning은 외부 어딘가에 선언은 되어 있는데 선언을 안하고 사용해서 그렇습니다.
그래서 선언이 없어니까 컴파일러가 알아서 대~~~충 int return 한다고 가정하는
것입니다.

대부분의 경우는 선언된 .h파일이 인클루드 되어 있는지 확인해 보면은 인클루드가 안되있는
경우입니다.
posted by 뚱2
개발하면서 이것 저것 많이 깔았다가 지우기를 반복...
내가 알수 없는 서비스에러가 나버렸다..... ㅡㅡ;
인터넷 신공으로 찾아봐서 고칠수 있기는 한것 같지만...
노트북이 느려진것 같기도 해서... 밀어버리고
그리하여 이번에는 고스트로 백업해버렸다...

1. 윈도우만 인스톨 후 --> 고스트 백업
2. 드라이버 잡고        --> 고스트 백업
3. 윈도우 업데이트     --> 고스트 백업

아직까지는 여기인데 이제 슬슬 개발툴 깔고 다시 백업 들어가야겠다.
그런데 IExplorer7 무겁긴 무겁네....
IE6과 확실한 속도차이를 보여준다.

현재 쓰는 노트북 CPU 펜린 T9300인데도 차이가 난다.

PS. 이번에 새로나온 FireFox3를 깔아보았습니다. 정말 Wow!!! 입니다.
      속도도 정말 빠르고 공개 소프트 웨어라서 그런지 다양한 Add-On 프로그램도
      존재 합니다. 다만 국내의 ActiveX 때문에 발목을 잡네요... 특히 인터넷뱅킹...
      당분간은 IE를 써야 할 것 같습니다. 선전해라!!! FireFox

'뚱2's 이야기' 카테고리의 다른 글

Sony HANDYCAM HDR-TG1  (0) 2008.07.19
SanDisk Extreme III  (2) 2008.07.19
손전화 SCH-B510 구입하다!!  (8) 2008.06.14
토요일날 도착한 T61p 8991-CTO  (0) 2008.04.22
무선랜으로 날씨 알려주는 우산  (0) 2008.04.21
posted by 뚱2
3주전.... 술먹고 핸드폰 잃어버리고
마침 iPhone 나올지도 모른다는 소문에 참고 기다리다
아무래도 안나올 듯하여 이리 저리 알아보니...
다 3G 폰이라 번호도 교환해야 하고 마음에 드는 전화기도 없고
그러다가 발견했습니다. 두둥!!!
전부터 한번 꼭 써보고 싶었던 바타입의 전화기 ...
가볍고 얇은게 너무 마음에 드네요..
오래 오래 아끼면서 사용해야겠습니다.

ps. 어디서 구입했냐는 질문이 많아서 링크 걸어둡니다. 참고로
     전 여기와 전혀 관계가 없습니다.
    ( http://itempage3.auction.co.kr/DetailView.aspx?itemNo=A506793603&frm3=V2 )

사용자 삽입 이미지
사용자 삽입 이미지

'뚱2's 이야기' 카테고리의 다른 글

SanDisk Extreme III  (2) 2008.07.19
드디어 노트북 밀었다~~~!!  (0) 2008.06.20
토요일날 도착한 T61p 8991-CTO  (0) 2008.04.22
무선랜으로 날씨 알려주는 우산  (0) 2008.04.21
캘리포니아 와우 부도  (1) 2008.04.15
posted by 뚱2

저는 MFC에서 폼베이스로 작업할때 주로 리소스 창에서 컨트롤 대충 그려넣고
서브클래싱할 클래스 하나씩 만들어주고
컨트롤 클래스의 SubClassDlgItem() 함수를 이용해서 서브클래싱합니다.
오늘 아주 간단한 리스트컨트롤을 클릭하면 세부내용을 다른 에디트 컨트롤에
뿌려주는 부분을 작성했습니다.
서브클래싱한 컨트롤의 OnClick을 잡고서 아래와 같이 코딩했습니다.

void CSMSList::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
    // TODO: Add your control notification handler code here
    NM_LISTVIEW *pList = (NM_LISTVIEW*)pNMHDR;
    int nIndex = pList->iItem;
    *pResult = 0;
}


분명히 리스트에서 클릭한 아이템의 인덱스를 가져와야 하는데 이상하게 자꾸 -1로
나오더군요.. ㅠㅠ

그러다 알아냈습니다.
네~~~ 맞습니다. 결국 또 저에 실수 입니다.

서브클래싱한 컨트롤의 PreSubclassWindow() 에서 아래와 같이 코딩해주니 바로 해결
됬습니다.

void CSMSList::PreSubclassWindow() 
{
    // TODO: Add your specialized code here and/or call the base class
    SetExtendedStyle(LVS_EX_FULLROWSELECT);
    CListCtrl::PreSubclassWindow();
}



PreSubclassWindow() 함수는 SubClassDlgItem()으로 서브클래싱 했을때 초기화 해주는
멤버 함수입니다.
SetExtendedStyle() 함수는 확장 스타일 함수로 LVS_EX_FULLROWSELECT를 인자로
클릭시 리스트 한줄전체(Row)가 선택되어 집니다.

위와 같이 코딩했더니 OnClick함수에서 제대로 인텍스를 얻어왔습니다.
아~!! 오늘도 하나 실수했고 한가지 배웠습니다.

posted by 뚱2

윈도우의 일반적인 컨트롤은 기능에 중점을 준것이기 때문에
모양새가 별로이다.
그럴때 색상을 변경할때 많이 사용하는게 WM_CTRCOLOR 이다.
static, Edit의 배경색을 바꿀때 요긴하다.

WM_CTLCOLOR 메세지는 컨트롤의 부모가 받는다.

조건 : 바꾸고자 하는 Edit의 ID --> IDC_EDIT_USERID
         컨트롤의 부모는           --> CDemoDlg

1. 부모인 CDemoDlg의 WM_CTLCOLOR을 등록한다.
2. 메세지 핸들러를 클래스 위져드로 등록하면 컨트롤의 부모는

HBRUSH CDemoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
    // TODO: Change any attributes of the DC here
    // 새로 작성한 부분
    if ( pWnd->GetDlgCtrlID() == IDC_EDIT_USERID )
    {
        pDC->SetBkColor( RGB(249, 225, 155) );
        pDC->SetBkMode( OPAQUE );

        return m_brText;
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
}


특이한것은 변경하고자 하는 컨트롤의 리턴 HBRUSH는 hbr과 다른 것을
리턴해야 한다.
그렇지 않고 그냥 return hbr 을 리턴하면 색상이 변경되지 않는다.

ps. m_brText는 CBrush로 생성자에서 m_brText.CreateSolidBrush( RGB(249, 225, 155) )로
     생성해줬습니다.

posted by 뚱2
보통 메뉴는 CMainFrame에 있습니다.
그래서 클래스 위져드에서 UPDATE_COMMAND_UI를 이용해서
만들어 주면은 아래와 같은 모양의 함수가 생성됩니다.

OnUpdateXXXXXXXX(CCmdUI* pCmdUI) { }

보통 위 합수에서
OnUpdateXXXXXXXX(CCmdUI* pCmdUI) { pCmdUI->Enable( TRUE ); // 활성화 pCmdUI->Enable( FALSE ); // 비활성화 }

해주면 메뉴의 항목이 활성/비활성 되는데

제가 이번에 만든건 특수하게 CTreeCtrl을 상속받아서 만든 객체에서 팝업메뉴를
만들었더니 'pCmdUI->Enable( FALSE );'를 아무리 해도 안되더라구요
CMenu::EnableMenuItem  함수를 사용해서 활성/비활성을 해줬습니다.
함수의 자세한 사용법은 아래에 ^^;

ps. EnableMenuItem() 함수는 TrackPopupMenu() 함수 전에 호출해 줘야 합니다.

CMenu::EnableMenuItem

UINT EnableMenuItem( UINT nIDEnableItem, UINT nEnable );

Return Value

Previous state (MF_DISABLED, MF_ENABLED, or MF_GRAYED) or –1 if not valid.

Parameters

nIDEnableItem

Specifies the menu item to be enabled, as determined by nEnable. This parameter can specify pop-up menu items as well as standard menu items.

nEnable

Specifies the action to take. It can be a combination of MF_DISABLED, MF_ENABLED, or MF_GRAYED, with MF_BYCOMMAND or MF_BYPOSITION. These values can be combined by using the bitwise OR operator. These values have the following meanings:

  • MF_BYCOMMAND   Specifies that the parameter gives the command ID of the existing menu item. This is the default.

  • MF_BYPOSITION   Specifies that the parameter gives the position of the existing menu item. The first item is at position 0.

  • MF_DISABLED   Disables the menu item so that it cannot be selected but does not dim it.

  • MF_ENABLED   Enables the menu item so that it can be selected and restores it from its dimmed state.

  • MF_GRAYED   Disables the menu item so that it cannot be selected and dims it.

Remarks

Enables, disables, or dims a menu item. The CreateMenu, InsertMenu, ModifyMenu, and LoadMenuIndirect member functions can also set the state (enabled, disabled, or dimmed) of a menu item.

Using the MF_BYPOSITION value requires an application to use the correct CMenu. If the CMenu of the menu bar is used, a top-level menu item (an item in the menu bar) is affected. To set the state of an item in a pop-up or nested pop-up menu by position, an application must specify the CMenu of the pop-up menu.

When an application specifies the MF_BYCOMMAND flag, Windows checks all pop-up menu items that are subordinate to the CMenu; therefore, unless duplicate menu items are present, using the CMenu of the menu bar is sufficient.


posted by 뚱2

받자마자 비스타 10분 정도 사용해보고 바로 밀어버렸습니다.
풀옵션으로 구입해서 그런지 성능도 좋고 발열도 적습니다.
다만 간헐적으로 고주파음이 하드에서 들립니다.
여기에 SSD만 달아주면 정말 완벽할텐데... 그넘의 가격과
용량이 발목을 잡습니다.

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

제품 스펙은 여기 http://ddoong2.com/entry/Thinkpad-T61p-8891-CTO

'뚱2's 이야기' 카테고리의 다른 글

드디어 노트북 밀었다~~~!!  (0) 2008.06.20
손전화 SCH-B510 구입하다!!  (8) 2008.06.14
무선랜으로 날씨 알려주는 우산  (0) 2008.04.21
캘리포니아 와우 부도  (1) 2008.04.15
Thinkpad T61p 8891-CTO  (0) 2008.04.14
posted by 뚱2

이번에 프로그램 개발하면서 2주동안 삽질 한 것 입니다. ㅡㅡ;
분명히 Dialog 에서는 잘 되는 TVN_BEGINDRAG 메세지가
FormView에서만 하면 메세지가 먹통이 되는 것입니다.
그리고 컨트롤의 SubclassDlgItem 함수도 안되구요.....
그래서 엄청 삽질 하다가 제가 결정적 실수 한걸 알았습니다.

Dialog에서는 대부분 OnInitDialog에서 컨트롤을 초기화 해줍니다.
그런데 FormView에서는 OnInitDialog가 없어서 전 OnCreate에서 작업해 줬습니다.
이게 문제였던 것입니다.
아직 FormView의 모든것이 생성되기도 전에 안에서 자식 컨트롤들의 작업을 했던게
문제가 발생한 원인이었습니다. (네 ~~~~ 저 초보 맞습니다. ㅠㅠ)

결론으로 해결책은 FormView에서는 OnInitUpdate라는 함수가 있습니다.
여기에서 각각의 컨트롤 들을 초기화 해주면 Dialog와 같이 사용 하실수 있습니다.

ps. SubclassDlgItem을 이용해서 서브클래싱을 하면 서브클래싱한 컨트롤 클래스는
     PreSubclassWindow 에서 초기화 작업을 해주셔야 합니다.
posted by 뚱2
아래 방법은 원격일때의 방법 입니다.
로컬에서는 2, 3번만 하면 됩니다.

1. 우편번호정보 텍스트파일을 계정에 ftp 업로드
2. 텔넷 접속 상태에서 다음과 같이 입력하셔 mysql 에 접속하신 후에
    >>mysql -u 아이디 -p 아이디 
    >>비밀번호입력
3. load data local infile '/home/hosting_users/아이디/test.txt' into table 테이블명;
   * '/home/hosting_users/아이디/test.txt' 부분은 알맞게 변경하세요.

posted by 뚱2
사용자 삽입 이미지

날씨 우산은 컨셉트 형태부터 시제품까지 다양하게 시도되는 아이디어 상품 가운데 하나다. 날씨 우산은 예전부터 꽤 자주 소개되었는데 요즘 다시 해외 블로그 쪽에서 관심을 보이고 있다. 날씨 우산의 핵심은 무선랜을 이용해 날씨 정보를 자동 파악, 손잡이에 불이 들어오게 하는 것이다. 날씨에 따라 색상을 달리 해 외출할 때 현관에서 날씨 파악이 가능하도록 했다. 실제 판매된 건 아니지만 이 정도면 스테디셀러형 아이디어 컨셉트인 셈.
이승준 아이템티비 기자

ps. 캬~ 아이디어 정말 굿~~~!! 입니다. 현관에 놓아 두면 출근할때 확인하고 가져가면 되겠네요
     그런데 내구성은 얼마나 될지~~

'뚱2's 이야기' 카테고리의 다른 글

손전화 SCH-B510 구입하다!!  (8) 2008.06.14
토요일날 도착한 T61p 8991-CTO  (0) 2008.04.22
캘리포니아 와우 부도  (1) 2008.04.15
Thinkpad T61p 8891-CTO  (0) 2008.04.14
Samsung SSD  (0) 2008.04.03
posted by 뚱2
사용자 삽입 이미지

어제 갑자기 어머니께 전화를 받았습니다. 운동을 하러 캘리포니아 와우(이하 CWX)에
가셨는데 강남점 입구앞에 사람이 모여서 웅성웅성 하고 있어서 살펴봤더니.....
부도가 나서 당황한 사람들이 모여있었다고 합니다.
  저역시 여기 평생회원권을 끊은 사람이고 제 집사람 어머니 이렇게 3명이 끊은
회원비만 해도 700만원 ㅡㅡ;
뭐 다른건 둘째치고 부도가 나기 바로 전날에도 회원을 받았다고 합니다.
이런 악질적인 경우가....
물론 CWX 매니저분들도 피해자 입니다. 몇달치 월급을 못받았다고
하고 전혀 몰랐다고 하네요 한마디로 경영진이 먹고 날랐다는 말인데
사실 이런경우 최종 부도가 나면 돈을 환급받기는 힘들다고 합니다.
전 돈보다도 이제 어디서 운동을 할지...
아무튼 조속히 처리되었으면 합니다.

ps. 혹 부도난 회원권을 파는 경우가 발생할지도 모르겠는데... 속지마세요

'뚱2's 이야기' 카테고리의 다른 글

토요일날 도착한 T61p 8991-CTO  (0) 2008.04.22
무선랜으로 날씨 알려주는 우산  (0) 2008.04.21
Thinkpad T61p 8891-CTO  (0) 2008.04.14
Samsung SSD  (0) 2008.04.03
살리에르 증후근  (0) 2008.03.04
posted by 뚱2

Thinkpad T61p 8891-CTO

뚱2's 이야기 2008. 4. 14. 10:31
사용자 삽입 이미지

이번에 구입한 Lenovo Thinkpad T61p 8891-CTO 입니다.
제품 스펙은

MODEL

T61p 8891-CTO

CPU

Intel Core2 Duo T9300 (2.5GHz)

RAM

2GB DDR2 667 SDRAM 2DIMM (최대 4GB)

L2 CACHE

6MB

LCD

14.1인치 TFT

RESOLUTION

SXGA+ (1,400 x 1,050)

VGA

nVIDIA Quadro FX 570M

VRAM

128MB

HDD

160GB (S-ATA, 7,200rpm)

OPTICAL DRIVE

DVD 슈퍼멀티

POINTING DEVICE

울트라나브 (트랙포인트, 터치패드)

AUDIO

HD Audio, 스테레오 스피커

MODEM

56Kbps

LAN

10/100/1000Mbps Ethernet

WIRELESS

802.11a/g/n, 블루투스, 적외선

SLOT

Type II x 1 PCMCIA

INTERFACE

USB(2.0) x 3, VGA, 헤드폰, 마이크

BATTERY

6셀, 리튬이온

SIZE

311 x 255 x 26.6mm

WEIGHT

2.32kg (배터리 포함)


비슷한 사양 (T61p 8892-A15) 국내 제품과 가격차이가 있어서 A/S 무시하고 미국에서
구입했습니다.
다른건 둘째치고 착한 가격이 마음에 드네요
와이드가 대세라고는 하지만 제가 하는일에는 기존의 4:3 비율 적합하다는 판단하에
14.1인치로 구입했습니다.
사실 와이드 노트북에서 자판옆에 공백이........ ㅡㅡ;
참을수가 없었습니다.
이제 받아보는 일만 남았습니다. ^^;

'뚱2's 이야기' 카테고리의 다른 글

무선랜으로 날씨 알려주는 우산  (0) 2008.04.21
캘리포니아 와우 부도  (1) 2008.04.15
Samsung SSD  (0) 2008.04.03
살리에르 증후근  (0) 2008.03.04
간단하게 원 그리기  (2) 2008.02.22
posted by 뚱2

Samsung SSD

뚱2's 이야기 2008. 4. 3. 10:12
사용자 삽입 이미지

삼성에서 업계 최초로 64G SSD를 출시했습니다.
제품의 성능은 Write 60MByte / Read 40MByte의 성능입니다.
현재는 Write 100MByte / Read 120MByte 의 제품이 출시되어 있습니다.

여기서 잠깐!!
* SSD란 ? Solid State Disk의 약자로 기존의 물리적인 하드와 다르게 낸드플레쉬를 이용해서
  데이타를 저장하는 방식입니다.

장점!!
1. 메모리 저장 방식이기때문에 물리적인 충격에 강하다.
   그렇기에 이동이 잦은 노트북이나, 안전을 우선생각하는 서버플렛폼에 좋다는 생각이네요
2. 하드보다 전력 소비 적다.
   역쉬 노트북에 좋을 듯한 장점
3. 무게도 가볍다... 쇳덩이 보다 가벼운게 당연??
   이것도 역시 노트북에 좋을 듯한 장점이네요
4. 빠른 억세스 타임
   기존의 서버용 15000RPM하드 보다도 빠른 성능입니다. 아무래도 서버플렛폼에 좋겠네요

단점!!
1. 겁나게 비싸다.
   관심있어서 이베이좀 찾아봤더니 64G짜리가 1000불이다. ㅡㅡ;
2. 용량이 적다
   물론 날이가면 갈수록 기술력 향상으로 늘려가겠지만 지금 주력은 32G이고
   그나마 삼성이 이번에 64G를 출시했다.

위와 같은 장점과 단점으로 인해서 요즘 기술력을 과시하고 싶은 노트북 제조사들은
플레그쉽 모델에 SSD를 장착해서 나옵니다. 그 예가 맥북에어와 레노보 싱크패드 X300
대표적이라고 할 수 있습니다.
그렇지만 SSD 가격만 근 100만원 ㅡㅡ;
90년대로 돌아가는 것도 아니고 이거 원~~~ 아직은 일반 소비자에게는 시기상조인듯 합니다.
다만 지금 여러 업체가 개발과 시판을 계획 중이거나 하고 있기에 내년 후반기에는
제 기준으로 현실적인 가격으로 되지 않을까합니다.

'뚱2's 이야기' 카테고리의 다른 글

캘리포니아 와우 부도  (1) 2008.04.15
Thinkpad T61p 8891-CTO  (0) 2008.04.14
살리에르 증후근  (0) 2008.03.04
간단하게 원 그리기  (2) 2008.02.22
MTF 차트 보는 법  (0) 2008.02.20
posted by 뚱2

1. SS_NOTIFY (Static의 인자)
   : 서브 클래싱한 컨트롤 클래스에 SS_NOTIFY를 지정하면 해당 컨트롤이 메세지를 받을수
   있습니다.
   SS_NOTIFY를 추가하는 방법은 Resource View에서 컨트롤 속성 --> Style --> Notify를
   체크해도 되고
   PreSubclassWindow() 함수를 오버라이드 해서
   ::SetWindowLong()함수를 사용해서 설정을 변경해 주어도 됩니다.

2. Reflection Message
  : 대부분의 컨트롤은 컨트롤의 배경이나 색상을 부모 윈도우가 변경할 수 있도록 통지 메세지를
    부모윈도우에게 보낸다.
    그런데 MFC4.0부터 이러한 통지 메세지를 부모 윈도우뿐만 아니라 컨트롤 자체에서 처리 할
    수 있도록 추가된 기능이다.
    클래스 위져드를 띄워보면 =WS_XXXX 란 메세지가 Reflection Message 이다.


참고자료 : MFC 정복

posted by 뚱2
이번 회사 프로젝트 진행중 스레드 안에서 컨트롤을 생성해야 하는 일이 생겼는데
해결도 못하는 시스템 오류가 ㄷㄷㄷ....

결국 사용자 정의 메세지를 사용하기로 했습니다.

1. 메세지를 정의한다
:
 윈도우 자체적으로 WM_USER 라는 사용자가 정의해서 사용 할 수 있는 메세지가 있습니다.
 WM_USER+1, WM_USER+2 이렇게 사용합니다.
 그렇지만 좀더 멋드러지게 사용하고 싶다면...
#define WM_MY_MESSAGE     WM_USER+1

  
이렇게 정의해서 사용하시면 좀더 폼납니다. ^^;
메세지는 보통 따로 헤더파일을 연결해서 사용하기도 하고
전역적으로 사용하고 싶으면 StdAfx.h에 선언합니다.

2. 실제 사용할 윈도우 객체의 메세지 멤버함수를 정의합니다.
:

 
 //{{AFX_MSG(CThreadDlg)
 // Generated message map functions
virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 afx_msg void OnDestroy();
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 afx_msg void OnClose();
 //}}AFX_MSG
afx_msg LONG OnMyMessage(UINT wParam, LONG lParam);
 DECLARE_MESSAGE_MAP()

위에 보시면 헤당 .h 파일의 클래스 안에 선언해 줍니다.
//{{AFX_MSG(CThreadDlg)
...
//}}AFX_MSG
위 안에는 선언하지 마세요 주석으로 보이지만 이건 클래스 위져드가 사용하는
코드입니다. 여기 잘 못 선언해 주시면 클래스 위져드가 알아져 지우거나 위져드 상에서
다른 코드들이 안보이는 불상사가 발생합니다.
그래서 저 같은 경우는
//}}AFX_MSG 여기 다음줄에 선언해 줍니다.
그리고 .cpp 파일에 위에서 선언한 사용자 정의 함수를 정의해 줍니다.

3. .cpp 파일의 메세지 맵에서 연결해 줍니다.

BEGIN_MESSAGE_MAP(CThreadDlg, CDialog)
 //{{AFX_MSG_MAP(CThreadDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_WM_DESTROY()
 ON_WM_LBUTTONDOWN()
 ON_WM_CLOSE()
 //}}AFX_MSG_MAP
 ON_MESSAGE(WM_CREATEVS, OnCreateVS)
END_MESSAGE_MAP()

보시면 알겠지만 2번과 같이 여기도  //}}AFX_MSG_MAP 다음에 선언해주세요

4. 실제 사용은 SendMessage() 함수나, PostMessage() 함수를 이용해서 해주시면 됩니다.



  
posted by 뚱2

이번에 프로젝트를 하면서 전역객체를 사용할 일이 생겼었습니다.
전역객체로 진행하던중 이왕이면 디자인패턴을 사용해보자!!!
그래서 싱글턴을 이용해 보려고 합니다.

* Singleton Patterns ::
   해당 클래스의 인스턴스가 한개만 생성해서 그 인스턴스를 전역객체 처럼 어디서든지
   사용 할 수 있게 하는 디자인패턴입니다.

// Singleton.h
class CSingleton
{
private:
    static CSingleton * m_pUniqueInst;
    CSingleton();

public:
    ~CSingleton();
    static CSingleton & GetInstance();
};

// Singleton.cpp
#include "Singleton.h"

// static 초기화
CSingleton* CSingleton::m_pUniqueInst = NULL;

CSingleton::CSingleton()
{
}
CSingleton::~CSingleton()
{
    if (m_pUniqueInst)
        delete m_pUniqueInst;
}
CSingleton & CSingleton::GetInstance()
{
    if (m_pUniqueInst == NULL)
        m_pUniqueInst = new CSingleton;

    return *m_pUniqueInst;
}



간단하게 만들어본 싱클턴입니다.
GetInstance() 멤버 함수가 static으로 선언되어 있기 때문에 아무곳에서나
호출 가능합니다. 그리고 생성자가 private로 선언되어 있기때문에 CSingleton의
인스턴스를 만들려고 하면은 컴파일 에러가 발생합니다.


ps. 위 싱글턴은 싱글스레드 용입니다. 멀티스레드에서는 문제가 생길수 있습니다.

posted by 뚱2

이번에 개발하는 프로그램에서 Log 파일을 기록하려고 CLogFile이라는 클래스를 하나
만들었습니다.
그런데 이 클래스는 스레드문제로 인해서 제가 생성자에서 InitializeCriticalSection(&m_csKey)
소멸자에서 DeleteCriticalSection(&m_csKey)을 호출 합니다.
그리고 생성자에서 여러가지 작업을 해야 합니다.
그러니까 생성자 소멸자는 전역적으로 한번만 호출하고 실제 로그 파일을 기록하는 멤버 함수
SetLog() 함수만 필요한 곳에서 호출 하는 방법 입니다.
그렇게 위해서는 결국 전역 적으로 클래스의 인스턴스를 생성해야 했습니다.

그래서 결국 쓴 방법이

StdAfx.h 에서
extern CLogFile g_LogFile;
이라고 선언해 줬습니다.

그리고
StdAfx.cpp에서
CLogFile g_LogFile
이렇게 정의 해주고

필요한 곳의 파일마다 StdAfx.h을 인클루드 해서 사용하는 방법으로 해결봤습니다.
우선 테스트 하기로는 잘 되네요

ps. 조금 불편하더라도 StdAfx.h StdAfx.cpp에서 작성하는게 찜찜하다면 해당 .cpp
      파일에서 CLogFile g_LogFile; 해주시고 사용하실려는 .cpp 파일에서
      extern CLogFile g_LogFile이라고 해주셔도 됩니다.

posted by 뚱2

살리에르 증후근

뚱2's 이야기 2008. 3. 4. 09:46
이번주 주말에 무한도전을 봤는데 거기서 정형돈씨가 '살리에르 증후군'이라는 하더군요.
영화 '아마데우스'를 보면 궁중 음악가로 살리에르가 나오는데 그는 당대의 최고의 음악가였습니다. 그는 자신이 언제나 최고라고 생각하고 있는 사람이었습니다.
그런데 그는 갑자기 나타는 모짜르트를 보면서 그의 천재성에 충격을 받습니다.
인정하지 못하지만 모짜르트가 천재라는 것을 느낀 것이죠~
아마도 이런 상황을 살리에르 증후근이라고 하는 것 같습니다.

아마도 대부분의 사람들은 살리에르 중후근을 느끼고 살아갈것 같습니다.
저 또한 정말 너무 너무 많이 느끼면서 살아가고 있습니다.
어렸을때는 어떤것이든 될수 있을 거라는 환상을 가지고 살아갑니다. 그렇지만 일년 이년
나이를 먹어감에 따라서 자신의 능력의 한계를 알게되고 또 조금씩 포기하게 됩니다.
저도 그런 방황하던 시기가 있었습니다.
그렇지만 그중에 깨닳은건 결국 일등은 혼자 되는 것이 아니라는 것 입니다.
일등이 있다는 것은 뒤에 이등, 삼등 여러 다른 사람이 있기에 가능한거죠
물론 저도 일등이 되고 싶고 노력하겠지만 지금 제 자신의 위치에서 최선을 다한 것만으로도
충분한 가치가 있다고 믿습니다.

'뚱2's 이야기' 카테고리의 다른 글

Thinkpad T61p 8891-CTO  (0) 2008.04.14
Samsung SSD  (0) 2008.04.03
간단하게 원 그리기  (2) 2008.02.22
MTF 차트 보는 법  (0) 2008.02.20
캐논의 EOS의 뜻은???  (0) 2008.02.20
posted by 뚱2

MFC에서 자동으로 소스를 생성하다보면 .h 파일에

#if !defined(AFX_SVRRSDLG_H__B0E12C65_26A3_4782_8556_8AE0D6107F9C__INCLUDED_)
#define AFX_SVRRSDLG_H__B0E12C65_26A3_4782_8556_8AE0D6107F9C__INCLUDED_

// 소스 ...

#endif


위와 같은 소스 비스무리하게 생긴다..
위 예제에서 defined를 찾아볼수 있는데 defined는 #define 되어 있는지 확인하는 연산자이다.
대부분 중복 컴파일 방지를 위해서 사용한다.

posted by 뚱2

[MFC] HitTest()

C/C++/VC++ / MFC 2008. 3. 3. 11:05

대부분 끌어서 놓기 동작(Drag And Drop)을 수행할 때에 끌기(Drag) 대상 항목을
현재 위치에 사용할 수 있는지를 결정하는 용도로 가장 많이 사용됩니다.

MFC의 컨트롤 중에 HitTest() 메소드가 있는 컨트롤들이 있습니다.
현재 선택된 항목(찍힌 위치의 대상)의 정보를 알수 있는 용도로 사용합니다.

각 컨트롤 마다 HitTest()의 세부 항목이 다르기 때문에 자세한 사항은 MSDN 참고하면
됩니다.

posted by 뚱2

사용자 삽입 이미지















CTreeView와 CTreeCtrl의 Hierarchy Chart 입니다.

CTreeView 안에는 CTreeCtrl& GetTreeCtrl( ) const; 로선언된 클래스 멤버 함수가
있습니다. 결국 CTreeCtrl 클래스를 Document-View 구조에서 CTreeCtrl의 사용을 쉽게
해주는 클래스 입니다.

CTreeView 클래스를 사용하기 위해서는
#include <afxcview.h>를 인클루드 해야 합니다.
posted by 뚱2

간단하게 원 그리기

뚱2's 이야기 2008. 2. 22. 22:18

 오늘 포토샵으로 원하나 그리는데 너무 삽질을했네요 정말 아는 만큼만 사용하는 것 같습니다.

사용자 삽입 이미지
1.선택툴(점선으로 된 사각형)을 선택합니다.
















오른쪽 클릭해보면은 원을 선택할수 있습니다.


사용자 삽입 이미지
2. 원을 선택합니다.
















그리고 이미지에는 빠졌는데 당연히 캔버스에 원하는 사이즈만큼 선택합니다. 다만 그냥 선택하면 타원이 되고 Shift 키 누르고 선택하면은 동그란 원이됩니다.

사용자 삽입 이미지
그리고 나서
3. Edit -->Stroke를 선택합니다.





































사용자 삽입 이미지
그럼 왼쪽과 같이 세부 선택사항 박스가 뜹니다.

4. 굵기와 색상을 선택해주세요
   저는 1px에 Red로 했습니다.



































사용자 삽입 이미지
그럼 짜잔 이렇게 동그란 원이 그려집니다.











'뚱2's 이야기' 카테고리의 다른 글

Samsung SSD  (0) 2008.04.03
살리에르 증후근  (0) 2008.03.04
MTF 차트 보는 법  (0) 2008.02.20
캐논의 EOS의 뜻은???  (0) 2008.02.20
제가 좋아하는 말~~  (0) 2008.02.20
posted by 뚱2

초보 DLL 사용하기

OS/Windows 2008. 2. 21. 16:48

DLL (Dynamic Linking Library) 입니다.
우선 초보인 제 입장에서는 만들기도 힘들고
가져다 쓰기도 힘드네요 ㅡ,.ㅡ;

우선 개념을 잡자면...

DLL 소스를 컴파일 하면은 .lib와 .dll이 생성됩니다.
    1.  .h는 컴파일 과정에서 필요합니다. 함수나 클래스의 선언이 되어 있어야지 컴파일 되겠죠...
    2.  .lib는 링크 과정에서 필요합니다. 이유는 정적 lib는 링크과정에서 포함되어서 .exe파일이 만들어
        집니다. 그렇지만 Dll의 lib는 링크과정에서 어디 어디 무슨 파일이 있는지 실행위치 같은 정보가
        들어있어서 링크되어 지는 것입니다.
    3. dll은 런타임 과정(실행시)에서 필요합니다.

.h는 필요한곳에 선언해서 사용하고
.lib는 #pragma comment나 Project -> Setting에서 설정해주시면 됩니다.
.dll은 찾는 순서
    1. 클라이언트 프로그램(EXE)을 포함하는 디렉토리
    2. 현재 작업 디렉토리
    3. 윈도우 시스템 디렉토리
    4. 윈도우 디렉토리
    5. Path 환경변수에 설정된 디렉토리
에서 찾을수 있습니다.
보통 개발할때는 저는 1번을 많이 이용합니다.

posted by 뚱2

MTF 차트 보는 법

뚱2's 이야기 2008. 2. 20. 19:25
사용자 삽입 이미지
 
이미지는 http://www.canon-ci.co.kr 에서 발췌했습니다.

렌즈를 성능을 객관적으로 볼 수 있는 MTF(Modulation Transfer Function) 챠트 입니다.
처음 보면은 어리둥절 합니다. 뭐가 뭔지 저도 렌즈에 관심을 가지고 찾아보다가 알게되었습니다.

1. 세로는 광학적 성능이라고 할 수 있습니다. 0.8 이상이면 광학적 성능이 아주 좋다고 할 수
   있습니다.
2. 가로는 0(이미지 DSLR에서는 CCD, CMOS 중앙, SLR에서는 필름 중앙) --> 주변부의 길이
   라고 할 수 있습니다. 대부분이 크롭바디 이니까 13mm 까지 보시면 됩니다.
   1:1으로는  18mm까지 봐야하겠네요.
3. 위에 그래프에서 붉은 실선은 조리개 F8.0에서 렌즈 성능이고 파란실선은 최대개방에서의
   성능입니다.
4. 왼쪽 차트는 줌렌즈시 최대 광각 MTF 차트이고 오른쪽은 망원 MTF 챠트입니다.
5. 점선은 같은색 실선과의 비교 정도로 사용합니다. 그냥 참고 정도로만 보시면 됩니다.
posted by 뚱2