Как програмно нажать CBitmapButton и сделать Resize
От: max_l  
Дата: 12.03.08 09:03
Оценка:
Использовал CBitmapButton для кнопок с картинками, но немогу понять как удержать нажатую кнопку.
Пробовал и UISetCheck для Button и UISetRadio для Raidio Button.
При отладке вообще не нашел в классе CBitmapButton переменной отвечающей за хранение состояния кнопки(разве что m_fPressed но она меняется при нажатии любой другой кнопки).
Где может быть ошибка?
И еще одна проблема.
Когда делаю Resize диалога, картинки на кнопках не меняют рамер.
Как проще всего реализовать Resize CBitmapButton?

class CMainDlg : public CDialogImpl<CMainDlg>,CDialogResize<CMainDlg>,public CWinDataExchange<CMainDlg>,public CUpdateUI<CMainDlg>
{
public:
CBitmapButton m_wndBmpButton[6];
CImageList il[30];
int pages,pagemax;
enum { IDD = IDD_MAINDLG };
BEGIN_MSG_MAP(CMainDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
COMMAND_ID_HANDLER(IDCANCEL, OnOK)
COMMAND_RANGE_HANDLER(IDF1,IDF6,OnClickedDf)
COMMAND_HANDLER(IDNEXT, BN_CLICKED, OnClickedNext)
CHAIN_MSG_MAP(CDialogResize<CMainDlg>)
COMMAND_HANDLER(IDPREV, BN_CLICKED, OnClickedDprev)
COMMAND_HANDLER(IDTAKE, BN_CLICKED, OnClickedDtake)
END_MSG_MAP()

BEGIN_DLGRESIZE_MAP(CMainDlg)
BEGIN_DLGRESIZE_GROUP()
DLGRESIZE_CONTROL(IDF1, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDF2, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDF3, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDF4, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDF5, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDF6, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDNEXT, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDPREV, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDTAKE, DLSZ_SIZE_X | DLSZ_SIZE_Y)
END_DLGRESIZE_GROUP()
END_DLGRESIZE_MAP()

BEGIN_DDX_MAP(CMainDlg)
DDX_CONTROL(IDF1,m_wndBmpButton[0])
DDX_CONTROL(IDF2,m_wndBmpButton[1])
DDX_CONTROL(IDF3,m_wndBmpButton[2])
DDX_CONTROL(IDF4,m_wndBmpButton[3])
DDX_CONTROL(IDF5,m_wndBmpButton[4])
DDX_CONTROL(IDF6,m_wndBmpButton[5])
END_DDX_MAP()

BEGIN_UPDATE_UI_MAP(CMainDlg)
UPDATE_ELEMENT(IDF1, UPDUI_CHILDWINDOW)
UPDATE_ELEMENT(IDF2, UPDUI_CHILDWINDOW)
UPDATE_ELEMENT(IDF3, UPDUI_CHILDWINDOW)
UPDATE_ELEMENT(IDF4, UPDUI_CHILDWINDOW)
UPDATE_ELEMENT(IDF5, UPDUI_CHILDWINDOW)
UPDATE_ELEMENT(IDF6, UPDUI_CHILDWINDOW)
UPDATE_ELEMENT(IDF9, UPDUI_CHILDWINDOW)
END_UPDATE_UI_MAP()
// Handler prototypes (uncomment arguments if needed):
// LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
// LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
// LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)

LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// set icons
HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
SetIcon(hIcon, TRUE);
HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
SetIcon(hIconSmall, FALSE);
DlgResize_Init();
pages=0;
pagemax=4;
HWND mainwnd=GetDlgItem(IDD_MAINDLG);
RECT rt;
int cx,cy;
CButton Button=0;

HBITMAP m_bmpg=0;

Bitmap * myBitmapPaint=0;
Bitmap * myBitmap1=0;
Bitmap * myBitmap2=0;
Graphics * g;
WCHAR path[MAX_PATH*2];
TCHAR chpath[MAX_PATH];
int curp=0;
for (int j=0;j<=pagemax;j++){
for(int i=0;i<6;i++){

Button=GetDlgItem(IDF1+i);
Button.GetClientRect(&rt);
cx=rt.right-rt.left;
cy=rt.bottom-rt.top;
curp+=1;
sprintf(chpath,"%d.jpg",curp);
mbstowcs((WCHAR*)&path,(TCHAR*)&chpath,sizeof(chpath));
myBitmap1 = new Bitmap(path);
myBitmapPaint = new Bitmap(cx*3,cy,PixelFormat24bppRGB);
myBitmap2 = new Bitmap(path);
g = g->FromImage(myBitmapPaint);
g->SetInterpolationMode(InterpolationModeHighQualityBicubic);
g->DrawImage(myBitmap1,0,0,cx,cy);
GrayBitmap(myBitmap1);
g->DrawImage(myBitmap1,cx,0,cx,cy);
InvertBitmap(myBitmap2);
g->DrawImage(myBitmap2,cx+cx,0,cx,cy);
myBitmapPaint->GetHBITMAP(Color(RED_SHIFT),&m_bmpg);
il[curp-1].Create(cx,cy,ILC_COLORDDB,1,-1);
if(m_bmpg)
il[curp-1].Add(m_bmpg);
if(j==0)
{
m_wndBmpButton[i].SetImageList(il[i]);
m_wndBmpButton[i].SetImages(0, 2, 1);
}


}
}
UIAddChildWindowContainer(m_hWnd);

DoDataExchange(DDX_LOAD, -1);

return TRUE;
}
LRESULT OnClickedDf(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
UISetCheck(wID, 1, TRUE);
if((wID-IDF1)<=6)
UISetRadio(wID,TRUE,TRUE);
// UIEnable(wID, TRUE, TRUE);
DoDataExchange(DDX_SAVE, -1);
return 0;
}
LRESULT OnClickedNext(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{

if(pages<pagemax)
pages+=6;
else
pages=pagemax;
for (int i=0;i<6;i++) {
m_wndBmpButton[i].SetImageList(il[i+pages]);
m_wndBmpButton[i].SetImages(0, 2, 1);
m_wndBmpButton[i].Invalidate(TRUE);
}
UIUpdateChildWindows();
DoDataExchange(DDX_LOAD, -1);
return 0;
}
LRESULT OnClickedDprev(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
// TODO : Add Code for control notification handler.
if(pages>6)
pages-=6;
else
pages=0;
for (int i=0;i<6;i++) {
m_wndBmpButton[i].SetImageList(il[i+pages]);
m_wndBmpButton[i].SetImages(0, 2, 1);
m_wndBmpButton[i].Invalidate(TRUE);
}
UIUpdateChildWindows();
DoDataExchange(DDX_LOAD, -1);

return 0;
}
LRESULT OnClickedDtake(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{

UIUpdateChildWindows();

// TODO : Add Code for control notification handler.
return 0;
}
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.