Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Создать неразворачивающееся во весь экран окно


Автор: iff 1.11.2007, 18:42
Как создать неразворачивающееся во весь экран  окно, вот как в Калькуляторе под Виндовс чтоб было нельзя нажать на вот эту кнопочку, которая вверху, между крестиком и минусиком ?

Автор: Akina 1.11.2007, 19:20
Стандартная форма этого не сможет.

Автор: iff 1.11.2007, 19:41
А какая может?
*Надеюсь на ней можно рисовать мышкой кнопочки, фреймы и др.

Автор: NeoRus 1.11.2007, 22:10
В параметрах формы значение MaxButton (ну или как-то так) = False 

Автор: iff 1.11.2007, 22:44
Спасибо! Помогло.
 smile 

Автор: iff 2.11.2007, 13:39
Я думал что форму тогда и растягивать нельзя, а оно нет!
Как зафиксировать размер непойму. smile 

Автор: Akina 2.11.2007, 13:58
Обработай Form_Resize, типа:
Код
If Me.Width > MaxAllowedWidth Then Me.Width = MaxAllowedWidth
Аналогично можно зафиксировать и допустимую область перемещения формы.

Автор: bom 2.11.2007, 14:38
Цитата(iff @  1.11.2007,  21:42 Найти цитируемый пост)
Как создать неразворачивающееся во весь экран  окно...?

Код

'CreateWindow.bas
Option Explicit
Private Declare Function RegisterClass Lib "user32" Alias "RegisterClassA" (Class As WNDCLASS) As Long
Private Declare Function UnregisterClass Lib "user32" Alias "UnregisterClassA" (ByVal lpClassName As String, ByVal hInstance 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 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 Sub PostQuitMessage Lib "user32" (ByVal nExitCode As Long)
Private Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long
Private Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As Msg) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Any) As Long

Private Type WNDCLASS
    style As Long
    lpfnwndproc As Long
    cbClsextra As Long
    cbWndExtra2 As Long
    hInstance As Long
    hIcon As Long
    hCursor As Long
    hbrBackground As Long
    lpszMenuName As String
    lpszClassName As String
End Type

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Type Msg
    hWnd As Long
    message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As POINTAPI
End Type

Private Const CS_VREDRAW = &H1
Private Const CS_HREDRAW = &H2
Private Const WS_VISIBLE = &H10000000
Private Const WS_CLIPSIBLINGS = &H4000000
Private Const WS_CLIPCHILDREN = &H2000000
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_OVERLAPPEDWINDOW = (WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or WS_CAPTION Or _
              WS_SYSMENU Or WS_MINIMIZEBOX)
Private Const COLOR_WINDOW = 5
Private Const WM_DESTROY = &H2
Private Const SW_SHOWNORMAL = 1
Private Const IDC_ARROW = 32512&


Public Sub Main()
    Dim lngTemp As Long
    If MyRegisterClass Then
        If MyCreateWindow Then
            MyMessageLoop
        End If
        MyUnregisterClass
    End If
End Sub

Private Function MyCreateWindow() As Boolean
    Dim hWnd As Long
    hWnd = CreateWindowEx(0, "myWindowClass", "myWindowCaption", WS_OVERLAPPEDWINDOW, 0, 0, 400, 300, 0, 0, App.hInstance, ByVal 0&)
    If hWnd <> 0 Then ShowWindow hWnd, SW_SHOWNORMAL
    MyCreateWindow = (hWnd <> 0)
End Function

Private Function MyRegisterClass() As Boolean
    Dim wndcls As WNDCLASS
    wndcls.style = CS_HREDRAW + CS_VREDRAW
    wndcls.lpfnwndproc = GetMyWndProc(AddressOf MyWndProc)
    wndcls.cbClsextra = 0
    wndcls.cbWndExtra2 = 0
    wndcls.hInstance = App.hInstance
    wndcls.hIcon = 0
    wndcls.hCursor = LoadCursor(0, IDC_ARROW)
    wndcls.hbrBackground = COLOR_WINDOW
    wndcls.lpszMenuName = 0
    wndcls.lpszClassName = "myWindowClass"
    MyRegisterClass = (RegisterClass(wndcls) <> 0)
End Function

Private Sub MyUnregisterClass()
    UnregisterClass "myWindowClass", App.hInstance
End Sub

Private Function MyWndProc(ByVal hWnd As Long, ByVal message As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case message
        Case WM_DESTROY
            PostQuitMessage (0)
    End Select
    MyWndProc = DefWindowProc(hWnd, message, wParam, lParam)
End Function

Private Function GetMyWndProc(ByVal lWndProc As Long) As Long
    GetMyWndProc = lWndProc
End Function

Private Sub MyMessageLoop()
    Dim aMsg As Msg
    Do While GetMessage(aMsg, 0, 0, 0)
        DispatchMessage aMsg
    Loop
End Sub



Цитата(iff @  1.11.2007,  22:41 Найти цитируемый пост)
Надеюсь на ней можно рисовать мышкой кнопочки, фреймы и др.

Это всего лишь окно, а не графический редактор... Впрочем, если сможешь отслеживать мышиные события и создавать на родительском окне соответствующие дочерние, то твои надежды не беспочвенны  smile 

Автор: iff 2.11.2007, 18:24
Akina,Вот так получилось:
Код

Private Sub Form_Resize()
If WindowState = 0 And Width <> 3495 Then Width = 3495
If WindowState = 0 And Height <> 4125 Then Height = 4125
End Sub

Наверно под MaxAllowedWidth имелось в виду число, которое нужно поставить по своему усмотрению.
И ещё, возникла проблема, что после сворачивания окна выводился ERROR, по этому добавил про WindowState.
К тому же результат не изменяется если вместо Me.Width просто напечатать Width (так же и с Height).

bom, выдаёт ошебку на строке:
Код

Private Declare Function RegisterClass Lib "user32" Alias "RegisterClassA" (Class As WNDCLASS) As Long

Автор: Akina 2.11.2007, 18:28
Цитата(iff @  2.11.2007,  19:24 Найти цитируемый пост)
Наверно под MaxAllowedWidth имелось в виду число, которое нужно поставить по своему усмотрению.

Имелась в виду переменная, значение которой вычисляется в зависимости от желаемых размера и положения окна и текущих установок разрешения экрана и типа приведения размеров.

Автор: iff 2.11.2007, 19:07
Такие переменные как правило пишут так: [MaxAllowedWidth]

Автор: iff 14.11.2007, 22:06
Ой, вот тот код, который предложил Akina, он  тормозит. Ну, например если пытаться уменьшить окно, то оно начинает очень активно мигать (черезвычайно некрасиво!). А ещё, я заметил, что в калькуляторе, если попытаться расширить окно, то значёк курсора даже и не миняется на тонкую чёрную находящююся под углом, двухсторонию стрелочку.
Тогда то я сразу сообразил что что-то нужна менять в свойствах, но что? Пробовал BorderStyle = 1 - Fixed Single, но тогда из кнопочек на зоголовке окна оставался, только крестик, а это меня не устраивало... smile 

Оказалось, при установки этого свойства, кнопки максбуттон и минбуттон, становились фолс.
Достаточно обратно минбуттон сделать тру (а максбуттон мне не нужен), как всё стало OK! (и курсор как в калькуляторе)!!!
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)