Bir fırça oluşturmak ve takip etmek gerekir. Daha sonra, kod snippet'inize return 0
yerine bu fırçayı döndürün. Fırça artık gerekli olmadığında onu silmeniz gerekir. Bu genellikle WM_DESTROY
mesajına cevap olarak yapılır. Senin durumunda
ben öneriyoruz budur, stok fırça kullanarak mermi atlatmak olabilir.
salt okunur modda, düzenleme denetimleri yerine WM_CTLCOLOREDIT
ait WM_CTLCOLORSTATIC
cevap, bu yüzden düzgün bu mesajı işlemek zorundasınız: düzenle/statik kontrol boyarken
case WM_CTLCOLORSTATIC:
{
if((HWND)lParam == GetDlgItem(hwnd, IDC_EDIT_IN))
{
SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor(hdc, RGB(255, 255, 255));
return (LRESULT)((HBRUSH)GetStockObject(BLACK_BRUSH));
// if edit control is in dialog procedure change LRESULT to INT_PTR
}
else // this is some other static control, do not touch it!!
return DefWindowProc(hwnd, message, wParam, lParam);
}
, boyama için kullanılabilir 3 bölümden oluşur:
- metin rengi
- metin arka plan
- denetimin ba amacıyla ckground
İstenen renk (pencere prosedürü için return (LRESULT)someBrush
veya return (INT_PTR)someBrush
iletişim kutusu) ile fırça döndürmelidir arzu edilen renge tam kontrol boya.
SetBkColor
için Çağrı farklı denetimin arka plan rengi dan metin arka plan rengini ayarlar. Bu yüzden TRANSPARENT
parametresi ile SetBkMode
parametresini arayarak, kontrol arka planının eşleşmesi için metin arka planını istediğimizi "söylüyoruz". Ben bunu takip etmek gerekmez, çünkü stok fırça kullanılır, ne de artık gerekli değildir sonra silmeniz gerekir yapmasını istediğinizde durumda
. Eğer başka bir renk isteyeceksiniz zaman
Yine davaları olabilir. Burada Bu durumda yapmanız gereken budur:
- küresel
HBRUSH
değişkeni veya pencere/iletişim prosedüründe static HBRUSH
değişken oluşturun.
- eğer pencere prosedüründe
WM_CREATE
yanıt olarak bu değişkeni başlatın. Diyalog prosedüründe fırçayı WM_INITDIALOG
'da başlatın. someBrush = CreateSolidBrush(RGB(255, 0, 255));
gibi bir şey Daha fazla bilgi ve örnek için documentation'a bakın.
- Bu fırçayı, örneğin yukarıdaki örnekte gösterdiğim gibi (pencere yordamı için
return (LRESULT)someBrush
veya iletişim kutusu için return (INT_PTR)someBrush
) döndürün.
- Artık gerekmediğinde fırçayı silin. Bu genellikle
DeleteObject(someBrush);
çağrı ile WM_DESTROY
yapılır. WM_CLOSE
bazen bu senaryo için örnekler bulmak için internette arama (atlanabilir süre
şiddetle, bu pencere her zaman alacaksınız mesajdır çünkü WM_DESTROY
yerine WM_CLOSE
cevaben silme yapmak tavsiye).
Başka sorularınız varsa yorum yapmanıza yardımcı olacağımı umuyorum ve yardımcı olmaya çalışacağım. Saygılarımla.
"WM_CTLCOLORSTATIC" dosyasına bakmanızı öneririz –
MSDN makalesini okuyun, bir fırçayı döndürmenizi bildirir. –