powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Can't find DLL entry point SelectObject in user32
10 сообщений из 10, страница 1 из 1
Can't find DLL entry point SelectObject in user32
    #37085403
Фотография Тухлая шаверма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Compare Database

Private Declare Function apiSelectObject Lib "user32" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long

Private Sub test()
    Call apiSelectObject( 0 ,  0 )
End Sub


...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37085409
Фотография Тухлая шаверма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашёл уже : gdi32
...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37085736
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тухлая шаверма,

Прошу прощения, не могли бы рассказать что это за API функция? Какого рода объектов выбирает и самое главное как?
...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37085749
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenчто это за API функция? Какого рода объектов выбирает и самое главное как?

from API-Guide 3.7InfoThe SelectObject function selects an object into the specified device context. The new object replaces the previous object of the same type

Parameters· hdc
Identifies the device context.

· hgdiobj
Identifies the object to be selected. The specified object must have been created by using one of the following functions:
CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDIBitmap, CreateDIBSection, CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush, CreateFont, CreateFontIndirect, CreatePen, CreatePenIndirect, CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect


ExamplesRotate Font
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
'In general section
Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Const LF_FACESIZE =  32 
Private Type LOGFONT
    lfHeight As Long
    lfWidth As Long
    lfEscapement As Long
    lfOrientation As Long
    lfWeight As Long
    lfItalic As Byte
    lfUnderline As Byte
    lfStrikeOut As Byte
    lfCharSet As Byte
    lfOutPrecision As Byte
    lfClipPrecision As Byte
    lfQuality As Byte
    lfPitchAndFamily As Byte
    lfFaceName(LF_FACESIZE) As Byte
End Type
'In form
Private Sub Form_Load()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net

    Dim RotateMe As LOGFONT
    'Set graphic-mode to 'persistent graphic'
    Me.AutoRedraw = True
    'Rotate degrees
    Deg =  270 
    'Size (in points)
    Size =  20 
    'Set the rotation degree
    RotateMe.lfEscapement = Deg *  10 
    'Set the height of the font
    RotateMe.lfHeight = (Size * - 20 ) / Screen.TwipsPerPixelY
    'Create the font
    rFont = CreateFontIndirect(RotateMe)
    'Select the font n the Form's device context
    Curent = SelectObject(Me.hdc, rFont)
    'Print some text ...
    Me.CurrentX =  500 
    Me.CurrentY =  200 
    Me.Print ":-)"
End Sub


Create Font
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
'used with fnWeight
Const FW_DONTCARE =  0 
Const FW_THIN =  100 
Const FW_EXTRALIGHT =  200 
Const FW_LIGHT =  300 
Const FW_NORMAL =  400 
Const FW_MEDIUM =  500 
Const FW_SEMIBOLD =  600 
Const FW_BOLD =  700 
Const FW_EXTRABOLD =  800 
Const FW_HEAVY =  900 
Const FW_BLACK = FW_HEAVY
Const FW_DEMIBOLD = FW_SEMIBOLD
Const FW_REGULAR = FW_NORMAL
Const FW_ULTRABOLD = FW_EXTRABOLD
Const FW_ULTRALIGHT = FW_EXTRALIGHT
'used with fdwCharSet
Const ANSI_CHARSET =  0 
Const DEFAULT_CHARSET =  1 
Const SYMBOL_CHARSET =  2 
Const SHIFTJIS_CHARSET =  128 
Const HANGEUL_CHARSET =  129 
Const CHINESEBIG5_CHARSET =  136 
Const OEM_CHARSET =  255 
'used with fdwOutputPrecision
Const OUT_CHARACTER_PRECIS =  2 
Const OUT_DEFAULT_PRECIS =  0 
Const OUT_DEVICE_PRECIS =  5 
'used with fdwClipPrecision
Const CLIP_DEFAULT_PRECIS =  0 
Const CLIP_CHARACTER_PRECIS =  1 
Const CLIP_STROKE_PRECIS =  2 
'used with fdwQuality
Const DEFAULT_QUALITY =  0 
Const DRAFT_QUALITY =  1 
Const PROOF_QUALITY =  2 
'used with fdwPitchAndFamily
Const DEFAULT_PITCH =  0 
Const FIXED_PITCH =  1 
Const VARIABLE_PITCH =  2 
'used with SetBkMode
Const OPAQUE =  2 
Const TRANSPARENT =  1 

