要控制多个对话进程?winapi / c++
multiple dialog processes to controls? winapi / C++
我刚刚基于这篇文章创建了多个编辑框(11x11控件):https://msdn.microsoft.com/en-us/library/windows/desktop/hh298433%28v=vs.85%29.aspx好吧,不完全相同,但我使用的代码在情况下WM_CREATE:块创建大量的控件。
我在父窗口上使用这个对话框进程:
INT_PTR CALLBACK StartupDialogProc(HWND dialog, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg){
case WM_INITDIALOG:
Init_Startup(dialog);
return 1;
/*
case EN_CHANGE:
case WM_CTLCOLOREDIT:
{
HDC hdC = (HDC)wParam;
COLORREF crColorBackground = RGB(255,0,0);
if (crColorBackground)
SetBkColor(hdC, crColorBackground);
SetTextColor( hdC, RGB(12,112,212) );
SetBkMode( hdC, TRANSPARENT );
RECT rect;
GetClientRect( (HWND)lParam, &rect );
HBRUSH hBrush = CreateSolidBrush( RGB(209,209,209) );
//FrameRect( hdC, &rect, hBrush );
Rectangle( hdC, (int)rect.left, (int)rect.top, (int)rect.right, (int)rect.bottom );
DeleteObject( hBrush );
LOGBRUSH lb;
lb.lbStyle = BS_SOLID;
lb.lbColor = RGB(249,249,249);
lb.lbHatch = 0;
CreateBrushIndirect(&lb); // LRESULT
// GetStockObject(NULL_BRUSH);
return 1;
}
break;
*/
case WM_DESTROY:
setts.options.page = GetDlgItemInt(dialog, IDC_O_STARTUP_PAGE, NULL, FALSE);
setts.options.recent = GetDlgItemInt(dialog, IDC_O_STARTUP_RECENT, NULL, FALSE);
break;
case WM_CLOSE:
EndDialog(dialog, FALSE);
break;
case WM_COMMAND:
if (wParam == IDOK) {
EndDialog(dialog, TRUE);
return 0;
}
}
return 0;
}
有几件事我不清楚:1)如果我想改变从id 5001到id 5121的所有编辑控件的边框颜色,如何做到这一点?对我来说,注释的代码不起作用(什么时候取消注释)。看起来我把这个放错地方了。2)如何正确地为所有控件创建对话过程?因为有一个很大的数字,可能还要高几倍,我应该只是调用一个从5001到id 5121的循环,然后调用函数:INT_PTR CALLBACK EditDlgProc(HWND dialog, UINT msg, WPARAM WPARAM, LPARAM LPARAM) -这将不起作用,因为每个函数都需要有不同的名称
要更改编辑控件的边框颜色,您必须子类化编辑控件并覆盖WM_NCPAINT
。这有点高级,你并不真的需要它。你可以直接使用WS_EX_CLIENTEDGE
标志:
CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT" ...
还要确保项目清单已经设置好,这样你就可以得到现代窗口的外观。
如果没有被注释掉,这将是一个错误:
case EN_CHANGE:
case WM_CTLCOLOREDIT:
每个case应以break;
或return 0;
结尾
此外,WM_CTLCOLOREDIT
应该返回一个在堆上创建的刷。它不应该返回1。参见文档:
那部分还有其他错误,你应该删掉。
相关文章:
- WinAPI挂钩鼠标
- 将执行、作业和WinAPI相乘
- 如何在桌面C++上使用 WinApi 画线
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- Winapi:屏幕截图未显示在窗口中
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- Qt with WinAPI MouseProc
- 如何在"SUBSYSTEM:WINDOWS"下显示并输出到Windows(C++ WinApi)上的
- WinAPI 无法创建按钮
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- WinAPI 检查窗口是否具有常规标题栏
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 将Qt集成到现有的VS项目中以取代WinAPI
- __stdcall - WINAPI vs STDMETHODCALLTYPE vs APIENTRY
- 如何将'this'指针传递给C++ WinAPI 线程?
- Winapi-WM_CLOSE的替代方案
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- WinAPI C++如何从 64 位应用程序加载资源
- winapi 中的哪个功能检查按钮是否正在关闭控制台?
- WinAPI 窗口在使用 PrintWindow 截屏后不再更新