|
Thanks a lot! I understand!
|
|
|
|
|
This is one of the reasons why UpdateData() should be avoided. Use this instead:
void CSerialPortTestDlg::OnBnClickedClearrec()
{
m_editRec.SetWindowText("");
}
void CSerialPortTestDlg::OnBnClickedClearsend()
{
m_editSend.SetWindowText("");
}
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
But this one won't clear the data. So won't that go out of sync, in case if he is using the CString variable after clicking these buttons?
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
VuNic wrote: So won't that go out of sync...
All the more reason to not use UpdateData() .
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
You don't recommend DDX as such?
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
Not using UpdateData() does not preclude the use of DDX.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Okay okay. thanks for the explanations.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
Hi guys,
I am implementing a simple paint program and have trouble figure out how to draw an eclipse with arbitrary color and line width on memory device context.
I setup memory device context to save drawing screen before I blit it to a device context so that I can avoid flicker effect. Here is how I draw an ellipse with "default" pen and color:
// Assume that dc and outBitmap are initialized correctly by a caller
void DrawEllipse( CBitmap& outBitmap, CClientDC& dc, CPoint start, CPoint end, COLORREF color, int lineWidth )
{
CDC memdc;
memdc.CreateCompatibleDC( &dc );
outBitmap.CreateCompatibleBitmap( &dc, 500, 500 );
memdc.SelectObject( &outBitmap );
memdc.FillSolidRect( CRect( 0, 0, 500, 500 ), RGB( 255, 255, 255 ) );
memdc.Ellipse( start.x, start.y, end.x, end.y );
memdc.DeleteDC();
}
As a result, I got an ellipse with a default color and default width in my given bitmap instance.
How can I change a default color and default width?
I tried something like this and it magically works! But why !?
// Assume that dc and outBitmap are initialized correctly by a caller
void DrawEllipse( CBitmap& outBitmap, CClientDC& dc, CPoint start, CPoint end, COLORREF color, int lineWidth )
{
CDC memdc;
memdc.CreateCompatibleDC( &dc );
outBitmap.CreateCompatibleBitmap( &dc, 500, 500 );
memdc.SelectObject( &outBitmap );
memdc.FillSolidRect( CRect( 0, 0, 500, 500 ), RGB( 255, 255, 255 ) );
CPen pen( PS_SOLID, lineWidth, color );
memdc.SelectObject( &pen );
memdc.Ellipse( start.x, start.y, end.x, end.y );
memdc.DeleteDC();
}
Another question: CDC can have multiple GDI objects ?
THANKS GUYS!!
Un
|
|
|
|
|
There is nothing magical about it.
Any shape is drawn using a pen and a brush.
In the first code snippet you did not select a pen.
So it used the default pen.
A device context does have multiple objects like pen, brush, font, bitmap, region etc.
«_Superman_»
I love work. It gives me something to do between weekends.
|
|
|
|
|
Un Suthee wrote: Another question: CDC can have multiple GDI objects ?
A device context has a multiple GDI objects associated with it, but only one of each different obejct type. That is, there's one pen, one brush, one font etc. Each time you select a new one, it replaces the one that was previously selected. The return value from SelectObject is a pointer to the object that was previously selected, so you can select it back into the DC when you're finished with the object you selected. Here's an example using your code:
void DrawEllipse( CBitmap& outBitmap, CClientDC& dc, CPoint start, CPoint end, COLORREF color, int lineWidth )
{
CDC memdc;
memdc.CreateCompatibleDC( &dc );
outBitmap.CreateCompatibleBitmap( &dc, 500, 500 );
memdc.SelectObject( &outBitmap );
memdc.FillSolidRect( CRect( 0, 0, 500, 500 ), RGB( 255, 255, 255 ) );
CPen pen( PS_SOLID, lineWidth, color );
CPen* oldPen = memdc.SelectObject( &pen );
memdc.Ellipse( start.x, start.y, end.x, end.y );
memdc.SelectObject( oldPen );
memdc.DeleteDC();
}
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Un Suthee wrote: How to draw an eclipse
You should use different algorithms depending on the nature of the eclipse, is it solar eclipse or lunar one?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Groan...
Iain.
Codeproject MVP for C++, I can't believe it's for my lounge posts...
|
|
|
|
|
I'm kinda surprised. In your first code, you don't select any pen, then wonder why it uses the default one.
In the second one, you create and select a pen, then get surprised when it is used...
But I'd raise two more points. In your second code, you should keep track of the return value of the SelectObject call, and select the "old" pen back in.
Imagine the function that calls your DrawEllipse function. Imagine it has chosen to use a bright pink pen. Then it calls your code. And suddenly you're using a different colour. All because you didn't tidy up after yourself.
In this case, you'll probably get away with it, as the DC will be destroyed. But it's bad practise.
You've made the same error with the SelectObject (&outBmp) call. Where's the matching SelectObject (pOldBitmap)?
Lastly, why are you passing CClientDC as a parameter? If you made your function have the parent class CDC as a parameter, it will be more flexible in the future, at no cost to yourself. Feel free to use a CClientDC in the outer function, but DrawEllipse makes no use of the specialisation, so get rid of it.
Good luck,
Iain.
Codeproject MVP for C++, I can't believe it's for my lounge posts...
|
|
|
|
|
thanks all of you. Really.
Btw, I must be extremely tired on the day I wrote this post as I spelled ellipse as eclipse.
Un
|
|
|
|
|
how to use the interface of efs with vc6 ? where can I find some sample code?
modified on Tuesday, March 3, 2009 8:52 PM
|
|
|
|
|
I am currently developing an application using C++ and MFC. I am thinking about using the library called ChartDirectory. It is from a company called Advanced Software Engineering. This library offers a variety of classes for drawing charts. The company is in Hong King and I have never heard of them. They offer there documentation in both CHM format and in HTML format. I had problems reading the documentation in CHM format. It may have been that the file I down loaded was corrupt. I down loaded it a second time and it did not help. The HTML documentation, on the surface, looks good. However, I found a link that did not work. Therefore, I am not getting good vibes about their software.
I was wondering if anybody out there has used it, or even heard of it. If so, could you please tell me what you think about it.
Thanks
Bob
|
|
|
|
|
i have this formview with a ctreectrl in it and i need to change the tree's background to use a bitmap
i've found a couple of tutorials on how to do this, but they all involve deriving a class from ctreectrl and overriding either the OnPaint or the OnEraseBkgnd methods.
i can't do this since i'm not allowed to create a new class, so i'm stuck with changing stuff on the ctreectrl's parent window (formview)
i tried catching the notifications using ON_NOTIFY(WM_ERASEBKGND, IDC_TREE1, OnEraseBkgnd2) but it doesn't seem to work
i also tried changing the background in customdraw, but i could only get it to work during CDDS_PREPAINT and that produces some major painting issues
any suggestions? thanks
|
|
|
|
|
Well, you could try subclassing the window itself, i mean, use SetWindowLong[^] with GWL_WNDPROC to change the tree's windowproc to a method written by yourself which handles WM_PAINT and/or WM_ERASEBKGND and passes everything else to the original window procedure...so something like:
...
WNDPROC OriginalProc = (WNDPROC)SetWindowLong(m_myTree, GWL_WNDPROC, (LONG_PTR)MyTreeProc);
...
LRESULT CALLBACK MyTreeProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
if (Msg == WM_ERASEBKGND)
{
...
} else return CallWindowProc(OriginalProc, hWnd, Msg, wParam, lParam);
}
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
Hey Friends
Is it possible to disable events of a HTMLElement?
Let's say in html code, there are events defined for some html elements
Let's say <a href="some link" onselect="something here">Click Here</a>
Now i host a webbrowser in my dialog based app and i do not want custom onselect event to be fired(i.e something here above)
may be something we can do with
IHTMLElement * pElem = NULL;
IHTMLElement2 * pElem2 = NULL;
IHTMLElement3 * pElem3 = NULL;
all above interfaces have put_ functions but if i pass NULL, it means to them default behavior (i.e onselect="something here")
or i can define function in my .cpp file to be called
i do not want any of the above
i just want htmlelement not to call
onselect="something here"
that's it
Any Ideas?
Regards
|
|
|
|
|
There isn't one place where all events are received. You can only divert one event at a time if you want to deal with events.
However, IHTMLElement3 has disabled attribute that you can set to TRUE. This will disable any interaction with that IHTMLElement. Of course, first you have to reach that element.
Other than that you can set the parent window as disabled and then you would not be able to do anything with that HTML control.
|
|
|
|
|
hi
thanks for the help
i do not want to disable complete html element
i just want to disable a specific dhtml event
onclick, onfocus seperately
|
|
|
|
|
Use detachEvent but you have to find the event first.
|
|
|
|
|
yeah thanks
will try it now and will update
|
|
|
|
|
IHTMLElement * pElem;
IHTMLElement2 * pElem2;
//Get pElem & pElem2
CString vl_sHelper("onclick");
COleVariant vl_oOnClick;
pElem->get_onmouseover(&vl_oOnClick);// This should get the onclick event?
pElem2->detachEvent(vl_sHelper.AllocSysString(),vl_oOnClick);//COleVariant to IDispatch* sounds strange to compiler
|
|
|
|
|
It does because it is.
Why COleVariant, can't you use VARIANT of type VT_DISPATCH? It is easier.
And pElem and pElem2 should be the same element.
|
|
|
|
|