在MainFrame里创建了一个新窗口,在该新窗口中画了自定义的几个按钮,消息响应函数也写了,但是点击按钮就是没响应,哪位高手能帮我看下,我现在还没有分,等有分了以后补上,谢谢.
解决方案 »
- 有没有办法在非CWnd继承类中计算文本宽度
- ATL不支持MFC的工程,错误C1189,求解?
- 求bmp图片缩放代码
- IOleObject接口是用来干么的?
- 简体VISTA下VS2005中文显示乱码(字符集--未设置或多字节字符集)
- 一个数学问题:爱好算法者请进。
- 急急急!!为什么读文件还是出现乱码??
- 关于类似 #define _tcscpy strcpy 的问题
- 请问开源xpdf-3.02P14-win32 支持的pdf版本范围 ??
- 有哪位大神曾写过关于对话框下的打印及打印预览,求指导
- 本人用DEQUE队列时,发现申明的如deque< int *>当push_pack一些值后再用front,pop_front得到的始终为最后插入的值,百思不解。。
- vc关联问题
#include "NDButton.h"
#include "StdAfx.h"
#include "resource.h"
//频道按钮的指针链表和id
#define WM_BTNPUSHED WM_USER + 1001typedef struct _BUTTONLIST
{
int nButtonId;
CNDButton *pBtn;
_BUTTONLIST *pNext;
} BTNLIST, *PBTNLIST;
class CNdBar : public CWnd
{
DECLARE_DYNAMIC(CNdBar)public:
CNdBar();
virtual ~CNdBar();protected:
// 工具条包含的按钮个数
public:
// 设置bar的按钮个数
void setBtnNum(int nNum);
public:
// virtual bool CreateEx(DWORD dwExStyle, DWORD dwStyle, const RECT & rect, CWnd* pParentWnd, UINT uID);
virtual bool Create(UINT wStyle, const CRect & rect, CWnd * pParentWnd, UINT nID);
virtual bool InsertButton(DWORD dwStyle, UINT nWidth, UINT nHeight, UINT uID, HICON hIco, UINT nIconX, UINT nIconY);
afx_msg LRESULT OnBtnPushed(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
protected:
LPCSTR m_strPushedBmp;
LPCSTR m_strNormalBmp;
LPCSTR m_strHoverBmp;
LPCSTR m_strIcon;
public:
//窗体高度
int m_nHeight;
//窗体宽度
int m_nWidth;
int m_nX;
int m_nY;
int m_nNumButton;
PBTNLIST m_btnList;
UINT m_uID;
CRITICAL_SECTION m_btnListLock;
public:
void SetBtnImages(LPCSTR strPushedBmp, LPCSTR strNormalBmp, LPCSTR strHoverBmp, LPCSTR strIcon);
};----------------------------------------------------------------------------------------------------------------
#pragma once
#include "StdAfx.h"
#include "resource.h"// CNDButton
enum {NDBS_PUSHED, NDBS_HOVER, NDBS_DOWN, NDBS_NORMAL};#define WM_BTNPUSHED WM_USER + 1001class CNDButton : public CButton
{
DECLARE_DYNAMIC(CNDButton)public:
CNDButton();
CNDButton(LPCSTR szBmpNormal, LPCSTR szBmpHover, LPCSTR szBmpPushed, LPCSTR szIcon, UINT nWidth, UINT nHeight, UINT nIconWidth, UINT nIconHeight);
virtual ~CNDButton();
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
virtual void setIcon(int nX, int nY, HICON hIcon);protected:
public:
HICON m_hIcon;
//按钮按下时的按钮背景
HBITMAP m_hBmpPushed;
//鼠标放在按钮上的按钮背景
HBITMAP m_hBmpHover;
//按钮的一般标准状态背景图片
HBITMAP m_hBmpNormal;
//按钮是否处于按下状态
bool m_bPushed;
//是否鼠标停留
bool m_bHover;
//按钮是否被按下且还没有释放
bool m_bDown;
UINT m_nHeight;
UINT m_nWidth;
int m_nIconWidth;
int m_nIconHeight;
int m_nIconX;
int m_nIconY;
//按钮id
UINT m_uID;
protected:
virtual void PreSubclassWindow();
public:
//设置按钮为非按下状态
void setNoPushed();
public:
DECLARE_MESSAGE_MAP()
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
public:
virtual BOOL Create(LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
};然后在MainFrame.cpp中的OnCreate()函数里是这样调用的:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1; // TODO: Add your specialized creation code here
// m_leftBar是CNdBar类,属于CMainFrame的一个成员变量
if (!m_leftBar.Create(WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN , CRect(0, 0, 100, 100), this, 123))
{
AfxMessageBox("1111");
}
m_leftBar.SetBtnImages(MAKEINTRESOURCE(IDB_BITMAP3), MAKEINTRESOURCE(IDB_BITMAP1), MAKEINTRESOURCE(IDB_BITMAP2), MAKEINTRESOURCE(IDI_ICON1));
m_leftBar.InsertButton(0 , 30, 35, 12345, NULL, 15, 15);
m_leftBar.InsertButton(0 , 30, 35, 12346, NULL, 15, 15);
m_leftBar.InsertButton(0 , 30, 35, 12347, NULL, 15, 15); return 0;
}执行后,按钮有显示出来,但是点击按钮没任何响应.我在按钮响应函数里加了句:AfxMessageBox("我被按了"); 发现点击按钮的时候没进入到响应函数里.