자료2007. 3. 10. 17:57
MOUSEDOWN과 MOUSEMOVE를 이용할 수도 있지만, 다음과 같은 한 줄이면 됩니다.


원하는 영역이 클릭되었을 때 다음 함수를 호출하면 됩니다-


::SendMessage(AfxGetMainWnd()->m_hWnd,
          WM_NCLBUTTONDOWN,HTCAPTION,0);



MFC의 경우 위와 같고, 다른 경우에도 최상위 윈도우에 같은 메시지를 전송하면 됩니다.

---

WM_NCLBUTTONDOWN은 wParam으로 주어진 곳의 Non-Client영역을 클릭했을 때

클라이언트 영역을 클릭한 듯한 효과를 내며,

wParam이 HTCAPTION이므로 타이틀바를 클릭한 듯한 효과를 냅니다.


다음은 wParam으로 가능한 다른 값들 중 일부입니다.


HTTOP : 크기조정 가능한 윈도우의 위쪽 경계
HTBOTTOM : 크기조정 가능한 윈도우의 아래쪽 경계
HTLEFT : 크기조정 가능한 윈도우의 왼쪽 경계
HTRIGHT : 크기조정 가능한 윈도우의 오른쪽 경계
HTTOPLEFT : 크기조정 가능한 윈도우의 왼쪽 위 경계
HTTOPRIGHT : 크기조정 가능한 윈도우의 오른쪽 위 경계
HTBOTTOMLEFT : 크기조정 가능한 윈도우의 왼쪽 아래 경계
HTBOTTOMRIGHT : 크기조정 가능한 윈도우의 오른쪽 아래 경계

HTMINBUTTON , HTREDUCE: 최소화 버튼
HTMAXBUTTON, HTZOOM : 최대화 버튼
HTCLOSE : 닫기 버튼
HTMENU : 메뉴
HTSYSMENU : 시스템 메뉴
HTCLIENT : 클라이언트 영역

Posted by jongwook
자료2007. 3. 10. 12:38

방화벽같은데서 특정포트 접속이 막힌 경우 사용할 수 있는 소스


 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>
#include <fcntl.h>
#include <string.h>
#include <map>

std::map<int, bool> Sessions;

void * clnt_up(void *);
void * clnt_down(void *);

struct Address
{
 int server;
 int client;
};

void error_handling(char *message)
{
 fputs(message, stderr);
 fputc('\n', stderr);
 exit(1);
}

int nonblock(int fd, int nblockFlag) {
 int flags; flags = fcntl( fd, F_GETFL, 0);
 if ( nblockFlag == 1 )
  return fcntl( fd, F_SETFL, flags | O_NONBLOCK);
 else
  return fcntl( fd, F_SETFL, flags & (~O_NONBLOCK));
}


int main(int argc, char **argv)
{
 pid_t  pid;
 if (( pid = fork()) < 0) exit(0);
 else if(pid != 0)  exit(0);
 chdir("/");
 setsid();  

 int serv_sock=socket(PF_INET, SOCK_STREAM, 0);

 struct sockaddr_in serv_addr;
 memset((char *)&serv_addr, 0, sizeof(serv_addr));
 serv_addr.sin_family=AF_INET;
 serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
 serv_addr.sin_port=htons(~~~);

 struct sockaddr_in connect_addr;
 memset((char *)&connect_addr, 0, sizeof(connect_addr));
 connect_addr.sin_family=AF_INET;
 connect_addr.sin_addr.s_addr=htonl(~~~~);
 connect_addr.sin_port=htons(~~~);


 int option=1;
 setsockopt(serv_sock,SOL_SOCKET,SO_REUSEADDR,&option,sizeof(option));

 if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1) {
  error_handling("bind() error");
  return 0;
 }

 if(listen(serv_sock, 5)==-1) {
  error_handling("listen() error");
  return 0;
 }

 struct sockaddr_in clnt_addr;
 int clnt_sock;
 int clnt_addr_size;
 pthread_t thread;
 Address address;

 int connection;

 while(1){
  clnt_addr_size=sizeof(clnt_addr);
  clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr,(socklen_t *)&clnt_addr_size);

  connection=socket(PF_INET, SOCK_STREAM, 0);
 
  if(connect(connection, (struct sockaddr*)&connect_addr, sizeof(connect_addr))!=0)  {
   close(clnt_sock);
   continue;
  }

  address.server=connection;
  address.client=clnt_sock;

  Sessions[connection]=1;
  Sessions[clnt_sock]=1;

  pthread_create(&thread, NULL, clnt_up, (void*)&address);
  pthread_create(&thread, NULL, clnt_down, (void *)&address);


  sleep(1);
 }

 return 0;
}

