|
You have the right bits.
If you want to develop in C++ for Pocket PC 2003, you must use eMbedded Visual C++ 4.0 SP2. The SDK contains a great deal more than what you describe; the documentation and samples are installed to C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003 (IIRC, don't have it installed here). eVC 4.0 looks exactly like Visual C++ 6.0 because it basically is - it's just been adapted a bit to support device development.
If you want to develop in VB.NET or C#, you need Visual Studio .NET 2003, and you must install the Smart Device Extensions from the VS.NET 2003 CDs. At present you cannot use VS.NET to write Pocket PC applications in C++ (feature coming in "Whidbey", I believe).
|
|
|
|
|
I've been looking for a WIN32 multithreaded server sample for quite some time now. I've found a few on Codeproject and some on Codeguru, but none of them explained how to get past my biggest problem. They all seem to start some sort of acceptor that fires off a client thread for handling the client, but then it just waits for the client to disconnect, or for an error to occur. The thing that is never explained, and which i can't find a solution for is what if we need to boot a client from the server?? I mean, how can we let a client thread know that it has to stop looping and handling the client in a normal way? (I'm talking strictly win32 code, blocking mode)
I've thought about doing a select in the client thread so it could occasionally check for a flag wether as to exit or not. But this turned out to be rather messy and i'm sure there is some better way, that also would influence the performance a little less.
Kuniva
--------------------------------------------
|
|
|
|
|
Kuniva wrote:
The thing that is never explained, and which i can't find a solution for is what if we need to boot a client from the server?? I mean, how can we let a client thread know that it has to stop looping and handling the client in a normal way?
Do you mean, you don't know how the client thread know when to exit?
You're calling recv() in a loop, parsing the commands, if there is an exit command, then exit thread (and clean up, send exit response or what ever...) and if recv() returns 0 it means the other side closed the connection.
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
|
|
|
|
|
No no no, thats exactly what i don't mean. I mean disconnecting the client from the server, from the server side. Like booting, kicking a client, whatever u want to call it. Manually that is.
Kuniva
--------------------------------------------
|
|
|
|
|
I see, but that depends on your code. You can just call closesocket() on the socket and then it will close. Save all your clients in a std::vector or std::list (whatever) and iterate through it to find the specific client and call closesocket().
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
|
|
|
|
|
Yes, but it appears that, when that clientthread is blocking on a recv() call to wait for data, and i close the socket using closesocket() , the recv() call continues to block. Eitherway, my clientthread did not exit when i closed the socket, even though i check for a return value of recv() which is not equal to 0.
Kuniva
--------------------------------------------
|
|
|
|
|
Hi,
I have a main view with a tool palette which floats above it. When I launch any modal dialogs (such as file opening dialogs) they appear below the palette.
I've got over this by using SetWindowPos to remove the TopMost style using &CWnd::wndNoTopMost. This seems to be the only way to stop it sitting above the dialogs. However, the side effect is that the palette disappears behind my main view. I want to be able to remove its TopMost status but still have it sit above the main view rather than disappearing all together. Can anyone help?
Many thanks,
Simon
PS Is there a way of specifying modal dialogs to have the TopMost window style?
|
|
|
|
|
Yeah.
Remove the window style which causes it to float above others. Then, everywhere in your application where windows are moved, resized or new dialogs are launched, use SetWindowPos to arrange your windows. Place the dialog window to the topmost with &CWnd::wndTop, then place the tool palette window after that (pass the dialog's CWnd pointer as the parameter), place the mainframe window after that (pass the tool window's CWnd pointer as the param) and so forth.
Modal dialogs are always topmost in your application. If you specify a dialog to be system modal, then it will always be a top window until it is closed. Of course, you can always use SetWindowPost as well. After all, CDialog is derived from CWnd..
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Your tool palette should be placed on a CDialogBar, then all above problems will disappear.
A dialogbar actually behaves like a modeless dialog
Derive your toolbox class from CDialogBar, place controls on it in the dialog editor just like with a dialog, and create it in CMainFrame::OnCreate
if (! m_ToolPaletteBar.Create(this,IDD_TOOLPALETTEBAR,CBRS_RIGHT,IDD_TOOLPALETTEBAR))
{
TRACE0("Failed to create tool palette bar\n");
return -1;
}
m_ToolPaletteBar.EnableDocking(CBRS_ALIGN_RIGHT);
A window is topmost if it has the WS_EX_TOPMOST style. You can modify this style in the CREATESTRUCT struct's style member, override PreCreateWindow function for setting it.
Peter Molnar
|
|
|
|
|
Using VC++ to read a very large image such as 20000 X 20000, If it has 3 band, then each pixel occupies 3 bytes,the image size would be over 1 G bytes,how to read and process it, I have tried file mapping to read it, but I think it is not very stable, and if I want to process it using different filter algorithm continually and display the result quickly,how to deal with the redo and undo operation,should I write a temp file? so does anyone has good idea, thanks in advance.
swandream
|
|
|
|
|
Read in data partially from your bitmap file, then process this data, then read in some data again...
See CFile::Read and CFile::Seek functions.
Peter Molnar
|
|
|
|
|
I don't think it is so simple as you said, how to orgnize those partial datum and display them while paning and zooming quickly, how to process the image, get display result quickly, and when the display part is changed, how to add the current process method to the new partial image, including undo and redo implementation, so it is a little complicated, though not so difficult.
swandream
|
|
|
|
|
You say you wanna display an image of 20k pixels x 20k pixels, and your user's screen resolution is only 1k x 1k pixels (just for simplicity) (GetDeviceCaps gives the current resolution) then you can
1.
display the pic in its original size (i.e.:20k x 20k). Of course the user will see only a tiny part of it in 1k x 1k (1/400th part), and he can use the scrollbar to navigate it.
In this way you keep all the pic in memory, so your user will have more memory than your pic consumes, in order to be able to use you program efficiently.
2.
read in 20 pixels from file both horizontally and vertically, and make 1 pixel out of it according to an algorithm (maybe taking the average of RGB values), and this about 1 million (=1k x 1k) times.
So you will be able to construct and show a 1k x 1k image out of a 20k x 20k image. This pic will fit the user's screen.
This method does not consume memory but enormously consumes CPU capacity.
3.
Another method would be if you read in from file every 20th pixel both horizontally and vertically (ignoring 19 out of 20 pixels), and show only the 1k x 1k image in this way.
This mehtod does consume neither memory nor CPU, but this image shows 20x20 = 400 times less data (i.e.:resemblance) with the original 20k x 20k pic. Could be a good way if you have pics with large homogenous areas.
Whatever way you choose, you have to make sacrifices, because of the confines of the current Win32 system. I am sure there will be no sacrifices with Win128 or Win256, but it entails some sacrifices of time...
Peter Molnar
|
|
|
|
|
thank you Peter Molnar for your reply, but your methods could not satisfy my request
for the first method you metioned, it is obviously difficult to keep all the pic in memory,20k X 20k RGB image could occupy more than 1G disk space, to make memory more 1G is very luxery.
for the second and third method, I think it only suit for creating navigation image.
swandream
|
|
|
|
|
You need to break your image up into say 1k x 1k tiles and process those separately. You'll notice most paint programs will render really large images in tiles.
Todd Smith
|
|
|
|
|
How to know whether a thread exist or not
Thanks
BOBY
|
|
|
|
|
Call GetExitCodeThread with your threads handle and compare with STILL_ACTIVE return value.
The thread's handle (m_hThread) is a member of CWinThread*, which is returned by AfxBeginThread.
Peter Molnar
|
|
|
|
|
How do you stop in the middle of a function and then wait for a given amount of time then resume without stopping the entire application?
Problem: In my application there are buttons which serve as a menu (drawn with GDI+ so they
are not controls). When clicked they should change color to indicate that it has been clicked. When I click a button it carries out it's function before the button changes color. I need the application to wait long enough before executing its action so that the button has a change to
change color.
Intention of the following code:
When a button is clicked the client area is invalidated and then SetDirty() handles
the double buffering. These lines of code force the screen to be redrawn. p->Action(...)
then performs whatever action it is supposed to.
How do I get the application to wait a bit for the redraw so that the button can change
colors before carrying out it's action? I know that you can't just call Sleep because that
stops the entire appication. I need to be able to wait a given amount of time then call the
p->Action() function.
What techique would work here?
std::vector<Button*>::iterator it;
Button *pB;
for (it = vButtons.begin(); it != vButtons.end(); ++it)
{
pB = *it;
if(pB->IsHit(pt, NULL, m_ActiveButton ))
{
CRect rect;
GetClientRect(&rect);
InvalidateRect(&rect ,false);
SetDirty();
pB->Action( m_hWnd );
}
}
-Steve Messer
|
|
|
|
|
I guess if you draw the button in onpaint event then you wont have this porblem, how are you changing the colour of the button anyway?
The World is getting smaller and so are the people.
|
|
|
|
|
I have a variable called m_ActiveButton. Each button has a draw function and in that function if the button is active it is drawn one color and if its not active it is drawn a different color.
I can't just draw in onpaint() directly or I will get flickering.
-Steve Messer
|
|
|
|
|
Call UpdateWindow() to force a repaint.
myButton.methodToChangeSomeVisibleProperty();
myButton.Invalidate();
myButton.UpdateWindow();
/ravi
Let's put "civil" back in "civilization"
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
I stated that this is not a real button and therefore it does not have the methods you mention. I must either invalidate the whole screen or portions of it. Everything on the dialog ( this is a dialog based project ) is drawn with GDI+ so there are no physical controls on the dialog. Everything is drawn using GDI+.
Even if I could do as you described the action() mentioned in my explaination would occur before the screen would have the change to redraw. The action()'s are calling a dialogs from other dll's.
-Steve Messer
|
|
|
|
|
In the Automating with office2000, I get a range in the word document,and in the range, there are a graph object, how can I get this graph object and programm with it?
where can I find some help document? code sample ? thank you advance.
|
|
|
|
|
In the use of
string str;
getline(cin, str);
if(str=="???" || str=="")
{
}
else
{
} The logic is always executing the invalid string segment, even when valid data is entered.
Why is this happening?
Thanks for any insight.
William
Fortes in fide et opere!
|
|
|
|
|
WREY wrote:
if(str=="???" || str=="")
Change to:
if((str=="???") || (str==""))
that should help I think
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
|
|
|
|