[VB.NET] Windows messages

Pagina: 1
Acties:

  • beany
  • Registratie: Juni 2001
  • Laatst online: 20:57

beany

Meeheheheheh

Topicstarter
Hoi,

ik wil in VB.NET graag windows messages afvangen. En wel de WM_NCHITTEST. Ik ben wel wat messages tegen gekomen. Er staat zelfs een stukkie voorbeeld code in de help, maar de WM_NCHITTEST lijkt niet voorbij te komen(Application.AddMessageFilter. Bij de help van AddMessageFilter staat een voorbeeld) :?

Mouse clicks komen wel voorbij, en ook nog wat andere messages. Wat ik namelijk graag wil doen is dit:

Een window maken zonder border, en een eigen caption bar maken. Wanneer men op de caption bar klikt, het windowtje kunnen slepen. Dit kan heel mooi met windows messages, door de WM_NCHITTEST af te vangen, als de result HT_CLIENT is, deze te vervangen met HT_CAPTION. Dit truukje ook uit halen met de borders zodat je het venster ook kan resizen. Dit werkt perfect in Delphi, maar met VB.NET is het me nog niet gelukt.

Iemand enig idee??

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 09-09 09:06
Op woensdag 01 mei 2002 22:54 schreef beany het volgende:
Hoi,

ik wil in VB.NET graag windows messages afvangen. En wel de WM_NCHITTEST. Ik ben wel wat messages tegen gekomen. Er staat zelfs een stukkie voorbeeld code in de help, maar de WM_NCHITTEST lijkt niet voorbij te komen(Application.AddMessageFilter. Bij de help van AddMessageFilter staat een voorbeeld) :?

Mouse clicks komen wel voorbij, en ook nog wat andere messages. Wat ik namelijk graag wil doen is dit:

Een window maken zonder border, en een eigen caption bar maken. Wanneer men op de caption bar klikt, het windowtje kunnen slepen. Dit kan heel mooi met windows messages, door de WM_NCHITTEST af te vangen, als de result HT_CLIENT is, deze te vervangen met HT_CAPTION. Dit truukje ook uit halen met de borders zodat je het venster ook kan resizen. Dit werkt perfect in Delphi, maar met VB.NET is het me nog niet gelukt.

Iemand enig idee??
Nee, maar kun je een stukje delphi code posten, want ik zoek al een tijdje een stukje code :P

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • beany
  • Registratie: Juni 2001
  • Laatst online: 20:57

beany

Meeheheheheh

Topicstarter
Op woensdag 01 mei 2002 23:05 schreef Nibble het volgende:

[..]

Nee, maar kun je een stukje delphi code posten, want ik zoek al een tijdje een stukje code :P
Ik neem aan dat je de code wilt voor Delphi om met WM_NCHITTEST te werken, zodat je makkelijk een caption kan 'simuleren'?? komt ie:


Is geript uit wat code van mij, misschien dat dit niet direct werkt, maar de essentiele dingen staan er wel in :)

De constant Oppervlakte is de breedte in pixels aan de zijkanten van het form waar de muis reageert als resize.
code:
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
unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, Menus;

type

  TfrmMain = class(TForm)
  private
    procedure WMNCHitTest(var Msg:TWMNCHitTest); message WM_NCHITTEST;
  public
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.WMNCHitTest(var Msg:TWMNCHitTest);
const
   Oppervlakte: integer = 10; 
