|
You mentioned another thread.
OnReceive() occurs on the thread that creates the socket (through a hidden HWND).
Is this your UI thread?
Seems like something's causing you to lose FD_READ notifications from the socket.
I can only guess without seeing the code.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
CSocket is also notorious for being a bug-riddled piece of code. You may want to switch to CAsyncSocket or roll your own.
|
|
|
|
|
How do you add text to the title bar of an application using Microsoft Visual Studio 2003 .NET Visual C++?
|
|
|
|
|
SetWindowText() or WM_SETTEXT.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
This application has a mainframe window and like an older version of Microsoft Word documents, it can have multiple files open (MDI). If you tile the windows, the active window's file name title shows in the mainframe's. The format the header or title bar has is as follows:
[Application Name] - [Filename.extension]
I want to modify it like this:
[Application Name] - [Filename.extension] - [My Text Added Here]
The problem is I do not have a handle to this section such as SetTitle() or SetName() and I am thinking I need to add a section to have such a handle. However, this is dealing with MFC.
|
|
|
|
|
GetWindowTextLength()/GetWindowText() or W<_GETTEXT/WM_GETTEXTLENGTH can be used to get
the current title.
Append your new text and set the new text.
For MFC you can use something like
CString titlestr;
MainWnd->GetWindowText(titlestr);
titlestr += _T(" - [My Text Added Here]");
MainWnd->SetWindowText(titlestr);
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Again[^]
----------------------------
286? WOWW!
|
|
|
|
|
Are you simply wanting a 2D array?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Thanks atlast got a reply.
No I'm not simply wanting a 2D Array.
An array is a group of memory locations that we reserve, Ok in the below statement, I've reserved. 6 Memory locations that has the capability to store 6 integers. And I've got a pointer pointing to that.
int* pInt = new int[2*3];
The dimension. It's how we look at the reserved memory location.
The memory as of now, looks like :
[] [] [] [] [] []
^
Incrementing the pInt's value would make it go like :
[] [] [] [] [] []
-+^
[] [] [] [] [] []
---++^
This is linear. We can do the same with pInt[0],[1]..etc. Ok this about looking at the memory locations in 1D.
Now I want to look at it in 2D.
The same memory location.
I would want to initialize a 2D pointer to the same memory location.
Where I should be able to mention 2 indices. You may take it as 2x3 or 3x2
when you say 2x3,
That says, 2 rows and 3 elements in each row.
[] [] []
[] [] []
Now tell me how should declare a pointer to the memory location that it would access them as 2D.
int* pInt = new int[2*3];
int(** ptr2D)[2][3] = new int*[2]; <--something like this. NOT SURE.
If we are gonna look at the same memory locations as 3x2,
then it becomes.
[] []
[] []
[] []
Here ptr2D[2][0].. would make sense. Because, The number of rows, 0th row, 1th row, 2nd row. Has 3 rows. But in the former case, it would crash because we were looking at it as 2 rows with 3 columns.
My question makes sense?
----------------------------
286? WOWW!
|
|
|
|
|
_8086 wrote: Now tell me how should declare a pointer to the memory location that it would access them as 2D.
int **p = new int*[FirstDimension];
for(int i = 0; i < FirstDimension; i++)
{
p[i] = new int[SecondDimension];
for(int j = 0; j < SecondDimension; j++)
{
p[i][j] = 0;
}
}
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Let me see if this satisfies my requirement. Anyway thanks for your reply.
----------------------------
286? WOWW!
|
|
|
|
|
It does not matter. pInt[2][3] is the same as pInt[3][2].
|
|
|
|
|
Yes, but the question is different.
----------------------------
286? WOWW!
|
|
|
|
|
Rage wrote: It does not matter. pInt[2][3] is the same as pInt[3][2].
Oh, you've said like this?
Ok, take up the first one., pInt[2][3];
Try Printing the element pInt[3][0]."Boom" !??!. How can this be eqivalent to pIntp[3][2].
The dimension is different and that's what the question is all about. Looking the same block of memory with different dimensions.
----------------------------
286? WOWW!
|
|
|
|
|
No, you are reserving 6 memory locations. How you read them does not matter.
|
|
|
|
|
I don't think you can do what you're trying to do.
If you can, I'd like to see the syntax.
For a 2 dimension array like this:
int myarray[2][3];
myarray is not a pointer. You can't cast an int pointer to the type of myarray (AFAIK).
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I have a dialog app with a function similar to this:
void CMyDlg::OnButton1()
{
//This bit works
WinExec("cmd.exe /c xcopy /s "+myfolder+" "+target_folder+" >>mylog.txt&exit",SW_HIDE);
// This is what i want to do:
// if (all files have been copied and cmd.exe exits then display the msgbox, if not, wait until filecopy is done and then display the msgbox)
// {
AfxMessageBox("Done! All files copied to target folder.",MB_OK|MB_ICONINFORMATION);
// }
}
The way the function works right now, the msgbox displays too early, and not after all the files are copied.
I guess i need some kind of return value, and then if its true/false then display msgbox.
How to solve this problem, any suggestions? Is this "doable" in any easy way?
Createprocess? If so, how would the Createprocess code look like?
thx!
|
|
|
|
|
Google for "CProcessWait". It used to be in an article here on CP, but PJ Naughter or Arendt (sorry do not know anymore) put it in a utility library.
|
|
|
|
|
rolfhorror wrote: Createprocess? If so, how would the Createprocess code look like?
Call CreateProcessEx() followed by WaitForSingleObject() .
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
In my program, I deliberately did not specify a background color in my WNDCLASSEX struct. As a result, I must paint it manually. My WNDPROC simply passes off all its arguments to an identical (static) function in a Controller class I created. The Controller class looks up the relevant HWND in a list and routes to the appropriate message handler for each object via a pointer GuiObject pointer.
My problem is the WM_ERASEBKGND message. The device context is contained in the WPARAM parameter, but when I try to pass WPARAM to my object's message handler, I get a linker error:
"LNK2001: unresolved external symbol "protected: virtual int __thiscall GuiObject::OnEraseBackground(void)" (?OnEraseBackground@GuiObject@@MAEHXZ)"
As far as I can tell, this only happens with Windows data types. I can pass ints and other things in with no problem.
Here is the code:
LRESULT Controller::MessageDispatcher(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)<br />
{<br />
for(current=head; !current->hWnd; current=current->next)<br />
if(current->next=NULL) break;<br />
<br />
switch(msg)<br />
{<br />
case WM_ERASEBKGND:<br />
current->OnEraseBackground((HDC) wParam);<br />
break;<br />
...<br />
}<br />
Can anyone tell me what I'm doing wrong?
Thanks in advance
-- modified at 11:32 Monday 6th August, 2007
|
|
|
|
|
If "current->OnEraseBackground((HDC)wParam);" compiles, then you are missing the actual implementation
of the OnEraseBackground method.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Ummm, this is weird . . .
I checked the implementation and everything looks correct. The function is stubbed in both my GuiObject.h and GuiObject.cpp files.
Just for grins, I tried removing the virtual keyword from the function in the header. It compiled just fine. Then I made it virtual again and now it compiles fine either way.
Is this a VS.NET bug??
Thanks for pointing me in the right direction, though.
|
|
|
|
|
We used to build our software with VC 6.0 and use rebase.exe to split the debug information off into a separate file (after adding debug information to the Release builds). Once we moved to VS 2005 and Vista, the same procedures stopped working. The Release build still have the options turned on to add debug information to executables; however, rebase.exe fails to find it.
We need the .dbg files so that we can create crash reports, if the software ever fails on a remote system.
cheers,
-B
|
|
|
|
|
Hi...
I've a VC5 Win32 dll which I've converted to VC8 with same code and project settings.
The dll contains lot of STL code.
I'm getting crash from the main application when I'm using release version of the DLL. The Debug version works fine.
Could anybody help me out...?
|
|
|
|