C++ win32项目中的SendMessage具有不同的结果
我有一个win32项目,它有两个文本窗口(inputArea、outputArea)和两个按钮(sendButton和ResetButton) 我的问题是,当我按下Reset键时,我想清除两个区域的文本,输入区域被清除,但输出区域被着色 以下是我尝试过的代码:C++ win32项目中的SendMessage具有不同的结果,c++,codeblocks,sendmessage,win32gui,C++,Codeblocks,Sendmessage,Win32gui,我有一个win32项目,它有两个文本窗口(inputArea、outputArea)和两个按钮(sendButton和ResetButton) 我的问题是,当我按下Reset键时,我想清除两个区域的文本,输入区域被清除,但输出区域被着色 以下是我尝试过的代码: case IDC_ResetButton: { SendMessage(hwndInputArea, WM_SETTEXT, NULL, NULL); SendMessage(hwndOutputArea, WM_SETTEX
case IDC_ResetButton:
{
SendMessage(hwndInputArea, WM_SETTEXT, NULL, NULL);
SendMessage(hwndOutputArea, WM_SETTEXT, NULL, NULL);
break;
}
我的初始输入区域:
我的初始输出区域:
下面是当我按下Reset时outputArea发生的情况:
另外,我分别尝试了每一行代码,它们都能工作,但当我把它们都放进去时,我得到了输出区域的结果,我不知道为什么
提前感谢。每次尝试在按钮盒上获得编辑控件的手柄,如下所示(将IDC_EDIT1和2更改为编辑控件ID):
我想这就是编辑控制。 有三种颜色可供选择 ・文本颜色
・背景色
・画笔
HBRUSH CXxxDlg::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ) {
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(192,192,192)); // …(1)
HBRUSH hbrOrg = static_cast<HBRUSH>(GetStockObject(GRAY_BRUSH)); // …(2)
return hbrOrg;
}
HBRUSH cxxdlg::OnCtlColor(CDC*pDC、CWnd*pWnd、UINT-nCtlColor){
HBRUSH hbr=CDialog::OnCtlColor(pDC、pWnd、nCtlColor);
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(192192)); // …(1)
HBRUSH hbrOrg=静态投影(GetStockObject(灰色笔刷)); // …(2)
返回hbrOrg;
}
(1) (2)…使用相同的颜色试着改用。另外,
LRESULT
在这两种情况下,当它工作时和不工作时,SendMessage
返回什么?Genti Saliu,LRESULT在这两种情况下都是1,它工作,它从输出区域删除文本,但我不希望颜色出现在那里。Christopher Oicles,我试过了,结果也一样。@Tom抱歉——我意识到我的建议没有用,但在我注意到你的答复之前,我删除了我的建议。我的下一个猜测是,您可能正在通过处理一条WM\u CTLCOLOR…
消息来设置背景色,检测hWnd是否用于您的输入控件,然后更改DC的背景色(和笔刷)作为groovy背景色。但是,如果hWnd用于另一个控件,则处理程序只会将DC单独留下。如果是这样的话,,当为输出hWnd调用处理程序时,您可能希望尝试将DC重置为默认背景色。由于他的现有代码已经改变了两个窗口,很明显他已经有了正确的窗口句柄。我刚刚测试了相同的操作,当我在案例外获得句柄时,得到的结果并不相同句柄,因此它可能是一个句柄问题,句柄可以保存在WM_命令案例或按钮单击事件案例中。
HBRUSH CXxxDlg::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ) {
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(192,192,192)); // …(1)
HBRUSH hbrOrg = static_cast<HBRUSH>(GetStockObject(GRAY_BRUSH)); // …(2)
return hbrOrg;
}