📄 dialog.c
字号:
0X91,0X48,0X00, 0X91,0X48,0X55, 0X91,0X48,0XAA, 0X91,0X48,0XFF,
0X91,0X6D,0X00, 0X91,0X6D,0X55, 0X91,0X6D,0XAA, 0X91,0X6D,0XFF,
0X91,0X91,0X00, 0X91,0X91,0X55, 0X91,0X91,0XAA, 0X91,0X91,0XFF,
0X91,0XB6,0X00, 0X91,0XB6,0X55, 0X91,0XB6,0XAA, 0X91,0XB6,0XFF,
0X91,0XDA,0X00, 0X91,0XDA,0X55, 0X91,0XDA,0XAA, 0X91,0XDA,0XFF,
0X91,0XFF,0X00, 0X91,0XFF,0X55, 0X91,0XFF,0XAA, 0X91,0XFF,0XFF,
0XB6,0X00,0X00, 0XB6,0X00,0X55, 0XB6,0X00,0XAA, 0XB6,0X00,0XFF,
0XB6,0X24,0X00, 0XB6,0X24,0X55, 0XB6,0X24,0XAA, 0XB6,0X24,0XFF,
0XB6,0X48,0X00, 0XB6,0X48,0X55, 0XB6,0X48,0XAA, 0XB6,0X48,0XFF,
0XB6,0X6D,0X00, 0XB6,0X6D,0X55, 0XB6,0X6D,0XAA, 0XB6,0X6D,0XFF,
0XB6,0X91,0X00, 0XB6,0X91,0X55, 0XB6,0X91,0XAA, 0XB6,0X91,0XFF,
0XB6,0XB6,0X00, 0XB6,0XB6,0X55, 0XB6,0XB6,0XAA, 0XB6,0XB6,0XFF,
0XB6,0XDA,0X00, 0XB6,0XDA,0X55, 0XB6,0XDA,0XAA, 0XB6,0XDA,0XFF,
0XB6,0XFF,0X00, 0XB6,0XFF,0X55, 0XB6,0XFF,0XAA, 0XB6,0XFF,0XFF,
0XDA,0X00,0X00, 0XDA,0X00,0X55, 0XDA,0X00,0XAA, 0XDA,0X00,0XFF,
0XDA,0X24,0X00, 0XDA,0X24,0X55, 0XDA,0X24,0XAA, 0XDA,0X24,0XFF,
0XDA,0X48,0X00, 0XDA,0X48,0X55, 0XDA,0X48,0XAA, 0XDA,0X48,0XFF,
0XDA,0X6D,0X00, 0XDA,0X6D,0X55, 0XDA,0X6D,0XAA, 0XDA,0X6D,0XFF,
0XDA,0X91,0X00, 0XDA,0X91,0X55, 0XDA,0X91,0XAA, 0XDA,0X91,0XFF,
0XDA,0XB6,0X00, 0XDA,0XB6,0X55, 0XDA,0XB6,0XAA, 0XDA,0XB6,0XFF,
0XDA,0XDA,0X00, 0XDA,0XDA,0X55, 0XDA,0XDA,0XAA, 0XDA,0XDA,0XFF,
0XDA,0XFF,0X00, 0XDA,0XFF,0X55, 0XDA,0XFF,0XAA, 0XDA,0XFF,0XFF,
0XFF,0X00,0X00, 0XFF,0X00,0X55, 0XFF,0X00,0XAA, 0XFF,0X00,0XFF,
0XFF,0X24,0X00, 0XFF,0X24,0X55, 0XFF,0X24,0XAA, 0XFF,0X24,0XFF,
0XFF,0X48,0X00, 0XFF,0X48,0X55, 0XFF,0X48,0XAA, 0XFF,0X48,0XFF,
0XFF,0X6D,0X00, 0XFF,0X6D,0X55, 0XFF,0X6D,0XAA, 0XFF,0X6D,0XFF,
0XFF,0X91,0X00, 0XFF,0X91,0X55, 0XFF,0X91,0XAA, 0XFF,0X91,0XFF,
0XFF,0XB6,0X00, 0XFF,0XB6,0X55, 0XFF,0XB6,0XAA, 0XFF,0XB6,0XFF,
0XFF,0XDA,0X00, 0XFF,0XDA,0X55, 0XFF,0XDA,0XAA, 0XFF,0XDA,0XFF,
0XFF,0XFF,0X00, 0XFF,0XFF,0X55, 0XFF,0XFF,0XAA, 0XFF,0XFF,0XFF,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X92,0X92,0X92,0X92,0X92,
0X92,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X92,0X92,0X92,0XDB,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XDB,0X92,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X92,0X92,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0X92,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X03,0X03,0X03,
0X03,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0XDB,0XDB,0XDB,0XDB,
0XDB,0X92,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X03,0X03,0X03,
0X03,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X00,0XDB,0XDB,0XDB,
0XDB,0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0XDB,0XDB,
0X92,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X00,0X92,0XDB,
0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0XDB,
0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0X92,
0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0X92,
0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0X92,
0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0X92,
0X92,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X00,0X92,0X92,
0XDB,0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0X92,0X92,
0XDB,0X92,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,
0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X00,0X92,0X92,0X92,
0XDB,0XDB,0X92,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X03,0X03,0X03,
0X03,0X03,0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0X92,0X92,0XDB,
0XDB,0XDB,0XDB,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0X92,0X92,0X92,0XDB,
0XDB,0XDB,0XDB,0XDB,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X92,0X92,0X92,0X92,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0X00,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X00,0X92,0X92,0X92,0X92,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X00,0X00,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0X00,0X00,0X92,0X92,0X92,0X92,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X92,0X00,0X00,0X00,0XDB,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XDB,0X00,0X00,0X00,0X92,0X92,0X92,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X92,0X92,0X92,0X00,0X00,0X00,0XDB,0XFF,
0XFF,0XFF,0X00,0X92,0X92,0X92,0X92,0X92,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X92,0X92,0X92,0X92,0X00,0XFF,
0XFF,0XFF,0X00,0X92,0X92,0X92,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X92,0X00,0XFF,
0XFF,0XFF,0X00,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0X00,
0XFF,0XFF,0X00,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0X00,0XFF,0X00,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0X00,0X00,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0X92,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
0XDB,0XDB,0XDB,0X92,0X92,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,0XDB,
};
//---------------------------------------------------------------------------
static HRESULT MessageDialogHook(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam,BOOL* bIntercept)
{ if(Message==WM_COMMAND && HIWORD(wParam)==CM_CLICKED)
{ TDialogInfo *dlgInfo=(TDialogInfo *)WndClsBuf(hWnd);
dlgInfo->ModuleResult=WNDPTR(lParam)->UserData;
*bIntercept=true;
}
return 0;
}
/********************************************************************************
* FUNCTION NAME : MessageDlg
*
* INPUTS/OUTPUTS:
* lpText : window text
* lpCaption : window title
* btnArray : buttons caption,(if more than one,separate it with "|")
*
* VALUE RETURNED:
* button index,(from left to right)
*
* Example:
* MessageDlg("Are you OK?","greet","yes|no");
* if you select yes button ,the return value is 1,else return 2;
*
* Remark:
* 本消息框虽然采用同步方式实现,但它对消息进行了过滤和转发,即:
* 只对发往本窗口的消息进行处理,对发往其它窗口的消息则进行转发。
* 由于本对话框做到不多处理一条也不漏转发一条消息,所以同样支持在异步窗体环境中调用.
**********************************************************************************/
int MessageDlg(LPCSTR lpText,LPCSTR lpCaption,LPCSTR lpCmdArray)
{ int j,x,y,BtnAreaWidth,dlgClientWidth,dlgClientHeight,dlgWidth,dlgHeight,btncount,ModuleResult=0;
HWND LastDlg;
DWORD dlgWndID;
TDlgButtons dlgbtns;
TDlgButtons *pbtns=&dlgbtns;
TDialogInfo *dlgInfo;
TSIZE InfoTextSize;
/*计算客户文本区的长宽尺寸*/
GetTextSize(NULL,lpText,&InfoTextSize);
/* 确定命令按钮的数目、标题、及尺寸大小*/
pbtns->Next=NULL;
if(!lpCmdArray)
{ strcpy(pbtns->caption,"确定");
btncount=1;
pbtns->width=strlen(pbtns->caption)*SYS_FONT_WIDTH+(BTN_INNER_MARGIN<<1);
if(pbtns->width<BUTTON_WIDTH_DEFAULT)pbtns->width=BUTTON_WIDTH_DEFAULT;
BtnAreaWidth=pbtns->width;
}
else
{ char *p=(char *)lpCmdArray;
BtnAreaWidth=0;
j=btncount=0;
while(1)
{ if(*p=='|' || *p=='\0')
{ if(j>=BUTTON_CAPTION_MAXSIZE) j=BUTTON_CAPTION_MAXSIZE-1;
if(j>0) memcpy(pbtns->caption,lpCmdArray,j);
pbtns->caption[j]='\0';
pbtns->width=j*SYS_FONT_WIDTH+BTN_INNER_MARGIN+BTN_INNER_MARGIN;
if(pbtns->width<BUTTON_WIDTH_DEFAULT)pbtns->width=BUTTON_WIDTH_DEFAULT;
j=0;
btncount++;
BtnAreaWidth+=pbtns->width;
if(*p=='|')
{ pbtns->Next=(TDlgButtons *)GetMem(sizeof(TDlgButtons));
pbtns=pbtns->Next;
pbtns->Next=NULL;
lpCmdArray=p+1;
BtnAreaWidth+=DLG_BUTTON_SPAN;
}else break;
}else j++;
p++;
}
}
/*确定对话框的高度*/
dlgClientHeight=InfoTextSize.y+DLG_CLIENT_MARGIN+DLG_CMDBTN_HEIGHT;
/*初步确定对话框的宽度,(宽度至少为高度的4/3)*/
dlgClientWidth=(dlgClientHeight/3)<<2;
/*根据按钮区宽度调整对话框宽度*/
if(BtnAreaWidth>dlgClientWidth)dlgClientWidth=BtnAreaWidth;
/*根据主文本信息宽度调整对话框宽度*/
x=InfoTextSize.x;
if(x>dlgClientWidth)dlgClientWidth=x;
/*根据标题宽度调整对话框宽度*/
x=strlen(lpCaption)*SYS_FONT_WIDTH+DLG_SYSBTN_WIDTH;
if(x>dlgClientWidth)dlgClientWidth=x;
/*对话框大小的最后调整*/
dlgClientWidth+=DLG_CLIENT_MARGIN*2;
dlgClientHeight+=DLG_CLIENT_MARGIN*2;
/*根据对话框嵌套深度决定对话框的坐标位置*/
dlgWidth=dlgClientWidth+DLG_BORDER_SIZE*2;
dlgHeight=dlgClientHeight+CAPTION_BAR_HEIGHT+DLG_BORDER_SIZE*2;
x=(LCD_WIDTH>dlgWidth)?(LCD_WIDTH-dlgWidth)>>1:0;
y=(LCD_HEIGHT>dlgHeight)?(LCD_HEIGHT-dlgHeight)>>1:0;
if(MessageDlgCount)
{ x+=MessageDlgCount*DLG_CLIENT_MARGIN;
y+=MessageDlgCount*DLG_CLIENT_MARGIN;
if(x+dlgWidth>LCD_WIDTH)x=LCD_WIDTH-dlgWidth;
if(y+dlgHeight>LCD_HEIGHT)y=LCD_HEIGHT-dlgHeight;
}
LastDlg=hMessageDlg;
/*创建对话框窗体*/
hMessageDlg=CreateWindow("dialog",lpCaption,WS_CAPTION|WS_ALWAYSONTOP|((btncount==1)?WS_SYSMENU:0),x,y,dlgWidth,dlgHeight,NULL,0,NULL);
if(!hMessageDlg)
{ DebugAlert("MessageDlg(...) failed!");
hMessageDlg=LastDlg;
return 0;
}
else
{ dlgInfo=(TDialogInfo *)WndClsBuf(hMessageDlg);
dlgInfo->ModuleResult=0;
/*如果对话框创建成功,并且之前有对话框未关闭,则将其Disable*/
/*Only allow the latest dialog get the key or mouse focus*/
if(LastDlg)
{ EnableWindow(LastDlg,false);
}
MessageDlgCount++;
}
/*创建对话框的客户区文本标签*/
x=(dlgClientWidth-InfoTextSize.x)>>1;
CreateWindow("static",lpText,0,x,DLG_CLIENT_MARGIN,InfoTextSize.x,InfoTextSize.y,hMessageDlg,0,NULL);
/*创建对话框的命令按钮*/
x=(dlgClientWidth-BtnAreaWidth)>>1;
y= dlgClientHeight-DLG_CLIENT_MARGIN-DLG_CMDBTN_HEIGHT;
pbtns=&dlgbtns;
btncount=0;
while(1)
{ pbtns->hWnd=CreateWindow("Button",pbtns->caption,WS_TABSTOP|WS_BORDER,x,y,pbtns->width,SYS_FONT_HEIGHT+BTN_INNER_MARGIN+BTN_INNER_MARGIN,hMessageDlg,0,NULL);
WNDPTR(pbtns->hWnd)->UserData=++btncount;
x+=(pbtns->width+DLG_BUTTON_SPAN);
if(pbtns->Next)pbtns=pbtns->Next;
else break;
}
/*设置默认焦点*/
SetFocus(pbtns->hWnd);
/*安装对话框消息钩子,捕捉命令铵钮消息。*/
InstallHook(hMessageDlg,WM_COMMAND,MessageDialogHook);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -