WinAPIで文字の重ね書きはできるの?
//宣言部
HDC hD;
PAINTSTRUCT ps;
TEXTMETRIC tm;
RECT rt;
int i,j,k,l,m,n;
string str;
static int i_W,i_H,i_w,i_h;
//処理部(ペイント部のみ)
case WM_PAINT:
hD=BeginPaint(hW,&ps);
GetClientRect(hW,&rt);
i_W=rt.right-rt.left;
i_H=rt.bottom-rt.top;
SelectObject(hD,GetStockObject(OEM_FIXED_FONT));
GetTextMetrics(hD,&tm);
i_w=tm.tmAveCharWidth;
i_h=i_H/24;
SetROP2(hD,R2_NOTXORPEN);//これによる効果
SetTextAlign(hD,TA_LEFT|TA_TOP);
/////////////////////////////////////////////////////////
Rectangle(hD,2*i_w,2*i_h,66*i_w,12*i_h);//ok
Rectangle(hD,12*i_w,6*i_h,76*i_w,16*i_h);//ok
str="||||||||||||||";
TextOut(hD,0,0,str.c_str(),str.size());//out
str="--------------";
TextOut(hD,0,0,str.c_str(),str.size());//out
//////////////////////////////////////////////////////////
EndPaint(hW,&ps);
return 0;
において"SetROP2(hD,R2_NOTXORPEN);"により長方形を被せずに書くことができます
しかし文字は重ね書きできません
上の例では'+'を表示したいのに後で書いた'-'だけが表示されてしまいます
何か良い方法はないでしょうか?
お礼
回答への補足で、再質問しましたが、色々試しているうちにFormatの使い方の誤りに気がつき、その当たりを直しているうちに、予測通り動くようになりました(早く反応しようと思い、十分に確かめず、再質問をしてしまいました、ご容赦下さい)。 問題の原因は想像していたものに近いものでしたが、具体的な解決策が分からず、何日も放置していました。今回の教示で直ぐに解決できました。ありがとうございました。
補足
ありがとうございました。テキストボックスの方は、プロパティのフォントをMS ゴシックにして解決しました。これが等幅フォントと初めて知りました。プリンタの方は、印刷直前に Printer.Font.Name = "MS ゴシック" を入れてみましたが解決しませんでした。まるっきりの初心者ですので、この指定が全然間違っているのか、フォント名を半角で指定するのか、あるいは、プリンタ側にこのフォントを持っていないのかなどの区別が付きません。この点も宜しくお教え下さい。