Const LOGPIXELSY =  90 
Const COLOR_WINDOW =  5 
Const Message = "Hello !"

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal nHeight As Long, ByVal nWidth As Long, ByVal nEscapement As Long, ByVal nOrientation As Long, ByVal fnWeight As Long, ByVal fdwItalic As Boolean, ByVal fdwUnderline As Boolean, ByVal fdwStrikeOut As Boolean, ByVal fdwCharSet As Long, ByVal fdwOutputPrecision As Long, ByVal fdwClipPrecision As Long, ByVal fdwQuality As Long, ByVal fdwPitchAndFamily As Long, ByVal lpszFace As String) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function MulDiv Lib "kernel32" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function GetSysColorBrush Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Dim mDC As Long, mBitmap As Long
Private Sub Form_Click()
    Unload Me
End Sub
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim mRGN As Long, Cnt As Long, mBrush As Long, R As RECT
    'Create a device context, compatible with the screen
    mDC = CreateCompatibleDC(GetDC( 0 ))
    'Create a bitmap, compatible with the screen
    mBitmap = CreateCompatibleBitmap(GetDC( 0 ), Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY)
    'Select the bitmap nito the device context
    SelectObject mDC, mBitmap
    'Set the bitmap's backmode to transparent
    SetBkMode mDC, TRANSPARENT
    'Set the rectangles' values
    SetRect R,  0 ,  0 , Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY
    'Fill the rect with the default window-color
    FillRect mDC, R, GetSysColorBrush(COLOR_WINDOW)

    For Cnt =  0  To  350  Step  30 
        'Select the new font into the form's device context and delete the old font
        DeleteObject SelectObject(mDC, CreateMyFont( 24 , Cnt))
        'Print some text
        TextOut mDC, (Me.Width / Screen.TwipsPerPixelX) /  2 , (Me.Height / Screen.TwipsPerPixelY) /  2 , Message, Len(Message)
    Next Cnt

    'Create an elliptical region
    mRGN = CreateEllipticRgn( 0 ,  0 , Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY)
    'Set the window region
    SetWindowRgn Me.hWnd, mRGN, True

    'delete our elliptical region
    DeleteObject mRGN
End Sub
Function CreateMyFont(nSize As Integer, nDegrees As Long) As Long
    'Create a specified font
    CreateMyFont = CreateFont(-MulDiv(nSize, GetDeviceCaps(GetDC( 0 ), LOGPIXELSY),  72 ),  0 , nDegrees *  10 ,  0 , FW_NORMAL, False, False, False, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH, "Times New Roman")
End Function
Private Sub Form_Paint()
    'Copy the picture to the form
    BitBlt Me.hdc,  0 ,  0 , Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY, mDC,  0 ,  0 , vbSrcCopy
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'clean up
    DeleteDC mDC
    DeleteObject mBitmap
End Sub


