Click here to Skip to main content
15,891,839 members
Articles / Desktop Programming / MFC

File Searcher Edit Control with Browse Button

Rate me:
Please Sign up or sign in to vote.
4.90/5 (22 votes)
13 Dec 2002CPOL 417.8K   5K   112  
A control that combines an edit control for entering a file or directory name, and a browse button that brings up a dialog for choosing a file or folder.
/****************************************************************************
PJAImage.h : header file for the PJAImage class
written by PJ Arends
pja@telus.net

For updates check http://www3.telus.net/pja/PJAImage.htm

-----------------------------------------------------------------------------
This code is provided as is, with no warranty as to it's suitability or usefulness
in any application in which it may be used. This code has not been tested for
UNICODE builds, nor has it been tested on a network ( with UNC paths ).

This code may be used in any way you desire. This file may be redistributed by any
means as long as it is not sold for profit, and providing that this notice and the
authors name are included.

If any bugs are found and fixed, a note to the author explaining the problem and
fix would be nice.
-----------------------------------------------------------------------------
****************************************************************************/

#if !defined(AFX_PJAIMAGE_H__F15965B0_B05A_11D4_B625_A1459D96AB20__INCLUDED_)
#define AFX_PJAIMAGE_H__F15965B0_B05A_11D4_B625_A1459D96AB20__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CPJAImage class

// this class is used to draw an image (HBITMAP or HICON)

// Flags used by the SetImage() function
//
// Usage :
// PJAI_ICON       - the image is an icon, cannot be used with FEC_BITMAP
// PJAI_BITMAP     - the image is a bitmap, cannot be used with FEC_ICON
// PJAI_AUTODELETE - the image handle is deleted and the memory freed when it is no longer needed
#define PJAI_ICON        0x00000001
#define PJAI_BITMAP      0x00000002
#define PJAI_AUTODELETE  0x00000004

// Flags used by the DrawImage() function
//
// Usage :
// PJAI_TRANSPARENT - used with FEC_BITMAP, the bitmap will be drawn transparently
// PJAI_STRETCHED   - Can not be used with PJAI_CENTERED . The image will be stretched to fit the rectangle in DrawImage()
// PJAI_CENTERED    - Can not be used with PJAI_STRETCHED. The image will be centered on the rectangle
// PJAI_DISABLED    - Can not be used with PJAI_GRAYSCALE. Draws the image as disabled (3D Monochrome)
// PJAI_GRAYSCALE   - Can not be used with PJAI_DISABLED. Draws the image in grayscale
#define PJAI_TRANSPARENT 0x00000010
#define PJAI_STRETCHED   0x00000020
#define PJAI_CENTERED    0x00000040
#define PJAI_DISABLED    0x00000080
#define PJAI_GRAYSCALE   0x00000100

class CPJAImage  
{
public:
    CPJAImage();                        // constructor
    virtual ~CPJAImage();               // destructor

    void DrawImage(CDC *pDC, int x, int y, int w, int h, DWORD DrawFlags = 0); // draws the image
    CSize GetSize();                          // retreives the dimensions of the image
    BOOL SetImage(HANDLE Image, DWORD Flags); // setup the image
    COLORREF SetTransparentColour(COLORREF clr = CLR_DEFAULT); // set the colour to used as the transparent colour

protected:
    void DitherBlt(CDC *pToDC, int x, int y, int w, int h, CDC *pFromDC);  // draw the bitmap grayed
    void DrawTransparent(CDC *pToDC, int w, int h, CDC *pFromDC); // draw the bitmap transparently
    int Gray(int r, int g, int b);
	HBITMAP GrayScale (CDC *pDC, HBITMAP hBitmap);
	BOOL IsTransparent(int r, int g, int b);

private:
    DWORD m_ImageFlags;                 // the control flags
    DWORD m_DrawFlags;                  // the drawing flags
    HANDLE m_hImage;                    // the image
    CSize m_size;                       // the image size
    COLORREF m_TransparentColour;       // the transparent colour
};

#endif

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
President
Canada Canada
Father of two, brother of two, child of two.
Spouse to one, uncle to many, friend to lots.
Farmer, carpenter, mechanic, electrician, but definitely not a plumber.
Likes walks with the wife, board games, card games, travel, and camping in the summer.
High school graduate, college drop-out.
Hobby programmer who knows C++ with MFC and the STL.
Has dabbled with BASIC, Pascal, Fortran, COBOL, C#, SQL, ASM, and HTML.
Realized long ago that programming is fun when there is nobody pressuring you with schedules and timelines.

Comments and Discussions