|
Now, I have VS .NET 2002 so I'm not sure this works for you. I recently started working with CTreeCtrl's and I needed two custom icons. I created them in MS Paint, saved as 16x16 24-bit bitmaps. I imported them into my project via the resource view, they showed up under the category "Bitmaps", one called IDB_FILE and another called IDB_FOLDER. For the CTreeCtrl, to use icons, I have to load up a CImageList data type with my images, then attach it to the CTreeCtrl. This is the resulting code in regards to the CImageList, I don't know how helpful it was but it did the job fine for me:
m_images.Create(16, 16, ILC_COLOR24 | ILC_MASK, 0, 2);<br />
<br />
CBitmap folder;<br />
ASSERT(folder.LoadBitmap(IDB_FOLDER));<br />
ASSERT(m_images.Add(&folder, RGB(0, 255, 128)) != -1);<br />
<br />
CBitmap file;<br />
ASSERT(file.LoadBitmap(IDB_FILE));<br />
ASSERT(m_images.Add(&file, RGB(0, 255, 128)) != -1);<br />
<br />
m_tree.SetImageList(&m_images, TVSIL_NORMAL);
Note, m_images is the CImageList and m_tree is the CTreeCtrl.
I also implemented a mask so the background of the control can be changed and the icons' picture will change appropriately. I painted the RGB color 0, 255, 128 on the image where I want transparency then on the Add() command, I specify what color the mask color is. Again, I don't know how helpful this is to your project but good luck.
|
|
|
|
|
Thank you for the response. Unfortunately though, when I import anything more than 256 colors, it gets converted to 256 colors. Please note that I believe this is a limitation of Visual C++ 6.0 and its resource editor. I am assuming that I will have to load the icon from code somehow and just link everything externally via files. I could be wrong, but this is why I am here
|
|
|
|
|
haputanlas wrote: I am trying to work with icons in the system tray and on the title bar and the resource editor from the 6.0 suite. I can only create bitmaps or icons with 256 colors. Is there any way that I could create an SVG file or PNG/JPG and use those for the icons?
AFAIK, you couldn't be able to use HIGH res Icon in Visual C++ 6.0
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
You can't use hi-res images from within VC6. You need to create them using another application and then modify the RC file manually.
The two most common elements in the universe are Hydrogen and stupidity. - Harlan Ellison
Awasu 2.1.3 [^]: A free RSS reader with support for Code Project.
|
|
|
|
|
Hi I’ve been trying to write a routine that will scan 1 bitmap to see if a second bitmap is within it. I’m not having a problem with the algorithm to do the search I’m having problems getting the pixel colors from both the bitmaps. For testing I loaded the first image by calling ::LoadImage() which returns an HBITMAP. For the second image I’m loading into I.E. and using some code to get the hwnd and pull the HBITMAP calling CopyWindowToBitmap().
So now that I have 2 variables of type HBITMAP. How do I get there pixels?
This is what I’ve tried with no success.
HBITMAP bmpOne;
HBITMAP bmpTwo;
… Some code to get bmpOne and bmpTwo ..
HDC hDC = ::GetDC(NULL);
HDC hDCBMPOne = ::CreateCompatibleDC(hDC);
HDC hDCBMPTwo = ::CreateCompatibleDC(hDC);
::SelectObject(hDCBMP1 , bmpOne);
::SelectObject(hDCBMP2 , bmpTwo);
COLORREF PixelOne;
COLORREF dPixelTwo;
PixelOne = ::GetPixel(hDCBMPOne, x, y);
PixelTwo = ::GetPixel(hDCBMPTwo, x, y);
If I do the following…
int red = GetRValue(PixelOne);
int green = GetGValue(PixelOne);
int blue = GetBValue(PixelOne);
Even though the color at x,y is not white I always get
red = 255, green= 255 and blue = 255;
I know that the HBITMAP bmpOne and bmpTwo are loaded because I display them in a dialog.
Any thoughts? Is there a way to get the pixel data directly from HBITMAP? Thanks.
|
|
|
|
|
I think you can do this by select the bitmap(s) into a device context (one at a time) and then calling GetPixel() [^].
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
GetPixel is terribly slow, can you create a HBITMAP so that it's also a DIBSECTION ? Then you'll have a pointer to the underlying bytes for this sort of work.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
I second that. GetPixel() is horribly slow! The only downside with dibsections is that you'd have to take bitdepths into consideration. A small price to pay for good performance though.
--
Pictures[^] from my Japan trip.
|
|
|
|
|
I have a class called CFileObject derived from CObject and a class called CFileTree derived from CObList. At a particular point in my program, I have an if statement that tests if an object (could be a CFileObject or CFileTree) is a CFileObject. At a point in the execution, the object is a CFileTree but when it runs the test, it returns true, saying it's a CFileObject which is incorrect. Do I need to declare my two types as being the types that they are so IsKindOf() can resolve properly?
|
|
|
|
|
From the MSDN documentation[^]:
"This function works only for classes declared with the DECLARE_DYNAMIC , DECLARE_DYNCREATE , or DECLARE_SERIAL macro. Do not use this function extensively because it defeats the C++ polymorphism feature. Use virtual functions instead."
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
You could try using dynamic_cast instead. But as Ravi said, it's not good OO practice.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
|
hi
you can use the CString constructor to do this
CString strInfo(IDS_INFO);
or the Format method of CString if the reseource string needs additional paramaters
like this:
CString strHelloWorld;<br />
strHelloWorld.Format(IDS_HELLO, "world");
Regards
codito ergo sum
|
|
|
|
|
You can also use AfxFormatString1 & AfxFormatString2
if your resource HELLO_ID is: "Hello %1"
you can do:
CString result;
AfxFormatString1(result HELLO_ID, "World");
it gives u Hello World
Eric
Premature optimization is the root of all evil
|
|
|
|
|
CString strFoo;
VERIFY (strFoo.LoadString (IDS_Foo)); /ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
Hmm... seems like it won't work:
---------------------------
#include <afx.h>
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
CString errors;
errors.LoadString(IDS_ERROR1);
MessageBox(NULL, errors, "Hello", MB_OK);
return 0;
}
---------------------------
Errors:
---------------------------
C:\VCProjs\KixWTF\KixWTF.cpp(14) : error C2065: 'CString' : undeclared identifier
C:\VCProjs\KixWTF\KixWTF.cpp(14) : error C2146: syntax error : missing ';' before identifier 'errors'
C:\VCProjs\KixWTF\KixWTF.cpp(14) : error C2065: 'errors' : undeclared identifier
C:\VCProjs\KixWTF\KixWTF.cpp(16) : error C2228: left of '.LoadStringA' must have class/struct/union type
C:\VCProjs\KixWTF\KixWTF.cpp(16) : error C2065: 'IDS_ERROR1' : undeclared identifier
---------------------------
Anyone know?
Thanks!
PS: <code> tag didn't work.
Sulfurik K. Nosferathus (Darth_Sulfur)
www.SulfurMidis.com
www.SulfurSoft.tk
http://www.BeepXtreme.tk
[ftp://][http://][hotline://]tsfc.ath.cx
|
|
|
|
|
I assumed you were building an MFC app. Here's[^] a link to the Win32 version of the API.
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
|
Darth_Sulfur wrote: Do you know how to make a MFC app, but without a main window?
Create a console application and select MFC support.
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
|
Darth_Sulfur wrote: but I have a DOS box in the background... How do I take that out?
Create an MFC dialog based application and don't create the dialog in your app's InitInstance() method. Instead, just execute whatever (non-GUI) code you wish to call. Note, your app will exit when it returns from InitInstance() .
Hope this helps!
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
|
[edit]
Fixed!
MessageBox(NULL, "Hellawz!!1!11", "Hello", MB_OK);
[/edit]
Hello everyone!
OK, I want to make a program that just displays a message box and exits. How do I do that? When I make a MFC AppWizard (exe), I get a dialog, which I don't want. When I try Win32 Application, I get a C2550 error:
'MessageBoxA' : function does not take 3 parameters
no matter if I select empty, simple, or hello world.
How can I reach what I listed? Thanks!
Sulfurik K. Nosferathus (Darth_Sulfur)
www.SulfurMidis.com
www.SulfurSoft.tk
http://www.BeepXtreme.tk
[ftp://][http://][hotline://]tsfc.ath.cx
-- modified at 4:40 Sunday 6th November, 2005
|
|
|
|
|
Hi
I used a Win32 Console application and didn't have any problems:
#include "stdafx.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
MessageBox(NULL, "Hello", "Hello", MB_OK);
return 0;
}
codito ergo sum
|
|
|
|
|
In MFC, the MessageBox function works within a dialog and takes 3 paramaters, but the non MFC version takes 4, the one that is omitted is the first one, the handle to the parent window.
Christian Graus - Microsoft MVP - C++
|
|
|
|