好的,所以我的意图是“美化”我正在工作的UI。我熟悉使用GDI+手动绘制控件,但我今天的目标只是直接在DC上使用BitBlitting png。
这与主框架,几个按钮和一些菜单很好的工作。我的问题是--你会如何使用这样的皮肤来剥去更复杂的东西,比如组合框、列表视图或更“动态”的控件?
谢谢。我的目标平台是Windows,我使用的是C++和wxWidgets框架。
发布于 2014-03-08 12:56:46
若要“皮肤”现有控件,您必须对窗口进行子类化,并捕获绘制消息。大致如下:
// Subclass the control
WNDPROC lpfnOldCtrlProc;
lpfnOldCtrlProc = (WNDPROC)SetWindowLong(ControlHwnd, GWL_WNDPROC,
(DWORD)WinSubClassFunc );在你的WinSubClassFunc中:
switch( message )
{
case WM_DRAWITEM: // owner-draw the item然而,如果你想要完全“皮肤”一个控制,例如改变一个ComboBox的所有元素(边框,入口盒,下拉按钮,液滴等等)然后,这就变成了真正的混乱。就我个人而言,我发现从零开始创建自己的控件要比尝试将包含多个窗口项的现有控件子类更容易。
上述方法可以很好地工作,例如使用带有液滴的标准组合框,并将其细分为包含色块液滴。
https://stackoverflow.com/questions/22269270
复制相似问题