|
Since your grabbing pixels from the display, you won't be able to get the non-visible pixels
that way.
Maybe there's an overridable method in the browser control where you can force the HTML to be
rendered to a dc of your choice instead of the screen...?
Mark
"Great job, team. Head back to base for debriefing and cocktails."
(Spottswoode "Team America")
|
|
|
|
|
I was thinking if i can get a handle of the web browser then it should be possible to capture all area of the web browser. Do you know how to retrieve the handle of the web browser?
llp00na
|
|
|
|
|
Hello,
I am a newbie with VC++ and MFC and I try to understand how CTreeCtrl works.
Could you please tell me how to use lparam in TVITEM.
I've found nothing in the MSDN and I also searched in this forum. I've read that someone used it to store a LPSTR.
Does it mean that I can use it to store my own types such pointers, structures etc..?
many thanks for your help.
|
|
|
|
|
Arris7 wrote: Does it mean that I can use it to store my own types such pointers, structures etc..?
Yes, you can do it.
In our case, in the tree, each leaf points to its corresponding object via the pointer that is stored in the lparam member of the TVITEM :
In this example, when I insert a leaf in the tree, I will assing the pointer to lparam, you must not forget to add the TVIF_PARAM to the mask. ( note that the TVITEM in this case is a member of the TVINSERTSTRUCT struct )
TVINSERTSTRUCT tv;
ZeroMemory (&tv, sizeof ( tv ) );
tv.hParent = hParent;
tv.hInsertAfter = TVI_LAST;
tv.item.mask = 0;
tv.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
tv.item.iImage = IMAGE_INDEX;
tv.item.iSelectedImage = IMAGE_INDEX;
tv.item.pszText = (LPTSTR)(LPCTSTR)sText;
tv.item.lParam = (DWORD)pPointerToObject;
HTREEITEM h = InsertItem( &tv );
|
|
|
|
|
Thnks for your explanation Maximilien, it sounds clear now.
please copuld you answer a last question before I go on into coding.
I use the following structure that will contain additional information related to my leaves
struct NodeInfo
{
CString Path;
CString GroupName;
CString Type;
DWORD Category;
};
so if I want to attach this structure to my leaf, can I write
tv.item.lParam = NodeInfo* moreinfo;
or is it better to write
NodeInfo* moreinfo = new NodeInfo; // Do not forget to delete
tv.item.lParam = moreinfo;
Thnks again for your help
|
|
|
|
|
I need to be able to dynamically change the font (and/or image )of different leaves in my tree.
The problem is that one "leaf" can be in different places in the tree ( have different parents ); and I don't want to spend all of my computing time finding the HTREEITEM of those leaves.
So, one of my solution is to "custom draw" the items and change the font, the followinf works well except that the item width is not modified to take into account the width of the string with the bold font ( the item is slightly clipped )
void MyTree::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMTVCUSTOMDRAW *pcd = (NMTVCUSTOMDRAW *)pNMHDR;
switch ( pcd->nmcd.dwDrawStage )
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT :
{
if ( someCondition )
{
::SelectObject(pcd->nmcd.hdc, m_fontBold.GetSafeHandle());
}
else
{
::SelectObject(pcd->nmcd.hdc, m_font.GetSafeHandle());
}
*pResult = CDRF_DODEFAULT;
break;
}
}
}
The other thing I tried was to change the image of the leaf :
void MyTree::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMTVCUSTOMDRAW *pcd = (NMTVCUSTOMDRAW *)pNMHDR;
switch ( pcd->nmcd.dwDrawStage )
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT :
{
if ( someCondition )
{
SetItemImage( hItem, IMAGE_INDEX_1, IMAGE_INDEX_1 );
}
else
{
SetItemImage( hItem, IMAGE_INDEX, IMAGE_INDEX );
}
*pResult = CDRF_DODEFAULT;
break;
}
}
}
The following works, except that the paint is retriggered, and the process eats CPU (all the CPU).
2 questions for now :
- If I only change the font, is there a way to "reset" the item size so it does not look clipped ?
- Is there a way to use custom draw ( that I missed ) that would not retrigger redraw if I change the image like I'm doing ?
Any other suggestions, hints or tips ?
Many Thanks
Max.
|
|
|
|
|
how to change the text color of the radio button at run time.
Arise Awake Stop Not Till ur Goal is Reached.
|
|
|
|
|
MSDN[^] is your best friend.
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.
|
|
|
|
|
See WM_CTLCOLORBTN
And see a little help
HBRUSH CDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetTextColor(RGB(20,120,220));
return hbr;
}
|
|
|
|
|
Hi,
Whats the purpose of having foll.. statments in an header file
//car.hpp
#ifndef CAR_HPP
#define CAR_HPP
class Car
{
};
#endif
VIBIN
"Fool's run away,where angle's fear to tread"
|
|
|
|
|
To avoid having the symbols declared multiple times.
Suppose you have a file that include two other header files (file A.h and file B.h). These two files both include a third one (C.h).
If you didn't have the include guards, the symbols would be duplicated because your file is included both from A.h and from B.h. (For the preprocessor, an include will simply replace the include statement by the contents of the file).
|
|
|
|
|
Thanks a lot.
Now i understand the purpose of using #ifndef in header file
VIBIN
"Fool's run away,where angle's fear to tread"
|
|
|
|
|
Hi all,
I am making simple screen capture win32 application using VC++.NET. I am able to capture it in the memory and getting handle of that bitmap but I am not able to show that bitmap in Picture Control in dialog box. Can I know what wrong with my code??
I am pasting my code here.
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HWND hDesktopWnd = GetDesktopWindow();
HDC hDesktopDC = GetDC(hDesktopWnd);
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC, nScreenWidth, nScreenHeight);
SelectObject(hCaptureDC,hCaptureBitmap);
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY|CAPTUREBLT);
::SendMessage(::GetDlgItem(hDlg, IDC_BITMAP_CONTROL), STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hCaptureBitmap);
ReleaseDC(hDesktopWnd,hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);
Thanks,
Priyank
|
|
|
|
|
Are you sure hCaptureBitmap is valid and How do you createIDC_BITMAP_CONTROL
|
|
|
|
|
It seems very strange logic, but problem in this case is you are deleting bitmap object and you have not deleted compatible device context.
Your code can be modified to,
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HWND hDesktopWnd = GetDesktopWindow();
HDC hDesktopDC = GetDC(hDesktopWnd);
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC, nScreenWidth, nScreenHeight);
SelectObject(hCaptureDC,hCaptureBitmap);
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY|CAPTUREBLT);
::SendMessage(::GetDlgItem(hDlg, IDC_BITMAP_CONTROL), STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hCaptureBitmap);
ReleaseDC(hDesktopWnd,hDesktopDC);
::DeleteDC(hCaptureDC);
::DeleteDC(hDesktopDC);
DeleteObject(hCaptureBitmap);
|
|
|
|
|
Hello all,
I have a CMainFrame window which holds a view. From the view I'm passing HTTRANSPARENT to the CMainFrame so it can handle them, and that way allow for custom dragging and resizing.
I want to make my CMainFrame borderless, and afaik removing the style WS_THICKFRAME from it is the only way to do so. Problem is, when I'm removing that style, whenever I return HTTOP, HTBOTTOM and similar from CMainFrame::OnNcHitTest it would do nothing - no gripping cursors and no ability to resize. Only when that style is set I can allow that custom resizing.
Any idea how can I bypass this, and have a borderless window which still allows for resizing?
Thanks in advance,
Stilgar.
|
|
|
|
|
hi,
I tried to work with your problem. The way is that you have to catch the events
in Pretranslate of the mainframe with the following handle "m_hWndMDIClient" and provide
custom dragging. The hit test must be perfomed by a separate function created by us which
will return the flags returned by OnNcHitTest if needed. I had caught the events only with
this handle only. Try it u will get sucess.
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->hwnd ==m_hWndMDIClient )
{
//Add your code here for the Messages
}
return CMDIFrameWnd::PreTranslateMessage(pMsg);
}
Thank you,
A beginner
A beginner
|
|
|
|
|
Are you suggesting I'd do the whole cursor changing, handle the dragging and resize my app accordingly, all by custom code?
Stilgar.
|
|
|
|
|
i have a slider bar and i have used onreleasedsliderbar event to handle its changes. but it is not fired when Keyboard is used to change the bar. How could i handle changes to Slider bar by Keyboard ?
|
|
|
|
|
What compiler are you using? Is MFC involved?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
it is a visual c++ MFC project in Visual Studio .net 2003 IDE.
|
|
|
|
|
Ok, what message are you responding to?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
just OnNMReleasedCaptureSlider from slider events,
but also OnMouseMove
but not KeyStroke events.
|
|
|
|
|
I want to handle changes to a slider bar which are made by a keyboard!
|
|
|
|
|
Why not use Spy++ to see which of the NM_xxx notification messages are being sent (when the keyboard is used with that control)?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|