خرید بک لینک
نقل قول در آغاز توسط SajjadKhati پست شده است مشاهده پست
سلام
اگه ما چند متغییر داشته باشیم که با هم جمع شده باشن ، میتونیم بعد از جمع شدن ، از حاصل اش دوباره فهمید که چه عددهایی با هم جمع شدن تا اون حاصل بدست اومد؟
از عملگرهای بیتی نمیشه؟ اگه آره ، چجوری؟

------------------

در واقع من GWL_STYLE ویندوز (پنجره یا فرم) خودمو بدست آوردم و مقدار 348782592 که بصورت شونزده دهی میشه 14CA0000 رو گرفتم . حالا نمیدونم از جمع کدوم مقادیر در لینک زیر ، این عدد بدست اومد یا به عبارتی GWL_STYLE فرم من چه ویژگی هایی داره؟ :

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

اولین نکته اینه که اینجور مقادیر که باهم ترکیب می شوند و به اصطلاح Flag هستند با هم OR می شوند، نه جمع. برای بررسی وجودشون هم بعضی از زبان ها توابعی مثل HasFlag یا Test دارند ولی در سایر موارد
باید از عملگر AND استفاده کنید.
باید یک لیستی یا آرایه ای از تمامی مقادیر شناخته شده رو داشته باشید و یکی یکی با اون مقدار AND کنید، مثلا [flags[i رو داخل حلقه i با اون مقدار مورد نظر AND کنید. اگر حاصل AND برابر [flags[i باشه اون ویژگی در مقدار هست، وگرنه نیست.

کد:

        private enum Styles : uint
        {
            WS_ACTIVECAPTION = 0x1,
            WS_BORDER = 0x800000,
            WS_CAPTION = 0xC00000,
            WS_CHILD = 0x40000000,
            WS_CLIPCHILDREN = 0x2000000,
            WS_CLIPSIBLINGS = 0x4000000,
            WS_DISABLED = 0x8000000,
            WS_DLGFRAME = 0x400000,
            WS_GROUP = 0x20000,
            WS_HSCROLL = 0x100000,
            WS_MAXIMIZE = 0x1000000,
            WS_MAXIMIZEBOX = 0x10000,
            WS_MINIMIZE = 0x20000000,
            WS_MINIMIZEBOX = 0x20000,
            WS_OVERLAPPED = 0x0,
            WS_POPUP = 0x80000000,
            WS_SYSMENU = 0x80000,
            WS_TABSTOP = 0x10000,
            WS_THICKFRAME = 0x40000,
            WS_VISIBLE = 0x10000000,
            WS_VSCROLL = 0x200000
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            uint value = 0x14CA0000;
            var flags = Enum.GetValues(typeof(Styles));
            var s = "";
            foreach (uint flag in flags)
            {
                if ((value & flag) == flag)
                {
                    // Your Code
                    s += ((Styles)flag).ToString() + " ";
                }
            }
            MessageBox.Show(s);
        }

- - , .
.

برچسب: نویسنده: محمد رضا جوادیان تاريخ: يکشنبه 27 تير 1395 ساعت: 3:17

صفحه بندی