홀수, 짝수 구분하기

C, C++ 2013.02.12 11:57

if( 정수 % 2 != 0 )

{

//홀수

}

else

{

//짝수

}


if( 정수 % 2 == 0 )

{

//짝수

}

else

{

//홀수

}


그다지 필요없지만 가끔, 아주 가끔 쓰게된다 ㅎㅎ

설정

트랙백

댓글

HBITMAP을 비트맵파일로 저장하기

C, C++ 2013.02.12 11:48

void HBITMAP2BMP(HBITMAP hbit,char *Path)

{

    BITMAPFILEHEADER fh;

    BITMAPINFOHEADER ih;

    BITMAP bit;

    BITMAPINFO *pih;

    int PalSize;

    HANDLE hFile;

    DWORD dwWritten,Size;

    HDC hdc;


    hdc=GetDC(NULL);


    GetObject(hbit,sizeof(BITMAP),&bit);

    ih.biSize=sizeof(BITMAPINFOHEADER);

    ih.biWidth=bit.bmWidth;

    ih.biHeight=bit.bmHeight;

    ih.biPlanes=1;

    ih.biBitCount=bit.bmPlanes*bit.bmBitsPixel;

    if (ih.biBitCount > 8) ih.biBitCount=24;

    ih.biCompression=BI_RGB;

    ih.biSizeImage=0;

    ih.biXPelsPerMeter=0;

    ih.biYPelsPerMeter=0;

    ih.biClrUsed=0;

    ih.biClrImportant=0;


    PalSize=(ih.biBitCount==24 ? 0:1 << ih.biBitCount)*sizeof(RGBQUAD);

    pih=(BITMAPINFO *)malloc(ih.biSize+PalSize);

    pih->bmiHeader=ih;


    GetDIBits(hdc,hbit,0,bit.bmHeight,NULL,pih,DIB_RGB_COLORS);

    ih=pih->bmiHeader;


    if (ih.biSizeImage == 0) {

        ih.biSizeImage=((((ih.biWidth*ih.biBitCount)+31) & ~31) >> 3) * ih.biHeight;

    }


    Size=ih.biSize+PalSize+ih.biSizeImage;

    pih=(BITMAPINFO *)realloc(pih,Size);


    GetDIBits(hdc,hbit,0,bit.bmHeight,(PBYTE)pih+ih.biSize+PalSize,pih,DIB_RGB_COLORS);


    fh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+PalSize;

    fh.bfReserved1=0;

    fh.bfReserved2=0;

    fh.bfSize=Size+sizeof(BITMAPFILEHEADER);

    fh.bfType=0x4d42;


    hFile=CreateFile(Path,GENERIC_WRITE,0,NULL,

        CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

    WriteFile(hFile,&fh,sizeof(fh),&dwWritten,NULL);

    WriteFile(hFile,pih,Size,&dwWritten,NULL);


    ReleaseDC(NULL,hdc);

    CloseHandle(hFile);

}


사용법 :

저장할 HBITMAP을 만들어놓고,

HBITMAP2BMP( HBITMAP, "c:\\a.bmp" );

설정

트랙백

댓글

체크박스 조작

C, C++ 2013.02.12 11:11

BM_GETCHECK : 체크 상태를 가져오기

wParam, lParam은 사용하지 않고, 체크 상태는 리턴 값으로 판단가능하다.


BM_SETCHECK : 체크 상태 변경하기

변경할 체크 상태를 wParam에 지정한다.


//체크된 상태인지 아닌지 가져오기

if( SendMessage( 윈도우핸들, BM_GETCHECK, 0, 0 ) == BST_CHECKED )

{

//체크 상태

}


//체크 상태로 변경하기

SendMessage( 윈도우핸들, BM_SETCHECK, BST_CHECKED, 0 );


//체크 안되어 있는 상태로 변경하기

SendMessage( 윈도우핸들, BM_SETCHECK, BST_UNCHECKED, 0 );


설정

트랙백

댓글

Visual Studio 2012는 윈도우7 SP1 이상에서만 실행된다

C, C++ 2013.02.01 14:17

비쥬얼 스튜디오 2012는 윈도우7 SP1 이상에서만 작동된다.

XP에선 아예 설치조차 되지 않는다 ㅎㅎ


요즘 이런저런 굵직한 프로그램들을 보니 몇몇은 이미 윈도우XP지원을 중단해서


윈도우XP에선 실행이 안되는 프로그램이 더러있다..


여전히 윈도우XP가 편하긴 한데.. 이제 슬슬 옮겨 갈때가 된거 같다..


새로 환경 구성할거 생각하면 캄캄해서 그냥 쓰고있었는데..


음..PC를 새로 장만하면 그때 옮겨 갈까..?


-수정

비스타가 아니라 윈도우7 인가보다

다른 프로그램들이 그래서 비쥬얼 스튜디오 2012도 그럴려니 했는데

MS에 보니까 시스템 요구사항에 비스타는 없고, 윈도우7 SP1이라 되어있네-_-;;

설정

트랙백

댓글

DC를 사용할때 주의점

C, C++ 2013.02.01 13:53

프로그래밍을 하면서 DC를 이용할때

그냥 막무가내로 쓰는 사람을 더러 봐왔었는데

분명한 법칙이 있다.


GetDC처럼 Get으로 가져온것은 ReleaseDC를 사용해서 해제해줘야하고,


CreateDC처럼 생성한 것은 DeleteDC로 삭제해줘야한다.



설정

트랙백

댓글

GetWindowText를 사용할때 주의점

C, C++ 2013.02.01 13:43

GetWindowText는 윈도우나 컨트롤의 텍스트를 가져올때 사용되는데

제대로 사용하기 위해선 주의점이 있다.


바로 3번째 인자 nMaxCount인데 NULL캐릭터를 포함한 길이를 넣어줘야한다.


NULL캐릭터를 포함하지 않은 길이를 넣으면 뒤에 쓰레기 값이 붙어 나오기도 한다.

설정

트랙백

댓글

bool과 BOOL과 BOOLEAN

C, C++ 2013.02.01 13:27

bool하고 BOOL은 엄연히 다르다..


BOOL은 int형이다.. 4바이트를 먹는다..


bool은 byte형이었나..? 으.. 여기서 막히넹..


암튼 bool은 1바이트를 차지한다.


그리고 BOOLEAN도 byte형으로 1바이트이다.


가능하면 BOOL보다는 bool을 사용하자.

'C, C++' 카테고리의 다른 글

DC를 사용할때 주의점  (0) 2013.02.01
GetWindowText를 사용할때 주의점  (0) 2013.02.01
bool과 BOOL과 BOOLEAN  (0) 2013.02.01
lstrcmp, lstrcmpi, lstrcpy, lstrlen, lstrcpyn, lstrcat  (0) 2013.02.01
_tcslwr, _tcsupr  (0) 2013.02.01
Windows7이 이전 윈도우에 비해 빠른이유  (0) 2013.02.01

설정

트랙백

댓글

lstrcmp, lstrcmpi, lstrcpy, lstrlen, lstrcpyn, lstrcat

C, C++ 2013.02.01 13:16

strcmp등 캐릭터형 문자열 조작에 사용되는 함수들은


T매크로 되신 함수명 앞에 l(소문자 엘)을 붙여 주면


멀티바이트나 유니코드 환경에서 모두 사용할 수 있다.

'C, C++' 카테고리의 다른 글

GetWindowText를 사용할때 주의점  (0) 2013.02.01
bool과 BOOL과 BOOLEAN  (0) 2013.02.01
lstrcmp, lstrcmpi, lstrcpy, lstrlen, lstrcpyn, lstrcat  (0) 2013.02.01
_tcslwr, _tcsupr  (0) 2013.02.01
Windows7이 이전 윈도우에 비해 빠른이유  (0) 2013.02.01
Windows8의 내부 버전  (0) 2013.02.01

설정

트랙백

댓글

_tcslwr, _tcsupr

C, C++ 2013.02.01 13:12

_tcslwr함수는 캐릭터형 문자열을 소문자로 만들어 주는 역할을 한다.

이것도 T매크로로서 멀티바이트 환경이나 유니코드 환경 둘다 사용가능하다.

사용법은 간단하다.


TCHAR tcharTemp[256] = "ABCDEF";

_tcslwr( tcharTemp );


반대로 _tcsupr함수는 대문자로 만들어준다.


문자열을 여러번 비교 해야 한다면

상황에 따라 다르겠지만..

strcmpi같은 대,소문자 구분 안하는 함수를 쓰는것보다

_tcslwr함수로 소문자로 만들어놓고 strcmp를 써서 비교하는게 효율적인 경우도 있다.

'C, C++' 카테고리의 다른 글

bool과 BOOL과 BOOLEAN  (0) 2013.02.01
lstrcmp, lstrcmpi, lstrcpy, lstrlen, lstrcpyn, lstrcat  (0) 2013.02.01
_tcslwr, _tcsupr  (0) 2013.02.01
Windows7이 이전 윈도우에 비해 빠른이유  (0) 2013.02.01
Windows8의 내부 버전  (0) 2013.02.01
fopen, _wfopen, _tfopen  (0) 2013.01.31

설정

트랙백

댓글

Windows7이 이전 윈도우에 비해 빠른이유

C, C++ 2013.02.01 13:01

오래되서 정확하게는 기억이 안나지만..

그리고 워낙 뭐든 대충 핵심만 보고 지나가는 버릇때문에;;

뉴스든 정보든..


암튼 대충 이렇다.

이전 윈도우들은 프로그램이 사용하는 함수들을

3개정도의 DLL파일에 몰아서 넣어두었었다.


그래서 함수를 호출하면 해당 DLL파일을 열고, 해당 함수가 있는 주소로 이동해서 함수를 호출하게 되는데

워낙 함수가 많다보니 이 시간도 많이 모으다보면 꽤 걸린다..


윈도우7은 이 함수들을 하나하나 각각의 파일로 만들어버렸다.

그래서 해당 파일을 열면 바로 호출이 가능하다.. 내부적으로 더 자세한 사항은 모르겠지만

암튼 이렇게 해서 윈도우7이 이전 버전 윈도우들에 비해서 속도 향상이 상당히 많이되었다..


뭐 다른 것들도 있겠지만 난 이거만 이정도로 대충 알고 있다 ㅎㅎ

어차피 윈도우가 다 알아서 하는거니까..ㅎ


그리고 윈도우7 이후에 나오는 윈도우들도 다 이방식을 사용하지 않겠나 싶다..

더 좋은 방식이 나오기 전까진...


'C, C++' 카테고리의 다른 글

lstrcmp, lstrcmpi, lstrcpy, lstrlen, lstrcpyn, lstrcat  (0) 2013.02.01
_tcslwr, _tcsupr  (0) 2013.02.01
Windows7이 이전 윈도우에 비해 빠른이유  (0) 2013.02.01
Windows8의 내부 버전  (0) 2013.02.01
fopen, _wfopen, _tfopen  (0) 2013.01.31
GetMessage, PeekMessage  (0) 2013.01.31

설정

트랙백

댓글