How to avoid WM_APP

I am writing a CFrameWnd wrapper and I have this line in the header file:

#define WM_CFW_MESSAGE              (WM_APP + 100)

Is this a good practice? Is it required that users of this shell not remember in order not to use this particular number (WM_APP + 100)?

+3
source share
3 answers

No, this is not a good practice. The range is WM_USERmore suitable. The range is WM_APPintended for messages that should be understood by several classes of windows in one program. The range WM_USERis for messages intended for one class of windows.

WM_USER. #define WM_CFW_MESSAGE (WM_USER+0), , WM_USER. , (WM_USER+1) .. , WM_USER+0 .

+3

, .

0

" , " . , , .

"" , , , . WM_USER. . , . , WM_USER.

WM_APP. , WM_APP.

RegisterWindowMessage ( ) , , WINDOWS RegisterWindowMessage.

. Delphi

{ WM_USER }
procedure TYourControl.RefreshColor;
begin
  SendMessage(Self.Handle,WM_USER+YourNumber,wParam,lParam);
  { Pay attention to Self.Handle, use WM_USER within YOUR CONTROL }
end;

{ WM_APP }
procedure CheckValue;
var
  IResult: Integer;
begin
  IResult:=SendMessage(OtherForm.Handle,WM_APP+YourConstant,wParam,lParam);
  { Watch OtherForm.Handle }
end;

{ RegisterWindowMessage }
procedure SendCommand(OtherAppHandle: Integer);
var
  MessageNumber: Integer;
  MessageName: ShortString;
begin
  MessageName:='YourMessageName';
  Inc(MessageName[0]);MessageName[Ord(MessageName[0])]:=#0;
  MessageNumber:=RegisterWindowMessage(@MessageName[1]);
  SendMessage(OtherAppHandle,MessageNumber,wParam,lParam);
end;

{ Hope this will help }
0

Source: https://habr.com/ru/post/1780680/


All Articles