|
Actually I did have the Type but CP formatting didnt show the angled brackets....
Whats bad about sending in an stl ptr?
Appreciate your help,
ns
|
|
|
|
|
1. Casting complex C++ type to ULONG is dangerous (even pure template like std::... without vtbl) you might loose type info this way.
2. You pass the pointer, but never checked if it is zero.
3. You introduce level of complexity that might not be necessary. myDialog.SetData() might work better for you.
You will appreciate that during maintenance phase (2 years down the road )
|
|
|
|
|
Thanks for pointing out the dangers..
Oh Are you saying I should make a SetDAta method in my CDialog class and call it whenever? ? Cos I didnt see it in the docs
|
|
|
|
|
hi,
i've designed a program that runs as an server. If a connections request comes the program opens a thread that handles the commands for this connection.
This new thread construct a class that has all the thinking capabillaties for the thread, it also constructs a Class that handles the connection events(sending information/encrypting it and so on). The thread also receives the pointer to a "database server"(a class that handles all commands for the database) and sends it to the constructed class. Wenn a connection is made there will also be a Session-struct constructed(this hold all info about the connection, login-name/login-pass and so on).
The session is constructed as a "new" struct, wenn the thread ends the session is "deleted" so is doesn't remain in the memory.
if i run this program, and login and out a few hundred times the memory that is taken by the server seems to be growing... what can i doe to prevent this?
wenn the thread ends is the constructed class fully removed out of the memory? or do i have to do it myself?
thread code:
<small><br />
<br />
UINT ClientThreadRecv(LPVOID Client)<br />
{<br />
CCrypt Crypt; <br />
char Block[BlockSize]; CString Data, TData; // the final variable for storing the received data<br />
int loc;<br />
int namelen = sizeof(sockaddr_in);<br />
sockaddr_in name;<br />
char *ip;<br />
<br />
SOCKET client = (SOCKET)Client; <br />
getpeername(client, (sockaddr *)&name, &namelen);<br />
ip = inet_ntoa(name.sin_addr); <br />
CGebruikersStruct *Session = new CGebruikersStruct; <br />
Session->client = client;<br />
Session->LoginNaam = "";<br />
Session->LoginPass = "";<br />
Session->LoggedIn = FALSE;<br />
Session->Rechten = 0;<br />
Session->IPadres = ip;<br />
<br />
CClientSocket ClientSocket; <br />
ClientSocket.Session = Session;<br />
ClientSocket.DatabaseServer = DatabaseServer; <br />
CClientClass ClientClass; <br />
ClientClass.ClientSocket = &ClientSocket;<br />
<br />
ClientSocket.ConnectionBegin(); while(true)<br />
{<br />
<br />
loc = recv(client, Block, BlockSize, 0); <br />
if ((loc == -1) || (loc == 0)) <br />
{ break; }<br />
Block[loc] = 0;<br />
<br />
Crypt.DeCrypt(Block, Block); TData += Block; // add all data into 1 big variable<br />
if (TData.Mid(TData.GetLength() - EndKey.GetLength(), EndKey.GetLength()) == EndKey) {<br />
if (ClientClass.ExcuteCmd(TData) == FALSE)<br />
{ break; } <br />
TData = "";<br />
}<br />
<br />
}<br />
ClientSocket.ConnectionEnd(); <br />
delete Session; <br />
<br />
closesocket(client); return 0; // ends the thread<br />
}<br />
<br />
</small>
[]D [] []D []
|
|
|
|
|
Am sorry, i found the memory leak, it wasn't the code in the thread but it was a piece of code in the checking for the right ip. i used a linked list to check it the ip that tries to log in has been banned from the server. it seemed that i kept deleting the ip from the database while it wasn't even in the database. this also explains why the log-on procedure took about 20 too 40 ms, while i'm only working with linked lists.
i changed the code to delete the ip from the database only if it is found in the linked list(mirror to the database), now my logon procedure is takes < 5 ms(the computer says it takes 0 ms so... ).
[]D [] []D []
|
|
|
|
|
Hey Code Gurus
I'm pretty new with the language, but I'm ready to learn.
Are there any tutorials that deal with basic http protocal handling and socket connections?
I want to build 2 simple programs.
1. A program that sits on top of a socket and bounces strings through the HTTP stream. Basically an incredibly simple web-server.
2. A small program that opens an HTTP connection and recieves everything from that connection.
I don't really know where to start.
Anyway, thanks folks.
|
|
|
|
|
I highly recommend Network Programming for Microsoft Windows, Second Edition by Anthony Jones and Jim Ohmund.
For HTTP: http://www.w3.org/Protocols/rfc2068/rfc2068
Kuphryn
|
|
|
|
|
Hi everyone,
i want to add tool tips in a CFormView(SDI) program.How can i do that?
|
|
|
|
|
Call EnableToolTips(TRUE) in the OnIntiialUpdate()
// in header file
afx_msg BOOL OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT * pResult);
// add this to your message map
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
// add the tooltip text for each IDC of a cntrol on your form. Note that all CStatic objects must have the SS_NOTIFY style set in the resources to get a tooltip for them.
BOOL CYourFormView::OnToolTipNotify(UINT , NMHDR *pNMHDR, LRESULT * )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
if (pTTT->uFlags & TTF_IDISHWND)
{
CRect rctTemp;
CPoint pntMouse;
GetCursorPos(&pntMouse);
UINT nID = ::GetDlgCtrlID((HWND)pNMHDR->idFrom);
pTTT->lpszText = NULL;
switch (nID)
{
case IDC_TITLE :
pTTT->lpszText = "Tray setup title";
break;
case IDC_NEW_ASSAY :
pTTT->lpszText = "Create new assay in selected position";
break;
}
if (pTTT->lpszText != NULL)
{
return(TRUE);
}
}
return(FALSE);
}
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
Note that this might not work too well for ActiveX controls, if there are any on the form. I dd something similar, and you don't seem to get anything for an ID for the ActiveX controls on a form, so you have to keep track of their window handles.
|
|
|
|
|
Has anyone ever seen a pre-written control for implementing a row of buttons that look like the tabs of vc6's output frame ? the bits that say "build","debug","find in files 1", etc
i don't want a full on tab control- just a row of buttons that i can handle events for.
any pointers greatly appreciated. otherwise i'll have to write it myself.
thanks
jon
#include <beer.h>
|
|
|
|
|
check out (MSDN) what TCS_BUTTONS and TCS_BOTTOM can do for you
|
|
|
|
|
Hy.
I'm developing an MDI application, and i've got a problem.
I'm trying to add submenus to the main menu, but i can't get the MDI menu, only the main APP menu. I tried with GetMenu, but that only returns the Main App menu.
How can i get a pointer to the MDI menu ???
|
|
|
|
|
The menu's used in MDI are:
CMainFrame::m_hMenuDefault (when no windows are open)
CDocTemplate::m_hMenuShared (for each doc template added)
You will need to modify these menu resources.
AfxGetMainWnd()->m_hMenuDefault;
for doctemplates
CDocManager *pDocMan = AfxGetApp()->m_pDocManager;
POSITION pos = pDocMan->GetFirstDocTemplatePosition();
while (pos)
{
CDocTemplate *pDocTemplate = pDocMan->GetNextDocTemplate(pos);
}
Thats just a quick overview.
Hope its of help.
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
Thanx, it worked.
The only problem was, that CDocTemplate doesn't contain the m_hMenuShared, the CMDIDocTemplate contains it, so here's how i made it :
POSITION pos = pDocMan->GetFirstDocTemplatePosition();
while (pos)
{
CMultiDocTemplate *pDocTemplate = (CMultiDocTemplate*)pDocMan->GetNextDocTemplate(pos);
}
::InsertMenu(pDocTemplate->m_hMenuShared,1,MF_BYPOSITION | MF_POPUP, (UINT)pMenu->m_hMenu, "submenu");
wich added the "submenu" just after "File".
|
|
|
|
|
I am trying to resize my application based on the size of a loaded file. First I tried to use SetWindowPos() this worked, but did not resize the frame. So I have attempted to use MoveWindow() to do this, and it works.. but not as expected. For example if somebody could review this code fragment and tell me whats up. The file I am loading is a video, and lets say the size is 320 x 480 the frame resizes to a really tiny window.
CRect winRect;
CRect tmpRect;
GetClientRect(tmpRect);
if(!m_media.GetVidSize(winRect))
DoError("Unable to receive size");
GetParentFrame()->MoveWindow(tmpRect.Width(),tmpRect.Height(),winRect.Width(), winRect.Height());
CString str;
str.Format("Video Width: %d\nVideo Height: %d\n",
winRect.Width(), winRect.Height());
TRACE(str);
I can verify that GetVidSize() is returning correct results based upon the TRACE statment wich outputs
320 and 480.
Thank you
|
|
|
|
|
You have made mistake in the following function call :
GetParentFrame()->MoveWindow(tmpRect.Width(),tmpRect.Height(),winRect.Width(), winRect.Height());
First parameter should be X coordinate and second one should be Y coordinate of the screen. So in your case it should be tempRect.TopLeft().x & tempRect.TopLeft().y respectively
Regards
C.R.Naik
|
|
|
|
|
Thank you for the correction Chintan, I realized that something was not right with the first two values. However these values reflect were the x,y orgin of the window is if I'm correct in saying that. In my actual code I was using 0,0 and just putting the frame in the upper left corner.
Anyways thank you again. You have prolly saved me a little research on how to get the correct coordinates
|
|
|
|
|
What Kind of application you are developing ? SDI,MDI ? let mw know..
Vikram
|
|
|
|
|
Developing an SDI Application.
|
|
|
|
|
The reply from naik is correct. Just check it out...
|
|
|
|
|
Not exactly what I am looking for. The frame still resizes to a very tiny view. I have tried setting the SetMapMode() to different values.. but that has not worked out very well either.
|
|
|
|
|
If you are tring in CMainFrame then just use this->MoveWindow(...);
else if it is in View use AfxGetMainWnd()->MoveWindow(..);
|
|
|
|
|
That is the code that I am using
MoveWindow(...)
::MoveWindow(...)
GetParentFrame()->MoveWindow(...)
AfxGetMainWind()->MoveWindow(...)
all produce the same results. The window is resized, but not of the correct size. the CRect structure will have correct numbers for the Width and Height.. however I don't understand how those numbers are being mapped. It seems like 320 is being mapped to 320 mini micro half pixels.
|
|
|
|
|
I think this must be issue between player output coorinates and the co-odinates you are setttig..i think you need to set the View's size ..Is it so?and not whole Window..
|
|
|
|