MsgBoxStyle (bitweises Verknüpfen)

Dey

Banned
Registriert
Mai 2005
Beiträge
1.925
Hallo,

der MsgBoxStyle ermöglicht es, verschiedene Zustände und auch beliebige Kombinationen der verschiedenen Zuständen innerhalb einer einzigen Bitzahl abzubilden.

Der Clou liegt darin, dass man durch bitweises Verknüpfen mit einer bestimmten Zahl immer eindeutig bestimmen kann, ob ein bestimmter Zustand enthalten ist.

Das Prinzip ist mir nur im groben Ansatz geläufig. Leider habe ich beim Googlen keine Informationen darüber finden können. Da ich selbst nur auf einem schwachen Niveau Bitoperationen durchführen kann, erschließt sich mir das Ganze noch nicht.

Deshalb hoffe ich hier auf Leute zu finden, die das Prinzip verstanden haben und es mir erklären können. Ein Arbeitskollege meinte mal zu mir, dass bei diesem Thema die meisten Leute aussteigen. Ich denke aber, dass es gar nicht mal so schwierig ist.
 
Ich nimm mal C++ da du nix von einer Sprache erwähnt hast.
Code:
int MessageBox(
   LPCTSTR lpszText,
   LPCTSTR lpszCaption = NULL,
   UINT nType = MB_OK 
);
als ntype gibst du jetzt an was du haben willst (bitweise verknüpft)
Du willst z.B. eine MSGBox mit zwei Buttons (ok/cancel) und ein Rufezeichen.
also hier ntpye= MB_ICONEXCLAMATION|MB_OKCANCEL
Wenn du wissen willst ob eine bit gesetzt ist, machst du ein logisches Bitweises und

check ob MB_ICONSTOP gesetzt ist
if (ntype & MB_ICONSTOP)

prinzipiel geht das in C#/VB genau so, nur heißen die Konstanten/Enums anders...
MSDN is your friend

edit:
bezüglich verständnis, das ist recht einfach wenn du weißt wie zahlen im Binärformat dargestellt werden.
Am besten nimmst du byte und probierst wie einzelne zahlen dargstellst werden und dann probierst du die Bitoperationen aus
also z.b.
im Byte A steht "3" und im Byte B steht "2"
jetzt machst du ein Bitweises und, was ist das ergebnis?
also A&B ergibt ?? (Lösung, es ergibt 2, probier rauszufinden warum, am einfachsten ist es wenn du dir die Bits aufzeichnest)
 
Zuletzt bearbeitet:
Dey schrieb:
Hallo,
Der Clou liegt darin, dass man durch bitweises Verknüpfen mit einer bestimmten Zahl immer eindeutig bestimmen kann, ob ein bestimmter Zustand enthalten ist.

Der "Clou" ist eigentlich recht einfach...
Man geht normalerweise einfach her und definiert die Zutände für genau die Zahlen die Binär als 1 gefolgt von belibig nullen dargestellt werden können als 1 2 4 8 etc (alle 2er potenzen). Wenn man die dann Addiert (oder Bitweise verodert) Dann kommt es zu keinem Überlauf weil eine 1 von der einen Zahl immer auf eine 0 an der selben stelle von der anderen Zahl trifft.
Dadurch erhält man eine Große Zahl die binär betrachtet sozusagen aus lauter flags besteht. Die sagen einem genau was ursprünglich dabei war und was nicht, weil ja jede 1 nur von einem einzigen Zustand kommen kann.

Bei MsgBox ist das allerdings nicht 100% wahr weil da zB OKCancel + YesNo das Selbe ist wie RetryCancel zB, aber das haben sie halt vermutl aus irgendwelchen Gründen dann einfach extra definiert. Es ist auch gar nicht möglich bei einer MsgBox das system 100% durchzuziehen weil da buttons ja andere ersetzen. Wenn man das system 100% umsetzten würde könnte man die buttons "ja" "nein" "ok" "abbrechen" "wiederholen" "ignorieren" und so auch alle gleichzeitig anzeigen was in der MsgBox ja grundsätzl nicht geht
 
Zurück
Oben