티스토리 툴바


£ Smart Phone2010/07/04 22:22

PNG

 

PNG 파일은 90 * 90 사이즈의 32비트 그래픽 형식이어야 합니다. 이 PNG 파일을 아이콘을 바꾸고자 하는 프로그램 폴더에 복사해두세요.

 

레지스트리

 

사용하시는 레지스트리 편집기를 이용해서 HKLM-Security-

Shell-StartInfo-Start 로 이동합니다.

Start 왼쪽에 있는 + 표시를 클릭하면 하위 키들이 나오는데 하위 키들의 이름이 윈도우 시작 메뉴에 있는 바로가기 이름입니다.

그 중에 바꾸고자 하는 하위키, 즉 xxxx.lnk 라고 써져있는 키를 클릭하면 우측 창에 이 키에 등록되어 있는 값들이 나타납니다.

우측에 있는 값 들 중에 Icons 라고 하는 값이 PNG 아이콘이 있는 곳의 위치를 보여줍니다. 이 Icons 의 값을 아까 복사해둔 PNG 파일의 경로로 변경해줍니다.

 

 


출처 : http://cafe.naver.com/neogames/302

Posted by navitago
£ Programing2009/05/20 09:18

작성자: 박재성 (http://discount77.com/blog/ospace/, ospace114@empal.com)

"메시지 처리에 대해서 잘 알고 있다면 다음 내용이 필요 없다."

MFC에서 기본적인 위도우 프레임웍이 설계되어 있고 그 곳에 맞게 필요한 코드를 넣어주면 된다.
프로그래밍에 있어서 가장 중요한게 자원 할당과 해제이다. 특히 C++에서는 메모리 관리를 프로그래머가 직접해주기 때문에 잘못된 메모리 관리는 시스템 전체에 안좋은 영향을 준다.

MFC에서  가장 무식하게 자원 할당과 해제를 하는 경우를 보면 생성자와 소멸자에 하는 경우이다. 실제 직접 생성자와 소멸자에 코딩하는 경우는 드물고 포인터 변수를 NULL로 초기화하는 정도이다.

그럼 MFC에서 실제 API 호출 순서를 보자. 응용프로그램 형태 중에서 대화상자를 중심으로 살펴보겠다.


Case 1) 대화상자 뛰우고 [X] 버튼  눌러 종료하기

Warning: no message line prompt for ID 0x8003.
[CD1Dlg] PreInitDialog()
[CD1Dlg] OnInitDialog()
[CD1Dlg] OnClose()
[CD1Dlg] OnCancel()
[CD1Dlg] OnDestroy()
[CD1Dlg] PostNcDestroy()
[CD1Dlg] OnNcDestroy()

Case 2) 대화상자 뛰우고 "Cancel"  버튼 눌러 종료하기

Warning: no message line prompt for ID 0x8003.
[CD1Dlg] PreInitDialog()
[CD1Dlg] OnInitDialog()
[CD1Dlg] OnCancel()
[CD1Dlg] OnDestroy()
[CD1Dlg] PostNcDestroy()
[CD1Dlg] OnNcDestroy()

Case 3) 대화상자 뛰우고 "Ok" 버튼 눌러 종료하기

Warning: no message line prompt for ID 0x8003.
[CD1Dlg] PreInitDialog()
[CD1Dlg] OnInitDialog()
[CD1Dlg] OnDestroy()
[CD1Dlg] PostNcDestroy()
[CD1Dlg] OnNcDestroy()

* 처음

위의 경우를 살펴보면, 처음 시작시 호출되는 함수가,

PreInitDialog()
OnInitDialog()

두 함수가 기본적으로 호출이 된다. OnInitDialog 함수는 많이 익숙한 이름이다. 대화상자에 가장 기본적인 초기화 코드를 넣는 함수이다.

(함수라는 용어보다 메소드, API, 멤버 함수등을 적합한 이름을 선택해야되는데 편의상 쉽게 이해하기 위해서 함수로 통일한다.)

** 중간

