Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Status ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ° β Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ CStateApp ΠΈ ΠΊΠ»Π°ΡΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ CStateWindow.
ΠΠ»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ CDlgBarAppΠΠ»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ CStateApp Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° CWinApp. ΠΠ±ΡΠ΅ΠΊΡ StateApp ΠΊΠ»Π°ΡΡΠ° CStateApp ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π ΠΊΠ»Π°ΡΡ CStateApp Π²Ρ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ InitInstance. ΠΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΠΊΠ»Π°ΡΡΠΎΠΌ CStateWindow, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° CFrameWnd.
ΠΠ»Π°ΡΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ CStateWindowΠΠ»Π°ΡΡ CStateWindow ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
ΠΡΠΎΠΌΠ΅ ΡΡΠ΄Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π² ΠΊΠ»Π°ΡΡ CStateWindow Π²Ρ ΠΎΠ΄ΠΈΡ ΡΠ»Π°Π³ bIndicatorTEXT, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ID_INDICATOR_TEXT, ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ m_wndStatusBar ΠΊΠ»Π°ΡΡΠ° CStatusBar, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΡΡ progress bar.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° CStateWindow Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° CStateWindowΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° CStateWindow ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Create ΠΊΠ»Π°ΡΡΠ° CFrameWnd. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Create ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠΊΠ½ΠΎ Ρ ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ IDR_MENU:
Create(NULL, "Status Bar Sample", WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU));
Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΊΠ»Π°ΡΡΠ° CStateWindow ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ»Π°Π³Π° bIndicatorTEXT:
bIndicatorTEXT = TRUE;
Π’Π°Π±Π»ΠΈΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠ° CStateWindowΠ’Π°Π±Π»ΠΈΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠ° CStateWindow ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΌΠ΅Π½Ρ Work, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ ON_UPDATE_COMMAND_UI ΠΈ ON_WM_CREATE.
ΠΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° ON_UPDATE_COMMAND_UI Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ OnUpdateTEXT Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ID_INDICATOR_TEXT ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ:
ON_UPDATE_COMMAND_UI(ID_INDICATOR_TEXT, OnUpdateTEXT)
ΠΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° ON_WM_CREATE Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ OnCreate Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π°:
ON_WM_CREATE()
ΠΠ»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΠΌΠ΅Π½Ρ Work Π² ΡΠ°Π±Π»ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠ° CStateWindow Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄ ON_COMMAND ΠΈ ON_COMMAND_EX. ΠΠ½ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ OnMenuProcessBar, OnMenuDisableADD_SUB, OnMenuSwitchTEXT, OnMenuDirectADD_SUB ΠΈ OnMenuExit:
ON_COMMAND(ID_WORK_PROCESS, OnMenuProcessBar)
ON_COMMAND(ID_WORK_DISABLE_ADDSUB, OnMenuDisableADD_SUB)
ON_COMMAND(ID_WORK_ON_SWITCH_TEXT, OnMenuSwitchTEXT)
ON_COMMAND(ID_WORK_EXIT, OnMenuExit)
ON_COMMAND_EX(ID_WORK_DIRECT_ADD, OnMenuDirectADD_SUB)
ON_COMMAND_EX(ID_WORK_DIRECT_SUB, OnMenuDirectADD_SUB)
ΠΠ΅ΡΠΎΠ΄ OnCreate ΠΊΠ»Π°ΡΡΠ° CStateWindowΠΠ΅ΡΠΎΠ΄ OnCreate ΠΊΠ»Π°ΡΡΠ° CStateWindow ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ OnCreate Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° CFrameWnd:
if (CFrameWnd::OnCreate(lpCreateStruct) == β1) return β1;
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΅Π΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
if (!m_wndStatusBar.Create(this)) {
// ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
TRACE0("Failed to create status bar\n");
return -1;
}
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π°, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ SetIndicators, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡ:
if (!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) {
// ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠ²
TRACE0("Failed to set indicators\n");
return -1;
}
ΠΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠ² indicators ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
static UINT indicators[] = {
ID_SEPARATOR, // Π‘Π°ΠΌΡΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ
ID_INDICATOR_OVR, // ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ OVR
ID_INDICATOR_PROGRESS, // Π Π΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ
// progress bar
ID_INDICATOR_CAPS, // ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ <Caps Lock>
ID_INDICATOR_NUM, // ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ <Num Lock>
ID_INDICATOR_SCRL, // ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ <Scroll Lock>
ID_INDICATOR_TEXT, // ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ TEXT/PIC
ID_INDICATOR_ADD, // ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ADD/SUB (Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅
// ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ START)
};
ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ indicators ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΡ Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡ Π±ΡΠ΄ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. Π Π°Π·ΠΌΠ΅Ρ Π²ΡΠ΅Ρ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΠΊΡΠΎΠΌΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ, Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ ΡΠ΅ΠΊΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π² Π½Π΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ»ΡΡ. Π’Π΅ΠΊΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² Π½Π΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π±Π΅ΡΠ΅ΡΡΡ ΠΈΠ· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ID_INDICATOR_ADD Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΡΡΡΠΎΠΊΠ° START, ΠΈΠΌΠ΅ΡΡΠ°Ρ ΡΠΎΡ ΠΆΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π² ΡΠ΅ΡΡΡΡΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
STRINGTABLE DISCARDABLE
BEGIN
ID_INDICATOR_ADD "START"
END
ΠΡΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΊΡΠΎΠΌΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ID_INDICATOR_PROGRESS, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π‘ΡΠΈΠ»Ρ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ID_INDICATOR_PROGRESS ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ:
m_wndStatusBar.SetPaneInfo(m_wndStatusBar.CommandToIndex(ID_INDICATOR_PROGRESS), ID_INDICATOR_PROGRESS,
SBPS_DISABLED | // ΡΠ΅ΠΊΡΡ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ
SBPS_NOBORDERS, // ΡΠ°ΠΌΠΊΠ° Π²ΠΎΠΊΡΡΠ³ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ
150); // ΡΠΈΡΠΈΠ½Π° ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° 150 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ²
ΠΠ΅ΡΠΎΠ΄ SetPaneInfo Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ° Π²Π½ΡΡΡΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈ ΡΠ±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ ΡΠ°ΠΌΠΊΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠ΅ΡΠΎΠ΄ SetPaneInfo ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° 150 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ².
ΠΠ΅ΡΠΎΠ΄ OnMenuProcessBar ΠΊΠ»Π°ΡΡΠ° CStateWindowΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΌΠ΅Π½Ρ Work ΡΡΡΠΎΠΊΡ Process, Π½Π° ΠΌΠ΅ΡΡΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ID_INDICATOR_PROGRESS ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ progress bar, ΠΏΠ»Π°Π²Π½ΠΎ ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΡΠ²ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΡΠΎΠΊΠΈ Process ΠΌΠ΅Π½Ρ Work ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ OnMenuProcessBar ΠΊΠ»Π°ΡΡΠ° CStateWindow.
ΠΠ΅ΡΠΎΠ΄ OnMenuProcessBar ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ID_INDICATOR_PROGRESS ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ rectProgress:
RECT rectProgress;
m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(ID_INDICATOR_PROGRESS), &rectProgress);
ΠΠ°ΡΠ΅ΠΌ Π½Π° ΠΌΠ΅ΡΡΠ΅ ΡΡΠΎΠ³ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ progress bar. ΠΡΠ³Π°Π½ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ progress bar ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ctrlProgressBar ΠΊΠ»Π°ΡΡΠ° CProgressCtrl:
CProgressCtrl ctrlProgressBar;
ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ progress bar ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Create ΠΊΠ»Π°ΡΡΠ° CProgressCtrl. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ WS_CHILD ΠΈ WS_VISIBLE, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ rectProgress, ΠΎΠ±ΡΠ΅ΠΊΡ m_wndStatusBar ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ 1:
if (!ctrlProgressBar.Create(WS_CHILD | WS_VISIBLE, rectProgress, &m_wndStatusBar, 1)) {
// ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ progress bar
TRACE0("Failed to create progress bar\n");
return;
}
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΡΡ progress bar ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π³ΡΠ°Π½ΠΈΡΡ (ΠΎΡ 0 Π΄ΠΎ 100), Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
ctrlProgressBar.SetRange(0, 100);
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ°Π³ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ progress bar, ΡΠ°Π²Π½ΡΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅:
ctrlProgressBar.SetStep(1);
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Π² ΡΠΈΠΊΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° progress bar. Π§ΡΠΎΠ±Ρ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡ Ρ ΠΎΠ΄ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ°, Π΄Π΅Π»Π°Π΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ, Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Sleep:
for (int i=0; i<100; i++) {
Sleep(10);
ctrlProgressBar.StepIt();
}
ΠΠΎΠ³Π΄Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ progress bar ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ SetWindowText, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Process completed Π² ΡΠ°ΠΌΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ:
m_wndStatusBar.SetWindowText("Process completed");
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° OnMenuProcessBar ΠΎΠ±ΡΠ΅ΠΊΡ ctrlProgressBar, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ progress bar, ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠ΅Π·Π°Π΅Ρ Ρ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
ΠΠ΅ΡΠΎΠ΄ OnMenuDirectADD_SUB ΠΊΠ»Π°ΡΡΠ° CStateWindowΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΌΠ΅Π½Ρ Work ΡΡΡΠΎΠΊΡ Process, Π½Π° ΠΌΠ΅ΡΡΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ID_INDICATOR_PROGRESS ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ progress bar, ΠΏΠ»Π°Π²Π½ΠΎ ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΡΠ²ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΡΠΎΠΊΠΈ Process ΠΌΠ΅Π½Ρ Work ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ OnMenuProcessBar ΠΊΠ»Π°ΡΡΠ° CStateWindow.
ΠΠ΅ΡΠΎΠ΄ OnMenuProcessBar ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ID_INDICATOR_PROGRESS ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ rectProgress:
RECT rectProgress;
m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(ID_INDICATOR_PROGRESS), &rectProgress);
ΠΠ°ΡΠ΅ΠΌ Π½Π° ΠΌΠ΅ΡΡΠ΅ ΡΡΠΎΠ³ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ progress bar. ΠΡΠ³Π°Π½ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ progress bar ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ctrlProgressBar ΠΊΠ»Π°ΡΡΠ° CProgressCtrl:
CProgressCtrl ctrlProgressBar;
ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ progress bar ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Create ΠΊΠ»Π°ΡΡΠ° CProgressCtrl. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ WS_CHILD ΠΈ WS_VISIBLE, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ rectProgress, ΠΎΠ±ΡΠ΅ΠΊΡ m_wndStatusBar ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ 1:
if (!ctrlProgressBar.Create(WS_CHILD | WS_VISIBLE, rectProgress, &m_wndStatusBar, 1)) {
// ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ progress bar
TRACE0("Failed to create progress bar\n");
return;
}
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΡΡ progress bar ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π³ΡΠ°Π½ΠΈΡΡ (ΠΎΡ 0 Π΄ΠΎ 100), Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
ctrlProgressBar.SetRange(0, 100);
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ°Π³ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ progress bar, ΡΠ°Π²Π½ΡΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅:
ctrlProgressBar.SetStep(1);
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Π² ΡΠΈΠΊΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° progress bar. Π§ΡΠΎΠ±Ρ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡ Ρ ΠΎΠ΄ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ°, Π΄Π΅Π»Π°Π΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ, Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Sleep:
for (int i=0; i<100; i++) {
Sleep(10);
ctrlProgressBar.StepIt();
}
ΠΠΎΠ³Π΄Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ progress bar ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ SetWindowText, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Process completed Π² ΡΠ°ΠΌΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ:
m_wndStatusBar.SetWindowText("Process completed");
ΠΠ΅ΡΠΎΠ΄ OnMenuDirectADD_SUB ΠΊΠ»Π°ΡΡΠ° CStateWindowΠΠ΅ΡΠΎΠ΄ OnMenuDirectADD_SUB ΠΊΠ»Π°ΡΡΠ° CStateWindow Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ID_WORK_DISABLE_ADDSUB, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΌ ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΠΈΠ· ΠΌΠ΅Π½Ρ Work ΡΡΡΠΎΠΊΠΈ Disable ADD SUB.