what is a message identifier?

hai
what is a message identifier?
[37 byte] By [sriranjani] at [2007-11-18 10:00:25]
# 1 Re: what is a message identifier?
Well...I assume you mean something like 'WM_COMMAND', 'WM_KILLFOCUS' etc.?

In this case, these are only predefined constant values which represent each message uniquely throughout the system...
Andreas Masur at 2007-11-9 13:06:02 >
# 2 Re: what is a message identifier?
A message identifier is a group of letters representing an integer. This integer is the one which identifies a message allowing the existence of different messages.
Caronte at 2007-11-9 13:07:13 >
# 3 Re: what is a message identifier?
normally message identifiers start with the control's first letter eg
for a button the message identifiers will be like BM_CLICK and for edit it can have EM_SETSEL , WM_* for window messages WM_USER is the boundry of windows defined message id's if u want ur own message id, create it above WM_USER limit by adding a few integeral value to your message ID
siawos at 2007-11-9 13:08:11 >
# 4 Re: what is a message identifier?
Originally posted by siawos
WM_USER is the boundry of windows defined message id's if u want ur own message id, create it above WM_USER limit by adding a few integeral value to your message ID
Just as a side note...instead of using 'WM_USER' you should use 'WM_APP' as a base for your user-defined messages since the latter one provides less problems. Windows itself uses the range 'WM_USER + x' for several messages therefore you can run into conflict problems pretty easy...
Andreas Masur at 2007-11-9 13:09:07 >
# 5 Re: what is a message identifier?
If you want to use WM_USER, most books recommend to begin with WM_USER + 100 (and the following numbers) to avoid the question stated by Andreas.
Caronte at 2007-11-9 13:10:16 >
# 6 Re: what is a message identifier?
Originally posted by Caronte
If you want to use WM_USER, most books recommend to begin with WM_USER + 100 (and the following numbers) to avoid the question stated by Andreas.
I do not know these books, however, I would not rely on the 'WM_USER + 100'. The complete range of 'WM_USER' can be used by predefined window classes...using 'WM_APP' will avoid toruble at all... :cool:
Andreas Masur at 2007-11-9 13:11:12 >
# 7 Re: what is a message identifier?
Well Andreas.

I agree with you so we dont need to argue...

It is true that WM_APP is a safe space for user messages, and is a good recommendation to use it.

The only difference between both is that WM_APP is supposed to be used for application messages, whether WM_USER is supposed to be used for messages inside a window...

However, as Microsoft uses the low part of WM_USER (there is space for 0x800 messages there WM_USER to WM_USER + 0x7FF), if you want to use this message address space, you should not use the lower ones... The recommendation of WM_USER + 100 is all around the Windows literature (you only need to search for WM_USER + 100 in google).

But as I have said before... I agree with you that using WM_APP is better.
Caronte at 2007-11-9 13:12:17 >
# 8 Re: what is a message identifier?
what is WM_APP?
sriranjani at 2007-11-9 13:13:09 >
# 9 Re: what is a message identifier?
WM_APP is a windows identifier for the first position of a group of addresses dedicated to application messages.

A user can use WM_APP and the following addresses for own messages.
Caronte at 2007-11-9 13:14:17 >
# 10 Re: what is a message identifier?
Originally posted by sriranjani
what is WM_APP?
WM_APP ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/MessagesandMessageQueues/MessagesandMessageQueuesReference/MessagesandMessageQueuesMessages/WM_APP.asp)...
Andreas Masur at 2007-11-9 13:15:15 >
# 11 Re: what is a message identifier?
this is the code i have with me now for parsing emails received in my inbox..how shud i proceed now:
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#include<conio.h>
#include<windows.h>
#include<MAPI.h>

//assumption::character interface being used.
//the Simple MAPI functions for reading messages can't
//log on implicitly and require an explicit session handle.

/*the client application defines needed variables and
logs on to get a session handle/*

ULONG ReadNextUnreadMsg()

{

ULONG err;
LHANDLE lhSession; // Need a session for MAPIFindNext.
CHAR rgchMsgID[513]; // Message IDs should be >= 512 CHARs + a null.
MapiMessage *lpMessage; // Used to get a message back from MAPIReadmail
int i, // Ubiquitous loop counter.
totalLength; // Number of characters printed on a line.
err = MAPILogon(0L, // ulUIParam; 0 always valid.
"c:\\pst\\myprofil.pro",// Shouldn't hardcode this.
NULL, // No password needed.
0L, // Use shared session.
0L, // Reserved; must be 0.
&lhSession); // Session handle.
if (err != SUCCESS_SUCCESS) // Make sure MAPILogon succeeded.
{
printf("Error: could not log on\r\n");
return(err);
}

//next..the client searches for the first unread message in the //default folder in the store - probably the user's Inbox.
//Since there might not be any unread messages in the folder, //the client first tests the return value from the MAPIFindNext
//function against MAPI_E_NO_MESSAGES before checking against //SUCCESS_SUCCESS. If the call is successful, the client will have
///a valid message identifier to use to retrieve the first// unread message

/* */

// find the first unread message

err = MAPIFindNext(lhSession, // explicit session required
0L, // always valid ulUIParam
NULL, // NULL specifies interpersonal messages
NULL, // seed message ID; NULL=get first message
MAPI_LONG_MSGID | // needed for 512 byte rgchMsgID.
MAPI_UNREAD_ONLY, // only get unread messages.
0L, // reserved; must be 0
rgchMsgID);// buffer to get back a message ID.

