|
Thought some of you might be interested in the following page:
http://msdn.microsoft.com/library/en-us/dnapiover/html/api-overview.asp
It documents some of the APIs that Microsoft has hidden from us to make their programs unique or a step-ahead.
"November 2001, Microsoft, the U.S. Department of Justice, and nine State Attorneys General agreed to a proposed settlement of the government's antitrust case (proposed consent decree). For more information (including a comprehensive archive of documents and transcripts of proceedings) about the proposed consent decree, see the Microsoft Press Pass Settlement Proceedings Web page. For more information about how Microsoft has fulfilled its obligations under the decree, please see the Microsoft Settlement Program Web page.
As part of that settlement, Microsoft agreed to document the interfaces used by "Microsoft Middleware" (as defined in the proposed consent decree) to obtain services from the Microsoft® Windows® 2000 and Windows XP desktop client operating systems. The vast majority of these interfaces were already documented among the thousands of Application Programming Interfaces (APIs) in the Microsoft Platform Software Development Kit (SDK).
Microsoft teams identified a few hundred undocumented Windows interfaces or parameters that were used by one or more of the Microsoft Middleware components. Microsoft's technical writers have documented these interfaces and made them available as APIs in the MSDN Online Library."
Cheers,
uniken
|
|
|
|
|
No big news. Most of this functions are not even correctly documented and few of them are helpful. Calling this an "advantage" is a joke.
The really useful interfaces are still undocumented.
...if you're under 8 or younger. Chris Maunder, the Lounge
|
|
|
|
|
This is puzzling. Execution never goes into either function when either action is done:
void CSortListCtrlTestDlg::OnColumnclickList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
for (int i = 0; i < 10; i++)
AfxMessageBox (m_ctlList.m_shuffledIndex[i]);
*pResult = 0;
}
void CSortListCtrlTestDlg::OnItemclickList(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
AfxMessageBox("ll");
*pResult = 0;
}
Am I trapping the wrong messages from class wizard? if so, what function can I have that will respond to the column click? (Right now the columnclick fires an OnColumnClick thats a member of the Clistctrl derived class. But not the col click in the dialog where the control is...
Appreciate your help,
ns
|
|
|
|
|
Probably your CSortListCtrl handles these notifications using so-called message reflection. If this is the case, you'll have to change ON_NOTIFY to ON_NOTIFY_EX in CSortListCtrl's message map and return FALSE from handler, which means that dialog will get its chance to respond to the event.
[edit]
Of course, the CSortListCtrl would use ON_NOTIFY_REFLECT, not ON_NOTIFY.
[/edit]
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
I dont have ON_NOTIFY:Instead its ON_NOTIFY_REFLECT Will ON_NOTIFY_REFLECT_EX be what I want?
BEGIN_MESSAGE_MAP(CSortListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnClick)
ON_WM_DESTROY()
END_MESSAGE_MAP()
Also, theres no return value for the CListCtrl function, its a void: I presume this is the handler you speak of?
void CSortListCtrl::OnColumnClick( NMHDR* pNMHDR, LRESULT* pResult )
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
const int iColumn = pNMListView->iSubItem;
Sort( iColumn, iColumn == m_iSortColumn ? !m_bSortAscending : TRUE );
RetrieveIndex();
*pResult = 0;
}
Appreciate your help,
ns
|
|
|
|
|
Yes - change macro to ON_NOTIFY_REFLECT, void to BOOL and add 'return TRUE;' as last line on CSortListCtrl::OnColumnClick handler.
If the class was downloaded from CP, don't forget to ask the author to change it in the article sources as well
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
Changed to _EX - no luck. But still havent figured out who is supposed to return false...
Appreciate your help,
ns
|
|
|
|
|
Sorry - it's 'return TRUE;' in CSortListCtrl handler connected to msg map with ON_NOTIFY_REFLECT_EX macro.
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
Did both things that you said --BOOL and _EX. Still no response!
Appreciate your help,
ns
rebuilt it too!
|
|
|
|
|
I've checked MSDN again - I've found two contradictory articles; one advertised 'return TRUE' while other suggested FALSE. Anyway, this simple example worked for me - I've got two TRACES.
BEGIN_MESSAGE_MAP(CListCtrl2, CListCtrl)
ON_NOTIFY_REFLECT_EX(LVN_COLUMNCLICK, OnColumnclick)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CTest2Dlg, CDialog)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnColumnclickList1)
END_MESSAGE_MAP()
BOOL CListCtrl2::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
{
TRACE("in the listctrl-derived class\n");
*pResult = 0;
return FALSE;
}
void CTest2Dlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
TRACE("in dialog class\n");
*pResult = 0;
}
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
The columclick is working with the false. A biiig thank you! I thought I'd have to abandon this slick control.
The item click event in the dialog doesnt respond, but the plain old click does.....wonder why?
void CSortListCtrlTestDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) works
void CSortListCtrlTestDlg::OnItemclickList(NMHDR* pNMHDR, LRESULT* pResult) doesnt!
THe click however always seems to be on an item (in the row the columns all get selected at once), so this will do. I just dont know if click means anywhere in the control, not just on the item.
Appreciate your help,
ns
|
|
|
|
|
I'd try your ideas on it, but there is no itemclick oe even click event in the class itself.
Appreciate your help,
ns
|
|
|
|
|
I guess you're after NM_CLICK; it should be available in CSortListCtrl and CYourDlg as well.
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
Will use nm_click. What I meant by there being no click event in the class was that there was no handler implemented for it. The message is of course available.
I think I'm going to take off now for the day (unless I just cant resist getting on again later!). ONce again you have proven to be a very valuable resource and I cant thank you enough for all the help you've given me.
Appreciate your help,
ns
|
|
|
|
|
Hi.
I am in the predesign stage of an FTP server. My goal is to release an FTP server within a year. I have some basic questions.
First, when an FTP client sends a command, does the server read the data and then basically search the data received, which is text, from a list of FTP commands such as get, ls, etc? How does a typically transcript between an FTP client and FTP server look like?
Secondly, where is reliable source for FTP commands? I know a source for TCP/IP commands. Do you use the same commands for FTP i.e. "/get?"
Lastly, does the FTP client sends the login and password in login->password order or is it opposite?
Thanks,
Kuphryn
|
|
|
|
|
You need to take a look at the RFC. I have a copy of RFC 959, but I don't know if that is the latest and greatest. Mabye soeone can correct me if there has been another one since then (I believe there has been a revision/addendum to address MPFTP, or something like that, maybe). This outlines the FTP protocol.
If you would like to see what happens between the server and client in action, just install an FTP client, say CuteFTP or WS_FTP, and an FTP server on your machine, say BulletProof FTP or something similar. Both have logging functionality, so you can see the commands the client sends, and the responses the server sends back.
Set up an account in the FTP server, start the server, and log in with the client. Give the host address as "localhost", browse around in the client, download and upload a couple of files, etc.
Basically, it works something like this. The client establishes a connection to the server over a socket to issue commands and receive responses. This socket is the control socket. Commands are issued as text, the command followed by (optionally) arguments. The server receives the command on the other end, and sends a response to the client on the control socket, indicating whether the commad was successful, further information, etc. Data is transferred over a second socket, the data socket, which is generally connected for the duration of a transfer only, and may be either the responsibility of the client or the server to establish the data connection for file transfers, directory listings, etc., depending on what mode the session is in (Passive mode, or "Not Passive").
Maybe you should try implementing an FTP client first? This is not trivial, but simpler than implementing a server, since you only have to worry about two sockets, instead of an arbitrary number for the server.
The RFC specifies this in greater detail, but generally, USER, then (optionally) PASS, and in some cases ACCT. Though, practice, there is almost always a password required, but I think there doesn't have to be. Take a look at the RFC.
Good Luck!
Aaron
|
|
|
|
|
Okay. Thanks.
I will definitely look into RFC. Are there RFC hardcopy reference available or do you have to print them out from a website?
You made a good point about just keeping a log of an FTP client and FTP server to see how FTP communication typically works.
I have considered design an FTP client before an FTP server. However, I have worked with direct TCP/IP connection and HTTP in the past. I would like to go ahead and design a major network communication server where I will have to utilize real I/O model including overlapped I/O and completion port.
Kuphryn
|
|
|
|
|
Just use Google to search for the RFC (search for "RFC XXX" where XXX is the number you want). I bet you'll find it.
--
Please state the nature of your medical emergency.
|
|
|
|
|
or, search google for "RFC XXX", I bet you'll find something entirely different
Signature space for rent. Apply by email to....
|
|
|
|
|
Hmm.. an XXX-rated RFC, is that some kind of questionnaire a hooker would send to her customers?
--
Please state the nature of your medical emergency.
|
|
|
|
|
Hello @all,
i have a dialogbased mfc-programm. one button on the dialog should do this: a CFileDialog and when i choose a .txt file my program should read it.
what i did: i create a new dialog and i choose the CFileDialog as basis class. in the button-function i wrote doModal()...etc. when i run the program, i get an error: something with the standardkonstruktor.
what i must change or add???
and how can i read the choose txt file???
has anybody good links or tipps???
sunny
|
|
|
|
|
You don't need to derive new class from CFileDialog. Just create CFileDialog object, call DoModal. If DoModal returns IDOK, get the file name with CFileDialog::GetPathName. You can use stdio.h/CStdioFile/fstreams for actual input.
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
okay, i wrote now:
CFileDialog d;
d.DoModal();
when i run the program i still get the same error.
sunny
|
|
|
|
|
1) You need to provide some parameters to CFileDialog constructor
2) You need to check the value returned by CFileDialog::DoModal. If it's not IDOK, then user has cancelled the operation.
Sunnygirl wrote:
when i run the program i still get the same error.
What kind of error it is?
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
error: no suitable standard constructor available
sunny
|
|
|
|
|