Print Grafics
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Const NEWFRAME =  1 
Private Declare Function Escape Lib "gdi32" (ByVal hdc As Long, ByVal nEscape As Long, ByVal nCount As Long, ByVal lpInData As String, lpOutData As Any) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Dim hMemoryDC As Long
Private Sub Command1_Click()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'API uses pixels
    Picture1.ScaleMode = vbPixels
    Printer.ScaleMode = vbPixels
    'Take paper
    Printer.Print ""

    'Create a compatible device context
    hMemoryDC = CreateCompatibleDC(Picture1.hdc)
    'Select Picture1's picture into our new device context
    hOldBitMap = SelectObject(hMemoryDC, Picture1.Picture)

    'Stretch our picture to the height and width of the paper
    StretchBlt Printer.hdc,  0 ,  0 , Printer.ScaleWidth, Printer.ScaleHeight, hMemoryDC,  0 ,  0 , Picture1.ScaleWidth, Picture1.ScaleHeight, vbSrcCopy

    'Select the original bitmap into our DC
    hOldBitMap = SelectObject(hMemoryDC, hOldBitMap)
    'Delete our memorydc
    DeleteDC hMemoryDC

    'Access our printer device
    Escape Printer.hdc, NEWFRAME,  0 ,  0 &,  0 &

    'End of document
    Printer.EndDoc
End Sub
...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37085768
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_world,

Danke schon and thank you very much!
...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37085838
Фотография Тухлая шаверма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenТухлая шаверма,

Прошу прощения, не могли бы рассказать что это за API функция? Какого рода объектов выбирает и самое главное как?

кистки краски - рисуем :)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
Option Explicit

Private Type POINTAPI
        x As Long
        y As Long
End Type

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Dim hDcCreate As Long
Dim hWndCreate As Long

Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GCL_HBRBACKGROUND = (- 10 )

Private Const GWL_EXSTYLE = (- 20 )
Private Const LWA_ALPHA = &H2

Private Const WS_POPUP = &H80000000
Private Const WS_EX_STATICEDGE = &H20000
Private Const WS_EX_TOPMOST As Long = &H8&
Private Const WS_VISIBLE = &H10000000

Private Const WS_EX_LAYERED = &H80000


Private Const SS_BITMAP = &HE

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long

                                                    
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long

Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long



Private Sub CreateWindow()
Dim pt As POINTAPI

Dim lngRet As Long
Dim lRetVal As Long

'Call GetCursorPos(pt)

Dim lngExStyle As Long: lngExStyle = WS_EX_STATICEDGE Or WS_EX_TOPMOST 'Or WS_EX_TRANSPARENT
Dim lngStyle As Long: lngStyle = WS_POPUP Or WS_VISIBLE ' Or SS_BITMAP




If hDcCreate <>  0  Then
lngRet = ReleaseDC(hWndCreate, hDcCreate)
End If
If hWndCreate <>  0  Then
Call DestroyWindow(hWndCreate)
End If


Dim hwnd As Long
hwnd = GetDesktopWindow 

Const class_name1 As String = "static"

Dim myrect As RECT
With myrect
    .Left =  100 
    .Top =  100 
    .Right =  250 
    .Bottom =  250 
    

    hWndCreate = CreateWindowEx(lngExStyle, class_name1, "", lngStyle, .Left, .Top, _
                .Right - .Left, .Bottom - .Top, hwnd,  0 &, hwnd,  0 &)

    SetRect myrect,  0 ,  0 , .Right - .Left, .Bottom - .Top
    
End With



'Call SetWindowLong(hWndCreate, GWL_EXSTYLE, GetWindowLong(hWndCreate, GWL_EXSTYLE) Or WS_EX_LAYERED)
'Call SetLayeredWindowAttributes(hWndCreate, 0, (255 * 20) / 100, LWA_ALPHA)


hDcCreate = GetDC(hWndCreate)


Dim hBrush As Long
hBrush = CreateSolidBrush( 255 )
Call SelectObject(hDcCreate, hBrush)

'Dim hOldBrush As Long
'hOldBrush = SetClassLong(hWndCreate, GCL_HBRBACKGROUND, hBrush)
'Call DeleteObject(hOldBrush)

Call InvalidateRect(hWndCreate, myrect, True)



lRetVal = FillRect(hDcCreate, myrect, hBrush)
lRetVal = TextOut(hDcCreate,  1 ,  1 , "test",  4 )



lRetVal = DeleteObject(hBrush)



End Sub





