好的,所以我的目的是“修饰”我正在使用的UI。我熟悉使用GDI +手动绘制控件的方法,但今天的目标只是直接在DC上直接设置BitBlitting png。

可以很好地配合主机架,几个按钮甚至某些菜单使用。
我的问题是-您如何使用这样的皮肤对更复杂的东西(例如组合框,列表视图或更多“动态”控件)进行皮肤化?

谢谢。我的目标平台是Windows,并且我在wxWidgets框架中使用C ++。

最佳答案

要“剥皮”现有控件,您必须将窗口子类化并捕获绘制消息。
大致:

// Subclass the control
WNDPROC lpfnOldCtrlProc;
lpfnOldCtrlProc = (WNDPROC)SetWindowLong(ControlHwnd, GWL_WNDPROC,
                    (DWORD)WinSubClassFunc );


并在您的WinSubClassFunc中:

switch( message )
{
case WM_DRAWITEM: // owner-draw the item


但是,如果您想完全“剥皮”控件,例如更改ComboBox的所有元素(边框,输入框,下拉按钮,下拉列表等),这将变得非常混乱。
就个人而言,我发现从头开始创建自己的控件比尝试对包含多个窗口项的现有控件进行子类化要容易得多。

上述方法适用于例如使用带有下拉列表的标准组合框并将其子类化,使其包含颜色条的下拉列表。

关于c++ - 带有图形的UI外观,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22269270/

10-13 06:18