Unicode Owner Draw Button Control

Introduction
When I was writing an application for an Arabic customer in C++, I noticed that the buttons/labels in my CDialog did not understand my Arabic text. This class allows you to write any Unicode text in the button control. (And you can use it as a direction for making the same for a static label, for instance).
Background
This article started as a simple project to display Arabic text from a MySQL database / file on images/dialogs. I noticed that when you write Unicode characters into the developer environment directly, you need to convert it to Unicode first. That's is why I make use of the function MultiByteToWideChar in the sample application.
Using the code
The implementation of the CUniButton is done in the following steps:
- Add a button to your dialog and set the Owner-Draw property to True.
- Add a member variable for your button and change
CButtontoCUniButton.Change:
CButton m_button1;
to:
CUniButton m_button1;
- Add the
UniButtonheader file into your Dialog header:#include "unibutton.h"
To change text/font/reading order, use the following:
m_button1.SetText(L"Unicode text goes here"); m_button1.SetRTL(0);//no right to left m_button1.SetFont("Tahoma",30);
For Arabic, set the RTL to True:
Add the Usp10.lib library to your project dependencies.
The following functions are implemented:
void SetHilightColors (COLORREF hilight,COLORREF hilightText);void SetNormalColors (COLORREF clrBkgnd,COLORREF clrText);void SetText(WCHAR *szText);void SetRTL(int bRTL);void SetDefaultSSAFlags(DWORD dwFlags);void SetFont(char *szFaceName, int height);void SetHorizontalAlignment(_AlignHorz hAlign);void SetVerticalAlignment(_AlignVert vAlign);
Points of Interest
I'm just starting to learn how to use Unicode characters in projects. It is possible that I forgot to implement some important features. If so, you probably want to modify the functions: PlotTXTUnicode and/or CalcTXTUnicode.
History
- Version 1.0: 25/09/2005

浙公网安备 33010602011771号