begin
   inherited;

   if msg.Result = HTCLIENT then
   begin
    if ptInRect(Rect(0, 0, Width, 22), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
       msg.result := HTCAPTION
    else
    begin
       //Corners
       if ptInRect(Rect(0, 0, Oppervlakte, Oppervlakte), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
        Msg.Result := HTTOPLEFT
       else if ptInRect(Rect(Width - Oppervlakte, 0, Width, Oppervlakte), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
        Msg.Result := HTTOPRIGHT
       else if ptInRect(Rect(0, Height - Oppervlakte, Oppervlakte, Height), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
        Msg.Result := HTBOTTOMLEFT
       else if ptInRect(Rect(Width - Oppervlakte, Height - Oppervlakte, Width, Height), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
        Msg.Result := HTBOTTOMRIGHT
       //Straight corners
       else if ptInRect(Rect(Oppervlakte, 0, Width - Oppervlakte, Oppervlakte), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
        Msg.Result := HTTOP
       else if ptInRect(Rect(Oppervlakte, Height - Oppervlakte, Width - Oppervlakte, Height), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
        Msg.Result := HTBOTTOM
       else if ptInRect(Rect(0, Oppervlakte, Oppervlakte, Height - Oppervlakte), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
        Msg.Result := HTLEFT
       else if ptInRect(Rect(Width - Oppervlakte, Oppervlakte, Width, Height - Oppervlakte), ScreenToClient (Point (Msg.XPos, Msg.YPos))) then
        Msg.Result := HTRIGHT;

    end;
   end;

end;

end.

Dit wil ik dus in VB.NET werkend krijgen. Ik weet dat het moet kunnen, want VB.NET ondersteund windows messages. Het lukt me alleen niet :(

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 27-08 08:10
zie planet-source-code voor een concreet voorbeeld om je eigen MSN cient te maken. Ik geloof dat je middels een COM component een soort callback mechanisme in moet bouwen om zo de events vanuit je COM server op te vangen en te verwerken. Het voorbeeld zal hier vast duidelijk genoeg over zijn.

  • beany
  • Registratie: Juni 2001
  • Laatst online: 20:57

beany

Meeheheheheh

Topicstarter
Op donderdag 02 mei 2002 10:15 schreef paulgielens het volgende:
zie planet-source-code voor een concreet voorbeeld om je eigen MSN cient te maken. Ik geloof dat je middels een COM component een soort callback mechanisme in moet bouwen om zo de events vanuit je COM server op te vangen en te verwerken. Het voorbeeld zal hier vast duidelijk genoeg over zijn.
Eh :?

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Verwijderd

Op donderdag 02 mei 2002 10:15 schreef paulgielens een verhaaltje wat kant nocht wal raakte:
Ehh een window message en een com event zijn 2 completely different things....

  • beany
  • Registratie: Juni 2001
  • Laatst online: 20:57

beany

Meeheheheheh

Topicstarter
Op donderdag 02 mei 2002 11:59 schreef Yarvieh het volgende:

[..]

Ehh een window message en een com event zijn 2 completely different things....
En dan hebben we het nog niet eens over dat MSN client verhaal. Ik ben daar in de verste verte niet mee bezig! |:(

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • beany
  • Registratie: Juni 2001
  • Laatst online: 20:57

beany

Meeheheheheh

Topicstarter
update:

Eerst ff de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Class frmMain
    Inherits System.Windows.Forms.Form

    Protected Overrides Sub DefWndProc(ByRef m As System.Windows.Forms.Message)

      'If m.Msg = 132 Then 'WM_NCHITTEST, geen constanten voor aanwezig in VB.NET GVD!!@#$%
      TextBox1.Text = m.ToString + vbCrLf + TextBox1.Text
      'End If

      MyBase.DefWndProc(m)
    End Sub

End Class

Het rare is, ik zie nu wel WM_NCHITTEST messages voorbij komen, echter ik zie NIET de WM_NCHITTEST->HTCLIENT messages voorbij komen, die ik WEL zie met Spy++(tool om o.a. messages mee te bekijken die een applicatie ontvangt, wordt meegeleverd met VS.NET). Het zijn voornamelijk de mouse messages e.d. die voorbij komen. Dit houd dus in, tenzij ik wat verkeerd doe, dat .NET bepaalde messages niet door geeft aan VB code(ben geen C# man, maar zover als ik kon zien ook niet in C#).

Ben ik nou helemaal gek(jaja, inkopper) of doe ik toch wat verkeerds?

:'(

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 27-08 08:10
Op donderdag 02 mei 2002 11:59 schreef Yarvieh het volgende:

[..]

Ehh een window message en een com event zijn 2 completely different things....
Teveel stress en te weinig slaap leiden tot dergelijk lukrake reacties, mijn excuses voor deze flauwekul |:(
Pagina: 1