Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. How to code a skinned UI like in Windows Media Player?

How to code a skinned UI like in Windows Media Player?

Scheduled Pinned Locked Moved C / C++ / MFC
questionc++designjsontutorial
12 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Tim De Baets

    Hi, I would like to create something similar to the Windows Media Player miniplayer in the task bar. I don't expect many problems with coding the desk band (plenty of documentation about that), but I'm still wondering how to start with coding the skinned UI. When looking into Windows Media Player's resources, I have found the following images: http://img130.imageshack.us/img130/5195/wmpbandimages.png[^] The first image is obviously a mask, and then there are images for normal, disabled, hottracked and pressed states. I guess that I should take the different parts of the 'state' images (according to the state of each part), and merge these into a single image that shows the current UI. But how can I do this? I would prefer not to use any libraries, just C++ and the plain Windows API. Thanks.

    L Offline
    L Offline
    Lost User
    wrote on last edited by
    #2

    Here[^] is a really good tutorial that should help you.

    It's time for a new signature.

    T 1 Reply Last reply
    0
    • L Lost User

      Here[^] is a really good tutorial that should help you.

      It's time for a new signature.

      T Offline
      T Offline
      Tim De Baets
      wrote on last edited by
      #3

      Thanks for the link, but that tutorial only shows how to create non-rectangular windows with a bitmap background. I don't need a non-rectangular window, but a normal window with non-rectangular buttons on it, by using a colored mask (the top image in http://img130.imageshack.us/img130/5195/wmpbandimages.png[^]).

      L 1 Reply Last reply
      0
      • T Tim De Baets

        Thanks for the link, but that tutorial only shows how to create non-rectangular windows with a bitmap background. I don't need a non-rectangular window, but a normal window with non-rectangular buttons on it, by using a colored mask (the top image in http://img130.imageshack.us/img130/5195/wmpbandimages.png[^]).

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #4

        Sorry, but your title asked for information on "skinned UI". I'm not sure how to do the buttons you are asking for, but probably something similar. Try the articles here on CodeProject, it's quite likely some other CP member has written about it.

        It's time for a new signature.

        H T 2 Replies Last reply
        0
        • L Lost User

          Sorry, but your title asked for information on "skinned UI". I'm not sure how to do the buttons you are asking for, but probably something similar. Try the articles here on CodeProject, it's quite likely some other CP member has written about it.

          It's time for a new signature.

          H Offline
          H Offline
          hypheni
          wrote on last edited by
          #5

          Rather than using 3rd party gui library its hard to say its possible. If you can use some library like SkinCrafter then you can easily get what you want.

          L T 2 Replies Last reply
          0
          • H hypheni

            Rather than using 3rd party gui library its hard to say its possible. If you can use some library like SkinCrafter then you can easily get what you want.

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #6

            Please reply to the poster of the original question.

            It's time for a new signature.

            1 Reply Last reply
            0
            • H hypheni

              Rather than using 3rd party gui library its hard to say its possible. If you can use some library like SkinCrafter then you can easily get what you want.

              T Offline
              T Offline
              Tim De Baets
              wrote on last edited by
              #7

              Of course it must be possible, I'm pretty sure that no library was used in the WMP desk band either. SkinCrafter looks like it's hugely overkill for my (relatively simple) problem.

              1 Reply Last reply
              0
              • L Lost User

                Sorry, but your title asked for information on "skinned UI". I'm not sure how to do the buttons you are asking for, but probably something similar. Try the articles here on CodeProject, it's quite likely some other CP member has written about it.

                It's time for a new signature.

                T Offline
                T Offline
                Tim De Baets
                wrote on last edited by
                #8

                OK, I've done some more searching, but unfortunately, I couldn't find any examples of how to use such a multi-colored mask. However, I think that I should take the following approach: for each color in the multi-colored mask, create a 2-color mask with the current color replaced by black, and all other colors replaced by white (by using something like ReplaceColor at How to replace a color in a HBITMAP[^]). Then, those 2-color masks can be used to BitBlt the individual segments (that might come from different state images) into one single image. Is this the right approach? I want to be sure that I haven't missed anything before starting to implementing this.

                L 1 Reply Last reply
                0
                • T Tim De Baets

                  OK, I've done some more searching, but unfortunately, I couldn't find any examples of how to use such a multi-colored mask. However, I think that I should take the following approach: for each color in the multi-colored mask, create a 2-color mask with the current color replaced by black, and all other colors replaced by white (by using something like ReplaceColor at How to replace a color in a HBITMAP[^]). Then, those 2-color masks can be used to BitBlt the individual segments (that might come from different state images) into one single image. Is this the right approach? I want to be sure that I haven't missed anything before starting to implementing this.

                  L Offline
                  L Offline
                  Lost User
                  wrote on last edited by
                  #9

                  Tim De Baets wrote:

                  Is this the right approach?

                  Sorry but I couldn't say as I've never tried it. I offered the window skinning tutorial as that was something I have done in the past.

                  It's time for a new signature.

                  H 1 Reply Last reply
                  0
                  • L Lost User

                    Tim De Baets wrote:

                    Is this the right approach?

                    Sorry but I couldn't say as I've never tried it. I offered the window skinning tutorial as that was something I have done in the past.

                    It's time for a new signature.

                    H Offline
                    H Offline
                    hypheni
                    wrote on last edited by
                    #10

                    I cant understand why you are going towards complicity. Just use SkinCrafter or some other Skining library like DSkin which has Vista, Windows MPlayer skins and lots more. you just need to use their .dll and .cpp and .h in your project and a few lines of coding.

                    L T 2 Replies Last reply
                    0
                    • H hypheni

                      I cant understand why you are going towards complicity. Just use SkinCrafter or some other Skining library like DSkin which has Vista, Windows MPlayer skins and lots more. you just need to use their .dll and .cpp and .h in your project and a few lines of coding.

                      L Offline
                      L Offline
                      Lost User
                      wrote on last edited by
                      #11

                      Please post your suggestions to the original poster of the question, who is the one looking for answers, not to me (second time of asking).

                      It's time for a new signature.

                      1 Reply Last reply
                      0
                      • H hypheni

                        I cant understand why you are going towards complicity. Just use SkinCrafter or some other Skining library like DSkin which has Vista, Windows MPlayer skins and lots more. you just need to use their .dll and .cpp and .h in your project and a few lines of coding.

                        T Offline
                        T Offline
                        Tim De Baets
                        wrote on last edited by
                        #12

                        As I already said, I don't want to use a full-blown library for such a small and simple skinned area with just a few buttons. And there's also the matter of personal interest; I would really like to know how it's done. Using a library just because you don't know how to do something, is a wrong reflex.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups