Holy cow, I wrote a book!
Serge Wautier asks, "Why are the copy/cut/paste buttons not disabled when there's nothing to copy/cut/paste?", noting that the back/forward buttons do disable themselves when navigation is not possible in that direction.
To get to this question, we'll first go back in time a bit to a world without toolbars. In those early days, these dynamic options such as copy/cut/paste appeared solely on the Edit menu. Since the contents of Edit menu were visible only when the user clicked on it, the cut/copy/paste options needed to be updated only when the menu was visible. In other words, during WM_INITMENUPOPUP handling.
WM_INITMENUPOPUP
WM_COMMAND
WM_INITMENUPOP
When toolbars showed up, things got more complicated. Now, the affordances are visible all the time, right there in the toolbar. How do you update something continuously without destroying performance?
The navigation buttons disable and enable themselves dynamically because the conditions that control their state satisfy several handy criteria.
The copy/cut/paste buttons, on the other hand, often fail to meet these criteria. First, the copy and cut options:
Paste is even worse.
This is one of those balancing acts you have to do when designing a program. How much performance degredation are you willing to make the user suffer through in order to get a feature they may never even notice (except possibly in a bad way)?