安全黑客
当前位置:安全黑客文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>通过消息实现自定义输入框(InputBox)</b>[VC/C++编程]

赞助商链接



  本文“<b>通过消息实现自定义输入框(InputBox)</b>[VC/C++编程]”是由安全黑客为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

C++Builder供应了两个显示输入对话框的函数:InputBox和InputQuery(此中InputBox也是通过调用InputQuery实现),这个输入对话框有很多缺陷,在从前的文章中我曾提到过操纵改正VCL源码来实现自定义输入对话框,后来在Torry.net看到一篇文章是操纵自定义消息的办法来实现,原文是Delphi代码,ccrun(老妖)用C++改写,并得当改正让显示效果更好一些:

基本思绪:在输入对话框显示出来从前,Post一条消息给主窗体,由主窗体负责改正输入对话框窗体的属性和输入文字编辑框的属性,在主窗体中通太重载WndProc函数来呼应自定义消息.

代码及效果图以下:

.h文件中:

public:
void __fastcall WndProc(TMessage &Msg);

.cpp文件中:

// 自定义一个消息,告诉主窗体举行输入框的设置
#define MY_INPUT_BOX WM_USER + 101
//---------------------------------------------------------------------------
// 重载主窗体的WndProc实现自定义消息的处理
void __fastcall TfrmMain::WndProc(TMessage &Msg)
{
 if(Msg.Msg == MY_INPUT_BOX)
 {
  // Msg.WParam
  // 0: 普通情势, 1: 密码框情势
  // Msg.LParam
  // 0: 普通情势, 1: 带图片的情势
  TForm *frm = Screen->Forms[0];
  if(frm != this) // 输入框窗体
  {
   // 将输入对话框的字体设为和主窗体一样,倡议将主窗体字体设为宋体9号
   frm->Font->Assign(Font);
   // 改变OK和Cancel按钮的标题
   HANDLE hBtnOK = FindWindowEx(frm->Handle, NULL, "TButton", "OK");
   HANDLE hBtnCancel = FindWindowEx(frm->Handle, NULL, "TButton", "Cancel");
   if(hBtnOK)
    SetWindowText(hBtnOK, "肯定(&O)");
   if(hBtnCancel)
    SetWindowText(hBtnCancel, "撤消(&C)");
   // 能否需求显示一个图片
   if(Msg.LParam == 1)
   {
    // 新增一个图片在窗体左下角,指定其Owner为输入框窗体,
    // 这样当输入框窗体关闭时自动释放TImage的资源
    TImage *img = new TImage(frm);
    img->Picture->Assign(Application->Icon);
    img->Left = 11;
    img->Top = 60;
    img->Parent = frm;
    img->Show();
   }
   
   // 能否为密码框式 // 63 63 72 75 6E 2E 63 6F 6D
   if(Msg.WParam == 1)
   {
    HANDLE hEdit = FindWindowEx(frm->Handle, NULL, "TEdit", NULL);
    if(hEdit)
     SendMessage(hEdit, EM_SETPASSWORDCHAR, WPARAM('*'), 0);
   }
  }
 }
 TForm::WndProc(Msg);
}
原先的InputBox(图1)void __fastcall TfrmMain::btnOldStyleClick(TObject *Sender)
{
 String strText = InputBox("原先的输入对话框", "请输入一些字符: ", "");
 if(strText.Trim().Length() > 0)
  ShowMessage(strText);
}
通过消息实现自定义输入框(InputBox)

(图1) 可以看到窗体上字符显示不全,并且两个按钮的标题也是英文的.


  以上是“<b>通过消息实现自定义输入框(InputBox)</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看安全黑客为您推荐以下文章:
  • HP智能管理中心FaultDownloadServlet信息泄露漏洞
  • Palo Alto Networks的防火墙到一个新的水平
  • LTE带来了新的安全问题,电信运营商
  • iPhone的Multi-Touch技术的MacBook在10月?
  • McAfee的SmartFilter管理服务器SFAdminSrv.exe JBoss的RMI远程执行代码Vulnerabilty
  • Oracle表格识别CroScPlt.dll ActiveX控件远程代码执行Vulnerabilty
  • Oracle的WebCenter表格识别Sssplt30.ocx ActiveX控件远程代码执行Vulnerabilty的
  • RealNetworks公司的RealPlayer IVR MLTI块长度解析远程代码执行漏洞
  • HP Data Protector的笔记本电脑扩展策略服务器LogBackupLocationStatus远程SQL注入Vulnerabilty
  • HP Data Protector的笔记本扩展策略服务器LogClientInstallation远程SQL注入Vulnerabilty
  • HP Data Protector的笔记本扩展GetPolicies远程SQL注入Vulnerabilty
  • HP Data Protector的笔记本电脑扩展策略服务器RequestCopy远程SQL注入Vulnerabilty
  • 本文地址: 与您的QQ/BBS好友分享!

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    免责条款 - 广告合作 - 下载声明 - 欢迎投稿 - 友情连接 - 网站地图 -
    Copyright © 2012-2013 www.110hack.com. All Rights Reserved .