Windows程序都是基于消息的一个程序系统,我们要获取一个窗体的文本可以通过发送一个消息获取,只要知道窗体发送的消息是一个什么样的消息,就可以通过SendMessage获取这个消息。
WM_GETTEXT:
SendMessage(
HWND hWnd;
WM_GETTEXT:
wParam = (WPARAM) cchTextMax;
lParam = (LPARAM) lpszText;
)
lParam 你所提供的buffer用来保存窗体的文本。
我们要获取的文本是谁的文本,句柄就是谁的句柄。
我们可以先获取这个控件的指针,所有跟窗口相关的类都有一个数据成员m_hWnd,保存了相对应的句柄。
例:
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)chr1);
::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)chr1);
GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)chr1);
m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)chr1);
以上这4中代码都可以实现。
访问控件的方式:
也是发送消息,给一个对话框子控件发送消息。SendDlgItemMessage
LRESULT SendDlgItemMessage( int nID, UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
第一个参数这个控件的ID号,后边的参数,跟SendMessage就是一样的了。
例:
获取文本复选内容的消息。对于编辑框来说,我们可以在编辑框输入一些文本,获取复选部分的内容,而不是整个窗体的内容,
EM_GETSEL
wParam = (WPARAM) (LPDWORD) lpdwStart; // receives starting position
lParam = (LPARAM) (LPDWORD) lpdwEnd;
获取一个复选的内容的消息,
wParam 表示开始的位置 要求是指向DWORD的一个指针。
lParam 表示结束的位置
EM_SETSEL
wParam = (WPARAM) (INT) nStart;
lParam = (LPARAM) (INT) nEnd;
设置复选的内容的消息。
例:
int num1,num2,num3;
但是我们运行的时候没有产生我们想要的结果。这是因为焦点不在复选的内容上。所以我们看不到复选的部分。如果想要产生我们想要的效果,就要将焦点转移到我们的编辑框上,我们需要用一个函数:
CWnd* SetFocus( );
用来设置窗口的焦点,返回一个先前具有输入焦点的窗口所对应的C++类的一个指针。
例:
int num1,num2,num3;
m_edit3.SetFocus();
如果将起始位置设为0,结束位置设为-1,那么所有文本将被选上。