改行コード"\r\n"を含む文字列を、黒塗りつぶし・白縁で描画したいのですが、次の問題点の正しい解決方法が分かりません。
(1) 改行部分に中点が表示される。
ttps://tadaup.jp/260910bd2.jpg
ttps://tadaup.jp/260911b3e.jpg
高さを計算して、制御コードなしの文字列を一行毎に出力する必要があるのでしょうか?
(2)毎ループ描画すると偶に塗り潰されないことがある。
ttps://tadaup.jp/26096b110.jpg
ttps://tadaup.jp/26096bcef.jpg
描画間隔を緩めると発生しなくなることは確認していますが、何か使い方が間違ってるんでしょうか?
以下、文字列出力部分のソースコードになります。
===== dxlib_text_writer.h =====
#ifndef DXLIB_TEXT_WRITER_H_
#define DXLIB_TEXT_WRITER_H_
class CDxLibTextWriter
{
public:
CDxLibTextWriter();
~CDxLibTextWriter();
bool SetFont(const wchar_t* pwzFontFileName, int iFontSize, bool bBold, bool bItalic);
void Draw(const wchar_t* pwzText, unsigned long ulTextLength, int iPosX = 0, int iPosY = 0);
void SwitchTextColour();
private:
int m_iFontHandle = -1;
enum Colours : unsigned int
{
kBlack = 0xff000000,
kWhite = 0xffffffff,
};
unsigned int m_uiFillColour = Colours::kBlack;
unsigned int m_uiOutLineColour = Colours::kWhite;
bool DeleteFont();
};
#endif // !DXLIB_TEXT_WRITER_H_
==============================
===== dxlib_text_writer.cpp =====
#include "dxlib_text_writer.h"
#define DX_NON_USING_NAMESPACE_DXLIB
#include <DxLib.h>
CDxLibTextWriter::CDxLibTextWriter()
{
}
CDxLibTextWriter::~CDxLibTextWriter()
{
DeleteFont();
}
bool CDxLibTextWriter::SetFont(const wchar_t* pwzFontFileName, int iFontSize, bool bBold, bool bItalic)
{
DeleteFont();
m_iFontHandle = DxLib::CreateFontToHandle
(
pwzFontFileName,
iFontSize > 0 ? iFontSize : DEFAULT_FONT_SIZE,
bBold ? DEFAULT_FONT_THINCK : static_cast<int>(DEFAULT_FONT_THINCK / 2),
DX_FONTTYPE_ANTIALIASING_EDGE_4X4,
DX_CHARSET_UTF8,
DEFAULT_FONT_EDGESIZE,
bItalic ? TRUE : FALSE
);
return m_iFontHandle != -1;
}
void CDxLibTextWriter::Draw(const wchar_t* pwzText, unsigned long ulTextLength, int iPosX, int iPosY)
{
if (m_iFontHandle != -1)
{
DxLib::DrawNStringToHandle(iPosX, iPosY + 4, pwzText, ulTextLength, m_uiFillColour, m_iFontHandle, m_uiOutLineColour);
}
}
void CDxLibTextWriter::SwitchTextColour()
{
m_uiFillColour = m_uiFillColour == Colours::kBlack ? Colours::kWhite : Colours::kBlack;
m_uiOutLineColour = m_uiOutLineColour == Colours::kBlack ? Colours::kWhite : Colours::kBlack;
}
bool CDxLibTextWriter::DeleteFont()
{
if (m_iFontHandle != -1)
{
int iRet = DxLib::DeleteFontToHandle(m_iFontHandle);
if (iRet == -1)return false;
m_iFontHandle = -1;
}
return true;
}
==============================
実際には次のように設定しています。
m_DxLibTextWriter.SetFont(L"游明朝 Demibold", 24, true, true);
後は完全に脱線になりますが、DEFAULT_FONT_THINCKのマクロ名は'N'が余計か、名詞化して..._THICKNESSなのかな、という気がしました。
以上、よろしくお願いします。