|
void CMyDialog::OnClick( UINT uId, LPNMHDR, LRESULT * )
{
CDateTimeCtrl *pDateTimeCtrl;
CMonthCalCtrl *pMonthCalCtrl;
pDateTimeCtrl = (CDateTimeCtrl *) GetDlgItem(uId);
pMonthCalCtrl = pDateTimeCtrl->GetMonthCalCtrl();
pMonthCalCtrl->ModifyStyle(0, MCS_DAYSTATE);
...
}
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
The Modify style returned true, but it did not work as the line still asserted.
Can anyone find the code that creates the CMonthCalCtrl object when the dropdown button is clicked, because then I will create my own instance of CMonthCalCtrl, it is just I cannot find the code to mimic its behaviour?
Thanks
|
|
|
|
|
sschilachi wrote:
Can anyone find the code that creates the CMonthCalCtrl object when the dropdown button is clicked...
The code I provided was from a working project that does just that, except that it adds the MCS_NOTODAY style. Remember that GetMonthCalCtrl() will only return a pointer to the month calendar control while the control actually exists--that is, while it has been dropped-down by the user. Once it has been dismissed (e.g., selecting a date), the control does not actually exist.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
I know that, I am using the following code in an OnDtnDropdown() message handler for my own wrapper of the CTimeDateCtrl object that is an object in my own custom Toolbar:
CMonthCalCtrl* pCtrl = (CMonthCalCtrl*) GetMonthCalCtrl();<br />
ASSERT(pCtrl != NULL);<br />
pCtrl->ModifyStyle(0, MCS_DAYSTATE);<br />
SYSTEMTIME timeFrom;<br />
SYSTEMTIME timeUntil;<br />
int nCount = pCtrl->GetMonthRange(&timeFrom, &timeUntil, GMR_DAYSTATE);<br />
LPMONTHDAYSTATE pDayState;<br />
pDayState = new MONTHDAYSTATE[nCount];<br />
memset(pDayState, 0, sizeof(MONTHDAYSTATE) * nCount);<br />
int nIndex = (timeFrom.wDay == 1) ? 0 : 1;<br />
pDayState[nIndex] |= BIT4;<br />
pDayState[nIndex] |= BIT19;<br />
pDayState[nIndex] |= BIT25; <br />
pCtrl->SetDayState(nCount, pDayState);<br />
delete [] pDayState;
However when I call pCtrl->SetDayState(), it is there that the problem occurs and it directs me to the line that asserts that i previously mentioned.
The ModifyStyle function used in the third line seems to have no effect, as I checked the return value from pCtrl->GetStyle() before and after the call to ModifyStyle and the result was the same.
By the code to create the CMonthCalCtrl I meant the code that is prewritten in the source code provided with Visual C++, not the code the user writes.
Thanks
|
|
|
|
|
|
Thanks, I haven't got time to try that tonight but I will look at it tomorrow
|
|
|
|
|
I have tried to destroy the control using pMonthCalCtrl->DestroyWindow() in response to the user clicking the dropdown button, however, I get an access violation when i run it, how do you destroy the MonthCalCtrl?
Thanks
|
|
|
|
|
Did you ever fix this problem? I am having the same problem in getting bold dates up. If you managed to destroy and recreate the window and get the dates bold I would love to know how.
Hope your still reading.
Thanks
Dave
|
|
|
|
|
No, I looked absolutely everywhere and tried just about everything but I eventually gave up as I couldn't find a solution anywhere. If I do have any success I will let you know, and could you do the same if you find a solution.
Thanks
|
|
|
|
|
Thanks
I will let you know if I solve it as well.
Dave
|
|
|
|
|
Well I worked around it so that I can use it the way I want!
Basically I added an invisible Month Calendar control which I then set to the same space as the DateTimePickers rect in the DropDown handler. I also set a flag for bMonthShowing.
In the OnPaint method I use the bMonthShowing flag to let me know to reposition the windows
m_pMonth->SetWindowPos(&wndNoTopMost, 0, 0, 1, 1, SWP_NOMOVE | SWP_SHOWWINDOW);
m_ctlMonth.SetWindowPos(&wndTopMost, 0, 0, 1, 1, SWP_NOMOVE | SWP_SHOWWINDOW);
In the CloseUp handler I set the MonthCalendar invisible.
For the month calendar I handle the GetDayStates to set which days I want bold.
In the OnSelect for the month calendar I do the following:
COleDateTime t;
SYSTEMTIME tt;
BOOL ret = m_ctlMonth.GetCurSel(&tt);
t.SetDate(tt.wYear, tt.wMonth, tt.wDay);
m_ctlDatePicker.SetTime(t);
(If I did the GetCurSel directly into a COleDateTime it comes back with an invalid status )
And everything works! <edit> All right I missed one or two (or more) things. oops
What a kludge!
If you want I can send you the whole dialog project. Let me know.
Dave
|
|
|
|
|
I just checked the result of pMonthCalCtrl->GetStyle() before and after the use of the ModifyStyle function and the result is the same. (The ModifyStyle seems to be affecting the wrong style?)
Thanks for all your help so far
|
|
|
|
|
I also tried ModifyStyleEx and that had no effect either.
|
|
|
|
|
I think this should work:
HWND hwndDP = pCalCtrl->GetSafeHwnd();
ASSERT (hwndDP != NULL);
HWND hwndMC = DateTime_GetMonthCal (hwndDP);
ASSERT (hwndMC != NULL);
CWnd* pMCCtrl = CWnd::FromHandle (hwndMC);
ASSERT (pMCCtrl != NULL);
DWORD dwStyle = pMCCtrl->GetStyle();
dwStyle |= MCS_DAYSTATE;
pMCCtrl->SetStyle (dwStyle);
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
The intent was to show every step in detail.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
pMCCtrl->SetStyle (dwStyle);
No such function as CWnd::SetStyle()
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
Gak! What was I thinking!? Thank you!
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
There is cool code here:
http://www.codeproject.com/dialog/bmpdlg01.asp
that shows how to make a bitmap a background for a
CDialog. I have a rather large bitmap, its about 1600x
600 pixels and when I use that bitmap, it looks great
but if I scroll up or down, the images flickers or doubles
up or drags with the scrolling and looks really bad.
Any chance any one has experienced this and has a
resolution? I tried just laying the bitmap in a CDialog
and laying edit boxes on top of the bitmap. But the
edit boxes disappear under the bitmap and Im just perplexed.
Please, any response any one can give me will be greatly
appreciated.
Sincerely,
Danielle (an overworked graduate student)
|
|
|
|
|
Just poking around here, this probably won't work... but if your image covers the entire dialog surface try NOT calling the base class CDialog::OnEraseBackground() .
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
hi all
i am just starting to try and learn c++. i am finding this site very helpfull. does any1 else out there have ny other tips,web sites or just genral help for me? i would be really greatfull if you do!
thanks a lot
Matthew Burns
P.S you can also email me should you want to for any reason on amattburns178@hotmail.com
matty b
|
|
|
|
|
hey, the forum is for asking specific programming questions... we cannot guess what you need and what you don't.
ask for something, you'll get an answer (we'll try to...)
for C++, you can have a look at The C++ Language (but it's a book, not a site) from Bjarne Stroustrup, even if it is not for beginners (say Maxwell chen... hello maxwell )
TOXCCT >>> GEII power
|
|
|
|
|
Man whatever you need to ask my mail address is eu_acela@yahoo.com
eu_acela@hotmail.com
gabby
|
|
|
|
|
I come back from a 2 week break and notice that my code no longer works - I am getting errors related to
i386\chkesp.c<br />
The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.<br />
As I believe nothing has changed with the file(s) going into this build, maybe some compiler settings were changed. I'm at a total loss and need some advice/direction.
Thank you.
Johnny P
|
|
|
|
|
Did you do a clean and Rebuild All?
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|