Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło nie zostało zweryfikowane
Niniejsze hasło zostało opracowane, jednak nie zostało ono zweryfikowane przez administrację serwisu. Jeżeli znalazłeś błędy merytoryczne w niniejszym dokumencie, prosimy o ich zgłoszenie na forum w dziale Znalezione błędy.
Opracował: jankowalski25
Biblioteki C/C++

SetWindowLongPtr

[funkcja] Modyfikuje atrybuty okna (Windows 32 i 64 bitowy).

Składnia

C/C++
#include <windows.h>

LONG WINAPI SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong );

Argumenty

ArgumentOpis
hWndUchwyt do okna. Funkcja kończy się niepowodzeniem, jeśli proces będący właścicielem okna określanego przez wartość tego argumentu ma wyższy priorytet w hierarchii UIPI, niż proces w obecnym wątku. W systemach Windows XP oraz Windows 2000 ta funkcja zakończy się niepowodzeniem, jeśli okno określane przez wartość argumentu hWnd nie należy do tego samego procesu, co wywoływany wątek.
nIndexWartość przesunięcia (liczona od zera) do ustawienia. Prawidłowe wartości znajdują się w zakresie od zera do różnicy liczby dodatkowych bajtów pamięci dla okna i rozmiaru liczby całkowitej. Wartość tego argumentu może być również jedną z poniższych stałych:
NazwaWartośćZnaczenie
GWL_EXSTYLE-20Ustawia nowy rozszerzony styl okna.
GWL_HINSTANCE-6Ustawia nowy uchwyt do instancji programu.
GWL_IDUstawia nowy identyfikator okna potomnego. Takie okno nie może być oknem najwyższego poziomu.
GWL_STYLE-16Ustawia nowy styl okna.
GWL_USERDATA-21Ustawia dane użytkownika powiązane z oknem. Takie dane są przeznaczone do użycia przez program, który utworzył okno. Na początku ta wartość jest zerem.
GWL_WNDPROC-4Ustawia nowy adres procedury okna. Nie można zmieniać tego atrybutu, jeśli okno nie należy do tego samego procesu, co obecny wątek.
 Poniższe wartości są również dostępne, gdy argument hWnd określa okno dialogowe:
NazwaWartośćZnaczenie
DWL_DLGPROC
DWLP_MSGRESULT + sizeof( LRESULT )
Ustawia nowy adres procedury obsługi dialogu.
DWL_MSGRESULT0Ustawia zwracaną wartość komunikatu przetwarzanego w procedurze okna dialogowego.
DWL_USER
DWLP_DLGPROC + sizeof( DLGPROC )
Ustawia nowe dodatkowe informacje, takie jak uchwyty lub wskaźniki (które są prywatne dla programu).
dwNewLongZastępowana wartość.

Zwracana wartość

Jeśli funkcja zakończy się prawidłowo, zwracaną wartością jest poprzednia wartość określonej 32-bitowej liczby całkowitej. Jeśli wystąpią błędy, zwracaną wartością jest zero. Aby uzyskać rozszerzone informacje o błędach, wywołaj funkcję » WinAPIGetLastError. Jeśli poprzednia wartość określonej 32-bitowej liczby całkowitej jest zerem, ale funkcja zakończy się prawidłowo, zwracaną wartością jest zero, ale funkcja nie czyści ostatniej informacji o błędzie. To utrudnia określenie, czy funkcja zakończyła się prawidłowo. Aby rozwiązać ten problem, należy wyczyścić ostatnią informację o błędzie przez wywołanie funkcji » WinAPISetLastError z argumentem o wartości 0 przed wywołaniem tej funkcji. Przy takich ustawieniach błąd przy wywoływaniu tej funkcji wystąpi, gdy wartość zwracana przez funkcję » WinAPIGetLastError będzie niezerowa.

Dodatkowe informacje

Określone dane okna są buforowane, więc zmiany wprowadzane przez wywołanie tej funkcji mogą nie przynosić żadnego rezultatu, dopóki nie zostanie wywołana funkcja » WinAPISetWindowPos. Jeśli jakikolwiek styl ramki okna jest zmieniany, musi zostać wywołana funkcja » WinAPISetWindowPos z flagą SWP_FRAMECHANGED, aby dane zostały prawidłowo uaktualnione. Jeśli ta funkcja zostanie użyta z argumentem nIndex o wartości GWL_WNDPROC w celu zmiany procedury okna, to ta procedura musi być zgodna z minimalnymi wymaganiami dla funkcji zwrotnych » WinAPIWindowProc. Jeśli ta funkcja zostanie użyta z argumentem nIndex o wartości DWL_MSGRESULT w celu ustawienia wartości zwracanej dla komunikatu przetwarzanego w procedurze okna dialogowego, powinna bezpośrednio po obsłużeniu komunikatu zwrócić wartość TRUE. Inaczej, jeśli zostanie wywołana dowolna funkcja, która spowoduje przechwycenie komunikatu w procedurze dialogu, zagnieżdżony komunikat może nadpisać zwracaną wartość ustawioną przez tą funkcję. Wywołanie tej funkcji z argumentem nIndex o wartości GWL_WNDPROC tworzy subklasę klasy okna używanej do jego utworzenia. Program może dokonać subclassingu klasy zdefiniowanej przez system, ale nie powinien tworzyć subklasy klasy okna utworzonej przez inny proces. Ta funkcja tworzy subklasę okna poprzez zmianę procedury okna powiązanego z określoną klasą okna, powodując wywoływanie nowej procedury okna, zamiast starej. Program musi przekazać wszystkie komunikaty, które nie zostaną przechwycone przez procedurę okna do poprzedniej procedury okna przez wywołanie funkcji » WinAPICallWindowProc. To pozwala na utworzenie łańcucha procedur okien. Do zarezerwowania dodatkowej pamięci dla okna przez przypisanie niezerowej wartości do składowej cbWndExtra struktury » WinAPIWNDCLASSEX jest używana funkcja » WinAPIRegisterClassEx. Nie można wywoływać tej funkcji z argumentem nIndex o wartości GWL_HWNDPARENT w celu zmiany rodzica okna potomnego. W tym celu należy użyć funkcji SetParent. Jeśli okno ma ustawione style klasy CS_CLASSDC lub CS_OWNDC, nie należy ustawiać rozszerzonych stylów okien WS_EX_COMPOSITED oraz WS_EX_LAYERED. Wywołanie tej funkcji w celu ustawienia stylów Progress Bara zresetuje jego pozycję.

Wymagania

Minimalny system klientaWindows 2000 Professional (tylko aplikacje biurowe).
Minimalny system serweraWindows 2000 Server (tylko aplikacje biurowe).
NagłówekWinuser.h (dołącza Windows.h)
BibliotekaUser32.lib
DLLUser32.dll
UNICODESetWindowLongPtrW
ANSISetWindowLongPtrA

Linki zewnętrzne