'Study'에 해당되는 글 250건

  1. 2008/12/22 GDI+ 사용 스레드.
  2. 2008/12/03 ORCALE 정보
  3. 2008/12/03 SQL 연습하기
  4. 2008/07/02 BEGIN_TEMPLATE_MESSAGE_MAP를 define 할때 6.0이랑 2005가 다르다.
  5. 2007/12/14 로그클래스
  6. 2007/12/11 Registry wrapping class (2)
  7. 2007/12/06 COM 실습 - 바로가기, 태스크바 (6)
  8. 2007/12/06 LineTo 구현
  9. 2007/12/05 API - TIP
  10. 2007/12/05 Red/Black Tree

GDI+ 사용 스레드.

from Study/API 2008/12/22 16:28 view 49591
1. GDI+ 기본정의

#pragma comment (lib, "gdiplus.lib")

#include <gdiplus.h>
using namespace Gdiplus;

 ULONG_PTR gpToken;
 GdiplusStartupInput gpsi;
VERIFY(GdiplusStartup( &gpToken, &gpsi, NULL ) == Ok );
//////////////////////////////////////////////////////////////////////
// Grahpics g;
////////////////////////////////////////////////////////////////////

GdiplusShutdown(gpToken);


2. MFC 에서 GDI+를 사용하기 위한 정의
 PRB: Microsoft Foundation Classes DEBUG_NEW Does Not Work with GDI+
" error C2660: 'Gdiplus::GdiplusBase::operator new' : 함수는 3개의 매개 변수를 사용하지 않습니다. "

#define ULONG_PTR DWORD
//// Ensure that GdiPlus header files work properly with MFC DEBUG_NEW and STL header files.
#define iterator _iterator

#ifdef _DEBUG

namespace Gdiplus
{
    namespace DllExports
    {
#include "GdiplusMem.h"
    };
#ifndef _GDIPLUSBASE_H
#define _GDIPLUSBASE_H
    class GdiplusBase
    {
    public:
        void (operator delete)(void* in_pVoid)
        {
            DllExports::GdipFree(in_pVoid);
        }
        void* (operator new)(size_t in_size)
        {
            return DllExports::GdipAlloc(in_size);
        }
       
        void (operator delete[])(void* in_pVoid) { DllExports::GdipFree(in_pVoid); } void* (operator new[])(size_t in_size)
        {
            return DllExports::GdipAlloc(in_size);
        }
       
        void * (operator new)(size_t nSize, LPCSTR lpszFileName, int nLine)
        {
            return DllExports::GdipAlloc(nSize);
        }
       
        void operator delete(void* p, LPCSTR lpszFileName, int nLine)
        {
            DllExports::GdipFree(p);
        }
       
    };
#endif // #ifndef _GDIPLUSBASE_H
}
#endif // #ifdef _DEBUG

#include "GdiPlus.h"
using namespace Gdiplus;
#undef iterator
    //// Ensure that Gdiplus.lib is linked.
#pragma comment(lib, "gdiplus.lib")


3. 알수 없는 에러가 쭉 나오는 현상..
//MFC를 사용하지 않는 경우에 컴파일 시간을 줄이기 위해 정의한다.(GDI+ 에러남.)
#define WIN32_LEAN_AND_MEAN  // 원흉의 매크로~주석처리~



4. 유용한 사이트
  1) winapi.co.kr/gdi+
Tag |

ORCALE 정보

from Study/DB 2008/12/03 17:37 view 28784
오라클 포럼 가기 : http://kr.forums.oracle.com/forums/forum.jspa?forumID=82&start=0


명령어 모음
- 화면 지우기 : clear screen (약어:cl scr)

- 데이터베이스 이름 보기 : mysql-show database
 SELECT NAME FROM v$database;

- 테이블 이름 보기 : mysql-show table
  select table_name from user_tables ; //자신의 테이블을 볼 때 :
  select table_name from all_tables ;    //접근할 수 있는 모든 테이블을 볼 때 :
  select table_name from dba_tables ; //이 데이터베이스 안에 있는 모든 테이블을 볼 때
 
- 사이즈 맞추기
 set linesize 150
 COL[UMN] [{column | expr} [option ...] ]   ex) col dname format a10





Tag | ,

SQL 연습하기

from Study/DB 2008/12/03 17:25 view 28117

ORACLE

1. 기본예제 실습





more..

Tag | ,

VS2005엔 _GetBaseMessageMap 이게 없는듯 하다. -_-.. 그래서 새로 정의해서 해결해야 한다. 아나..
error C2065: 'GetThisMessageMap' : 선언되지 않은 식별자입니다.
error C2653: 'TheBaseClass' : 클래스 또는 네임스페이스 이름이 아닙니다.
error C2039: 'messageMap' : 'TTaskbarContainer<T>'의 멤버가 아닙니다.
error C2039: '_GetBaseMessageMap' : 'TTaskbarContainer<T>'의 멤버가 아닙니다.

#ifndef __AFXWIN_H__
#include "afxwin.h"
#endif

#if ( _MSC_VER >= 1400) // VC++ 8.0 (.net)

