'serahero'에 해당되는 글 346건

  1. 2007/12/14 로그클래스
  2. 2007/12/13 블로그 개설 1년.. (2)
  3. 2007/12/11 Registry wrapping class (2)
  4. 2007/12/06 COM 실습 - 바로가기, 태스크바 (6)
  5. 2007/12/06 LineTo 구현
  6. 2007/12/05 API - TIP
  7. 2007/12/05 자바 소스 보기 Class => java 로..
  8. 2007/12/05 Red/Black Tree
  9. 2007/12/04 COM - 기본( 등록, 사용 )
  10. 2007/12/04 대체와 대처의 뜻

블로그 개설 1년..

from 잡담 2007/12/13 23:55 view 20156
처음엔 디비 프로젝트 때문에 dblab.co.kr 이 생겼고,

그 다음엔 그냥 공부하는거서 모아 둘려고 계속 유지 하고는 있긴 한데..

어느덧 1만 히트~
사용자 삽입 이미지
구글 검색을 통해선 들어온 사람들이 많다.

대부분 자료검색을 위해 들어온 분들이다. 좋은 정보 얻어 갔을려나.. 댓글이 없다-_-... 암튼 내년에는 2만히트를

바라보면서 더 열심히 공부하자.. 아나 서버는 언제 만들지.ㅠ_ㅠ..

Registry wrapping class

from Study/API 2007/12/11 21:24 view 22108
1. Registry.h
/** \file Registry.h
**    \date  2007/12/11
**    \author kimjunju@hotmail.com
**/

#pragma once

/**    \class CRegistry
    \brief 레지스트리를 관리하는 클래스
*/


/** \ingroup  UTIL */

class CRegistry
{
public:
    CRegistry(void);
    virtual ~CRegistry(void);
public:
    BOOL Open(HKEY rootKey, LPCTSTR subKey);
    BOOL Close(void);

    BOOL CreateKey(HKEY rootKey, LPCTSTR subKey);
    BOOL DeleteKey(HKEY rootKey, LPCTSTR subKey);

    BOOL SetValue(LPCTSTR valueName, LPCTSTR value);
    BOOL SetValue(LPCTSTR valueName, DWORD value);
    BOOL SetValueForMultiSz(LPCTSTR valueName, LPCTSTR value, DWORD byteLength);

    BOOL GetValue(LPCTSTR valueName, LPCTSTR value, LPDWORD bufferLength);
    BOOL GetValue(LPCTSTR valueName, LPDWORD value);

    BOOL DeleteValue(LPCTSTR valueName);
private:
    HKEY    mRootKey;
    BOOL    mIsOpened;
};

2. Registry.cpp
#include "stdafx.h"
#include "Registry.h"

CRegistry::CRegistry(void)
{
    mRootKey    = NULL;
    mIsOpened    = FALSE;
}

CRegistry::~CRegistry(void)
{
}

BOOL CRegistry::Open(HKEY rootKey, LPCTSTR subKey)
{
    if (!subKey)
        return FALSE;

    if (mIsOpened)
        return FALSE;

    if (RegOpenKey(rootKey, subKey, &mRootKey) != ERROR_SUCCESS)
        return FALSE;

    mIsOpened = TRUE;

    return TRUE;
}

BOOL CRegistry::Close(void)
{
    if (RegCloseKey(mRootKey) != ERROR_SUCCESS)
        return FALSE;

    mIsOpened = FALSE;

    return TRUE;
}

BOOL CRegistry::CreateKey(HKEY rootKey, LPCTSTR subKey)
{
    if (!subKey)
        return FALSE;
   
    if (mIsOpened)
        return FALSE;

    if (RegCreateKey(rootKey, subKey, &mRootKey) != ERROR_SUCCESS)
        return FALSE;

    mIsOpened = TRUE;

    return TRUE;
}

