关于对话框的一些知识点

本文介绍了MFC中对话框的基本操作,包括修改对话框标题、创建模态和非模态对话框、动态添加按钮、获取控件文本、复选文本及控件焦点设置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何修改基于对话框模式下的对话框标题?

在每个对话框类的OnInitDialog方法里添加  SetWindowText("ok");

 

 

创建一个模态(modal)对话框
Virtual int DoModal()
在CView类基础上建立一个CDilog类

 CTest sd;//CTest为新建立的对话框建立的类名称
 sd.DoModal();


创建一个非模态(modeless)对话框
CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL )
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
第一个参数为对话框的模板ID或者是模板名称  第二个参数设置为null的时候,父级自动为框架类
 CTestDLG *p=new CTestDLG();
 p->Create (IDD_DIALOG1,this);
 p->ShowWindow(SW_SHOW);


如何动态添加一个按钮
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
if(!myButton1.m_hWnd)//每个按钮自己都有一个关联句柄
{
myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
   CRect(10,10,100,30), this, 1);
}else
{
DestroyWindow();//自动清楚按钮的句柄,为空
}

_T,CString 等的区别
Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。
如果你编译一个程序为ANSI方式,
_T实际不起任何作用。
而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。

 
LPSTR:32bit指针指向一个字符串,每个字符占1字节

LPCSTR:32-bit指针指向一个常字符串,每个字符占1字节
LPCTSTR:32-bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义
LPTSTR:32-bit指针每字符可能占1字节或2字节,取决于Unicode是否定义


如何获得DLG上的控件显示的文本
CWnd::GetDlgItem
CString str;
if (GetDlgItem(IDC_NUMBER1)->GetWidowText(str),str=="NUMBER1:")
{
GetDlgItem(IDC_NUMBER1)->SetWidowText("lalal");
}
else
{
GetDlgItem(IDC_NUMBER1)->SetWidowText("dfd");
}


如何复选输入框或rich edit control 内的文本?
SendMessage(
  (HWND) hWnd,       // handle to destination window
  EM_SETSEL,         // message to send
  (WPARAM) wParam,   // starting position
  (LPARAM) lParam    // ending position
);
或者
LRESULT SendDlgItemMessage(
int nID,
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0 );

GetDlgItem()->Get(Set)WindowText();
GetDlgItemText()/SetDlgItemText()
GetDlgItemInt()/SetDlgItemInt();
将控件和整型变量关联
将控件和控件变量关联
SendMessage()
SendDlgItemMessage()

 

 

CWnd* SetFocus( );//让控件获取焦点,否则设置了复选消息,不能复选文本
例子:
SendDlgItemMessage(IDC_SPIN1, EM_SETSEL, 1, 3); 第三个参数指要复选文本的开始位置,第四个参数指要复选文本的结束位置,
m_edit3.SetFocus();

什么叫兄弟窗口?
共享同一个父窗口的多个子窗口叫兄弟窗口

什么叫前台窗口,什么叫后台窗口
在windows系统中,每一个进程可创建多个线程,每个线程都能创建窗口。创建正在使用窗口的线程称之为前台线程,而这个窗口就叫前台窗口;
所有其他的线程床都叫后台线程,由后台线程创建的窗口就叫后台窗口
应用程序则用函数SetForegroundWindow设置前台窗口

  static  CRect rectLarge;
 static CRect rectSmall;
 if(rectLarge.IsRectNull ())
 {
  CRect crSeporate;
        GetWindowRect(&rectLarge);
        GetDlgItem(IDC_Separ)->GetWindowRect(&crSeporate);
        rectSmall.top =rectLarge.top ;
  rectSmall.left =rectLarge.left ;
  rectSmall.right =rectLarge.right ;
  rectSmall.bottom =crSeporate.bottom ;
 }

 if (str=="扩展<<")
 {
  SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height (),SWP_NOMOVE|SWP_NOZORDER);
 
 }
 else
 {
  SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height (),SWP_NOMOVE|SWP_NOZORDER);
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值