السلام عليكم ورحمة الله وبركاته،
إخواني،
أثناء مضيي في تعلم MFC مع VC++6 وصلت إلى فصل يتحدث عن أشرطة التمرير، في صنف النافذة الرئيسية أستقبل الرسالة WM_HSCROLL بالحدث ON_WM_HSCROLL والذي يوجهها إلى الدالة:
afx_msg OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
المشكلة أنه عند محاولة تغيير قيمة شريط التمرير فإنه لا يتغير مع أنني وضعت كل شيء لازم، وبحثت كثيراً عن الحل ولم أجده.
إليكم الشفرة الكاملة للملف mainfrm.cpp والذي يحوي الشفرة المشكلة:
#include "mainfrm.h"
#define IDC_BUTTON_QUIT 100
#define IDC_CS_FAH 101
#define IDC_CS_CEL 102
#define IDC_SB_DEGREE 103
const int MIN_RANGE= 0;
const int MAX_RANGE= 100;
BEGIN_MESSAGE_MAP(C_MainFrame, CFrameWnd)
ON_BN_CLICKED(IDC_BUTTON_QUIT, OnButtonQuitClick)
ON_WM_HSCROLL()
END_MESSAGE_MAP()
C_MainFrame::C_MainFrame()
{
Create(NULL, "F2C", WS_OVERLAPPEDWINDOW, CRect(0, 0, 208, 208));
CRect r;
GetClientRect(&r);
m_csFah= new CStatic;
m_csFah->Create("Fahrenheit = 32", WS_CHILD | WS_VISIBLE |WS_BORDER, CRect(0, 0, r.right, 50), this, IDC_CS_FAH);
m_csCel= new CStatic;
m_csCel->Create("Celsieus = 0", WS_CHILD | WS_VISIBLE |WS_BORDER, CRect(0, 51, r.right, 100), this, IDC_CS_CEL);
m_buttonQuit= new CButton;
m_buttonQuit->Create("Quit", WS_CHILD | WS_VISIBLE |WS_BORDER, CRect(0, 131, r.right, 180), this, IDC_BUTTON_QUIT);
m_sbDegree= new CScrollBar;
m_sbDegree->Create(WS_CHILD | WS_VISIBLE | SBS_HORZ, CRect(0, 101, r.right, 130), this, IDC_SB_DEGREE);
m_sbDegree->SetScrollPos(32, TRUE);
}
void C_MainFrame::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int pos= pScrollBar->GetScrollPos();
switch (nSBCode)
{
case SB_LINEUP:
pos++;
break;
case SB_LINEDOWN:
pos--;
break;
case SB_PAGEUP:
pos+= 10;
break;
case SB_PAGEDOWN:
pos-= 10;
break;
case SB_TOP:
pos= MIN_RANGE;
break;
case SB_BOTTOM:
pos= MAX_RANGE;
break;
case SB_THUMBPOSITION:
pos= nPos;
break;
default:
return;
}
if (pos < MIN_RANGE)
pos= MIN_RANGE;
else if(pos > MAX_RANGE)
pos= MAX_RANGE;
pScrollBar->SetScrollPos(pos, TRUE);
if (pScrollBar == m_sbDegree)
{
SetDlgItemText(IDC_CS_FAH, "Fahrenheit = " + (CString) pos);
SetDlgItemText(IDC_CS_CEL, "Celsieus = " + (CString) ((pos - 32)*5/9));
}
}مشكلة أخرى تظهر، وهي في السطرين اللذين يحويان SetDlgItemText، إنهما لا يقومان بعملهما بالشكل المناسب وأجهل السبب.
أرجو مساعدتي وتوضيح الأمور لي.
ولكم جزيل الشكر :)