void * clnt_up(void * args) {
 Address *address=(Address *)args;
 int server=address->server;
 int client=address->client;

 char * buf[256];
 int recvd=-1;

 nonblock(client,1);
 
 while(true) {
  while(recvd==-1) {
   recvd=read(client,buf,256);
   usleep(10000);
  }
  write(server,buf,recvd);
  if(recvd==0) break;
  recvd=-1;
 }
 
 Sessions.erase(client);
 Sessions[server]=0;
 close(client);
}

void * clnt_down(void * args) {
 Address *address=(Address *)args;
 int server=address->server;
 int client=address->client;

 char * buf[256];
 int recvd=-1;
 
 nonblock(server,1);

 while(Sessions[server]) {
  while(recvd==-1 && Sessions[server]) {
   recvd=read(server,buf,256);
   usleep(10000);
  }
  write(client,buf,recvd);
  if(recvd==0) break;
  recvd=-1;
 }
 Sessions.erase(server);
 close(server);
}



~~~로 된 부분에 알맞은 포트와 서버주소를 넣으면 된다- 리눅스용.
Posted by jongwook
자료2007. 3. 10. 01:58

인터넷검색으로 받은 메트로놈 프로그램이

켜놓고 딴짓하면 열라 버벅인다=ㅁ= 촹나서 30초만에 만든 소스ㅋㅋ

#include <windows.h>
#include <conio.h>
#include <stdio.h>

void main() {
 while(!kbhit()) {
  puts("\x07");
  Sleep(750);
 }
}



속도조절은 Sleep함수의 인자를 조절하면 되고 아무키나 누르면 꺼지는 콘솔프로그램이다.
Posted by jongwook
자료2007. 2. 8. 00:56

Thinkpad T41에 비스타 깔기

처음에 T41에 깔아보려다가 제대로 실패했습니다=_=

(T41사양 : ATI Radeon 9000 Mobile, 1.60MHz, 512MB, 60GB)

설치까진 어떻게든 됐는데, ATi에서 Radeon 9000 Series의 지원을 끊어버린 상태라

Vista용 드라이버를 구할 수 없더군요 ;;

화면보호기설정만 들어가도 D3D에러라면서 꺼지고;

억지로 XP껄로 설치해보려 했으나 블루스크린만 계속 ;ㅁ;

파티션해놨더니 완전복구도 안돼서-_-; AS센터에 맡겨버렸습니당;;

T41가지고계신분들 Vista포기하세요;ㅋㅋ



데탑에 비스타 깔기

그래서 데탑에 깔기로 했지요 !ㅎㅎ

데탑 상황은

Intel Celeron D 3333MHz
512MB PC3200 RAM
150GB, 250GB, 80GB Hdd
ATi Radeon 9600GT

였습니다. 램이 Vista를 겨우 받쳐줄 정도라서 거금을 들여 1GB 메모리를 사버렸습니다;ㅁ;

메모리가격 점점싸진다고는 하지만 ; 급한마음에 ㅎㅎ

이제 램도 1.5GB가 되어 준비완료 !

다행히 네오폴더에서 받은 이미지는 부팅가능한것이더군요-

DVD부팅을 해야 첫번째 하드를 포맷하고 설치할수가있어서 그렇게 했습니당

삼보컴퓨터 처음 살때 들어있던 복구용 파티션까지 다 날려버리구 Vista를 깔았더랬죠 ㅎㅎ

설치는 40분 정도 걸렸습니다. DVD부팅으로 해서 좀더 느렸을지도 모르겠어요 ;


