|
Lookup WM_NCDESTROY in MSDN. It's sent when all windows belonging to your control has died. In that handler you may delete this; just right before return 0 . However, only do this override for heap-allocated window objects.
See MSDN docs for more info.
--
standing so tall, the ground behind
no trespassers, on every floor
a garden swing, and another door
she makes it clear, that everything is hers
A place of abode, not far from here, Ms. Van de Veer
|
|
|
|
|
On the other hand, you seem to be doing MFC stuff, so you may want to check out OnNcDestroy() and PostNcDestroy .
--
standing so tall, the ground behind
no trespassers, on every floor
a garden swing, and another door
she makes it clear, that everything is hers
A place of abode, not far from here, Ms. Van de Veer
|
|
|
|
|
Hello,
I have a a CTreeCtrl a need to retriev a speciphic item. But the tree is not deployed.
I put the items such as :
HTREEITEM id ;
id = tTree.InsertItem(sText, 0,1) ;
tTree.SetItemData(id,lKey) ;
And for search my curent item, i want to job like as baut that dont work, do you have an idea :
HTREEITEM item = tTree.GetRootItem() ;
for (int i=0 ; i < tTree.GetCount() ; i++)
{
long lId = tTree.GetItemData(item) ;
if (lTree == lId)
{
// current item Set current and focus
tTree.SelectItem(item) ;
tTree.Select(item, TVGN_CARET) ;
return TRUE ;
}
// Go to next !
item = tTree.GetNextItem(item,TVGN_NEXT) ;
}
|
|
|
|
|
How do we rotate the image inside a CBitmap object by a specified angle
|
|
|
|
|
Here[^] was a fun discussion on that topic.
|
|
|
|
|
Check out this article[^]. If it doesn't help you then you might want to check out commercially available class libraries like Stingray [^] - and Dundas[^] also has got a very rich class library. Of course these two are not free....
Wenn ist das Nunstück git und Slotermeyer? Ja! Beierhund das oder die Flipperwaldt gersput!
|
|
|
|
|
How can I show a child dialog (in a dialog based app) in the taskbar when it is minimized ??
Thanks,
Cris.
|
|
|
|
|
Hello, I'm changing a form background color using OnEraseBkgnd(CDC* pDC)
I'm also drawing texto and using a CFont for the propose.
The problem is when OnEraseBkgnd(CDC* pDC) is called the second time, i'm using the font like:
VERIFY(hFont.CreateFont(40, 15, 0, 0, FW_NORMAL,FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Arial Bold"));
pOldFont=pDC->SelectObject(&hFont);
pDC->SelectObject(hFont);
pDC->DrawText(sFormName, -1, CRect(15, 0, rc.Width(),80), DT_LEFT|DT_SINGLELINE|DT_VCENTER);
pDC->SelectObject(&pOldFont);
But, after it exits the function i get an error.
What am I doing wrong?
Thank you for your time
|
|
|
|
|
Hallo,
Don't create the font resource in the OnEraseBkgnd(...). Create the font in a function, which is called only once or try this:
if(hFont == NULL)
{
hFont.CreateFont(40, 15, 0, 0, FW_NORMAL,FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Arial Bold"));
}
But the way better method is to make the font resource global and create it once, for example in the class'es constructor.
And don't forget to release the font resource when exiting the program with DeleteObject.
-Dominik
|
|
|
|
|
Thank you Dominik for your advise,
Well, the '==' operator dosen't work, because hFont is not a pointer.
Is there a way to test if hFont was created?
Now its Working fine, thank you very much
|
|
|
|
|
Why does this code only set the background to black behind the text and not the whole control background area?
HBRUSH CIADDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if ( (pWnd->GetSafeHwnd() == GetDlgItem(IDC_SYS1->GetSafeHwnd())
{
pDC->SetTextColor(RGB(255,0,0));//red text
pDC->SetBkColor(RGB(0,0,0) ); //black background
}
return hbr;
}
|
|
|
|
|
u have to set hbr to the color u want the control background to be
"even if my world is weird it's my world" biz stuff about me
|
|
|
|
|
On my dialog is a CEdit control. While typing, pasting text, moving around with the arrow keys or mouse within the CEdit control, I have the need to show the current position within the text (something like a text editor would do). Rather than just the line/col information that editors such as the VC++ IDE show, I need the overall position within the text string. So, for example, if the CEdit control had 752 characters in it, I need to show the current position, be it 15 or 491. Make sense?
Thanks,
David
|
|
|
|
|
One solution is to simple store the data from the edit control to a string object and get the position based on the current character.
Kuphryn
|
|
|
|
|
Therein lies the crux of the problem: how to obtain the current character of a CEdit control? Whenever the CEdit control is updated, whether through typing, pasting, using the arrow keys or the mouse, I can't seem to find a method for knowing where the cursor currently is.
|
|
|
|
|
Good point. I do not think there is a get position via cursor for CEdit. One possible solution is to get the current is CEditCtrl GetCaretPos().
Kuphryn
|
|
|
|
|
Ahh, it never dawned on me to use a parent-class method. I had my blinders set on CEdit methods only. So, I was able to use something like:
pt = m_editText.GetCaretPos();<br />
x = m_editText.CharFromPos(pt);<br />
<br />
nCharIndex = LOWORD(x);<br />
TRACE("char index = %d, ", nCharIndex);
Thanks
|
|
|
|
|
I have an explorer like app which uses the system image list with
no problems ( attach/detach etc).
Now for some of the items displayed I need to display a Custom Icon.
I tried a class I found which create an imagelist from scratch, but that goes through ALL registry entries for file extensions it can find and calls SHGetFileInfo for each of them, and then in the end I can add my own custom icons. As you can imagine: It takes forever even in a Hi-Prio thread.
I want this to work on 98 as well as 2K/Xp, and the latter don't return a filled HImagelist to which I can simply add.
What is the best way I can achieve the desired effect?
|
|
|
|
|
Use ImageList_Duplicate() to make a copy of the system image list, and then use ImageList_Add() to add your custom images to the copy. Then use the copy in place of the system image list.
Software Zen: delete this;
|
|
|
|
|
Hello, I have an ATL object which loads a JPEG from database in a VARIANT now I need to save the variant to a file on disk. Any idea?
Thanks.
|
|
|
|
|
How far have you gotten with the variant? Can you post the code you have? I have sample code that does this with ADO, but I need to know where you're at.
Ty
"The significant problems we face cannot be solved at the same level of thinking we were at when we created them." -Albert Einstein
|
|
|
|
|
Assuming you have the variant containing the data then this function will extract the data and put it into *ppBuf:
<br />
bool GetBinaryFromVariant( VARIANT& vData, BYTE ** ppBuf, unsigned long * pcBufLen )<br />
{<br />
bool bReturn = false;<br />
<br />
if( vData.vt == ( VT_ARRAY|VT_UI1 ) )<br />
{<br />
*pcBufLen = vData.parray->rgsabound[0].cElements;<br />
<br />
*ppBuf = new BYTE[*pcBufLen]; <br />
<br />
if(*ppBuf != NULL)<br />
{<br />
void* pArrayData;<br />
SafeArrayAccessData(vData.parray,&pArrayData);<br />
<br />
memcpy(*ppBuf, pArrayData, *pcBufLen);<br />
<br />
SafeArrayUnaccessData(vData.parray);<br />
bReturn = true;<br />
}<br />
}<br />
<br />
return bReturn;<br />
}<br />
Then you would use it like this - the code is from the top of my head so I'm not sure it will compile or work correctly
<br />
<br />
BYTE* pBuffer = NULL;<br />
UINT nBufSize = 0;<br />
if ( GetBinaryFromVariant( vtJPEG, &pBuffer, &nBufSize ) )<br />
{<br />
CFile file;<br />
if ( file.Open( strTheFileName, CFile::modeCreate | CFile::modeTruncate ) )<br />
{<br />
file.Write( pBuffer, nBufSize );<br />
}<br />
delete [] pBuffer;<br />
}<br />
Wenn ist das Nunstück git und Slotermeyer? Ja! Beierhund das oder die Flipperwaldt gersput!
|
|
|
|
|
My application requires the installation
of a driver in the target machine so I have
the *.sys and the *.ini file.
I'd like to create a MSI file that automatically
installs my application and its driver.
Does someone knows in which way must I set the
Visual Studio Installer project in order to perform
the proviously defined operations ?
Thanks a lot
|
|
|
|
|
On a small LAN, I must to send a Invoice number to another computer. I have tried to make a CSocket connection without good results.
I have writen a sequence als follow:
On the server: create, listen and accept (with debug, here stay still until the client send a connect message, I guess!!)
On the client: create, connect;
Then, I send on client with the send command, und the server is waiting with the receive command, but nothing comes in the *lBuf parameter.
The GetLastError show a 10022, that its something with Bind, but I have tried to put the bind command in different places (before the accept, after the accept, nothing works!!!!!!!)
And yes, I'm a newie!
|
|
|
|
|
I recommend Winsock Win32 API. We can help you if you ask a specific question.
Kuphryn
|
|
|
|
|