AB で奮闘しています。
ウインドウ内の文字(テキスト)を
getdc関数を用いて取得する方法はあるのでしょうか?
例 ウインドウがあり・・・
ウインドウ内に
aaaa
bbbb
cccc
dddd
という具合で 文字がリスト上に並んでいます。
text関係の関数を用いても 取得できず、試しに GetObjectType関数で
調べてみると 3 という答えが返ってきます。
どうやら 文字オブジェクトのようです。
getdcで文字を取得するには・・・
Re: getdcで文字を取得するには・・・
> GetObjectType関数で
> 調べてみると 3 という答えが返ってきます。
> どうやら 文字オブジェクトのようです。
どうして文字オブジェクトだと思ってしまったのでしょうか?
AB付属のヘルプを見ると、明示的に書かれてはいませんけど、3 は OBJ_DC 、つまりデバイスコンテキストだということを示しています。
ちなみに、GetDC()関数の戻り値を指定している場合、もちろん OBJ_DC (3です)が返ります。
> ウインドウ内の文字(テキスト)を
> getdc関数を用いて取得する方法はあるのでしょうか?
デバイスコンテキストに描写されている文字列の取得は分かりません...。
単に、リストボックスの文字列を取得したいのであれば、リストボックスに LB_GETTEXT メッセージを送信します。
動かしてないのでバグるかもしれませんけど、選択されている文字列を取得します。
> 調べてみると 3 という答えが返ってきます。
> どうやら 文字オブジェクトのようです。
どうして文字オブジェクトだと思ってしまったのでしょうか?
AB付属のヘルプを見ると、明示的に書かれてはいませんけど、3 は OBJ_DC 、つまりデバイスコンテキストだということを示しています。
ちなみに、GetDC()関数の戻り値を指定している場合、もちろん OBJ_DC (3です)が返ります。
> ウインドウ内の文字(テキスト)を
> getdc関数を用いて取得する方法はあるのでしょうか?
デバイスコンテキストに描写されている文字列の取得は分かりません...。
単に、リストボックスの文字列を取得したいのであれば、リストボックスに LB_GETTEXT メッセージを送信します。
動かしてないのでバグるかもしれませんけど、選択されている文字列を取得します。
[ここをクリックすると内容が表示されます]
コード: 全て選択
'------------------------------------------------------------
' リストボックスで選択されている文字列を取得
'------------------------------------------------------------
Function lb_getSelectString(ByVal hWnd As HWND) As BytePtr
Dim index As Long
Dim length As Long
index=SendMessage(hWnd,LB_GETCURSEL,NULL,NULL)
If index<>LB_ERR Then
length=SendMessage(hWnd,LB_GETTEXTLEN,index,NULL)
lb_getSelectString=calloc(length+1)
SendMessage(hWnd,LB_GETTEXT,index,lb_getSelectString)
End If
End Function
'使い方
Dim pStr As BytePtr
pStr=lb_getSelectString(GetDlgItem(hMainWnd,ListBox1))
MessageBox(hMainWnd,pStr,"選択されている文字列",MB_OK)
free(pStr)
Re: getdcで文字を取得するには・・・
> > GetObjectType関数で
> > 調べてみると 3 という答えが返ってきます。
> > どうやら 文字オブジェクトのようです。
> どうして文字オブジェクトだと思ってしまったのでしょうか?
> AB付属のヘルプを見ると、明示的に書かれてはいませんけど、3 は OBJ_DC 、つまりデバイスコンテキストだということを示しています。
> ちなみに、GetDC()関数の戻り値を指定している場合、もちろん OBJ_DC (3です)が返ります。
>
> > ウインドウ内の文字(テキスト)を
> > getdc関数を用いて取得する方法はあるのでしょうか?
> デバイスコンテキストに描写されている文字列の取得は分かりません...。
>
> 単に、リストボックスの文字列を取得したいのであれば、リストボックスに LB_GETTEXT メッセージを送信します。
> 動かしてないのでバグるかもしれませんけど、選択されている文字列を取得します。
>
そのまま コピーして 試してみましたが どうもそれらしい
文字が取得出来ているようなのですが、メッセージボックスの表示
が 文字バケして 確証がもてません。
例 オォ・・・・ と言うようなメッセージです。
何故でしょう? どこか やり方が悪いのでしょうか?
by koko!yo
> > 調べてみると 3 という答えが返ってきます。
> > どうやら 文字オブジェクトのようです。
> どうして文字オブジェクトだと思ってしまったのでしょうか?
> AB付属のヘルプを見ると、明示的に書かれてはいませんけど、3 は OBJ_DC 、つまりデバイスコンテキストだということを示しています。
> ちなみに、GetDC()関数の戻り値を指定している場合、もちろん OBJ_DC (3です)が返ります。
>
> > ウインドウ内の文字(テキスト)を
> > getdc関数を用いて取得する方法はあるのでしょうか?
> デバイスコンテキストに描写されている文字列の取得は分かりません...。
>
> 単に、リストボックスの文字列を取得したいのであれば、リストボックスに LB_GETTEXT メッセージを送信します。
> 動かしてないのでバグるかもしれませんけど、選択されている文字列を取得します。
>
[ここをクリックすると内容が表示されます]
7さん早速 参考 ソース ありがとうございました。コード: 全て選択
'------------------------------------------------------------
> ' リストボックスで選択されている文字列を取得
> '------------------------------------------------------------
> Function lb_getSelectString(ByVal hWnd As HWND) As BytePtr
> Dim index As Long
> Dim length As Long
> index=SendMessage(hWnd,LB_GETCURSEL,NULL,NULL)
> If index<>LB_ERR Then
> length=SendMessage(hWnd,LB_GETTEXTLEN,index,NULL)
> lb_getSelectString=calloc(length+1)
> SendMessage(hWnd,LB_GETTEXT,index,lb_getSelectString)
> End If
> End Function
>
> '使い方
> Dim pStr As BytePtr
> pStr=lb_getSelectString(GetDlgItem(hMainWnd,ListBox1))
> MessageBox(hMainWnd,pStr,"選択されている文字列",MB_OK)
> free(pStr)
そのまま コピーして 試してみましたが どうもそれらしい
文字が取得出来ているようなのですが、メッセージボックスの表示
が 文字バケして 確証がもてません。
例 オォ・・・・ と言うようなメッセージです。
何故でしょう? どこか やり方が悪いのでしょうか?
by koko!yo
Re: getdcで文字を取得するには・・・
> 例 オォ・・・・ と言うようなメッセージです。
> 何故でしょう? どこか やり方が悪いのでしょうか?
最後にNULLが入ってないせいでしょうかね?。
でも実際に動かしてみたら自分の環境では問題ありませんでした。
> 何故でしょう? どこか やり方が悪いのでしょうか?
最後にNULLが入ってないせいでしょうかね?。
でも実際に動かしてみたら自分の環境では問題ありませんでした。
改良してみました [ここをクリックすると内容が表示されます]
コード: 全て選択
'------------------------------------------------------------
' リストボックスで選択されている文字列を取得
'------------------------------------------------------------
Function lb_getSelectString(ByVal hWnd As HWND) As BytePtr
Dim index As Long
Dim length As Long
index=SendMessage(hWnd,LB_GETCURSEL,NULL,NULL)
If index<>LB_ERR Then
length=SendMessage(hWnd,LB_GETTEXTLEN,index,NULL)
lb_getSelectString=calloc(length+1)
lb_getSelectString[SendMessage(hWnd,LB_GETTEXT,index,lb_getSelectString)]=0
End If
End Function