case WM_PAINT:
  hDC = BeginPaint(hWnd, &ps);
  SetBkMode(hDC, LTGRAY_BRUSH);
  TextOut(hDC,0,0,szHello,strlen(szHello));
  EndPaint(hWnd, &ps);
 break;


これは、int WINAPI WinMain( ) で
wc.hbrBackground= (HBRUSH)GetStockObject(LTGRAY_BRUSH);
としてないと、SetBkMode( ) が無効になりました。
GetStockObject( ) の意味を知らないけど、これによって
LTGRAY という色が特別なものになるんだと思いました。
窓の背景色を
wc.hbrBackground= (HBRUSH)GetStockObject(BLACK_BRUSH);
で黒にした場合に、TextOut( ) の背景色を灰色にするには
どう書けばいいんですか?

A 回答 (1件)

まず、SetBkModeという関数は



背景を透けさせるかどうかを決める関数で

LTGRAY_BRUSHのところをTRANSPARENTとすると 

SetBkMode(hDC,TRANSPARENT);

背景を透けさせることができるので試してみてください。

それで、本題の背景の色を変えるということですが

それはSetBkColor(hDC,COLORREF型変数)という関数で変えられます。

SetBkColor( hDC,RGB(120,120,120) );

とすれば文字の背景が灰色になると思います。

もし、ちがったら教えてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
SetBkMode( ) の意味と引数を勘違いしていたのに
気付きました。
それを消して
SetBkColor( hDC,RGB(120,120,120) );
に書き替えて、wc.hbrBackground の指定に無関係で
文字の背景が灰色にできることを確認しました。

お礼日時:2002/02/12 02:04

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qカッコ悪い使い方

カッコ悪い使い方ってあると思います。
モノの使い方、言葉の使い方、ファッション、
店の利用の仕方、あるいは、このサイトやネットの使い方etc
皆さんの考える「この使い方はカッコ悪い」を教えて下さい。

Aベストアンサー

ものの使い方ではないんですが、ひとつ挙げるとすれば、その人が外見的にカッコ良い人でもそうでなくても、いかにもカッコつけた態度をとっている人、つまり自意識過剰が見え見えの人はカッコ悪いと思います。

逆に言えば、自分に自信が持てるってことは、すごく幸せなことかも。
ま、それがその人の性格だったら、どうしようもないですけど・・・(-_-;)

