|
|
I'm doing that too, but it works. Even if the dialog needs a refresh / redraw.
Just to show an example, which should not look very strange from your point of view :
1) Define the handlers for InitDialog and OnPaint and add a CBitmap object in the dialogs header :
class CMyDialog : public CDialog
{
:
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
:
CBitmap m_bmMyBitmap;
:
};
2) make sure that the OnPaint:handler are in the CPP-File :
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
//{{AFX_MSG_MAP(CMyDialog)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3) Init the Bitmap object in the OnInitDialog function
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_bmMyBitmap.LoadBitmap( IDB_MY_BITMAP );
}
4) Fill the OnPaint-Handler :
void CDialogDruckauswahl::OnPaint()
{
CPaintDC dc(this); // device context for painting
// fill dialog background with some color.....
CRect crRect;
GetClientRect( &crRect );
COLORREF crColor = RGB( 255,255,255 );
CBrush* pFillBrush = new CBrush( crColor );
CBrush* pOldBrush = dc.SelectObject( pFillBrush );
CPen* pNewPen = new CPen( PS_SOLID, 1, crColor );
CPen* pOldPen = dc.SelectObject( pNewPen );
dc.Rectangle( crRect );
dc.SelectObject( pOldPen );
delete pNewPen;
pNewPen = NULL;
dc.SelectObject( pOldBrush );
delete pFillBrush;
pFillBrush = NULL;
// in welchen Bereich ?
DrawBitmap( &dc, crRect, &m_bmMyBitmap );
}
5) at least : define the bitmap drawing function :
void CMyDialog::DrawBitmap( CDC* pDC, CRect crRect, CBitmap* pBM )
{
// create a memory dc to prepare drawing via bitblt ...
CDC* pmemDCBitBlt = new CDC();
pmemDCBitBlt->CreateCompatibleDC( pDC );
CBitmap* pOldBM = pmemDCBitBlt->SelectObject( pBM );
// blit the bitmap into our view using the bitblt-xor-mode
pDC->BitBlt(crRect.TopLeft().x, crRect.TopLeft().y, crRect.Width(), crRect.Height(), pmemDCBitBlt, 0, 0, SRCCOPY );
// free the memory dc and the bitmap ....
pmemDCBitBlt->SelectObject( pOldBM );
delete pmemDCBitBlt;
pmemDCBitBlt = NULL;
}
|
|
|
|
|
Hi,
thanks for the reply,
i wrote something similar to what you've posted and it works!
thanks a lot
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
I need to open a Text file and read the first line which is like "Run","FileNo","Distance",...
Then i've pickup words like Run,FileNo.
I was able to open, read Line using CStdioFile.ReadLine();
How to parse the line and get the words??
Thanks In advance.
Warm Regards,
KKR
|
|
|
|
|
|
Thanks for Flashy Response,
Now My entire line is in a CString , shall i have to convert it to char* , to apply those functions like strtock();
Warm Regards,
KKR
|
|
|
|
|
this is very simple:
use syntax similar:
strtok( (char*)(LPCTSTR)CStringvariable, ... );
or use GetBuffer member from CString
Vitali
http://www.creative-case.com[^]
|
|
|
|
|
Thanks Mr Vitali,
I got the result.
Warm Regards,
KKR
|
|
|
|
|
Hi all.
Can i determine progrommaticaly whether keyboard connected with computer???
Thanks.
|
|
|
|
|
Hi,
I need to call into a library to perform a lengthy operation after a user presses a button.
I would like to bring up a dialog asking the user to wait a moment (no buttons on this dialog).
In the background I would like the operation to be performed. When it is ready, the dialog should be destroyed.
Has anyone done anything similar to this? Could someone point me to a sample or give me a few tips?
I am using MFC.
thanks,
Jeremy Pullicino
C++ Developer
Homepage
|
|
|
|
|
This sounds like a job for a background worker thread.
There are two methods I use to unblock a lengthy operation:
1. pumping the message queue intermittently (in VB, this was known as DoEvents)
2. Threads. (worker or UI, depending on the usage).
you should be able call your function via a worker thread, using an event to signal when the process is finished and therefore when to destroy your status dialog.
Have a look at: http://users.stargate.net/~newcomer/workerthreads.htm[^], where there is an excellent article on thread usage.
I Dream of Absolute Zero
|
|
|
|
|
Well if you want to avoid the complexity of threads in C++, just put up a modeless dialog before you start your lengthy operation. Whether it has buttons on it like a "Cancel Lenghty Operation" button is up to you - having a button like this is actually harder, because you need to be able to interrupt the operation ( you would need to set a boolean and test that boolean as often as possible inside the lengthy operation). Anyhow what you described is easier - when the operation is finished, send a meessage to your modeless window to tell it to close down!
|
|
|
|
|
I need to write a function that takes as input, two fraction values from a user like (3/4 and 5/6). The function then adds these values and then return the resultant in the form of similar fraction number. How can i do so ?? Is there any way to convert a decimal number into a fraction or display a decimal number into a fraction. Can i take help from iostreams.
I've already made a function which accepts and returns fraction values in the form of string. But it not seems to me a good solution ;(
|
|
|
|
|
A solution could be to store separately the two numerators and the two denominators with 4 int variables, and then calculate the addition like this
N1/D1 + N2/D2 = (N1*D2 + N2*D1)/(D1*D2).
The next task would be to simplify the result by finding the greatest common divisor of the new numerator and the new divisor.
HTH,
K.
Every gun that is made, every warship launched, every rocket fired, signifies in the final sense a theft from those who hunger and are not fed, those who are cold and are not clothed - Dwight D. Eisenhower
|
|
|
|
|
Hi,
I'm not very experienced in VC++ but I can't think of a function to deal with fractions and as you have no other answers I guess there isn't one and you are just going to have to do the hard work yourself!
You could carry on with your original method and read in 2 strings, then convert them to 4 integers or you could give the user 4 boxes and let them enter 4 integers, 2 for each fraction (perhaps you could display a bar between the upper and lower digit to show that they are fractions). Then you can read in 4 integers, brush up on your maths for adding fractions (its quiet easy really) and you should be sorted.
Hope this helps, regards,
Ali
|
|
|
|
|
Hi,
I have 2 very basic questions about MFC.
1. How can I position a control in a view from the program (not using resource editor), for example in a TreeView, I want to position the treecontrol starting from (0, rect.height()/18) coordinate.
2. If I resize the parent window how can I have the controls resize themselves? (which function in the view to be changed?)
Please help
|
|
|
|
|
1.You can use CWnd::SetWindowPos to set the position of a window.
2. I would use CWnd::OnSize in the parent class. The framework calls this member function after the window’s size has changed. Change the size of the child windows is in this method.
You will find details about the mthods in the MSDN library.
|
|
|
|
|
Thanks for yur reply.
I tried to use following the function as follows, but, I can't see the tree in the view, I'm sure it's under the control on top of it which occupying the 1/18 height from top. Please help
CTreeCtrl& tree = GetTreeCtrl();
tree.SetWindowPos (&cMyTabCtrl, 0, cr.Height()/18, cr.Width(), cr.Height()*17/18, SWP_DRAWFRAME);
|
|
|
|
|
|
HEllo Friends,
One samll query. I goes like this
I have a dialog box in a dll . The dialogbox contains 4 normal button now i have to disable and enable them as per that conditions.
There is a clear, clear all, Ok and help buttons.
NOw if i click the clear all button i make that button disable and now want to set the focus on Ok button. i am able to do the same but teh problem is that when i click the clear all buton then button gets a black outline as it gets focus when i click it, but now i want to disable it and then the OK button should be highlited but this doesnt take place.i mean the border is still there after disableing the clear all button.
i heva tried set focus on button OK the focus is set, but the border doesnt go !!!!!!!!
can any one help
Thanx
TAKE CARE
|
|
|
|
|
Check out CButton::SetState()
|
|
|
|
|
Yes checked it but
That just makes the button in a click state
and the problem still persist
Thanx
TAKE CARE
|
|
|
|
|
Hi all,
I need to get the yesterday's day using any MFC classes like CTime, ColeDateTime. I.e by using ColeDateTime::GetDay i am able to get the day of the week.Is thr any member function or any way to get the yesterdays day
For example if the current day is 1 the previous day should be 31.
If any one have some code patch please let me know
Thanks
- Parthan
|
|
|
|
|
This function might work (pass it the current day, it returns the int for yesterday):
int YourClass::GetYesterday(int nCurrentDay)
{
if(nCurrentDay < 1) || (nCurrentDay > 31))
return 0;
if(nCurrentDay == 1)
{
int month = COleDateTime::GetMonth();
int lastmonth = month - 1;
if(!lastmonth)
lastmonth = 12;
switch(lastmonth)
{
case 4 :
case 6 :
case 10 :
case 11 : return(30);
break;
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 9 :
case 12 : return(31);
break;
case 2 :
if((!COleDateTime::GetYear()%4) && ((COleDateTime::GetYear()%100) || (!COleDateTime::GetYear()% 400)))
return(29);
else
return(28);
}
}
else
return(nCurrentDay--);
}
See http://resurscentrum.nu/members/english/exercises/writing/leap_years.asp[^] for an explanation of the leap year algorithm - I probably wrote it wrong - I didn't check this code
|
|
|
|
|
COleDateTime dt = COleDateTime::GetCurrentTime();
int today = dt.GetDay();
COleDateTimeSpan span(1.0f);
dt -= span;
int yesterday = dt.GetDay();
Sonork 100.11743 Chicken Little
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
Within you lies the power for good - Use it!
|
|
|
|