プロが教えるわが家の防犯対策術!

//宣言部
HDChD;
PAINTSTRUCT ps;
TEXTMETRICtm;
RECTrt;
inti,j,k,l,m,n;
stringstr;
static inti_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);"により長方形を被せずに書くことができます
しかし文字は重ね書きできません
上の例では'+'を表示したいのに後で書いた'-'だけが表示されてしまいます

何か良い方法はないでしょうか?

A 回答 (2件)

SetBkMode(hD, TRANSPARENT);


としておけばいいのではないでしょうか?

# あと DC で NULL_BRUSH を選択しておけば、
# SetROP2(hD,R2_NOTXORPEN);
# しなくても、長方形を塗りつぶさずに描けますよ。
    • good
    • 0
この回答へのお礼

ありがとうございました
下のようにすれば動きました
そして質問はR2_MASKPENとすべきでしたね

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;
i_ch=tm.tmHeight;
SelectObject(hD,GetStockObject(NULL_BRUSH));//SetROP2(hD,R2_MASKPEN);
SetTextAlign(hD,TA_LEFT|TA_TOP);
SetBkMode(hD, TRANSPARENT);
//////////////////////////////////////////////
Rectangle(hD,2*i_w,2*i_h,66*i_w,12*i_h);
Rectangle(hD,12*i_w,6*i_h,76*i_w,16*i_h);
str="||||||||||||||||||||||||||||||";
TextOut(hD,0,0,str.c_str(),str.size());
str="------------------------------";
TextOut(hD,0,0,str.c_str(),str.size());
//////////////////////////////////////////////
EndPaint(hW,&ps);
return 0;

お礼日時:2003/03/28 04:12

|と-を別々のDCに書いてBitBltでOR演算する。


って言うのはダメですか?

この回答への補足

素早い回答ありがとうございます
実は+を書くのが目的ではなく文字を重ねたものを書きたいのです
Xと目を重ねて目を消したような文字です
他にもいろいろな組み合わせで重ねたいのです

補足日時:2003/03/28 02:29
    • good
    • 0
この回答へのお礼

すいません
回答の意味を取り違えていました
できるかどうか確かめてみます

お礼日時:2003/03/28 02:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!