BOOL CRegistry::DeleteKey(HKEY rootKey, LPCTSTR subKey)
{
    if (!subKey)
        return FALSE;

    if (RegDeleteKey(rootKey, subKey) != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL CRegistry::SetValue(LPCTSTR valueName, LPCTSTR value)
{
    if (!valueName || !value)
        return FALSE;

    if (!mIsOpened)
        return FALSE;

    if (RegSetValueEx(mRootKey, valueName, 0, REG_SZ, (BYTE*) value, (DWORD) _tcslen(value) * sizeof(TCHAR))
        != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL CRegistry::SetValueForMultiSz(LPCTSTR valueName, LPCTSTR value, DWORD byteLength)
{
    if (!valueName || !value)
        return FALSE;

    if (!mIsOpened)
        return FALSE;

    if (RegSetValueEx(mRootKey, valueName, 0, REG_MULTI_SZ, (BYTE*) value, byteLength)
        != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL CRegistry::SetValue(LPCTSTR valueName, DWORD value)
{
    if (!valueName)
        return FALSE;

    if (!mIsOpened)
        return FALSE;

    if (RegSetValueEx(mRootKey, valueName, 0, REG_DWORD, (BYTE*) &value, sizeof(DWORD))
        != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL CRegistry::GetValue(LPCTSTR valueName, LPCTSTR value, LPDWORD bufferLength)
{
    DWORD ValueType = 0;

    if (!valueName || !value || !bufferLength)
        return FALSE;

    if (!mIsOpened)
        return FALSE;

    if (RegQueryValueEx(mRootKey, valueName, 0, &ValueType, (BYTE*) value, bufferLength)
        != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL CRegistry::GetValue(LPCTSTR valueName, LPDWORD value)
{
    DWORD    ValueType        = 0;
    DWORD    BufferLength    = sizeof(DWORD);

    if (!valueName || !value)
        return FALSE;

    if (!mIsOpened)
        return FALSE;

    if (RegQueryValueEx(mRootKey, valueName, 0, &ValueType, (BYTE*) value, &BufferLength)
        != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL CRegistry::DeleteValue(LPCTSTR valueName)
{
    if (!valueName)
        return FALSE;

    if (!mIsOpened)
        return FALSE;

    if (RegDeleteValue(mRootKey, valueName) != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

COM 실습 - 바로가기, 태스크바

from Study/COM 2007/12/06 16:58 view 24907
1. 바로가기

more..



2. Taskbar

more..

Tag |

LineTo 구현

from Study/C언어 2007/12/06 16:53 view 25146
- Bresenham algprothm
- 0.5를 더해서 반올림 하는것을 탈피해서 비트 연산을 이용한다.

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

#define  MAX_X  36
#define  MAX_Y  20

#define  SetPixel(x,y)    array[y][x]=1

int array[20][36];

void display(void)
{
    int i,j;

    system("cls");
    for( i=0; i<MAX_Y; i++ )
    {
        for( j=0; j < MAX_X; j++ )
        {
            if( array[i][j] )
                printf("□");
            else
                printf("■");
        }
        printf("\n");
    }
}

void line_to( int x1, int y1, int x2, int y2 )
{
    int dx = x2 - x1;
    int dy = y2 - y1;
    double a  = (double)dy/dx;
    double b  = y1 - a*x1;
    int  stepx=1, stepy=1;

    if ( dx < 0 )
        stepx = -1;

    if ( dy < 0 )
        stepy = -1;


    if( abs(dx) > abs(dy) )
    {
        while( x1 != x2 )
        {
            SetPixel( x1, (int)(a*x1+ b + 0.5) );  
            x1 += stepx;
        }
        SetPixel( x1, (int)(a*x1+ b + 0.5) );  
    }
    else
    {
        while( y1 != y2 )
        {
            SetPixel(  (int)( (y1-b)/a + 0.5) , y1 );  
            y1 += stepy;
        }
        SetPixel( (int)( (y1-b)/a  + 0.5) , y1);  
    }

}


void line_to_1( int x1, int y1, int x2, int y2 )
{
    int dx = x2 - x1;
    int dy = y2 - y1;
    double a  = (double)dy/dx;
    double b  = y1 - a*x1;
    int stepx=1, stepy=1;
    double fraction = 0.5 + a;


    if ( dx < 0 )
        stepx = -1;

    if ( dy < 0 )
        stepy = -1;


    if( abs(dx) > abs(dy) )
    {
        while( x1 != x2 )
        {
            SetPixel( x1, y1 );  
            if( fraction >= 1 )
            {
                y1 += 1;
                fraction -= 1;
            }

            fraction += a;
            x1 += 1;
        }
    }
    else
    {
        while( y1 != y2 )
        {
            SetPixel(  (int)( (y1-b)/a + 0.5) , y1 );  
            y1 += stepy;
        }
        SetPixel( (int)( (y1-b)/a  + 0.5) , y1);  
    }

}


void line_to_2( int x1, int y1, int x2, int y2 )
{
    int dx = x2 - x1;
    int dy = y2 - y1;
    double a  = (double)dy/dx;
    double b  = y1 - a*x1;
    int  stepx=1, stepy=1;
    int fraction = dx+2*dy;


    if ( dx < 0 )
        stepx = -1;

    if ( dy < 0 )
        stepy = -1;


    if( abs(dx) > abs(dy) )
    {
        while( x1 != x2 )
        {
            SetPixel( x1, y1 );  
            if( fraction >= 1 )
            {
                y1 += 1;
                fraction -= 2*dx;
            }

            fraction += 2*dy;
            x1 += 1;
        }
    }
    else
    {
        while( y1 != y2 )
        {
            SetPixel(  (int)( (y1-b)/a + 0.5) , y1 );  
            y1 += stepy;
        }
        SetPixel( (int)( (y1-b)/a  + 0.5) , y1);  
    }

}


void line_to_3( int x1, int y1, int x2, int y2 )
{
    int dx = x2 - x1;
    int dy = y2 - y1;
    double a  = (double)dy/dx;
    double b  = y1 - a*x1;
    int  stepx=1, stepy=1;
    int fraction = (dy<<1) - dx;


    if ( dx < 0 )
        stepx = -1;

    if ( dy < 0 )
        stepy = -1;

    dx <<= 1;
    dy <<= 1;

    if( abs(dx) > abs(dy) )
    {
        while( x1 != x2 )
        {
            SetPixel( x1, y1 );  
            if( fraction >= 0 )
            {
                y1 += 1;
                fraction -= dx;
            }

            fraction += dy;
            x1 += 1;
        }
    }
    else
    {
        while( y1 != y2 )
        {
            SetPixel(  (int)( (y1-b)/a + 0.5) , y1 );  
            y1 += stepy;
        }
        SetPixel( (int)( (y1-b)/a  + 0.5) , y1);  
    }

}


void line_to_4( int x1, int y1, int x2, int y2 )
{
    int dx = x2 - x1;
    int dy = y2 - y1;
    int  stepx=1, stepy=1;
    int fraction;


    if ( dx < 0 )
    {
        dx = -dx;
        stepx = -1;
    }

    if ( dy < 0 )
    {
        dy = -dy;
        stepy = -1;
    }

    dx <<= 1;
    dy <<= 1;

    if( dx >= dy )
    {
        fraction = dy - (dx>>1);
        while( x1 != x2 )
        {
            SetPixel( x1, y1 );  
            if( fraction >= 0 )
            {
                y1 += stepy;
                fraction -= dx;
            }

            fraction += dy;
            x1 += stepx;
        }
    }
    else
    {
        fraction = dx - (dy>>1);
        while( y1 != y2 )
        {
            SetPixel( x1, y1 );  
            if( fraction >= 0 )
            {
                x1 += stepx;
                fraction -= dy;
            }

            fraction += dx;
            y1 += stepy;
        }
    }
    SetPixel( x1, y1 );  
}


int main()
{
    line_to_4(8, 15 , 0, 0 );
    display();
}

API - TIP

from Study/API 2007/12/05 23:05 view 23305
1. SendMessage (hList, LB_SETTOPINDEX, n, 0); - ListBox Control 에서 스크롤 맨아래로 내린다.

Tag |

자바 소스 보기 Class => java 로..

from Info/Tools 2007/12/05 19:37 view 27846
- 사용법 -
윈도우 상에서
1. 먼저 .jar 파일의 압축을 푼다.
2. cmd 창에서 압축이 풀린 디렉토리상으로 이동
3. 아래 명령어를 실행
    jad -r -d .\src -s java .\ifxjdbc\**\*.class
 
jad -r [-d<directory_for_source>] [<other_options>] <directory_width_classes>**\*.class
 
설명
-r : 해당 패키지 형태로 디렉토리 구조를 만듬(restore package directory structure)
-d : 디컴파일될 디렉토리(-d <dir> - directory for output files)
-s java : 디컴파일된 파일의 확장자를 java로 한다.
.\ifxjdbc\**\*.class : ifxjdbc 디렉토리 아래의 모든 클래스들 지정
 
***************************************
D:\work\framework\entity\...
D:\work\framework\resource\..
D:\work\framework\exception\...
이 디렉토리 아래에 class 파일이 존재할 경우 이 파일을 .java로 변환하기
 
D:\work>jad -r -d .\src -s java .\framework\**\*.class
**************************************
D:\work\framework\디렉토리 아래의 모든 .class 파일을 .java로 변환하여
D:\work\src\밑의 폴더로 만들어 준다.
**************************************
Tag |

Red/Black Tree

from Study/자료구조 2007/12/05 10:46 view 27835
Red/Black를 자바로 구현해 놓은곳 최최고~~( 자바 최신 버젼을 깔아야 한다. http://java.com )
http://www.ece.uc.edu/~franco/C321/html/RedBlack/redblack.html

http://webpages.ull.es/users/jriera/Docencia/AVL/AVL%20tree%20applet.htm

1. RedBlack.c( http://lxr.linux.no/linux-old+v2.4.20/lib/rbtree.c )

more..

COM - 기본( 등록, 사용 )

from Study/COM 2007/12/04 21:33 view 22660
1) 만들어 놓은 클래스 라이브러리를 멤버변수로 선언하여 사용하게 되면 강한 결합을 하게 된다.
2) 그래서, 인터페이스를 사용하여 약한 결합을 만드는데 이게 바로 COM이 하는 역할이다.
3) 3개의 함수는 QueryInterface, AddRef, Release 를 반드시 구현해 줘야 한다.
4) 컴포넌트가 객체생성을 책임져야 하므로 반드시 IUnknown 를 최상위 부모로 하여 상속되어야 한다.
5) CreateInstance, DllGetClassObject 를 사용하여 객체를 생성해줘야 한다.
6) 이모든 과정을 단순화 한 것이 ATL, COM+ 이다...그래도 어렵다..ㅜ_ㅜ..

- regsvr32 DLL명
- Com.dll 을 레지스트리(HKEY_CLASSES_ROOT\CLSID) 에 등록해준다.

1. IFace.h ( 인터페이스ID, 클래스ID 를 등록한다 )

more..


 2. AnyCall.h ( 인터페이스를 제공한다. )

more..


3. AnyCall.cpp ( IUnknown 의 3개의 가상함수를 구현하고 기능을 구현해준다. )

more..


4. Registry.h( 레지스트리 함수를 제공한다. )

more..


5. Registry.cpp( 레지스트리 함수를 제공한다. )

more..


6. Anycall.def ( dllexport 역할을 해준다. )

more..


1. UseCom ( Com 을 사용하는 방법 - dll로드가 아닌 레지스트리에 등록된 COM을 사용한다. )

more..


대체와 대처의 뜻

from Study/한글 2007/12/04 11:44 view 28071
대ː체
(大體)
【一】【명사】 어떤 일이나 내용의 기본이 되는 큰 줄거리.
¶ ∼적인 방안.
【二】【부사】 도대체. 대관절.
¶ ∼ 어찌 된 일인가.
 
대ː체
(代替)【명사】【~하다|자동사·타동사】 다른 것으로 바꿈.
¶ 새것과 ∼하다.
 
대ː체
(對替)【명사】【~하다|타동사】 『경』 어떤 계정의 금액을 다른 계정에 옮겨 적는 일.
대체(代替)
?비슷한 말?대신(代身), 대치(代置)
--------------------------------------------------------------------------------------------------
대ː처
(對處)【명사】【~하다|타동사】 어떤 일에 대하여 적당한 조처를 취함. 또는 그 취한 조처.
¶ 사고에 ∼하다/ 강력한 ∼ 방안을 제시하였다.
대처(對處)
?비슷한 말?방패(防牌)막이, 조치(措置), 대비(對備), 대응(對應); 처신(處身), 행신(行身)

Tag |

한글 문자열을 뒤집어라.

from Study/Quiz 2007/12/01 18:28 view 27057

한글도 되도록 하자.

// 200447214 김준주
#include <iostream>
using namespace std;

char* ReverseString(const char* src, int len)
{
 // 새로운 문자열을 보관할 메모리를 할당한다.
 char* reverse = new char[len + 1];

 // 문자열을 역순으로 복사한다.
 for(int i = 0; i < len; ++i)
 {
  if( src[len-i-1] < 0 && src[len-i-2] < 0)
  {
   reverse[i] = src[len - i - 2];
   reverse[i+1] = src[len - i - 1];

   ++i;
  }
  else
   reverse[i] = src[len - i - 1];
 }

 // 새 문자열의 끝에 NULL을 넣어준다.
 reverse[len] = NULL;

 // 새 문자열을 반환한다.
 return reverse;
}

int main()
{
 // 문자열을 하나 만든다.
 char original[] = "한글 뒤집기";

 // 함수를 호출한다.
 char* copy = ReverseString( original, strlen(original) );

 // 두문자열을 출력한다.
 cout << original << "\n";
 cout << copy << "\n";

 // 새 문자열의 메모리를 해제한다.
 delete[] copy;
 copy = NULL;

 return 0;
}

Tag | ,