if (err == MAPI_E_NO_MESSAGES) // make sure a message was found
{
printf("No unread messages.\r\n");
return(err);
}
if (err != SUCCESS_SUCCESS) // make sure MAPIFindNext didn't fail
{
printf("Error while searching for messages\r\n");
return(err);
}


//The client can now be sure it is safe to retrieve the message. //However, it is a good idea to check the return value from
//the MAPIReadMail function. If the call fails, the memory pointed //to by the client's lpMessage pointer will not be accessible by
//the client. The client should not try to display a message at //that location. Note that this example sets the
//MAPI_SUPPRESS_ATTACH flag so the returned message will not
//have any attachments in it and Simple MAPI will not create any //temporary files for them.
// retrieve the message

err = MAPIReadMail(lhSession, // Explicit session required.
0L, // Always valid ulUIParam.
rgchMsgID, // The message found by MAPIFindNext.
MAPI_SUPPRESS_ATTACH, // TO DO: handle attachments.
0L, // Reserved; must be 0.
&lpMessage); // Location of the returned message.

if(err != SUCCESS_SUCCESS) // Make sure MAPIReadMail succeeded.
{
printf("Error retrieving message %s\r\n",rgchMsgID);
return(err);
}

//Now, the client can display the message. As expected, //it begins by displaying the addressing information attached
//to the message before displaying the subject line and message text.// When displaying the addressing information, it is best if you
//can display friendly names. However, since friendly names are
//not always available, you must verify that each recipient //structure's lpszName member points to a valid string,
// and that the string is not a null string.
// Display the sender's name or address; use the friendly name// if it is present.

if((lpMessage->lpOriginator->lpszName != NULL) &&
lpMessage->lpOriginator->lpszName[0] != '\0')
printf("From: %s\r\n",lpMessage->lpOriginator->lpszName);
else
printf("From: %s\r\n",lpMessage->lpOriginator->lpszAddress);

//Displaying the recipients' addresses is complicated by the //need to avoid breaking a recipient's name or address across
//two lines. This code can be further improved by differentiating //between recipients based on their ulRecipClass members so that
//they can be properly displayed as To, CC, or BCC recipients.// As this code shows, handling recipient data can be the most
// complex part of reading a message.// Display the recipients' names or addresses. To Do: enhance
// this code to separate the recipients into lists of MAPI_TO,// MAPI_CC, and MAPI_BCC recipients for separate display.

if(lpMessage->nRecipCount == 0)
printf("Warning: no recipients present for this message\r\n");
else
for(i = 0; i < lpMessage->nRecipCount; i++) // For each recipient...
{
// This code uses lstrlen to calculate the length of strings and
// to validate that the strings have some content, since the
// length is needed anyway. This avoids the more verbose checks
// as were done for lpMessage->lpOriginator->lpszName earlier.

// lpszT references a name or address; simplifies later code.
// length is the length of the name or address.

LPSTR lpszT = lpMessage->lpRecips[i]->lpszName;
int length = lstrlen(lpszT);

if(i == 0) // First recipient; need to do some initialization.
{
printf("Recipients:");
totalLength = 11; // since strlen("Recipients:") = 11.
}

// Decide whether to use the friendly name or the address.
if(length == 0)
length = lstrlen(lpszT=lpMessage->lpRecips[i]->lpszAddress);

// Verify that the line has room for this name or address. If
// not, print a CR LF pair to go to the next line.
if(totalLength + length + 1 > LINE_WIDTH)
{
printf("\r\n");
totalLength = 0;
}

printf(" %s",lpszT); // Finally, print the name or address.
totalLength += length + 1;// Maintain the line length.

// If there are more addresses, separate them with semicolons.

if(i < (lpMessage->nRecipCount - 1))
{
printf(";");
totalLength++;
}
}


//Now, the client displays the subject line and message text if //they are present. Note that the message text can be printed
//with a simple call to the C library function printf. Since //the message was read with the MAPI_SUPPRESS_ATTACH flag set,
//there will be no attachments in it.// Display the subject and message body. Not printing anything
//for the subject is fine, but something should always be //printed for the message body since it is the last thing
//that this function displays.

if(lpMessage->lpszSubject != NULL && // Standard validity check
lpMessage->lpszSubject[0] != '\0')
printf("Subject: %s\r\n",lpMessage->lpszSubject);
if(lpMessage->lpszNoteText != NULL && // Standard validity check
lpMessage->lpszNoteText[0] != '\0')
printf("Message Text:\r\n%s",lpMessage->lpszNoteText;
else
printf("No message text.\r\n");

//Finally, the client releases the memory that the MAPIReadMail //function allocated for the message, closes the session,
//and returns a successful return value.

MAPIFreeBuffer(lpMessage);
MAPILogoff(lhSession, // The session.
0L, // 0 always valid for ulUIParam.
0L, // No logoff flags.
0L); // Reserved; must be 0.
return SUCCESS_SUCCESS; // Inform the caller of our success.
} // End of ReadNextUnreadMsg.

...in the above written code what is c:\\mst\\myprofile.pro in readnextmessage ?
what shud i write in my code?
andd what is OL and lpmessageid in readmail function??
thanxxx
sriranjani at 2007-11-9 13:16:13 >