Гуры, гляньте что тут не так - прямоугольник заливается красным, но тут же белеет.
Не пойму в чём косяк. Подскажите
...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37085945
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тухлая шаверма,

Что сейчас. Рисуется что-то на DC окна (зачем?!), вызывается InvalidateRect(,,True), оконная процедура, которая не перекрывалась (осталась по стандартной для данного класса окна), получает (когда других сообщений в очереди сообщений окна не осталось) сообщение WM_PAINT, вызывает BeginPaint(), которая очищает фон, закрашивая его кистью по умолчанию для данного класса окна. Вуаля.

Косяк в подходе. По-хорошему, лучше всего почитать учебник, найти в нём и выполнить пример создания окна с нуля, с RegisterClass(-Ex). Если же по-джедайски смело в бой - если хотите использовать стандартный класс static, перекрывайте (subclass) оконную процедуру. Далее рисуйте в обработчике WM_PAINT, как подобает обычному приложению.
...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37085961
Фотография Тухлая шаверма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БенедиктТухлая шаверма,

Что сейчас. Рисуется что-то на DC окна (зачем?!), вызывается InvalidateRect(,,True), оконная процедура, которая не перекрывалась (осталась по стандартной для данного класса окна), получает (когда других сообщений в очереди сообщений окна не осталось) сообщение WM_PAINT, вызывает BeginPaint(), которая очищает фон, закрашивая его кистью по умолчанию для данного класса окна. Вуаля.
ога . понял :)


БенедиктКосяк в подходе. По-хорошему, лучше всего почитать учебник, найти в нём и выполнить пример создания окна с нуля, с RegisterClass(-Ex). Если же по-джедайски смело в бой - если хотите использовать стандартный класс static, перекрывайте (subclass) оконную процедуру. Далее рисуйте в обработчике WM_PAINT, как подобает обычному приложению.Бенедикт, а рисовать в обработчике WM_PAINT надо с beginpaint и endpaint -или системный обработчик (DefWindow) регистрированного класса сам вызывает эти функции ?
...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37086015
Фотография Тухлая шаверма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт, посмотрите пожалуйста код..
делаю регистрацию окна, создаю окно, а CreateWindowEx возвращает нулевой идентификатор окна.



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
Option Explicit

Private Const CLASSNAME = "MyStatic"

Private Const GWL_HINSTANCE = (- 6 )

Private Type WNDCLASSEX
    cbSize As Long
    style As Long
    lpfnWndProc As Long
    cbClsExtra As Long
    cbWndExtra As Long
    hInstance As Long
    hIcon As Long
    hCursor As Long
    hbrBackground As Long
    lpszMenuName As String
    lpszClassName As String
    hIconSm As Long
End Type

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type


Private Type POINTAPI
        x As Long
        y As Long
End Type

Dim myrect As RECT

Dim hDcCreate As Long
Dim hWndCreate As Long



Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long


Private Declare Function RegisterClassEx Lib "user32" Alias "RegisterClassExA" (pcWndClassEx As WNDCLASSEX) As Integer


Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long




Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


Private Const WM_KEYDOWN As Long = &H100
Private Const WM_CLOSE As Long = &H10
Private Const WM_DESTROY As Long = &H2
Private Const WM_PAINT As Long = &HF


Private Const CS_HREDRAW As Long = &H2
Private Const CS_VREDRAW As Long = &H1

Private Const GCL_HBRBACKGROUND = (- 10 )

Private Const GWL_EXSTYLE = (- 20 )
Private Const LWA_ALPHA = &H2

Private Const WS_POPUP = &H80000000
Private Const WS_EX_STATICEDGE = &H20000
Private Const WS_EX_TOPMOST As Long = &H8&
Private Const WS_VISIBLE = &H10000000

Private Const WS_EX_LAYERED = &H80000


Private Const SS_BITMAP = &HE

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long

                                                    
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long

Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long