설치완료되고 처음 봤을때 처음 든 생각은 "와 이쁘다 !"였어요 ㅎ

투명한 창에, 무진장 이뻐진 그림들,, '아주 큰 아이콘'기능 이용하면 더 이뻐요 ㅋㅋ

기본으로 Radeon 9600의 드라이버가 설치되어 있더군요 !

Catalyst 드라이버를 설치하고 등급을 받아보니 아래와 같았습니다.


메모리가 PC3200이라 마음에 안드나봐요;ㅁ; 그래픽도 AGP중엔 제일 좋은편인데도 2점대 ;;

참 까칠한 운영체제라고 생각됩니다 ㅋㅋ



Vista 억지로 정품인증받기 !


햄종형이 보내준 크랙유틸입니다ㅎ 설명서대로 진행하면 정품인증을 받을 수 있어요ㅎ

주의할점은 tokens.dat파일을 완전히 덮어씌워야 한다는 점입니다.

이름바꾼채로 두면 제어판 모든 프로그램에 대한 동작을 무시해버리는-_-;현상이 나타납니다 ;;

설치에 필요한 CD키는 아래 주소에서 msn아이디를 입력하면 받을 수 있습니다-

http://www.microsoft.com/windowsvista/PCTrialResults1.aspx?s=151&refer=/windowsvista%

ko-KR의 user32.dll.mui를 explorer.exe프로세스에서 쓰고있는 모양인지

덮어쓰기가 잘 안되서 설치CD로 부팅해서 복구콘솔에서 해버렸어요-ㅁ-;

더 간편한 방법이 있을것같은데 잘 모르겠군요 ;




Vista 그림판의 새로운 기능

저는 그림판을 사랑합니다 ㅎㅎ 그림판을 주제로 논문까지 쓸 정도였으니까요 ㅋㅋ

Vista가 나왔다는 건 그림판 5.1에서 그림판 6.0으로 업데이트된 기분이잖아요?ㅎ

XP에서 다양한 파일포맷 지원으로 한층 편리해진 그림판은 Vista에 들어서 더 아름다워졌어요-

제가 파악한 추가된 기능은 다음과 같습니다.

< 1. 확대/축소 기능의 다양화 >

기존 1,2,4,6,8배 확대만 되던 것에서 스크롤하는 것으로 축소까지 가능하게 되었습니다.


메뉴에서 확인해보면 12.5%~800% 까지임이 보입니다.

축소기능은 수백만화소를 웃도는 요즘 디카사진들에 대한 배려로 생각되는군요ㅎ


< 2. 자르기 >

선택된 부분만 남기고 자르는 기능이 생겼습니다.

이전에는 이 기능을 위해서 선택영역 저장(Alt+E+O)을 이용하거나

선택영역을 적절히 이동하고 그림 크기를 변경하는 방법밖에 없었는데, 편리해졌군요.

특히 이번처럼 화면캡쳐해서 특정부분만 잘라낼 때 매우 효과적입니다ㅎ


< 3. 선택영역 저장에 파일 포맷 추가 >

이전까지는 선택영역 저장(Alt+E+O)에서는 bmp파일로만 저장할 수 있었는데,

이젠 jpg, gif, tiff, png 등 다양한 포맷으로 저장하는 것이 가능해졌습니다.

선택영역 저장의 최대 단점이 극복되었군요ㅎ


< 4. 선택영역 반전 기능 추가 >

선택영역 반전 기능이 추가되었습니다.

특정부분을 선택하고 나머지를 지우거나 할 때 사용할 수 있겠군요ㅎ


< 5. 실행 취소 횟수 3회 -> 10회로 증가 >

제목 그대로입니다. 256회 이런것까진 아니지만 훨씬 편하겠군요 ㅎㅎ



다양한 모습으로 발전한 그림판이 반갑기만 한데요ㅎ

하지만 아직 안고쳐진게 더 많아요 ㅠ

