Win 32 SDK 함수 Message Box 의 시 뮬 레이 션 실현(C 언어 버 전)

3423 단어 message
버 전 1:'마스크'를 사용 하여 파 라 메 터 를 전달 하 는 방법 에 대해 간단 한 실현 방향:
#include <stdio.h>



#define MB_OK            0x00000000



#define MB_OKCANCEL 0x00000001



 



#define MB_ICONHAND 0x00000010



#define MB_ICONQUESTION 0x00000020



 



#define MAX_RESULT 0xFFFFFFFF



 



int MessageBox(const char *context, unsigned int type)



{



    if(MAX_RESULT == (~MB_ICONHAND | type))



    {



       printf("\t  :   \t");



    }



    else if(MAX_RESULT == (~MB_ICONQUESTION | type))



    {



       printf("\t  :   \t");



    }



 



    printf("  :%s\t", context);



 



    if(MAX_RESULT == (~MB_OKCANCEL | type))



    {



       printf("  :     \t");



    }



    else if(MAX_RESULT == ((~MB_OK | type)))



    {



       printf("  :  \t");



    }



    putchar('
'); return 0; } int main(int argc, char *argv[]) { //unsigned int m_o = 0x00000001, m_o1 = 0x00000020, m_o2 = m_o | m_o1; //printf("%x", ~m_o | m_o2); MessageBox("hello, world", MB_OK | MB_ICONHAND); MessageBox("hello, world", MB_OK | MB_ICONQUESTION); MessageBox("hello, world", MB_OKCANCEL | MB_ICONHAND); MessageBox("hello, world", MB_OKCANCEL | MB_ICONQUESTION); printf("---------------------------------------------------
"); MessageBox("hello, world", MB_OK); MessageBox("hello, world", MB_OKCANCEL); MessageBox("hello, world", MB_ICONHAND); MessageBox("hello, world", MB_ICONQUESTION); return 0; }

 
버 전 2:비트 연산 의 특성 을 충분히 이용 하여 코드 량 을 크게 줄 였 습 니 다.
#include <stdio.h>



#define MB_OK                       0x00000000



#define MB_OKCANCEL             0x00000001



#define MB_ABORTRETRYIGNORE         0x00000002



 



#define MB_ICONHAND 0x00000010



#define MB_ICONQUESTION 0x00000020



 



#define MB_TYPEMASK 0x0000000F



#define MB_ICONMASK 0x000000F0



 



#define MB_VALIDATE 0x00000000



 



char *TypeText[3] = {{"OK"},{"OK CANCEL"},{"ABORT RETRY IGNORE"}};



char *Icon[2] = {{"ICONHAND"}, {"ICONQUESTION"}};



 



int MessageBox(const char *context, unsigned int type)



{



    printf(TypeText[type & MB_TYPEMASK]);



    putchar('
'); printf(" :%s\t", context); putchar('
'); if((type & MB_ICONMASK) == MB_VALIDATE) { printf("
-------------------------
"); return -1; } printf(Icon[((type & MB_ICONMASK)>>4) - 1]); printf("
-------------------------
"); return 0; } int main(int argc, char *argv[]) { MessageBox("hello, world", MB_OK | MB_ICONHAND); MessageBox("hello, world", MB_OK | MB_ICONQUESTION); MessageBox("hello, world", MB_OKCANCEL | MB_ICONHAND); MessageBox("hello, world", MB_OKCANCEL | MB_ICONQUESTION); MessageBox("hello, world", MB_OK); MessageBox("hello, world", MB_OKCANCEL); MessageBox("hello, world", MB_ICONHAND); MessageBox("hello, world", MB_ICONQUESTION); return 0; }

좋은 웹페이지 즐겨찾기