コントロールのHDC取得について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Aber5

コントロールのHDC取得について

#1 投稿記事 by Aber5 »

こんにちわ

今回コントロールに描画しようと、デバイスコンテキストハンドルを取得しようとしました
フォームはhMainWndでウィンドウハンドルが取れるので
GetDCで取得できますが、スタティックラベルでやろうとしてつまづきました

スタティックラベルのコントロール名はTestLabelなので、
GetDCにTestLabelを渡してみたりしましたが正常に描画できません

コントロールのhDC取得方法を教えてください
以上お願いします
tak
記事: 162
登録日時: 2005年5月31日(火) 07:49

Re: コントロールのHDC取得について

#2 投稿記事 by tak »

GetDC() に渡すべき値はウィンドウの ID(TestLabel など)ではなくウィンドウのハンドル(HWND)です。
ハンドルは GetDlgItem() を用いて次のように取得します。

コード: 全て選択

Dim hWndLabel As HWND
hWndLabel = GetDlgItem(hMainWnd, TestLabel)
HDC を取得したいとのことなので、この hWndLabel を GetDC() に渡してやれば良いでしょう。

しかし、現在僕の手元に検証できる環境がないので確かなことではありませんが、ラベルコントロールはもともと HDC を持ってなかったような気がします。
もしかすると HWND すら持っていなかったかもしれません。
その場合は NULL が返ってくるのかしら?

このコードで無事動けば良いのですが。
ABer5

Re: コントロールのHDC取得について

#3 投稿記事 by ABer5 »

> ハンドルは GetDlgItem() を用いて次のように取得します。
> HDC を取得したいとのことなので、この hWndLabel を GetDC() に渡してやれば良いでしょう。
> しかし、現在僕の手元に検証できる環境がないので確かなことではありませんが、ラベルコントロールはもともと HDC を持ってなかったような気がします。
> もしかすると HWND すら持っていなかったかもしれません。
> その場合は NULL が返ってくるのかしら?
>
> このコードで無事動けば良いのですが。
試してみたところ、その後の描画処理もおかしかったのか
相変わらず描画されないのではっきりとした確認ではありませんが、
デバッグでブレークさせて値を確認したらゼロでもマイナスでもない値が
入っていたので取れてはいると思います

ハンドルを使う別の簡単な方法で確認してみようと思います
ありがとぷございます

#描画処理も…C++的なABは私には難しいです;
返信する