Win32 SDK函数MessageBox的模拟实现(C语言版)
2013-10-12 15:26
459 查看
版本一:对于使用“掩码”传递参数的方法,简单的实现思路:
版本二:充分利用位运算的特性,大大减少了代码量
#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('\n'); 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("---------------------------------------------------\n"); MessageBox("hello, world", MB_OK); MessageBox("hello, world", MB_OKCANCEL); MessageBox("hello, world", MB_ICONHAND); MessageBox("hello, world", MB_ICONQUESTION); return 0; }
版本二:充分利用位运算的特性,大大减少了代码量
#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('\n'); printf("内容:%s\t", context); putchar('\n'); if((type & MB_ICONMASK) == MB_VALIDATE) { printf("\n-------------------------\n"); return -1; } printf(Icon[((type & MB_ICONMASK)>>4) - 1]); printf("\n-------------------------\n"); 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; }
相关文章推荐
- Win32 SDK函数MessageBox的模拟实现(C语言版)
- 在C#中模拟实现boost::bind的功能
- 模拟实现三次密码登录
- 模拟jsonp的实现
- 模拟网站登录实现----Python
- 模拟实现ORM框架
- 实现模拟登录
- 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取
- pyobjc实现鼠标事件模拟(Mac)
- 【c++】模拟实现string类__实现增删查改
- WIN32汇编实现的HashTable
- Android之利用session实现抵御模拟请求失败案例
- 用Linux_C语言模拟CP命令,实现文件和文件夹的拷贝
- Spring中AOP的模拟实现
- 模拟实现vector
- 模拟实现strchr.strrchr
- 模拟实现SQL Server字段列显示的数据类型
- Spring中AOP的模拟实现
- android listview实现快速查询A—Z (模拟一些天气搜狐,网易等天气预报)
- 模拟实现IoC容器