ウインドウを画面の中央に表示

オープンソース形式でコードを共有するフォーラムです。お役立ちコード、あなたも投稿してみませんか?
返信する
メッセージ
作成者
水波形
記事: 106
登録日時: 2009年3月29日(日) 15:45
連絡する:

ウインドウを画面の中央に表示

#1 投稿記事 by 水波形 »

ABで作成したウインドウは、何も指定しなければ、左端で起動のたびにうろちょろします。
ふと、『メッセージボックスのように中央寄せ出来ないかな・・・?』と思い、コードを書いてみました。

何もひねっていませんし、かなり単純なので、余り使い道がないと思いますが・・・(^^;
あとは、足したり引いたりして、好きな場所に移動できます。
何か、変な場所がありましたら、指摘してあげてください。

もしも、重複がありましたら、申し訳ございません。
↓個人的ソフト置き場
http://www.software.jpn.org/
↓萌えゲー製作とかしていたい
http://www.holygate.jpn.org/
たかせ
記事: 215
登録日時: 2006年2月05日(日) 17:10
お住まい: 東京都

Re: ウインドウを画面の中央に表示

#2 投稿記事 by たかせ »

> 何もひねっていませんし、かなり単純なので、余り使い道がないと思いますが・・・(^^;

大変重宝しています。
WIN-XPデスクトップ(画素数1024*768)で作成した1024*740のノーマルウインドウのプログラムに上記のソースコードを追加してWIN-7ノート(画素数1366*768)で実行すると画面中央に表示されて見栄えがよくなりました。

2013年9月3日修正
最後に編集したユーザー たかせ [ 2013年9月03日(火) 13:38 ], 累計 2 回
水波形
記事: 106
登録日時: 2009年3月29日(日) 15:45
連絡する:

Re: ウインドウを画面の中央に表示

#3 投稿記事 by 水波形 »

> > 何もひねっていませんし、かなり単純なので、余り使い道がないと思いますが・・・(^^;
>
> 大変重宝しています。
> WIN-XPデスクトップ(画素数1024*768)で作成した1024*740のノーマルウインドウのプログラムに上記のソースコードを追加してWIN-7ノート(画素数1368*768)で実行すると画面中央に表示されて見栄えがよくなりました。
おお!
お役に立ててよかったです。
ちなみに私は、こんな感じで関数にして使っています。
かっこつけてFunctionで定義してますが、正直Subでよかったです(^^;

後、ウインドウを既存のウインドウの中央に持って行くのもこれを応用して使ってます。
良かったらどうぞ~
↓個人的ソフト置き場
http://www.software.jpn.org/
↓萌えゲー製作とかしていたい
http://www.holygate.jpn.org/
たかせ
記事: 215
登録日時: 2006年2月05日(日) 17:10
お住まい: 東京都

Re: ウインドウを画面の中央に表示

#4 投稿記事 by たかせ »

投稿なさった関数を
SetWindowCenter(hMainWnd,0,-28)で指定したら、
画面の中央に表示することをWindows7のPCで確認しました。

これでフルHD(画素数1920×1080)でも十分いけますね?
本当にどうもありがとうございました。
HSABP

ウインドウ内に収める

#5 投稿記事 by HSABP »

上記プログラミングはdx,dyによって右と下はウインドウがはみ出るのことがあるで
それが嫌な人は

コード: 全て選択


Function SetWindowCenter(hWnd As HWND,dx As Long,dy As Long) As Long
    Dim x As Long,y As Long            'ウインドウの位置
    Dim sx As Long,sy As Long        'スクリーン座標
    Dim Basho As RECT                'ウインドウのrc
	
	
    'ウインドウの位置を取得
    GetWindowRect(hWnd,Basho)

    'スクリーンの大きさ取得
    sx=GetSystemMetrics(SM_CXSCREEN)
    sy=GetSystemMetrics(SM_CYSCREEN)

    If sx * sy = 0 Then
		SetWindowCenter=0
		Exit Function
	End If

    '中央に持っていく計算
    x=(sx-Basho.right+Basho.left)/2+dx
    y=(sy-Basho.bottom+Basho.top)/2+dy

    If x<0 Then
        x=0
    Else If x>sx-Basho.right+Basho.left Then
        x=sx-Basho.right+Basho.left
    End If

    If y<0 Then
        y=0
    Else If y>sy-Basho.bottom+Basho.top Then
        y=sy-Basho.bottom+Basho.top
    End If

    '中央に持っていく
    SetWindowCenter=SetWindowPos(hWnd,HWND_TOP,x,y,0,0,SWP_NOSIZE)
End Function
HSABP

ウインドウ内に収める

#6 投稿記事 by HSABP »

上記プログラミングはdx,dyによって右と下はウインドウがはみ出るのことがあるで
それが嫌な人は

コード: 全て選択


Function SetWindowCenter(hWnd As HWND,dx As Long,dy As Long) As Long
    Dim x As Long,y As Long            'ウインドウの位置
    Dim sx As Long,sy As Long        'スクリーン座標
    Dim Basho As RECT                'ウインドウのrc
	
	
    'ウインドウの位置を取得
    GetWindowRect(hWnd,Basho)

    'スクリーンの大きさ取得
    sx=GetSystemMetrics(SM_CXSCREEN)
    sy=GetSystemMetrics(SM_CYSCREEN)

    If sx * sy = 0 Then
		SetWindowCenter=0
		Exit Function
	End If

    '中央に持っていく計算
    x=(sx-Basho.right+Basho.left)/2+dx
    y=(sy-Basho.bottom+Basho.top)/2+dy

    If x<0 Then
        x=0
    Else If x>sx-Basho.right+Basho.left Then
        x=sx-Basho.right+Basho.left
    End If

    If y<0 Then
        y=0
    Else If y>sy-Basho.bottom+Basho.top Then
        y=sy-Basho.bottom+Basho.top
    End If

    '中央に持っていく
    SetWindowCenter=SetWindowPos(hWnd,HWND_TOP,x,y,0,0,SWP_NOSIZE)
End Function
HSABC

ウインドウ内に収める

#7 投稿記事 by HSABC »

上記プログラミングはdx,dyによって右と下はウインドウがはみ出るのことがあるで
それが嫌な人は

コード: 全て選択


Function SetWindowCenter(hWnd As HWND,dx As Long,dy As Long) As Long
    Dim x As Long,y As Long            'ウインドウの位置
    Dim sx As Long,sy As Long        'スクリーン座標
    Dim Basho As RECT                'ウインドウのrc
	
	
    'ウインドウの位置を取得
    GetWindowRect(hWnd,Basho)

    'スクリーンの大きさ取得
    sx=GetSystemMetrics(SM_CXSCREEN)
    sy=GetSystemMetrics(SM_CYSCREEN)

    If sx * sy = 0 Then
		SetWindowCenter=0
		Exit Function
	End If

    '中央に持っていく計算
    x=(sx-Basho.right+Basho.left)/2+dx
    y=(sy-Basho.bottom+Basho.top)/2+dy

    If x<0 Then
        x=0
    Else If x>sx-Basho.right+Basho.left Then
        x=sx-Basho.right+Basho.left
    End If

    If y<0 Then
        y=0
    Else If y>sy-Basho.bottom+Basho.top Then
        y=sy-Basho.bottom+Basho.top
    End If

    '中央に持っていく
    SetWindowCenter=SetWindowPos(hWnd,HWND_TOP,x,y,0,0,SWP_NOSIZE)
End Function
返信する