|
In the first case the compiler knows that you are looking for the size of the array and the data type is int[]. The second time, it is an int* and the size of any pointer is 4 bytes.
--Thomas
modified 29-Aug-18 21:01pm.
|
|
|
|
|
couldn't you do sizeof(*ara)?
Bret Faller
Odyssey Computing, Inc.
|
|
|
|
|
I am programming using the dialog exe application wizard. I have a dialog box with a scrollbar on it and some edit boxes. The edit boxes have a range of 0 to 100, so if you enter a
number outside that range and kill focus a message comes up and focus goes back to the box.
My OnVScroll function looks like this:
void CWeightDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
m_edit2_ctrl.SetFocus();
int Pos = m_scrollWeights.GetScrollPos();
UpdateData();
switch(nSBCode)
{
case SB_LINEUP:
Pos = Pos - 1;
m_scrollWeights.SetScrollPos(Pos);
break;
case SB_LINEDOWN:
Pos = Pos + 1;
m_scrollWeights.SetScrollPos(Pos);
break;
case SB_THUMBPOSITION:
m_scrollWeights.SetScrollPos(nPos);
break;
case SB_THUMBTRACK:
m_scrollWeights.SetScrollPos(nPos);
break;
}
UpdateText();
UpdateEditBoxes();
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
.
If the value in the edit box is outside the range and I click on the scrollbar I get a "Debug Assertion Failed" message (File: wincore.cpp Line: 3102) and the prog bombs.
This occurs during the UpdateData() function. Removing UpdateData(); at the beginning solves the problem but I lose the data
I have tried using SetFocus at the beginning of OnVScroll to force it to check whether it is range but this does not work.
Help!
DAN B
|
|
|
|
|
First up let me admit to my dirty little secret. I am a lazy bastard and use DDX to move data to and from my screen fields and their associated member variables.
I have two ComboBoxes, when I make a selection in the first I want to fill the second with relevant data. Problem is I need to determine what has been selected in the first before I can fill the second.
I have used the following messages CBN_CLOSEUP, CBN_EDITCHANGE, CBN_SELENDOK and CBN_SELCHANGE. With each one, when I enter the function and call UpdateData(TRUE) the ComboBoxes member variable remains empty.
Should I be using another message I have yet to find or should I use some member function of CComboBox to achieve this?
PS. Tomasz how do you always have the relevant Knowledge Base article ready to quote. Have you commited them to memory or do you just have a search before posting your responses?
I have only used the knowledge base articles to fix operating system and network problems in the past. Didn't know there was so many development related answers there.
Michael Martin
Pegasystems Pty Ltd
Australia
martm@pegasystems.com
+61 413-004-018
|
|
|
|
|
You need to use CComboBox::GetCurSel() in the CBN_SELCHANGE Message.
Cheers!!!
Carlos Antollini.
|
|
|
|
|
Looks like I would actually need the follow code to do it.
CString strRslt;
m_cCombo.GetLBText(m_cCombo.GetCurSel(), strRslt);
Though I was hoping to get a message I could use that would allow me to stick with my lazy ways and use DDX.
Michael Martin
Pegasystems Pty Ltd
Australia
martm@pegasystems.com
+61 413-004-018
|
|
|
|
|
Y prefer don't work with DDX, because I feel that I don't have the control over my source.
I only prefer to use the basic of DDX (for example to get pointers to the controls, etc). I prefer to write a little more.
Did You try with UpdateData() in the OnSelChange Message?
Best Regards!!!
Carlos Antollini.
|
|
|
|
|
Yes I did, it still didn't work, may have to ditch DDX after all.
Michael Martin
Pegasystems Pty Ltd
Australia
martm@pegasystems.com
+61 413-004-018
|
|
|
|
|
Use DDX to associate CComboBox variables with dialog controls, but give up on calling UpdateData just for reloading combo.
Assuming that the combobox is dropdown list (users can only select values from the list, no freestyle typing possible), you should handle CBN_SELENDOK. In the handler, use GetCurSel to get the index of the selected item. This index should be all you need to refill another combo. You should call m_otherCombo.ResetContent() and add new items depending on the selection in m_firstCombo.
I'm not sure about combobox with the possiblity of direct text typing. You should probably wait until combo looses the focus - after all, you don't know if typed letter ends the word or is somewhere in the middle.
PS. Tomasz how do you always have the relevant Knowledge Base article ready to quote. Have you commited them to memory or do you just have a search before posting your responses?
ROTFL Sure, I've loaded them all using (very) lossy compression scheme.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Tomasz
I am not calling UpdateData() to load data into the second ComboBox only to determine what was selected in the first ComboBox.
ComboBoxes are CBS_DROPDOWN not CBS_DROPDOWNLIST as I am using Chris Maunder's Auto Completion ComboBox and it needs to allow typing in the EditBox.
In the CBN_SELENDOK of m_cCombo1 I call UpdateData(), m_cCombo2.ResetContent(), then check m_strCombo1 for selected value to determine what to put into second ComboBox and use m_cCombo2.AddString() to add the data to second ComboBox.
Think the answer maybe to use m_cCombo1.GetLBText(m_cCombo1.GetCurSel(), strRslt); Will try it out in the morning, 2:45 AM better get to bed.
Michael Martin
Pegasystems Pty Ltd
Australia
martm@pegasystems.com
+61 413-004-018
|
|
|
|
|
How to slove it ?
LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Hello.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Thank you !
|
|
|
|
|
>>>
LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library
<<<
Are you by any chance explicitly adding any C/C++ standard libraries (C Run-Time Library or Standard C++ Library) to your link settings?
Ben Burnett
---------
On the topic of code with no error handling -- It's not poor coding, it's "optimistic"
|
|
|
|
|
I write an app that record single keystrocke and can lately retrieve and send this keystrocke on another computer.
I need also to retrieve its name (ex: "home" for scancode 71)
Even I searched a lot about this I'm still not sure how to store this keystrocke in a file to avoid international issue.
Recording Wparam and Lparam (wm_keydown) seem interesting while I can latetely retrieve the name of the key on user computer in his hown language with:
GetKeyNameText(pMsg->lParam,lpString,4);
and retrieve the scancode with MapVirtualKey( pMsg->wParam,0);
1-will this work ?
2-are the virtual key the same on each computer or should I directly store the scancode. (and so how to retrieve the name?)
I'm somewhat lost while there is so much ways to code a key.
Thanks
|
|
|
|
|
Hi,
Is it possible to make an ActiveX-control draw itself to a memory DC rather than to the current DC?
What I would like to do is to extract a single frame from an animation (avi, mpeg, ...) rendered by the windows media player ActiveX control, and get the bitmap bits from it without having to actually draw the frame on screen.
Do I maybe have to use a raw multimedia API and not use the ActiveX at all?
I glanced through the media player SDK v7.0, but it seems to be focusing on how to manipulate skins rater than content.
Can I trick it into drawing itself into memory?
/Niklas
|
|
|
|
|
How can I prevent the size of the checkboxes in a CListCtrl to be dependent on the size of the titlebar?
Check out these two shots to see exactly what I mean:
http://hjem.sol.no/clanoz/test/test_box18.jpg
http://hjem.sol.no/clanoz/test/test_box28.jpg
(The default size is 18)
Sprudling
|
|
|
|
|
The COMCTL32 implementation of checkboxes uses item state images. Basically, you can mimic this behavior by setting your own state image list with CListCtrl::SetImageList and handling WM_LBUTTONDOWN to flip checkmarks. As a bonus, your app will run on plain Win95 without any COMCTL32 updates coming from IE, Office or other MS products.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Could you please be a little more specific?
I'm trying to learn MFC, and this is the first CListCtrl i've ever created :]
Sprudling
|
|
|
|
|
I'm trying to learn MFC, and this is the first CListCtrl i've ever created
In this case, stick with default checkboxes. This is not a beginner-level issue.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Hello,
is there a posibility to create a memory-dc with a color-resolution
of 8 bit, when the screen-dc has a color-resolution of 16/24/32 bit?
Please Help
Brian
|
|
|
|
|
Use ::CreateDIBSection().
|
|
|
|
|
Thanks a lot
|
|
|
|
|
Hi,
I have a nice subclassed CEDit class that controls input to exactly the characters I allow. And I have a CTreeCtrl with Edit labels style. I'd like to be able to use my subclassed CEdit to control what the user can enter in the edit part of the treeview.
It says that this can be done in the help:
During label editing, typically in response to the TVN_BEGINLABELEDIT notification message, you can get a pointer to the edit control used for label ....[you can]...subclass the edit control to intercept and discard invalid characters. Note, however, that the edit control is displayed only after TVN_BEGINLABELEDIT is sent.
I know what it's saying, and I know how to get this CEdit pointer. But I have no idea how to implement this as a CMyEdit. Is it as simple as just casting the pointer into a CMyEdit?
ie:
CMyEdit *p_MyEdit;
p_MyEdit = (CMyEdit *) m_MyTreeCtrl.GetEditControl();
or am i barking up the wrong tree totally?
I'm certainly getting in at the deep end, but learning a lot as I do it. So thanks everyone who's helpmed me in the last few weeks!
Slippyr4
|
|
|
|
|
The cast will not work. You have two possibilities:
1) use API instead of CTreeCtrl methods. Send TVM_GETEDITCONTROL to get the HWND of the edit control. Pass the HWND to CYourEdit::Attach.
2) I'm not quite sure about this one: you can try to use CWnd::SubclassWindow on CEdit pointer returned from CTreeCtrl::GetEditControl.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
SUperb, thanks Thomas.
I followed (ish) method 1, turns out to be a one-liner.
I added a CMyEdit member to my dialog class, and handled TVM_GETEDITCONTROL for the treeview.
Then:
m_PhoneEdit.SubclassWindow((m_Tree.GetEditControl())->m_hWnd);
That did the trick!
|
|
|
|
|
Subclassing a window requires that you create a CMyEdit object (such as a member variable in the C++ class that contains the tree), then after the code you posted, do
m_wndMyEdit.SubclassWindow ( p_MyEdit->GetSafeHwnd() ); m_wndMyEdit is the CMyEdit object I mentioned. Window messages sent to the edit control will then pass thru CMyEdit first.
--Mike--
http://home.inreach.com/mdunn/
"Make sure that if you are using a blow torch that you don't set anything on fire."
-- Chris Maunder
|
|
|
|