그리고 종료하는 종류에 따라서 중간에 호출되는 함수가 달라진다.

[X]와 "Cancel" 버튼을 눌렀을 경우에 공통적으로 OnCancel 함수가 호출된다. 단, [X] 버튼을 눌렀을 경우 추가로 OnClose 함수가 호출된다.
간혹 OnClose 함수가 대화상자 닫히는(Close) 경우로 착각해서 이 곳에 넣는 경우가 있다. 나도 그런 적이 있었다. 위의 함수 호출 순서에 나왔듯이 OnClose 함수는 경우에 따라서 호출되지 않은다.
"Ok" 버튼을 눌렀을 경우는 역기서는 별다른 함수 호출이 없다. 필요하다면 OnOk 함수 정도 정의하면 된다.

*** 끝

종료하는 경우는 살펴보자.

OnDestroy()
PostNcDestroy()
OnNcDestroy()

세 종류의 함수가 호출된다. OnDestroy 함수는 메시지 핸들러로 WM_DESTROY 메시지를 수신하면 호출된다.
PostNcDestroy 와 OnNcDestroy 는 함수 재정의에 의해서 사용된다.
종료시 가장 많이 사용하는 함수가 OnDestroy와 OnNcDestroy 함수이다.
본인이 선호하는 것은 OnDestroy 함수이다. OnNcDestroy()는 함수를 재정의 해줘야하며 메시지 종료 (WM_DESTROY)에 의해서 종료될 경우 해당 자원 해제를 확인하는데 직관적이지 않기 때문이다.



소멸자와 생성자 사용에 대해서

앞의 예제를 실제 코드로 간략히 살펴보면, Class CD1Dlg 정의는 되어 있다고 가정한다.

CD1Dlg dlg; // (1)
if(dlg.DoModal() > 0) {
  // Ok
} else {
  // Cancel
}

와 같이 동작한다. 위의 코드에서 대화상자를 객체화하는 부분(1)를 저장해두었다가 필요시 호출해서 사용할 수 있다. 즉 다음과 같다.

if(m_pDlg == NULL) {m_pD1Dlg = new CD1Dlg; }
if(m_pD1Dlg->DoModal() > 0) {
  // Ok
} else {
  // Cancel
}

위와 같이 바뀌면 앞에서 초기화하는 부분

PreInitDialog()
OnInitDialog()

그리고, 종료하는 부분

OnDestroy()
PostNcDestroy()
OnNcDestroy()

이 호출하지 않는다고 생각할 수 있다. 근데, 전혀 그렇지 않다.
대화상자 DoModal함수 호출이 초기화하는 부분을 불러오게 된다.

PreInitDialog()
OnInitDialog()

종료하는 부분도 마찬가지이다. 그러면 대화상자 객체를 저장하는 이유는 뭘까?
대화상자를 빈번히 호출하면서 초기화가 오래걸리는 객체를 대화상자에 갖고 있다면, 한번 초기화한 후에 그 결과 객체를 계속 보관하고 필요시 가져와서 사용하면 성능 향상에 도움이 될 것이다.
(주! 이 부분은 여러 방법으로 가능하기 때문이 반드시 대화상자에 객체를 저장할 필요는 없다.)

그때 생성자에서 해당 객체를 생성하고 소멸자에서 해당 객체를 제거하면된다. 그러면 대화상자 뛰우고 종료하는 과정에서는 해당 객체가 사라지지 않는다.


덧글: MSDN도 참고 했지만 시간관계상 재 검토는 하지 않아서 틀린 부분도 있을 것이라 사료된다. 틀린 부분이 있거나 더 좋은 방법이 있다면 필히 메일로 내용을 보내주기 바란다. 좋은 프로그램 많이 만들기 바란다.

Posted by navitago
TAG MFC
£ Programing2009/03/20 15:34
One

