在C ++中设置静态背景色 [英] Set static background color in c++

查看:127
本文介绍了在C ++中设置静态背景色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿!

我想更改静态背景的颜色.

Hey!

I want to change the background color of a static.

mainhwnd = CreateWindowEx(blah,blah,blah ordinary window settings!, blah);
texthwnd = CreateWindowEx(0, "STATIC", "RAM: 99%",
                          WS_CHILD | WS_VISIBLE | SS_SIMPLE,
                          10, 10, 100, 100, mainhwnd, 0, 0, 0);



"texthwnd"是我要更改其颜色的HWND.

这是一个普通的静态"窗口:)

请帮帮我!



"texthwnd" is the HWND i want to change color of.

It''s an ordinary "STATIC" window :)

Please help me!

推荐答案

以下是您的示例:
Here is your example:
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>

#pragma comment (lib,"User32.lib")
#pragma comment (lib,"Gdi32.lib")

HWND      texthwnd = 0;
COLORREF  textcol = RGB(0,0,0);

void OnCreate(HWND hParent)
{
  texthwnd = CreateWindowEx(0, __T("STATIC"), __T("RAM: 99%"),
                            WS_CHILD | WS_VISIBLE | SS_SIMPLE,
                            1010100100, hParent, 000);
  SetTimer(hParent,100,100,0);
}

LRESULT OnCtlColorStatic(HDC hdc,HWND hCtl)
{
  if(hCtl==texthwnd)
  {
    SetTextColor(hdc,textcol);
    return (LRESULT)GetStockObject(HOLLOW_BRUSH);
  }
  return 0;
}

void OnTimer(HWND hwnd,int idTimer)
{
  if(100==idTimer)
  {
    switch(textcol)
    {
      case RGB(0,0,0)  : textcol = RGB(255,0,0); break;
      case RGB(255,0,0): textcol = RGB(0,255,0); break;
      case RGB(0,255,0): textcol = RGB(0,0,255); break;
      default          : textcol = RGB(0,0,0); break;
    }
    InvalidateRect(hwnd,0,1);
  }
}

static LRESULT FAR PASCAL __wndproc(HWND h,unsigned int m,WPARAM w,LPARAM l)
{
  LRESULT  r;
  switch(m)
  {
    case WM_CTLCOLORSTATIC:
      if(r=OnCtlColorStatic((HDC)w,(HWND)l)) return r;
    break;

    case WM_CREATE:
      OnCreate(h);
    break;
    case WM_TIMER:
      OnTimer(h,w);
    break;

    case WM_CLOSE:
      DestroyWindow(h);
    break;

    case WM_DESTROY:
      PostQuitMessage(0);
    break;
  }
  return DefWindowProc(h,m,w,l);
}

int FAR PASCAL _tWinMain(HINSTANCE h,HINSTANCE p,LPTSTR c,int sw)
{
  WNDCLASS  wc = { 0,__wndproc,0,0,h,0,LoadCursor(0,IDC_ARROW),(HBRUSH)(COLOR_WINDOW+1),0,__T("mywnd") };
  HWND      hwnd;

  if(RegisterClass(&wc))
  {
    hwnd = CreateWindowEx(  0, wc.lpszClassName, __T("Hello world"),
                            WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0000);
    if(IsWindow(hwnd))
    {
      ShowWindow(hwnd,sw);
      for(MSG m;GetMessage(&m,0,0,0);)
      {
        TranslateMessage(&m);
        DispatchMessage(&m);
      }
    }
  }
  return 0;
}


祝你好运.


Good luck.


处理 WM_CTLCOLORSTATIC [ ^ ](在静态父窗口中)(请参见发布的链接中的示例).
Handle the WM_CTLCOLORSTATIC[^] in the static''s parent window (See the example in the posted link).


希望此链接对您有帮助

http://msdn.microsoft.com/en-us/library/0wwk06hc (v = vs.80).aspx [
Hope this link will help you

http://msdn.microsoft.com/en-us/library/0wwk06hc(v=vs.80).aspx[^]


这篇关于在C ++中设置静态背景色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