Public Function MyWindowProcDanger(ByVal hwnd As Long, ByVal message As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


    Select Case message
           
        Case WM_PAINT
               'ðèñóåì òóò
                Dim lRetVal As Long
                
                Dim hBrush As Long
                hBrush = CreateSolidBrush( 255 )
                Call SelectObject(hDcCreate, hBrush)
                            
                lRetVal = FillRect(hDcCreate, myrect, hBrush)
                lRetVal = TextOut(hDcCreate,  1 ,  1 , "test",  4 )
                lRetVal = DeleteObject(hBrush)
              
                
        Case Else
               MyWindowProcDanger = DefWindowProc(hwnd, message, wParam, lParam)
    End Select
 

End Function


Private Function AppHInstance()
    AppHInstance = GetWindowLong(GetDesktopWindow, GWL_HINSTANCE)
End Function


Private Function GetFuncPtr(ByVal lngFnPtr As Long) As Long
    'wrapper function to allow AddressOf to be used within VB
    GetFuncPtr = lngFnPtr
End Function

Private Sub RegisterWindowClass_()

Static Registered_Already As Boolean


    'If Registered_Already = False Then
        
        Dim wc As WNDCLASSEX
            
            wc.cbSize = Len(wc)
            wc.style = (CS_HREDRAW Or CS_VREDRAW)
            wc.lpfnWndProc = GetFuncPtr(AddressOf MyWindowProcDanger)
            
            wc.cbClsExtra =  0 &
            wc.cbWndExtra =  0 &
            wc.hInstance =  0  'AppHInstance
            wc.hIcon =  0 & 'LoadIcon(AppHInstance, IDI_APPLICATION)
            wc.hCursor =  0  'LoadCursor(AppHInstance, IDC_ARROW)
            'wc.hbrBackground = GetStockObject(WHITE_BRUSH)
            wc.lpszMenuName =  0 &
            wc.lpszClassName = CLASSNAME
            wc.hIconSm =  0 & 'LoadIcon(AppHInstance, IDI_APPLICATION)
            
            RegisterClassEx wc

            
            Registered_Already = True
    'End If
    
End Sub








Private Sub CreateWindow()

'------------------------------------------
' Ðåãèñòðàöèÿ îêîííîãî êëàññà
'
Call RegisterWindowClass_
'MyWindowProc1_Danger

Dim pt As POINTAPI
Dim lngRet As Long


'Call GetCursorPos(pt)

Dim lngExStyle As Long: lngExStyle = WS_EX_STATICEDGE Or WS_EX_TOPMOST 'Or WS_EX_TRANSPARENT
Dim lngStyle As Long: lngStyle = WS_POPUP Or WS_VISIBLE ' Or SS_BITMAP




If hDcCreate <>  0  Then
lngRet = ReleaseDC(hWndCreate, hDcCreate)
End If
If hWndCreate <>  0  Then
Call DestroyWindow(hWndCreate)
End If


Dim hwnd As Long
hwnd = GetDesktopWindow


With myrect
    .Left =  100 
    .Top =  100 
    .Right =  250 
    .Bottom =  250 
    

    hWndCreate = CreateWindowEx(lngExStyle, CLASSNAME, "", lngStyle, .Left, .Top, _
                .Right - .Left, .Bottom - .Top, _
                hwnd,  0 &, GetWindowLong(hwnd, GWL_HINSTANCE),  0 &)
                
    MsgBox hWndCreate
    SetRect myrect,  0 ,  0 , .Right - .Left, .Bottom - .Top
    
End With



hDcCreate = GetDC(hWndCreate)


End Sub





...
Рейтинг: 0 / 0
Can't find DLL entry point SelectObject in user32
    #37089629
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тухлая шаверма,

всё же, наверное, лучше взять какой-нибудь готовый пример (hInstance игнорируется в NT/2000/XP и т. д., можно ставить 0) для разбора.

А вообще - какая цель ("кистки краски - рисуем" видел), с учётом тематики форума? Вот такой пример не содержит, что нужно?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Can't find DLL entry point SelectObject in user32
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]