1. 가장 큰 문제 - 아래의 보통 jpg 사진이 안열립니다-_-;
비스타 쓰시는분은 한번 저장해서 그림판으로 열어보세요.
xp에선 잘만 열리던 파일이 안열립니다 -_-; (수철샘 죄송 ;;)



2. 화면 일부분이 선택된 상태에서 Ctrl+Z시 제대로 실행취소되지 않는 경우가 생김
이건 xp에서도 그랬는데 안고쳐졌네요;

3. jpg로 저장할때 번지르르하게 저장되는 현상
그래서 저는 png파일을 애용한답니다ㅎ

4. 무진장 어이없는 오타?
위 스샷에서 볼수있듯이 메뉴에서 보기 -> 확대/축소 -> 사용자 지정에 보면
100%로 나와야 할 부분이 120%로 나옵니다-_-;
베타테스트를 그렇게오랫동안 해놓고 저거하나 못잡다니 ;;안습


흠 이상 그림판 6.0의 리뷰였습니다 ~

부록으로 그림판 팁을 말씀드리자면요,

브러시나 지우개 상태에서 컨트롤 + 키패드의 +키 누르면

메뉴에있는것 이상으로 브러시 크기가 커질 수 있습니다- 무지커지면 재밌어요 ㅋㅋ





비스타에서 카트라이더하자 !

비스타에서 카트 홈페이지에 접속하면 넥슨 매니저를 설치중에 오류가 발생합니다.

자동으로 넘어간 안내 페이지에서 복구 프로그램을 실행해도 설치중에 멎어버리는데요ㅎ

복구 프로그램을 저장한 뒤 오른쪽 클릭->관리자 권한으로 실행 하면

홈페이지에서 카트라이더를 실행할 수 있습니다 ㅋㅋ

세이버SR갖고싶어요 ㅠㅠㅋㅋ




외워라가 실행이 안되는데 어떡하죠ㅠ?

http://bin.myfolder.net/story/79495

이 사이트에서 외워라 실행에 필요한 ActiveX 컨트롤을 다운로드하시면 실행이 됩니다 !

오늘도 100개 외웠어요 윤구횽 ㄳ ㅋㅋ




Posted by jongwook
자료2007. 2. 7. 23:57

Dirac Delta Function [[\delta(x-a)]]은 다음과 같은 성질을 갖는 함수로 정의된다.


1. [[\delta(x-a)=0]] for [[x\ne a]]
2. 적분구간이 a를 포함하면 [[\int \delta(x-a) dx = 1 ]]이고, 아니면 0이다.


위 정의에 따라, 임의의 함수 [[f(x)]]에 대해 다음 성질을 가짐이 자명하다.
3. [[\int f(x) \delta (x-a) dx = f(a) ]]


[[ f(x) }} 와 Delta Function의 미분과의 곱의 적분은 Delta Function이 일반적인, 날카로운 peak를 가진 함수라고 생각하고 이해하면 된다.
4. [[\int f(x) \delta ' (x-a) dx = -f' (a)]]


독립변수 [[x]]에 대한 함수 [[f(x)]]가 인수로 주어진 Delta Function은, 다음 규칙에 따라 변형될 수 있다.
5. [[\delta (f(x)) = \sum _i \frac 1 { \left | \frac {df} {dx} (x_i) \right | } \delta (x - x_i)]]
여기서 [[f(x)]]는 simple zero인 [[x_i]]을 갖는다고 가정한다.


1차원 이상일 떄는, 각 차원으로의 Delta Function을 곱한 것으로 정의한다. 3차원의 경우 직교좌표에서,
6. [[\delta ( \vec x - \vec X ) = \delta ( x_1 - X_1 ) \delta (x_2 - X_2) \delta(x_3 - X_3)]]
으로 정의되고, 이 함수는 [[\vec x = \vec X]]인 점을 제외한 모든 구간에서 0이다. 또한 다음 조건을 만족한다.


7. [[\int _V \delta ( \vec x - \vec X ) d^3 x = \left { { \text { } 1 \text {     if V contains } \vec x = \vec X \\ \text { } 0  \text {    if V does not contain } \vec x = \vec X} ]]




와 TeX재밌땅 ㅋㅋㅋ
Posted by jongwook