QhDC=::GetDC(m_hWnd)とhDC=GetDC(m_hWn

hDC=::GetDC(m_hWnd)とhDC=GetDC(m_hWnd)の違いについて

表題について,お伺いします。
ビットマップをダイアログに表示するソースコードを
書いてますが,参考書やさまざまなHPでは,
ウィンドウハンドルをゲットする際に

hDC=::GetDC(m_hWnd) ○
↑と書かれております。

hDC=GetDC(m_hWnd)  ×
↑はなぜだめなのでしょう。

 ●このスコープ演算子::は何の為につけているのですか?

::が無いとエラーになるので必要みたいですが・・

Aベストアンサー

どういうエラー(リンクエラー、コンパイルエラー)なのかがわからないので、
あくまで憶測ですが、
Windows.hで定義されているGetDC()の他に、
別のスコープに(例えばクラスのメソッドとして)、
GetDC()が定義されているのではないでしょうか?

上記の状態でスコープ演算子がないときには、
同じクラス(スコープ)にあるGetDC()を先に呼ぶことになるので、
目的のWindows.hのGetDC()を呼ぶことができないのだと思います。

参考URL:http://wisdom.sakura.ne.jp/programming/cpp/cpp7.html

Qラブホテルで、本来以外の使い方をした経験、ありますか?

本来の使い方は、皆さん知っていますね?
そうではなくて、本来以外の使い方です。
テレビで「ラブホ女子会」が流行っている話をしていましたが、例えばそういうこととか、単に寝るために泊まったとか、出張で使ったとか、カラオケとか、昼寝とか・・・とにかく、本来の使い方ではない使い方です。
もちろんその後も、本来の使い方はしないでチェックアウトしたという前提です。

ラブホテルによっては、そういう使い方を認めないところもあるようですが、本来以外の使い方をした経験はありますか?

Aベストアンサー

お盆に家族旅行に行ったとき高速で30Km渋滞と表示されていたので、雄琴温泉に仕方なく宿泊しようとした。何処も満室で仕方なくラブホに家族で宿泊した。
回転するベッドや明るさの調整できる風呂があり、子供が大はしゃぎで遊んでいた。
妻とこんな使い方もあるなーと話をした。家族全員だと雄琴なら6,7万円必要なところ8000円ですみ
朝食もディナーのような肉料理だった。フロントの人は、普通はこんな使い方しないけど、いい勉強になった
こんな使い方も考えてみたいと言っていた。

Qdc.TextOut(0 ,0 , *str) ;について

環境 WIN98 VC++6.0 MFC にて

パターンBはOKですが、パターンAだと不正な処理で落ちてしまいます。

どうしてなのかお教えください。

void CFffView::OnPaint()
{
CPaintDC dc(this);
//パターンA
CString* str ;
str = (CString*)("999");
dc.TextOut(0 ,0 , *str) ;

//パターンB
CString aaa ;
aaa = (CString)("999");
dc.TextOut(0 ,0 , aaa) ;
}

Aベストアンサー

両方ダメ。
Aのパターンで動くのは、たまたま。

CString aaa ;
aaa = "999";
dc.TextOut(0 ,0 , aaa) ;

これで十分。

あえてキャストするんだったら、
CString aaa ;
aaa = (LPCSTR)"999";
dc.TextOut(0 ,0 , aaa) ;


aaa=のところでは、ただの代入が行われているわけではありません。
オーバーロードされたオペレータが呼ばれています。


>str = (CString*)m_array.GetAt(i) ;

これは、m_arrayの要素にCString*を入れていて、初めて成り立つ式です。
値をいれているところと、m_arrayの宣言を確認してください。

str = (CString*)("999");
も、
aaa = (CString)("999");
も、リテラル文字列をつっこもうとしています。
リテラル文字列とCStringはまったく別物です。

Qこのお箸の使い方ってOKなんですか?はたして疑問

たまに目にする箸の使い方。
フォークとナイフのように右と左に1本づつ持って
何かを切る、という箸の使い方って正しいんでしょうか。
私個人的にはそういう使い方を目にすると
嫌悪感を覚えるのですが。以前テレビを見ていたとき
君島十和子さんが堂々とそういう使い方をするのを
見て驚きました。ネットで調べたけれど、この使い方に
ついては見つけることができませんでした。
どなたか教えてください。

Aベストアンサー

調べてきました。
「ちぎり箸」というそうで、間違った使い方のひとつとのことです。

参考URL:http://www.table-manners.org/dainty_kaiseki/chopsticks/

Qmemcpy,memcmp,strcmp,strlen,strcat,

memcpy,memcmp,strcmp,strlen,strcat,strcpy,strstr,strchr
以上の関数を自作しました。
ひとつひとつを見たときに動作を確認したところうまく出来たのですが、この関数をプログラムに組み込んだところうまく動作しませんでした。
どこか間違っているところがあったら指摘して頂きたいと思います<m(__)m>
ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。


char *MyMemcpy(char *str1, char *str2, size_t n)
{

char *p1 = str1;
char *p2 = str2;


while(n--){
*p1 = *p2;
p1++;
p2++;
}

return str1;
}
void *MyMemcmp(void *str1, void *str2)
{
char *p1 = (char*)str1;
char *p2 = (char*)str2;
int n = 0, k = 0;

while( *p1 != '\0'){
*p1++;
n++;
}

while( *p2 != '\0'){
*p2++;
k++;
}

if(n > k){
return str1;
}else if(n == k){
return 0;
}else if(n < k){
return str2;
}

}
char *MyStrcmp(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;
int n = 0, k = 0;

while( *p1 != '\0'){
*p1++;
n++;
}

while( *p2 != '\0'){
*p2++;
k++;
}

if(n > k){
return str1;
}else if(n == k){
return 0;
}else if(n < k){
return str2;
}

}
size_t MyStrlen(const char *str1)
{
char *p1 = (char*)str1;
size_t len = 0;

while(*p1 != NULL){
*p1++;
len++;
}

return len;
}
char *MyStrcat(char *str1, const char *str2)
{
char *p1 = str1;
char *p2 = (char*)str2;

while(*p1 != NULL){
*p1++;
}
while(*p2 != NULL){
*p1 = *p2;
*p1++;
*p2++;
}

return str1;
}
char *MyStrcpy(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;

while( *p2 != NULL){
*p1 = *p2;
*p1++;
*p2++;
}
*p1 = '\0';

return str1;
}
char *MyStrstr(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;

while(*p1 != *p2)
{
if(*p1 == '\0'){
return 0;
}
*p1++;
}
return p1;

}
char *MyStrchr(const char *str1, char str2)
{
char *p1 = (char*)str1;

while(*p1 != str2)
{
if(*p1 == '\0'){
return 0;
}
*p1++;
}
return p1;
}

memcpy,memcmp,strcmp,strlen,strcat,strcpy,strstr,strchr
以上の関数を自作しました。
ひとつひとつを見たときに動作を確認したところうまく出来たのですが、この関数をプログラムに組み込んだところうまく動作しませんでした。
どこか間違っているところがあったら指摘して頂きたいと思います<m(__)m>
ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。


char *MyMemcpy(char *str1, char *str2, size_t n)
{

char *p1 = str1;
char...続きを読む

Aベストアンサー

> この関数をプログラムに組み込んだところうまく動作しませんでした。

どんな風に「うまく動作し」なかったのでしょうか?
それがわからなければ、明らかな間違いでも無いかぎり、答えようがありません。

特に
> ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。
とあるので、このプログラムと標準関数との違いが、間違いなのか仕様通りなのか判断できません。

例えば、
> char *MyStrcmp(char *str1, char *str2)
プログラムを解読すると

str1とstr2、それぞれの文字列の長さを比較。
→長さ等しい場合は (char *)NULL, 異なる場合は、長い方の文字列へのポインタを返す

と、strcmpとはまったく別の関数になっています。(strcmpは文字列の内容も比較し、結果を 負の整数,0,正の整数 (いずれもint型)で返します)


あと、明確な間違いというわけではないですが。
> while(*p1 != NULL){

大抵の処理系では NULL == '\0' == 0 として使えるけど、ヌルポインタとヌル文字はわけて考えた方がいいです。

> この関数をプログラムに組み込んだところうまく動作しませんでした。

どんな風に「うまく動作し」なかったのでしょうか?
それがわからなければ、明らかな間違いでも無いかぎり、答えようがありません。

特に
> ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。
とあるので、このプログラムと標準関数との違いが、間違いなのか仕様通りなのか判断できません。

例えば、
> char *MyStrcmp(char *str1, char *str2)
プログラムを解読...続きを読む

Q日本語 「よう」の使い方

「よう」の使い方で同じ使い方のものを選ぶ問題の中で、
 1. 彼の家は大きくて、お城のようです。と
 2. 彼は日本人のように上手に話せます。が、同じ「よう」の使い方になっていました。1.は名詞+のようだ。 2.は名詞+のように+名詞or形容詞の使い方だと私は思うのですが......。1.と2.が同じ使い方になるのはどうしてなのでしょうか........?教えてください。

Aベストアンサー

コメントにお答えします。

まず、最初のご質問文の中にある誤りを指摘していませんでしたが、
 2.は名詞+のように+名詞or形容詞
は誤りで、
 2.は名詞+のように+動詞or形容詞or形容動詞
とすべきです。


では、本題。

>>>1.と2.の「よう」の意味は同じ、使い方は同じではないということですか??????。

問題は、解答者に対してこの2つの比較を求めています。
1「~のようです」(「ようです」の終止形)
2「~のように」(「ようだ」の連用形)

あなたの考え方は、
 1.は名詞+の+「ようだ/ようです(=終止形)」。
 2.は名詞+の+「ように(=連用形)」+動詞or形容詞or形容動詞
となっているから、使い方は異なるのではないか、ということですよね。

しかし、
国語(日本語)の問題で「同じ使い方のものを選べ」という問題がある場合、
単に活用形が異なるだけの言葉同士を「使い方が違う言葉」として扱うことは、通常ありません。


「お城のようだ/ように/ようです」「日本人のようだ/ように/ようです」は、
A + の + ようだ/ようです = 「Aのようだ/です」
の形です。
つまり、「形として、使い方が同じ」です。

そして、どちらも
・「Aではないけれども、Aに似ている」
・「Aではないけれども、Aの感じがする」
という意味になります。
つまり、「意味として、使い方が同じ」です。

ですから、1と2は、「形としても、意味としても、使い方は同じ」ということになります。


では!

コメントにお答えします。

まず、最初のご質問文の中にある誤りを指摘していませんでしたが、
 2.は名詞+のように+名詞or形容詞
は誤りで、
 2.は名詞+のように+動詞or形容詞or形容動詞
とすべきです。


では、本題。

>>>1.と2.の「よう」の意味は同じ、使い方は同じではないということですか??????。

問題は、解答者に対してこの2つの比較を求めています。
1「~のようです」(「ようです」の終止形)
2「~のように」(「ようだ」の連用形)

あなたの考え方は、
 1....続きを読む

QTextOut( ) を BeginPaint( ) と GetDC( )

LRESULT CALLBACK の case WM_PAINT: で、

hdc = BeginPaint(hWnd, &ps);
TextOut(hdc,0,0,str,strlen(str));
EndPaint(hWnd, &ps);

↑問題無し。↓文字がちらつく。

hdc = GetDC(hWnd);
TextOut(hdc,0,0,str,strlen(str));
ReleaseDC(hWnd,hdc);

ちらつきの原因は、高速で TextOut( ) が繰り返されるから
だと思いました。
どうして TextOut( ) が繰り返されるんですか?

上の方法の場合は、
ReleaseDC(hWnd,hdc);
は書かなくてもいいですか?

Aベストアンサー

基本的にWM_PAINTの場合はBeginPaintを使うほうがいい気がします。
というのはWM_PAINT時には再描画領域等の情報が設定されてきて
BeginPaintを使うと必要のない領域には描画されないはずです。
GetDCを使用するとこの情報は取得できず、Window全体に対して描画されるので
再描画の必要のない領域まで描画することになってしまいます。
ちなみに繰り返しとありますが、実際に繰り返されてるのは確かめられたのでしょうか?

Qタイガーバームの使い方

おみやげでタイガーバームを頂きました。使い方を教えて下さい。
基本的な使い方から意外な使い方まで、何でもお願いします。

Aベストアンサー

「何にでも効く」というふれ込みの万能?軟膏ですね。(笑)香港やシンガポールにはこれで大金持ちになった方が作った「タイガーバームガーデン」なるものがありました。
基本的には筋肉痛や肩こりなどに効くとされていますが、匂いがものすごいため、人前に出るときにはどうかと思います。
使用法は、少量をとり、肌に良くすりこみます。さらにマッサージをするすと、有効成分が浸透しやすく、いっそう効果的だそうです。
でも、けして切り傷や生傷には使用しないで下さい。 また体の粘膜部分など敏感なところへの使用もだめですよ。

Qfor(int i = 100, long n = 1; i > n/3i; i++)

for(int i = 100, long n = 1; i > n/3i; i++)
のように、初期設定で型の違う変数を宣言したいんだけど
C++ではこんなふうに2つ以上の型を宣言してはいけないんですか?

Aベストアンサー

,

コンマ演算子の原理です。
forの初期化文で "," で区切れるのは値を返す文だけです。
よってintステートメントもlongステートメントも値を返さないので、この文では使用できません。

というか、むしろ、intステートメントの第2引数としてlongが認識されてしまいます。
外で

int i; long n;

とし

for(i = 0, n = 0; hoge; hoge)

なら可能です。


人気Q&Aランキング