Tworzę aplikację w MFC używając Visual Studio 2008 w Windows 7. Moja aplikacja uruchamia się i zatrzymuje usługę, która wymaga dostępu administracyjnego. Po uruchomieniu aplikacji nie ma dostępu administracyjnego. Ale kiedy klikam przycisk Uruchom usługę, otrzymuję dostęp administracyjny i wykonuję akcję. Zastanawiam się, jak ustawić ikonę administracyjną na przyciskach, których działania wymagają dostępu administracyjnego? Czy muszę ustawić jakieś flagi? DziękiJak ustawić uprawnienia administracyjne Ikona na przycisku dialogowym MFC?
Odpowiedz
Od systemu Windows Vista można dodać ikonę tarczy do przycisku za pomocą jednej z nowych flag. Jest to makro, aby ją włączyć, których można używać tak:
Button_SetElevationRequiredState(hwnd, TRUE);
Dokumentacja dla makra jest w http://msdn.microsoft.com/en-us/library/bb761865%28VS.85%29.aspx
Zobacz http://msdn.microsoft.com/en-us/library/bb756990.aspx#BKMK_ShieldButton na przegląd, jak to zrobić wiele zadań związanych UAC.
Istnieje również funkcja CButton :: SetElevationRequired(), która prawdopodobnie robi to samo, ale pasuje bardziej do projektu MFC. Można używać go tak:
ctl->SetElevationRequired(TRUE);
Zobacz http://msdn.microsoft.com/en-us/library/bb386824%28v=VS.90%29.aspx
Należy również umożliwić korzystanie z Common Controls V6 DLL, który można zrobić albo za pomocą pliku manifestu (z lub witout wpisu plik zasobów, aby go osadzić) lub za pomocą dyrektywy #pragma w kodzie dla MSVC2005 lub nowszego. Jest szansa, że aplikacja MFC będzie miała już manifest, który możesz zmodyfikować, ale nie mogę ci tam pomóc, ponieważ nie mam dostępu do MFC.
Jeśli przejdziesz do trasy manifestu, powinna ona wyglądać mniej więcej tak samo jak nazwa aplikacji, ale z rozszerzeniem ".manifest" po rozszerzeniu .exe, np. MyApp.exe.manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Dla #pragma, patrz poniższy kod.
Aby uzyskać więcej informacji na temat korzystania v6 wspólne kontrole zobaczyć ten link (czyli tam, gdzie mam powyższej informacji z): http://msdn.microsoft.com/en-us/library/bb773175%28v=vs.85%29.aspx
Mała win32 przykład, który korzysta z dyrektywy pragma włączyć Common Controls v6 i wyświetla elewację ikona:
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE instance,
HINSTANCE previnst,
LPSTR args,
int wndState)
{
int i;
MSG messages;
WNDCLASSEX wincl;
ZeroMemory(&wincl, sizeof(wincl));
wincl.hInstance = instance;
wincl.lpszClassName = L"WindowsApp";
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof wincl;
wincl.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
InitCommonControls();
wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
if (!RegisterClassEx (&wincl))
return 0;
HWND hwnd = CreateWindow(L"WindowsApp", L"Windows App", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, instance, NULL);
HWND hButton = CreateWindow(L"BUTTON", L"Do something", WS_TABSTOP | WS_VISIBLE | WS_CHILD, 10, 10, 200, 23, hwnd, NULL, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
SendMessage(hButton, WM_SETFONT, (LPARAM) GetStockObject(DEFAULT_GUI_FONT), FALSE);
Button_SetElevationRequiredState(hButton, TRUE);
ShowWindow(hwnd, wndState);
while (GetMessage(&messages, NULL, 0, 0) > 0)
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
- 1. Jak sprawdzić, czy proces ma uprawnienia administracyjne
- 2. Ikona wewnątrz przycisku?
- 3. Zyskaj uprawnienia administracyjne dzięki aplikacji Swift dla komputerów Mac
- 4. Dodaj do Laravelcollective ikona przycisku
- 5. Jak ustawić rozmiar przycisku?
- 6. Podnoszenie pamięci na przycisku dialogowym kliknięcie w aplikacji javafx
- 7. Java Stretch Ikona pasująca do przycisku
- 8. Jak ustawić uprawnienia w repozytorium svn?
- 9. Jak ustawić uprawnienia dla Androida Bluetooth
- 10. Jak ustawić uprawnienia tymczasowe dla właściwości IOKit?
- 11. Jak zmodyfikować ekrany administracyjne Drupala?
- 12. Jak zabić wątek MFC?
- 13. Czcionka niesamowita ikona i tekst w przycisku wprowadzania danych wejściowych?
- 14. Kawałkowa konwersja aplikacji MFC na Unicode/MBCS
- 15. Dynamicznie ustawić tytuł w oknie dialogowym
- 16. Jak dodać manifest do aplikacji MFC i ustawić obsługiwane?
- 17. Chcę ustawić maksymalną wysokość w oknie dialogowym
- 18. Jak wyświetlić Matę OpenCV na MFC View
- 19. Jak ustawić weryfikację zerową w oknie dialogowym edittextpreference?
- 20. Jak programowo ustawić wagę dla przycisku
- 21. Jak ustawić tekst przycisku obrazu (Android)?
- 22. Jak ustawić obraz tła przycisku poprzez kod
- 23. Jak ustawić czcionkę przycisku do Marlett
- 24. Jak ustawić wskaźnik aktywności na przycisku niestandardowym w iphone
- 25. Jak ustawić akcję dla przycisku zamykania?
- 26. ANDROID: Jak ustawić opóźnienie po naciśnięciu przycisku?
- 27. Jak ustawić wiele znaczników do przycisku?
- 28. Jak ustawić niestandardowy kolor tła przycisku?
- 29. Jak ustawić kolor tekstu w przycisku przesyłania?
- 30. Jak mogę wyłączyć moduły administracyjne Django Celery?
Próbowałem tego, ale nie pokazałem ikony tarczy na przycisku. Czy możesz podać mi przykładowy szablon kodu? Dzięki –
@Ali Ahmed: Dodałem przykład i więcej wyjaśnień. – tinman