//#ifdef _AFXDLL
#define BEGIN_TEMPLATE_MESSAGE_MAP(theTemplate, theClass, baseClass) \
    PTM_WARNING_DISABLE \
    template <theTemplate>\
    const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return GetThisMessageMap(); } \
    template <theTemplate>\
    const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() \
{ \
    typedef theClass ThisClass; \
    typedef baseClass TheBaseClass; \
    static const AFX_MSGMAP_ENTRY _messageEntries[] = \
{\

#endif

#else    // VC++6.0

#ifdef _AFXDLL
#define BEGIN_TEMPLATE_MESSAGE_MAP(theTemplate, theClass, baseClass) \
    template <theTemplate> const AFX_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
        { return &baseClass::messageMap; } \
        template <theTemplate> const AFX_MSGMAP* theClass::GetMessageMap() const \
        { return &theClass::messageMap; } \
        template <theTemplate> AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
    { &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
    template <theTemplate> const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
    { \

#else

#define BEGIN_TEMPLATE_MESSAGE_MAP(theTemplate, theClass, baseClass) \
    template <theTemplate> const AFX_MSGMAP* theClass::GetMessageMap() const \
        { return &theClass::messageMap; } \
        template <theTemplate> AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
    { &baseClass::messageMap, &theClass::_messageEntries[0] }; \
    template theTemplate const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
    { \
#endif

#endif
Tag |

로그클래스

from Study/C++ 2007/12/14 18:23 view 36730

1. Log.h ( 로그파일, 출력을 도와주는 클래스 )

/** \file Log.h
**    \date  2007/12/10
**    \author kimjunju@hotmail.com
**/


#pragma once 

/**    \class    CLog
    \brief    시간을 기준으로 로그를 남긴다.
    \remark    static 멤버함수로 선언하여 객체없이 함수를 이용가능하다.
*/


/** \ingroup UTIL */

class CLog
{
public:
    static BOOL    WriteLog(LPTSTR data, ...)
    {
        _wsetlocale(LC_ALL, _T("korean"));  // 한글을 출력하기 위한 설정.

        SYSTEMTIME    SystemTime;
        TCHAR        CurrentDate[32]                    = {0,};
        TCHAR CurrentFileName[MAX_PATH] = {0,};
        FILE* FilePtr = NULL;
        TCHAR        DebugLog[MAX_BUFFER_LENGTH]        = {0,};

        va_list        ap;
        TCHAR        Log[MAX_BUFFER_LENGTH]    = {0,};

        va_start(ap, data);
        _vstprintf(Log, data, ap);
        va_end(ap);

        GetLocalTime(&SystemTime);
        _sntprintf(CurrentDate, 32, _T("%d-%d-%d %d:%d:%d"),
            SystemTime.wYear,
            SystemTime.wMonth,
            SystemTime.wDay,
            SystemTime.wHour,
            SystemTime.wMinute,
            SystemTime.wSecond);

        _sntprintf(CurrentFileName, MAX_PATH, _T("LOG_%d-%d-%d %d.log"),
            SystemTime.wYear,
            SystemTime.wMonth,
            SystemTime.wDay,
            SystemTime.wHour);

        FilePtr = _tfopen(CurrentFileName, _T("a"));
        if (!FilePtr)
            return FALSE;

        _ftprintf(FilePtr, _T("[%s] %s\n"), CurrentDate, Log);
        _sntprintf(DebugLog, MAX_BUFFER_LENGTH, _T("[%s] %s\n"), CurrentDate, Log);

        fflush(FilePtr);
        fclose(FilePtr);

        OutputDebugString(DebugLog);
        _tprintf(_T("%s"), DebugLog);

        return TRUE;
    }

    static BOOL    WriteLogNoDate(LPTSTR data, ...)
    {
        _wsetlocale(LC_ALL, _T("korean"));

        SYSTEMTIME    SystemTime;
        TCHAR        CurrentDate[32]                    = {0,};
        TCHAR        CurrentFileName[MAX_PATH]        = {0,};
        FILE*        FilePtr                            = NULL;
        TCHAR        DebugLog[MAX_BUFFER_LENGTH]        = {0,};

        va_list        ap;
        TCHAR        Log[MAX_BUFFER_LENGTH]    = {0,};

        va_start(ap, data);
        _vstprintf(Log, data, ap);
        va_end(ap);

        GetLocalTime(&SystemTime);
        _sntprintf(CurrentDate, 32, _T("%d-%d-%d %d:%d:%d"),
            SystemTime.wYear,
            SystemTime.wMonth,
            SystemTime.wDay,
            SystemTime.wHour,
            SystemTime.wMinute,
            SystemTime.wSecond);

        _sntprintf(CurrentFileName, MAX_PATH, _T("LOG_%d-%d-%d %d.log"),
            SystemTime.wYear,
            SystemTime.wMonth,
            SystemTime.wDay,
            SystemTime.wHour);

        FilePtr = _tfopen(CurrentFileName, _T("a"));
        if (!FilePtr)
            return FALSE;

        _ftprintf(FilePtr, _T("%s"), Log);
        _sntprintf(DebugLog, MAX_BUFFER_LENGTH, _T("%s"), Log);

        fflush(FilePtr);

        fclose(FilePtr);

        OutputDebugString(DebugLog);
        _tprintf(_T("%s"), DebugLog);

        return TRUE;
    }
};
Tag |

Registry wrapping class

from Study/API 2007/12/11 21:24 view 25549
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 27876
1. 바로가기

more..



2. Taskbar

more..

Tag |

LineTo 구현

from Study/C언어 2007/12/06 16:53 view 28997
- 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 26221
1. SendMessage (hList, LB_SETTOPINDEX, n, 0); - ListBox Control 에서 스크롤 맨아래로 내린다.

Tag |

Red/Black Tree

from Study/자료구조 2007/12/05 10:46 view 31983
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..