void SetBacklightRequirement(BOOL fBacklightOn)
{
// The name of the backlight device.
TCHAR tszBacklightName[] = TEXT("BKL1:");

static HANDLE s_hBacklightReq = NULL;

if (fBacklightOn)
{
if (NULL == s_hBacklightReq)
{
// Turn the backlight on by setting the requirement that the backlight device
// must remain in device state D0 (full power). Replace D0 with D4 (zero power) to
// turn the backlight off.
s_hBacklightReq = SetPowerRequirement(tszBacklightName, D0, POWER_NAME, NULL, 0);

if (!s_hBacklightReq)
RETAILMSG(1, (L"SetPowerRequirement failed: %X\n", GetLastError()));
}
}
else
{
if (s_hBacklightReq)
{
if (ERROR_SUCCESS != ReleasePowerRequirement(s_hBacklightReq))
RETAILMSG(1, (L"ReleasePowerRequirement failed: %X\n", GetLastError()));

s_hBacklightReq = NULL;
}
}
}


Two

SystemIdleTimerReset();
keybd_event(VK_LBUTTON, 0, KEYEVENTF_KEYUP|KEYEVENTF_SILENT, 0);
Posted by navitago
TAG WinCE
£ Windows2009/03/20 15:28

Posted by navitago
£ Programing2009/03/10 10:57
SYSTEMTIME st;
 ::GetLocalTime(&st);

Posted by navitago
TAG TIME, WinCE
£ Storage2009/03/09 12:07




Posted by navitago
£ Windows2009/03/08 15:49

Extended ASCII Code Table

Posted by navitago
£ Storage2009/02/23 08:13
£ Linux2007/10/31 10:20

# vi /etc/sysconfig/network

NETWORK=yes

HOSTNAME=COM1.seojune.com

DOMAINNAME=seojune.com

 

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.0.1

NETMAST=255.255.255.0

NETWORK=192.168.0.0

BORADCAST=192.168.0.255

ONBOOT=yes

TYPE=Ethernet

 

# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=dhcp

ONBOOT=yes

TYPE=Ethernet

 

# ifconfig eth1up

 

# vi /etc/modules.conf

alias eth0 8139too

alias eth1 8139too

 

# modprobe 8139too                             #  modprobe 모듈명 :  모듈 올리기

# lsmod                                              #  rmmod 모듈명    : 모듈 내리기

# modprobe eth0

# modprobe eth1

 

#vi /etc/sysconfig/network

...                                   

FORWARD_IPV4 = yes                         <- ip 마스커레이드 설정 (인터넷 공유)

:wq                                 

                                      

#vi /etc/sysctl.conf                                      

...                                   

net.ipv4.ip_forward=1                              

:wq                                 

 

# modprobe ipt_MASQUERADE

# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# iptables -L -t nat

#cat /proc/sys/net/ipv4/ip_forward                                       # 패킷 전송확인 1:전송  0:실패

            

#vi /etc/HOSTNAME                                    

#vi /etc/hosts                                      

#/etc/rc.d/init.d/network restart

# vi /etc/rc.d/rc.local

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Posted by navitago
£ Linux2007/10/14 04:41

터치패드를 사용하지 않는 방법을 알아 냈습니다.

위에서 처럼 여러 줄을 추가하는 것이 아니라
다음 한 줄만 마우스 부분에 추가 하면 되더군요.
Option "SHMConfig" "true"

즉 /etc/X11/xorg.conf의 마우스 부분은 원래 다음과
같았습니다.
Section "InputDevice"
Identifier "Synaptics"
Driver "synaptics"
Option "Device" "/dev/input/mice"
Option "Protocol" "auto-dev"
Option "Emulate3Buttons" "yes"
EndSection

이것을 다음과 같이 바꿨습니다.
Section "InputDevice"
Identifier "Synaptics"
Driver "synaptics"
Option "Device" "/dev/input/mice"
Option "Protocol" "auto-dev"
Option "Emulate3Buttons" "yes"
Option "SHMConfig" "true"
EndSection  
 
그리고 재부팅 후 다음과 같이 하면 터치패드를 사용안하게 됩니다.
synclient TouchpadOff=1
다시 사용하려면 다음과 같이 하면 됩니다.
synclient TouchpadOff=0 

Posted by navitago