|
dellthinker wrote: ...i found out that my char array wont work with a string...
Which means what exactly?
"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
|
|
|
|
|
Hello, I'm new to MFC, and there's an application in a book I'm learning from which works 100% well, but there's something there I don't manage to understand.
The author there built a Sketcher application, which draws lines or rectangles or such by dragging with the mouse. The OnMouseMove function redraws a temp object every time, with the R2_NOTXORPEN set, so it's supposed to erase the temporary element drawn, and create a rubber-banding mechanism. Now, my question is, if I drag a temporary element over the background, and over other elements drawn in the background, how is it the temporary object doesn't erase them, after it's drawn again? According to the book, the R2_NOTXORPEN mode makes it so the element is redrawn white, so it should delete everything it goes over.
The book is Beginning MFC Programming by Ivor Horton.
Thanks for your help, and sorry for the length, I tried to keep it as short as possible.
|
|
|
|
|
Perrin01 wrote: the R2_NOTXORPEN mode makes it so the element is redrawn white
Not necessarily. The resulting color depends on the color of your pen and the color of the
screen pixel it's being combined with.
Here's how they get combined (from the docs):
R2_XORPEN Pixel is a combination of the colors in the pen and in the screen, but not in both.
R2_NOTXORPEN Pixel is the inverse of the R2_XORPEN color.
These are bitwise logical XOR and NOT combinations that are applied to the RGB components of the
pixel colors (the docs don't exacly state that ).
For each red, green, and blue pixel byte, when combining colors, if you use a pen color RGB
(0xFF,0xFF,0xFF) with R2_NOTXORPEN:
Every bit gets flipped (XOR)
Every bit gets flipped again (NOT)
Result is the original pixel so you don't see any change
If you use a pen color RGB(0x00,0x00,0x00) with R2_NOTXORPEN:
No bits get flipped (XOR)
Every bit gets flipped (NOT)
Result is binary inverse of the original pixel
Hope that helps a little.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
Yes, but in this case the pen is the same color as the screen color, so the element should turn to white (ie get erased). And it should erase (turn to white) everything it passes over, no?
It's very confusing... :/
|
|
|
|
|
Ok I see what you're talking about
Look closely at the code - it's probably redrawing twice (once at the old position, and again at
the new position) whenever the cursor moves.
The first drawing would make a pixel white.
The second would restore it to its original color.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
How would the second turn it to its original color, if it's done at a different location?
As I see it, it's 2 draws, one that blanks the last temporary element, and a second that draws the new temporary element.
Here is the code:
CClientDC aDC(this);<br />
aDC.SetROP2(R2_NOTXORPEN);
if((nFlags & MK_LBUTTON) && (this == GetCapture()))<br />
{<br />
m_SecondPoint = point;
if(m_pTempElement)<br />
{<br />
m_pTempElement->Draw(&aDC);<br />
}<br />
<br />
m_pTempElement = CreateElement();
m_pTempElement->Draw(&aDC);
}
Thanks!
|
|
|
|
|
Perrin01 wrote: // Redraw the old element so it disappears from the view
m_pTempElement->Draw(&aDC);
That's what prevents it from leaving drawing artifacts as the cursor is moved.
R2_NOTXORPEN is non-destructive to the destination pixel when done twice over the same pixel.
Comment out the line of code there (at the "// Redraw the old element so it disappears from the
view" comment) and see what happens
Mark
-- modified at 20:17 Sunday 15th July, 2007
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
Ohh, thanks, I finally understand it!
Thank you very much.
|
|
|
|
|
Hi everybody,
we have a 2-tier (unmanaged) C++ application (being compiled with VS 2005) that is connected to MS-SQL and allows the user to browse and edit order records. The data access and business layer objects are well defined (so-called “core”) and the UI layer uses them and the MFC to provide a rich user interface.
Now we want to “web enable” this application, which means that the user shall be able use the application via a web browser (IE and Firefox).
Which “technology horses” could and which should we ride?
a) enabling the core to become a “server” (IIE extension?, C++.NET and web services?, creating own server with native C++ SOAP? ...?)
b) bringing a rich UI to a web browser including performant data exchange with the server (ASP.NET with Web Forms? AJAX based Javascript UI library? ...?)
On what topics should we start reading to create a base for deciding?
I'd appreciate your input very much!
Mike.
PS: If I could expect more specific answers in another newsgroup/forum then I'd appreciate a quick hint or a FUP as well.
|
|
|
|
|
You may also want to post this on the Web Development Board[^]
Mark
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
creating a SOAP-Server with gSOAP[^] is pretty straightforward.
For you client, you could then use a crippled WEB-Gui, which is so fancy these days, or a real client written in almost anything.
Failure is not an option - it's built right in.
|
|
|
|
|
can anyone tell me the different %f ect for the different variable types
|
|
|
|
|
Are you referring to these[^]?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
what im trying to do is on a keystroke it +1 to an int and on my dialog im just trying to print the value in a static text box
|
|
|
|
|
To format a string for an int, you could use sprintf() (or similar) with %i/%d (signed int) or
%u (unsigned int), something like:
// generic - works for unicode and non-unicode builds
int MyInt = ...;
// get string representation of MyInt
TCHAR IntString[16];
_stprintf(IntString, _T("%d"), MyInt);
// set the static control text
::SetWindowText(hwndStatic, IntString);
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
Dane Grant wrote: what im trying to do is on a keystroke it +1 to an int...
"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
|
|
|
|
|
hi!
i have a visual c++ prog which gives me value( dist ) which i have calculated.The value varies between 1-5.( i.e not a lot ). I want to plot this in real time. Maybe just a simple bar which changes size as this would be much more eaasier than a graph as it would need scrolling.
Any one have a code for this ??or a suggestion
Thx !
[code]
LONG FAR PASCAL
MainMessageHandler(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
HDC hDC; /* handle for the display device */
PAINTSTRUCT ps; /* holds PAINT information */
TEXTMETRIC tm; /* holds TEXT information */
static HRGN hRgn; /* Rectangle region Handles */
static int CharWidth, CharHeight;
...
...
...
y += CharHeight*2; /* Print raw data value */
sprintf (OutString,"dist = %lf ", dist);
TextOut(hDC, x, y, OutString, strlen (OutString));
}
[/code]
thanks!
|
|
|
|
|
To draw a bar you could use something like FillRect().
Can you be more specific about what part is giving you trouble?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
thanks for the reply.
To be honest, i have no idea how to start the plotting. The only thing i have now is my value which has to be plotted ... The book which i have doesnt say anything about real time plotting
|
|
|
|
|
How you plot depends on what you want to see...
You showed what looks like a window procedure - Is the value being delived at regular intervals
through a window message?
The basic steps for drawing to a window are:
Create or obtain a device context (DC)
Set up the DC for drawing - select the appropriate pen/brush/font into the DC
Do the drawing
Restore the DC's original pen/brush/font
Free the DC
You can do all this in response to the WM_PAINT message.
When the value changes, invalidate the rectangle or region that you want redrawn and call
UpdateWindow() to force a WM_PAINT to be sent immediately.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
thanks !
yes i am already having a bunch of cases. I get out about 10 values per second so its really current. I give out the value right now in WM_paint.
i shpuld read up on the deice context!
Thanks for the reply ..
|
|
|
|
|
Sam Rens wrote: i shpuld read up on the deice context!
Yes, definitely! Also check out the BeginPaint()/EndPaint() APIs for obtaining a DC when drawing
in response to WM_PAINT.
MArk
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
i cant remember how to create dialogs like buttons
thanks
|
|
|
|
|
Dane Grant wrote: cant remember how to create dialogs like buttons
A dialog that looks like a button? What are you asking?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
"Great job team! Head back to base for debriefing and cocktails."
|
|
|
|
|
Mark Salsbery wrote: A dialog that looks like a button?
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
|
|
|
|