⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.c

📁 MinGUI 可视化程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
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 + -