by konisi » 2010年3月18日(木) 13:42
まず、
コード: 全て選択
lstrcpy(ti,Time$())
は上手く動く保証が無いので
コード: 全て選択
Dim time$ As String
time$=Time$()
lstrcpy(ti,StrPtr(time$))
にするべきです。
#実際にはAB4ではStringが指す先は少なくとも8バイト以上の構造体になっていて(よく調べてない)、先頭4バイトが文字列を指すポインタになっているので上手く動いてしまうんですが。
この場合だと、次の方が適切かもしれません。
コード: 全て選択
Dim ti As *Byte
Dim time$ As String
time$=Time$()
ti=StrPtr(time$)
#×ボタンが無くてもAlt+F4で閉じれますよ。
添削してみた。
コード: 全て選択
'-----------------------------------------------------------------------------
'イベントプロシージャ
'-----------------------------------------------------------------------------
'このファイルには、ウィンドウ[MainWnd]に関するイベントをコーディングします。
'ウィンドウハンドル:hMainWnd
'TODO:この位置にグローバルな変数、構造体、定数、関数を定義します。
Const BMPSIZE=32
'-----------------------------------------------------------------------------
'ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND,dwMsg As DWord,wParam As WPARAM,lParam As LPARAM) As DWord
'TODO:この位置にウィンドウメッセージを処理するためのコードを記述します。
'イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
'ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
digiclk_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_LButtonDblClick(flags As Long,x As Integer,y As Integer)
End
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
SetTimer(hMainWnd,0,1000,NULL)
Dim l As Long
l=GetWindowLong(hMainWnd,GWL_STYLE)
SetWindowLong(hMainWnd,GWL_STYLE,l Xor WS_CAPTION)
SetWindowPos(hMainWnd,NULL,0,0,BMPSIZE*8,BMPSIZE,SWP_NOMOVE)
End Sub
Sub MainWnd_Paint(hDC_ As HDC)
Dim hDC As HDC
hDC=GetDC(hMainWnd)
Dim bmp1 As HBITMAP,dc1 As HDC
Dim ti[100] As Byte,i As Long
Dim time$ As String
time$=Time$()
lstrcpy(ti,StrPtr(time$))
bmp1=LoadImage(GetWindowLong(hMainWnd,GWL_HINSTANCE),IDB_BITMAP1,IMAGE_BITMAP,BMPSIZE*11,BMPSIZE,LR_DEFAULTCOLOR)
dc1=CreateCompatibleDC(hDC)
SelectObject(dc1,bmp1)
Do
ti-=Asc("0")
If ti>9 Then ti=10
BitBlt(hDC,i*BMPSIZE,0,BMPSIZE,BMPSIZE,dc1,ti*BMPSIZE,0,SRCCOPY)
i++
Loop While ti
DeleteDC(dc1)
DeleteObject(bmp1)
ReleaseDC(hMainWnd,hDC)
End Sub
Sub MainWnd_Timer(TimerID As DWord)
Select Case TimerID
Case 0
InvalidateRgn(hMainWnd,NULL,TRUE)
End Select
End Sub
名無し さんが書きました:もしかして下のスタートバーに出てくる文字をタイトルバーと呼んでいるのでしょうか…
"スタートバー"は一般にはタスクバーと呼ぶかと。
AB4とAB5ではString型の扱いがかなり変化したので、その周りで多少コードへの変更が必要かもしれません。
通る筈が無いと思って書いたコードのコンパイルが通った。感動。コード: 全て選択
Dim A$ As String
A$="abc"+"efg"
まず、[code]lstrcpy(ti,Time$())[/code]は上手く動く保証が無いので[code]Dim time$ As String
time$=Time$()
lstrcpy(ti,StrPtr(time$))[/code]にするべきです。
#実際にはAB4ではStringが指す先は少なくとも8バイト以上の構造体になっていて(よく調べてない)、先頭4バイトが文字列を指すポインタになっているので上手く動いてしまうんですが。
この場合だと、次の方が適切かもしれません。[code]Dim ti As *Byte
Dim time$ As String
time$=Time$()
ti=StrPtr(time$)[/code]
#×ボタンが無くてもAlt+F4で閉じれますよ。
添削してみた。[code]'-----------------------------------------------------------------------------
'イベントプロシージャ
'-----------------------------------------------------------------------------
'このファイルには、ウィンドウ[MainWnd]に関するイベントをコーディングします。
'ウィンドウハンドル:hMainWnd
'TODO:この位置にグローバルな変数、構造体、定数、関数を定義します。
Const BMPSIZE=32
'-----------------------------------------------------------------------------
'ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND,dwMsg As DWord,wParam As WPARAM,lParam As LPARAM) As DWord
'TODO:この位置にウィンドウメッセージを処理するためのコードを記述します。
'イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
'ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
digiclk_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_LButtonDblClick(flags As Long,x As Integer,y As Integer)
End
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
SetTimer(hMainWnd,0,1000,NULL)
Dim l As Long
l=GetWindowLong(hMainWnd,GWL_STYLE)
SetWindowLong(hMainWnd,GWL_STYLE,l Xor WS_CAPTION)
SetWindowPos(hMainWnd,NULL,0,0,BMPSIZE*8,BMPSIZE,SWP_NOMOVE)
End Sub
Sub MainWnd_Paint(hDC_ As HDC)
Dim hDC As HDC
hDC=GetDC(hMainWnd)
Dim bmp1 As HBITMAP,dc1 As HDC
Dim ti[100] As Byte,i As Long
Dim time$ As String
time$=Time$()
lstrcpy(ti,StrPtr(time$))
bmp1=LoadImage(GetWindowLong(hMainWnd,GWL_HINSTANCE),IDB_BITMAP1,IMAGE_BITMAP,BMPSIZE*11,BMPSIZE,LR_DEFAULTCOLOR)
dc1=CreateCompatibleDC(hDC)
SelectObject(dc1,bmp1)
Do
ti[i]-=Asc("0")
If ti[i]>9 Then ti[i]=10
BitBlt(hDC,i*BMPSIZE,0,BMPSIZE,BMPSIZE,dc1,ti[i]*BMPSIZE,0,SRCCOPY)
i++
Loop While ti[i]
DeleteDC(dc1)
DeleteObject(bmp1)
ReleaseDC(hMainWnd,hDC)
End Sub
Sub MainWnd_Timer(TimerID As DWord)
Select Case TimerID
Case 0
InvalidateRgn(hMainWnd,NULL,TRUE)
End Select
End Sub[/code]
[quote="名無し"]もしかして下のスタートバーに出てくる文字をタイトルバーと呼んでいるのでしょうか…[/quote]"スタートバー"は一般にはタスクバーと呼ぶかと。
AB4とAB5ではString型の扱いがかなり変化したので、その周りで多少コードへの変更が必要かもしれません。
通る筈が無いと思って書いたコードのコンパイルが通った。感動。[code]Dim A$ As String
A$="abc"+"efg"[/code]